diff --git a/.cursor/rules/diataxis-docs.mdc b/.cursor/rules/diataxis-docs.mdc new file mode 100644 index 000000000..60affa750 --- /dev/null +++ b/.cursor/rules/diataxis-docs.mdc @@ -0,0 +1,143 @@ +--- +description: Write docs using Diátaxis: tutorials for learning, how-to guides for tasks, reference for facts, explanation for understanding +globs: *.mdx +--- +# Diátaxis Documentation Framework + +## Core Concept + +The fundamental idea behind Diátaxis is that documentation needs fall into four distinct categories. Each category serves a different purpose and requires a different approach to writing. The framework is not just a list of types, but a systematic way to think about documentation. + +## The Four Documentation Types + +### 1. Tutorials +- **Definition**: A tutorial is a lesson that guides a learner through a practical experience +- **Core Purpose**: Skills acquisition through doing +- **Key Attributes**: + - Always practical - the user must do something + - Designed around a specific learning experience + - Instructor takes responsibility for learner's success + - Learning happens through action, not through being taught +- **Special Challenge**: The instructor must be "present" through written instruction alone +- **What to Avoid**: + - Don't explain concepts in depth - link to explanations instead + - Don't assume prior knowledge + - Don't focus on options or alternatives + - Don't include reference material + - Don't show all possible ways to do something +- **Example**: Like a driving lesson - the goal is developing skills and confidence, not reaching a destination + +### 2. How-to Guides +- **Definition**: Step-by-step guidance to achieve a specific goal +- **Core Purpose**: Practical problem solving +- **Key Attributes**: + - Addresses a specific real-world task or problem + - Written for users who know what they need to do + - Focused on completing work rather than learning + - Assumes necessary competence +- **What to Avoid**: + - Don't teach basic concepts + - Don't explain why things work + - Don't cover every possible variation + - Don't include detailed technical specifications + - Don't focus on learning objectives +- **Examples**: + - "How to store cellulose nitrate film" + - "How to configure frame profiling" + - "Troubleshooting deployment problems" + +### 3. Reference +- **Definition**: Technical descriptions of the machinery +- **Core Purpose**: Information +- **Key Attributes**: + - Contains pure technical facts + - Must be accurate and complete + - Structure mirrors the code/system architecture + - Neutral and objective - like a map + - Serves users who know what they're looking for +- **What to Avoid**: + - Don't include tutorials or guides + - Don't explain concepts + - Don't include opinions or recommendations + - Don't provide step-by-step instructions + - Don't teach or guide the reader + - Don't include best practices +- **Distinction**: Like a map that could be used by both a navigator plotting a course or a magistrate in a legal case + +### 4. Explanation +- **Definition**: Discussion that clarifies and illuminates a particular topic +- **Core Purpose**: Understanding +- **Key Attributes**: + - Provides background and context + - Can take different approaches to a topic + - May include opinions and alternative views + - Connects different concepts + - Answers "why" questions +- **What to Avoid**: + - Don't include practical steps + - Don't mix with tutorials + - Don't focus on specific tasks + - Don't include detailed technical specifications + - Don't try to be completely objective + - Don't include best practices +- **Important Note**: Should be separated from tutorials to avoid overloading learners + +## The Diátaxis Map + +The documentation types are arranged along two axes: + +| Axis | Practical | Theoretical | +|-----------|-------------------------|-------------------------| +| Learning | Tutorials | Explanation | +| Work | How-to Guides | Reference | + +This creates natural tensions and relationships: +- Tutorials ↔ How-to guides (practical knowledge) +- Reference ↔ Explanation (theoretical knowledge) +- Tutorials ↔ Explanation (learning-oriented) +- How-to guides ↔ Reference (work-oriented) + +## The Diátaxis Compass + +Use this tool to identify documentation types: + +| If content... | ...and serves the user's... | Then it belongs in... | +|-----------------|---------------------------|---------------------| +| Guides action | Learning | Tutorials | +| Guides action | Work | How-to guides | +| Explains theory | Work | Reference | +| Explains theory | Learning | Explanation | + +## Pntionally simple: + +1. Look at your current documentation +2. Ask: "How could this be better?" +3. Choose ONE small improvement +4. Make that improvement +5. Repeat + +## Key Principles + +1. **Separation of Concerns** + - Keep the four types distinct + - Don't mix tutorials with explanation + - Link between types instead of combining them + +2. **Minimal Approach** + - Start with small improvements + - You don't need to read or understand everything + - Each improvement suggests the next + +3. **Pragmatic Usage** + - Use what works for you + - No need to commit to the entire framework + - Even small improvements are valuable + +## Important Notes + +- The framework is a practical tool, not a theoretical construct +- You don't need to understand all of Diátaxis to start using it +- The documentation will naturally evolve as you make improvements +- Let real documentation problems guide your use of the framework + +[Source: [Diátaxis Documentation Framework](mdc:https:/diataxis.fr/start-here)] \ No newline at end of file diff --git a/.github/workflows/build-typescript-release.reusable.yaml b/.github/workflows/build-typescript-release.reusable.yaml index 90eaa584a..aea31fcaf 100644 --- a/.github/workflows/build-typescript-release.reusable.yaml +++ b/.github/workflows/build-typescript-release.reusable.yaml @@ -82,7 +82,7 @@ jobs: # NOTE: we can't use mise here because it doesn't support Windows - uses: pnpm/action-setup@v4 with: - version: 9.0.6 + version: 9.12.0 run_install: false - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/primary.yml b/.github/workflows/primary.yml index 8466ebd11..07ba08c53 100644 --- a/.github/workflows/primary.yml +++ b/.github/workflows/primary.yml @@ -34,7 +34,7 @@ jobs: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 with: - version: 9.0.6 + version: 9.12.0 run_install: false - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c87824aa0..b4dd1975f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -96,7 +96,7 @@ jobs: - name: setup pnpm uses: pnpm/action-setup@v4 with: - version: 9.0.6 + version: 9.12.0 package_json_file: engine/language_client_typescript/package.json run_install: false diff --git a/.gitignore b/.gitignore index 766ffe525..6f19bc98d 100644 --- a/.gitignore +++ b/.gitignore @@ -164,3 +164,4 @@ web_modules/ yarn-debug.log* yarn-error.log* yarn.lock +artifacts diff --git a/engine/baml-lib/baml-types/src/generator.rs b/engine/baml-lib/baml-types/src/generator.rs index c6927c02d..cc869a79b 100644 --- a/engine/baml-lib/baml-types/src/generator.rs +++ b/engine/baml-lib/baml-types/src/generator.rs @@ -20,6 +20,9 @@ pub enum GeneratorOutputType { #[strum(serialize = "typescript")] Typescript, + #[strum(serialize = "typescript/react")] + TypescriptReact, + #[strum(serialize = "ruby/sorbet")] RubySorbet, } @@ -38,6 +41,7 @@ impl GeneratorOutputType { // DO NOT CHANGE THIS DEFAULT EVER OR YOU WILL BREAK EXISTING USERS Self::PythonPydantic => GeneratorDefaultClientMode::Async, Self::Typescript => GeneratorDefaultClientMode::Async, + Self::TypescriptReact => GeneratorDefaultClientMode::Async, Self::RubySorbet => GeneratorDefaultClientMode::Sync, } } @@ -48,6 +52,7 @@ impl GeneratorOutputType { Self::OpenApi => GeneratorDefaultClientMode::Sync, Self::PythonPydantic => GeneratorDefaultClientMode::Sync, Self::Typescript => GeneratorDefaultClientMode::Async, + Self::TypescriptReact => GeneratorDefaultClientMode::Async, Self::RubySorbet => GeneratorDefaultClientMode::Sync, } } @@ -56,7 +61,6 @@ impl GeneratorOutputType { impl clap::ValueEnum for GeneratorOutputType { fn value_variants<'a>() -> &'a [Self] { use strum::VariantArray; - Self::VARIANTS } diff --git a/engine/baml-runtime/src/cli/generate.rs b/engine/baml-runtime/src/cli/generate.rs index 4719a3422..b19e8ba7d 100644 --- a/engine/baml-runtime/src/cli/generate.rs +++ b/engine/baml-runtime/src/cli/generate.rs @@ -61,6 +61,9 @@ impl GenerateArgs { // this has no meaning GeneratorDefaultClientMode::Sync } + internal_baml_core::configuration::GeneratorOutputType::TypescriptReact => { + GeneratorDefaultClientMode::Async + } }; // Normally `baml_client` is added via the generator, but since we're not running the generator, we need to add it manually. let output_dir_relative_to_baml_src = PathBuf::from(".."); @@ -77,6 +80,7 @@ impl GenerateArgs { default_client_mode, // TODO: this should be set if user is asking for openapi vec![], + None, ) .context("Failed while resolving .baml paths in baml_src/")?, ) diff --git a/engine/baml-runtime/src/cli/init.rs b/engine/baml-runtime/src/cli/init.rs index aaad095da..e71769e99 100644 --- a/engine/baml-runtime/src/cli/init.rs +++ b/engine/baml-runtime/src/cli/init.rs @@ -91,6 +91,7 @@ impl InitArgs { Some(s) => format!("{} clients via OpenAPI", s), None => "REST clients".to_string(), }, + GeneratorOutputType::TypescriptReact => "TypeScript React clients".to_string(), } ); log::info!( @@ -100,6 +101,7 @@ impl InitArgs { GeneratorOutputType::Typescript => "typescript", GeneratorOutputType::RubySorbet => "ruby", GeneratorOutputType::OpenApi => "openapi", + GeneratorOutputType::TypescriptReact => "typescript-react", } ); @@ -114,7 +116,7 @@ fn generate_main_baml_content( ) -> String { let default_client_mode = match output_type { GeneratorOutputType::OpenApi | GeneratorOutputType::RubySorbet => "".to_string(), - GeneratorOutputType::PythonPydantic | GeneratorOutputType::Typescript => format!( + GeneratorOutputType::PythonPydantic | GeneratorOutputType::Typescript | GeneratorOutputType::TypescriptReact => format!( r#" // Valid values: "sync", "async" // This controls what `b.FunctionName()` will be (sync or async). diff --git a/engine/baml-runtime/src/cli/serve/mod.rs b/engine/baml-runtime/src/cli/serve/mod.rs index 7c4a6e0d0..1be8853ef 100644 --- a/engine/baml-runtime/src/cli/serve/mod.rs +++ b/engine/baml-runtime/src/cli/serve/mod.rs @@ -23,7 +23,7 @@ use axum_extra::{ headers::{self, authorization::Basic, Authorization, Header}, TypedHeader, }; -use baml_types::{BamlValue, GeneratorDefaultClientMode}; +use baml_types::{BamlValue, GeneratorDefaultClientMode, GeneratorOutputType}; use core::pin::Pin; use futures::Stream; use serde::{Deserialize, Serialize}; @@ -67,7 +67,7 @@ impl ServeArgs { if !self.preview { log::warn!( r#"BAML-over-HTTP API is a preview feature. - + Please run with --preview, like so: {} serve --preview @@ -623,6 +623,7 @@ Tip: test that the server is up using `curl http://localhost:{}/_debug/ping` true, GeneratorDefaultClientMode::Sync, Vec::new(), + None, ) .map_err(|_| BamlError::InternalError { message: "Failed to make placeholder generator".to_string(), diff --git a/engine/baml-runtime/src/lib.rs b/engine/baml-runtime/src/lib.rs index 3ffc6eb8e..9d381ff27 100644 --- a/engine/baml-runtime/src/lib.rs +++ b/engine/baml-runtime/src/lib.rs @@ -452,6 +452,7 @@ impl BamlRuntime { no_version_check, generator.default_client_mode(), generator.on_generate.clone(), + Some(generator.output_type), )?, )) }) diff --git a/engine/baml-schema-wasm/web/package.json b/engine/baml-schema-wasm/web/package.json index 243518555..a46c5b843 100644 --- a/engine/baml-schema-wasm/web/package.json +++ b/engine/baml-schema-wasm/web/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "description": "The WASM package for baml-fmt", "main": "./dist/src/baml_schema_build.js", + "packageManager": "pnpm@9.12.0", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, diff --git a/engine/language_client_codegen/src/lib.rs b/engine/language_client_codegen/src/lib.rs index a67167550..871e060c7 100644 --- a/engine/language_client_codegen/src/lib.rs +++ b/engine/language_client_codegen/src/lib.rs @@ -33,6 +33,9 @@ pub struct GeneratorArgs { // Default call mode for functions default_client_mode: GeneratorDefaultClientMode, on_generate: Vec, + + // The type of client to generate + client_type: Option, } fn relative_path_to_baml_src(path: &Path, baml_src: &Path) -> Result { @@ -54,6 +57,7 @@ impl GeneratorArgs { no_version_check: bool, default_client_mode: GeneratorDefaultClientMode, on_generate: Vec, + client_type: Option, ) -> Result { let baml_src = baml_src_dir.into(); let input_file_map: BTreeMap = input_files @@ -70,6 +74,7 @@ impl GeneratorArgs { no_version_check, default_client_mode, on_generate, + client_type, }) } @@ -185,6 +190,7 @@ impl GenerateClient for GeneratorOutputType { GeneratorOutputType::PythonPydantic => python::generate(ir, gen), GeneratorOutputType::RubySorbet => ruby::generate(ir, gen), GeneratorOutputType::Typescript => typescript::generate(ir, gen), + GeneratorOutputType::TypescriptReact => typescript::generate(ir, gen), }?; #[cfg(not(target_arch = "wasm32"))] diff --git a/engine/language_client_codegen/src/openapi.rs b/engine/language_client_codegen/src/openapi.rs index cfd1406e5..2813fea8c 100644 --- a/engine/language_client_codegen/src/openapi.rs +++ b/engine/language_client_codegen/src/openapi.rs @@ -326,22 +326,26 @@ impl<'ir> TryFrom<(&'ir IntermediateRepr, &'_ crate::GeneratorArgs)> for OpenApi type Error = anyhow::Error; fn try_from((ir, _): (&'ir IntermediateRepr, &'_ crate::GeneratorArgs)) -> Result { - Ok(Self { - paths: ir - .walk_functions() - .map(|f| { - f.try_into().context(format!( - "Failed to convert BAML function {} to OpenAPI method", - f.item.elem.name() - )) - }) - .collect::>()?, - schemas: vec![] - .into_iter() - .chain(ir.walk_enums().map(|e| Ok((e.name(), e.try_into()?)))) - .chain(ir.walk_classes().map(|c| Ok((c.name(), c.try_into()?)))) - .collect::>()?, - }) + let mut paths: Vec = ir + .walk_functions() + .map(|f| { + f.try_into().context(format!( + "Failed to convert BAML function {} to OpenAPI method", + f.item.elem.name() + )) + }) + .collect::>()?; + paths.sort_by(|a, b| a.function_name.cmp(b.function_name)); + + let mut schemas: IndexMap<&str, TypeSpecWithMeta> = vec![] + .into_iter() + .chain(ir.walk_enums().map(|e| Ok((e.name(), e.try_into()?)))) + .chain(ir.walk_classes().map(|c| Ok((c.name(), c.try_into()?)))) + .collect::>()?; + // Sort schemas by key (name) + schemas.sort_keys(); + + Ok(Self { paths, schemas }) } } @@ -358,15 +362,21 @@ fn check() -> TypeSpecWithMeta { /// produce a named type for each of these the way we do for SDK /// codegeneration. fn type_def_for_checks(checks: TypeCheckAttributes) -> TypeSpecWithMeta { + let mut properties: IndexMap = checks + .0 + .iter() + .map(|check_name| (check_name.clone(), check())) + .collect(); + properties.sort_keys(); + + let mut required: Vec = checks.0.into_iter().collect(); + required.sort(); + TypeSpecWithMeta { meta: TypeMetadata::default(), type_spec: TypeSpec::Inline(TypeDef::Class { - properties: checks - .0 - .iter() - .map(|check_name| (check_name.clone(), check())) - .collect(), - required: checks.0.into_iter().collect(), + properties, + required, additional_properties: false, }), } @@ -378,19 +388,21 @@ impl<'ir> TryFrom>> for OpenApiMethodDef<'ir> { fn try_from(value: Walker<'ir, &'ir Node>) -> Result { let function_name = value.item.elem.name(); let mut properties: IndexMap = value - .item - .elem - .inputs() - .iter() - .map(|(name, t)| { - Ok(( - name.to_string(), - t.to_type_spec(value.db).context(format!( - "Failed to convert arg {name} (for function {function_name}) to OpenAPI type", - ))?, - )) - }) - .collect::>()?; + .item + .elem + .inputs() + .iter() + .map(|(name, t)| { + Ok(( + name.to_string(), + t.to_type_spec(value.db).context(format!( + "Failed to convert arg {name} (for function {function_name}) to OpenAPI type", + ))?, + )) + }) + .collect::>()?; + properties.sort_keys(); + properties.insert( "__baml_options__".to_string(), TypeSpecWithMeta { @@ -405,19 +417,26 @@ impl<'ir> TryFrom>> for OpenApiMethodDef<'ir> { }, }, ); + + let mut required: Vec = value + .item + .elem + .inputs() + .iter() + .filter_map(|(name, t)| { + if t.is_optional() { + None + } else { + Some(name.to_string()) + } + }) + .collect(); + required.sort(); + Ok(Self { function_name, request_body: TypeSpecWithMeta { meta: TypeMetadata { - // We _deliberately_ set this, even though OpenAPI doesn't require it, - // because some generators will de-duplicate names of generated types - // based on type shape - // - // For example, the Golang generator will use "ClassifyMessageRequest" as the - // request type for b.GetOrderInfo if they both have (input: string) as their - // function arg signature (I think the Java generator too?) - // - // title: None, title: Some(format!("{}Request", function_name)), r#enum: None, r#const: None, @@ -425,19 +444,7 @@ impl<'ir> TryFrom>> for OpenApiMethodDef<'ir> { }, type_spec: TypeSpec::Inline(TypeDef::Class { properties, - required: value - .item - .elem - .inputs() - .iter() - .filter_map(|(name, t)| { - if t.is_optional() { - None - } else { - Some(name.to_string()) - } - }) - .collect(), + required, additional_properties: false, }), }, @@ -477,6 +484,39 @@ impl<'ir> TryFrom> for TypeSpecWithMeta { type Error = anyhow::Error; fn try_from(c: ClassWalker<'ir>) -> Result { + let mut properties: IndexMap = c + .item + .elem + .static_fields + .iter() + .map(|f| { + Ok(( + f.elem.name.to_string(), + f.elem.r#type.elem.to_type_spec(c.db).context(format!( + "Failed to convert {}.{} to OpenAPI type", + c.name(), + f.elem.name + ))?, + )) + }) + .collect::>()?; + properties.sort_keys(); + + let mut required: Vec = c + .item + .elem + .static_fields + .iter() + .filter_map(|f| { + if f.elem.r#type.elem.is_optional() { + None + } else { + Some(f.elem.name.to_string()) + } + }) + .collect(); + required.sort(); + Ok(TypeSpecWithMeta { meta: TypeMetadata { title: None, @@ -485,36 +525,8 @@ impl<'ir> TryFrom> for TypeSpecWithMeta { nullable: false, }, type_spec: TypeSpec::Inline(TypeDef::Class { - properties: c - .item - .elem - // TODO: should go through walk_fields() - .static_fields - .iter() - .map(|f| { - Ok(( - f.elem.name.to_string(), - f.elem.r#type.elem.to_type_spec(c.db).context(format!( - "Failed to convert {}.{} to OpenAPI type", - c.name(), - f.elem.name - ))?, - )) - }) - .collect::>()?, - required: c - .item - .elem - .static_fields - .iter() - .filter_map(|f| { - if f.elem.r#type.elem.is_optional() { - None - } else { - Some(f.elem.name.to_string()) - } - }) - .collect(), + properties, + required, additional_properties: false, }), }) diff --git a/engine/language_client_codegen/src/python/mod.rs b/engine/language_client_codegen/src/python/mod.rs index 547aead87..0780120fd 100644 --- a/engine/language_client_codegen/src/python/mod.rs +++ b/engine/language_client_codegen/src/python/mod.rs @@ -7,7 +7,7 @@ use anyhow::Result; use generate_types::{to_python_literal, type_name_for_checks}; use indexmap::IndexMap; use internal_baml_core::{ - configuration::GeneratorDefaultClientMode, + configuration::{GeneratorDefaultClientMode, GeneratorOutputType}, ir::{repr::IntermediateRepr, FieldType, IRHelper}, }; @@ -341,7 +341,7 @@ class Foo { } fn mk_gen() -> GeneratorArgs { - GeneratorArgs::new("baml_client", "baml_src", vec![], "no_version".to_string(), true, GeneratorDefaultClientMode::Async, Vec::new()).unwrap() + GeneratorArgs::new("baml_client", "baml_src", vec![], "no_version".to_string(), true, GeneratorDefaultClientMode::Async, Vec::new(), Some(GeneratorOutputType::PythonPydantic)).unwrap() } #[test] diff --git a/engine/language_client_codegen/src/typescript/generate_types.rs b/engine/language_client_codegen/src/typescript/generate_types.rs index 112937430..e189e64fc 100644 --- a/engine/language_client_codegen/src/typescript/generate_types.rs +++ b/engine/language_client_codegen/src/typescript/generate_types.rs @@ -30,6 +30,7 @@ pub(crate) struct TypescriptTypes<'ir> { #[derive(askama::Template)] #[template(path = "partial_types.ts.j2", escape = "none")] pub(crate) struct TypescriptStreamTypes<'ir> { + types: Vec, partial_classes: Vec>, } @@ -65,23 +66,28 @@ impl<'ir> TryFrom<(&'ir IntermediateRepr, &'ir GeneratorArgs)> for TypescriptTyp fn try_from( (ir, _): (&'ir IntermediateRepr, &'ir GeneratorArgs), ) -> Result> { + let mut enums: Vec = ir + .walk_enums() + .map(|e| Into::::into(&e)) + .collect::>(); + enums.sort_by(|a, b| a.name.cmp(b.name)); + + let mut classes: Vec = ir + .walk_classes() + .map(|e| Into::::into(&e)) + .collect::>(); + classes.sort_by(|a, b| a.name.cmp(&b.name)); + + let mut structural_recursive_alias_cycles: Vec = ir + .walk_alias_cycles() + .map(TypescriptTypeAlias::from) + .collect::>(); + structural_recursive_alias_cycles.sort_by(|a, b| a.name.cmp(&b.name)); + Ok(TypescriptTypes { - enums: ir - .walk_enums() - .map(|e| Into::::into(&e)) - .collect::>(), - classes: ir - .walk_classes() - .map(|e| Into::::into(&e)) - .collect::>(), - structural_recursive_alias_cycles: { - let mut cycles = ir - .walk_alias_cycles() - .map(TypescriptTypeAlias::from) - .collect::>(); - cycles.sort_by_key(|alias| alias.name.clone()); - cycles - }, + enums, + classes, + structural_recursive_alias_cycles, }) } } @@ -92,11 +98,23 @@ impl<'ir> TryFrom<(&'ir IntermediateRepr, &'ir GeneratorArgs)> for TypescriptStr fn try_from( (ir, _): (&'ir IntermediateRepr, &'ir GeneratorArgs), ) -> Result> { + let mut types: Vec = ir + .walk_classes() + .map(|c| c.name().to_string()) + .chain(ir.walk_enums().map(|e| e.name().to_string())) + .chain(ir.walk_alias_cycles().map(|a| a.item.0.clone())) + .collect(); + types.sort(); + + let mut partial_classes: Vec = ir + .walk_classes() + .map(|e| Into::::into(e)) + .collect::>(); + partial_classes.sort_by(|a, b| a.name.cmp(&b.name)); + Ok(TypescriptStreamTypes { - partial_classes: ir - .walk_classes() - .map(|e| Into::::into(e)) - .collect::>(), + types, + partial_classes, }) } } @@ -105,16 +123,19 @@ impl<'ir> TryFrom<(&'ir IntermediateRepr, &'ir GeneratorArgs)> for TypeBuilder<' type Error = anyhow::Error; fn try_from((ir, _): (&'ir IntermediateRepr, &'ir GeneratorArgs)) -> Result> { - Ok(TypeBuilder { - enums: ir - .walk_enums() - .map(|e| Into::::into(&e)) - .collect::>(), - classes: ir - .walk_classes() - .map(|e| Into::::into(&e)) - .collect::>(), - }) + let mut enums: Vec = ir + .walk_enums() + .map(|e| Into::::into(&e)) + .collect::>(); + enums.sort_by(|a, b| a.name.cmp(b.name)); + + let mut classes: Vec = ir + .walk_classes() + .map(|e| Into::::into(&e)) + .collect::>(); + classes.sort_by(|a, b| a.name.cmp(&b.name)); + + Ok(TypeBuilder { enums, classes }) } } diff --git a/engine/language_client_codegen/src/typescript/mod.rs b/engine/language_client_codegen/src/typescript/mod.rs index 5c423ee45..587fd0701 100644 --- a/engine/language_client_codegen/src/typescript/mod.rs +++ b/engine/language_client_codegen/src/typescript/mod.rs @@ -1,20 +1,82 @@ mod generate_types; mod typescript_language_features; -use std::path::PathBuf; +use std::{ + collections::{BTreeMap, HashMap}, + path::PathBuf, +}; use anyhow::Result; use baml_types::LiteralValue; use generate_types::{render_docstring, type_name_for_checks}; use indexmap::IndexMap; use internal_baml_core::{ - configuration::GeneratorDefaultClientMode, + configuration::{GeneratorDefaultClientMode, GeneratorOutputType}, ir::{repr::IntermediateRepr, FieldType, IRHelper}, }; use self::typescript_language_features::{ToTypescript, TypescriptLanguageFeatures}; use crate::{dir_writer::FileCollector, field_type_attributes}; +mod framework { + use internal_baml_core::configuration::GeneratorOutputType; + + #[derive(Debug, Clone, Copy)] + pub enum TypescriptFramework { + None, + React, + } + + impl TypescriptFramework { + pub fn from_generator_type(output_type: Option) -> Option { + match output_type { + Some(GeneratorOutputType::TypescriptReact) => Some(Self::React), + Some(GeneratorOutputType::Typescript) | None => Some(Self::None), + Some(GeneratorOutputType::OpenApi) => None, + Some(GeneratorOutputType::PythonPydantic) => None, + Some(GeneratorOutputType::RubySorbet) => None, + } + } + } +} + +use framework::TypescriptFramework; + +mod filters { + pub fn length(v: &Vec) -> Result { + Ok(v.len()) + } +} + +#[derive(askama::Template)] +#[template(path = "react/server.ts.j2", escape = "none")] +struct ReactServerActions { + funcs: Vec, + types: Vec, +} + +#[derive(askama::Template)] +#[template(path = "react/server_streaming.ts.j2", escape = "none")] +struct ReactServerStreaming { + funcs: Vec, + types: Vec, +} + +#[derive(askama::Template)] +#[template(path = "react/server_streaming_types.ts.j2", escape = "none")] +struct ReactServerStreamingTypes { + funcs: Vec, + types: Vec, + partial_return_types: IndexMap, +} + +#[derive(askama::Template)] +#[template(path = "react/hooks.tsx.j2", escape = "none")] +struct ReactClientHooks { + funcs: Vec, + types: Vec, +} + #[derive(askama::Template)] #[template(path = "async_client.ts.j2", escape = "none")] struct AsyncTypescriptClient { @@ -32,6 +94,7 @@ struct SyncTypescriptClient { struct TypescriptClient { funcs: Vec, types: Vec, + partial_return_types: IndexMap, } impl From for AsyncTypescriptClient { @@ -52,6 +115,43 @@ impl From for SyncTypescriptClient { } } +impl From for ReactServerActions { + fn from(value: TypescriptClient) -> Self { + Self { + funcs: value.funcs, + types: value.types, + } + } +} + +impl From for ReactServerStreaming { + fn from(value: TypescriptClient) -> Self { + Self { + funcs: value.funcs, + types: value.types, + } + } +} + +impl From for ReactServerStreamingTypes { + fn from(value: TypescriptClient) -> Self { + Self { + funcs: value.funcs, + types: value.types, + partial_return_types: value.partial_return_types, + } + } +} + +impl From for ReactClientHooks { + fn from(value: TypescriptClient) -> Self { + Self { + funcs: value.funcs, + types: value.types, + } + } +} + #[derive(Debug)] struct TypescriptFunction { name: String, @@ -86,7 +186,11 @@ pub(crate) fn generate( ir: &IntermediateRepr, generator: &crate::GeneratorArgs, ) -> Result> { + let framework = TypescriptFramework::from_generator_type(generator.client_type) + .expect("Invalid generator type for TypeScript framework"); let mut collector = FileCollector::::new(); + + // Add base TypeScript files collector.add_template::("types.ts", (ir, generator))?; collector.add_template::( "partial_types.ts", @@ -100,6 +204,23 @@ pub(crate) fn generate( collector.add_template::("index.ts", (ir, generator))?; collector.add_template::("inlinedbaml.ts", (ir, generator))?; + // Add framework-specific files + match framework { + TypescriptFramework::React => { + collector.add_template::("react/server.ts", (ir, generator))?; + collector.add_template::( + "react/server_streaming.ts", + (ir, generator), + )?; + collector.add_template::( + "react/server_streaming_types.ts", + (ir, generator), + )?; + collector.add_template::("react/hooks.tsx", (ir, generator))?; + } + TypescriptFramework::None => {} + } + collector.commit(&generator.output_dir()) } @@ -125,7 +246,7 @@ impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for TypescriptCli type Error = anyhow::Error; fn try_from((ir, _): (&IntermediateRepr, &crate::GeneratorArgs)) -> Result { - let functions = ir + let mut functions: Vec = ir .walk_functions() .map(|f| { let configs = f.walk_impls(); @@ -158,13 +279,27 @@ impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for TypescriptCli .flatten() .collect(); - let types = ir + // Sort functions by name + functions.sort_by(|a, b| a.name.cmp(&b.name)); + + // Collect and sort all types including recursive aliases + let mut types: Vec = ir .walk_classes() .map(|c| c.name().to_string()) .chain(ir.walk_enums().map(|e| e.name().to_string())) + .chain(ir.walk_alias_cycles().map(|a| a.item.0.clone())) + .collect(); + types.sort(); + + let mut partial_return_types: IndexMap = functions + .iter() + .map(|f| (f.name.clone(), f.partial_return_type.clone())) .collect(); + partial_return_types.sort_keys(); + Ok(TypescriptClient { funcs: functions, + partial_return_types, types, }) } @@ -206,6 +341,42 @@ impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for TypescriptIni } } +impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for ReactServerActions { + type Error = anyhow::Error; + + fn try_from(params: (&'_ IntermediateRepr, &'_ crate::GeneratorArgs)) -> Result { + let typscript_client = TypescriptClient::try_from(params)?; + Ok(typscript_client.into()) + } +} + +impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for ReactServerStreaming { + type Error = anyhow::Error; + + fn try_from(params: (&'_ IntermediateRepr, &'_ crate::GeneratorArgs)) -> Result { + let typscript_client = TypescriptClient::try_from(params)?; + Ok(typscript_client.into()) + } +} + +impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for ReactServerStreamingTypes { + type Error = anyhow::Error; + + fn try_from(params: (&'_ IntermediateRepr, &'_ crate::GeneratorArgs)) -> Result { + let typscript_client = TypescriptClient::try_from(params)?; + Ok(typscript_client.into()) + } +} + +impl TryFrom<(&'_ IntermediateRepr, &'_ crate::GeneratorArgs)> for ReactClientHooks { + type Error = anyhow::Error; + + fn try_from(params: (&'_ IntermediateRepr, &'_ crate::GeneratorArgs)) -> Result { + let typscript_client = TypescriptClient::try_from(params)?; + Ok(typscript_client.into()) + } +} + trait ToTypeReferenceInClientDefinition { fn to_type_ref(&self, ir: &IntermediateRepr, use_module_prefix: bool) -> String; /// The string representation of a field type, and whether the field is optional. @@ -220,7 +391,11 @@ impl ToTypeReferenceInClientDefinition for FieldType { let use_module_prefix = !is_partial_type; let with_state = metadata.1.state; let constraints = metadata.0; - let module_prefix = if use_module_prefix { "types." } else { "partial_types." }; + let module_prefix = if use_module_prefix { + "types." + } else { + "partial_types." + }; let (base_rep, optional) = match base_type { FieldType::Class(name) => { if needed { @@ -250,9 +425,7 @@ impl ToTypeReferenceInClientDefinition for FieldType { }; res } - FieldType::Literal(value) => { - (value.to_string(), false) - } + FieldType::Literal(value) => (value.to_string(), false), FieldType::List(inner) => ( format!("{}[]", inner.to_partial_type_ref(ir, false).0), true, diff --git a/engine/language_client_codegen/src/typescript/templates/async_client.ts.j2 b/engine/language_client_codegen/src/typescript/templates/async_client.ts.j2 index ce1dcbedc..610c93b2c 100644 --- a/engine/language_client_codegen/src/typescript/templates/async_client.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/async_client.ts.j2 @@ -1,12 +1,18 @@ -import { BamlRuntime, FunctionResult, BamlCtxManager, BamlStream, Image, ClientRegistry, toBamlError } from "@boundaryml/baml" -import { Checked, Check } from "./types" -import type * as partial_types from "./partial_types" +import { BamlRuntime, FunctionResult, BamlCtxManager, BamlStream, Image, ClientRegistry, toBamlError, Audio } from "@boundaryml/baml" +import { Checked, Check, RecursivePartialNull as MovedRecursivePartialNull } from "./types" +import type { partial_types } from "./partial_types" import { {%- for t in types %}{{ t }}{% if !loop.last %}, {% endif %}{% endfor -%} } from "./types" -import TypeBuilder from "./type_builder" +import * as types from "./types" +import type TypeBuilder from "./type_builder" import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME } from "./globals" +/** + * @deprecated Use RecursivePartialNull from 'baml_client/types' instead. + */ +export type RecursivePartialNull = MovedRecursivePartialNull + export class BamlAsyncClient { private runtime: BamlRuntime private ctx_manager: BamlCtxManager @@ -74,10 +80,9 @@ class BamlStreamClient { ) return new BamlStream<{{ fn.partial_return_type }}, {{ fn.return_type }}>( raw, - (a): a is {{ fn.partial_return_type }} => a, - (a): a is {{ fn.return_type }} => a, + (a): {{ fn.partial_return_type }} => a, + (a): {{ fn.return_type }} => a, this.ctx_manager.cloneContext(), - __baml_options__?.tb?.__tb(), ) } catch (error) { throw toBamlError(error); diff --git a/engine/language_client_codegen/src/typescript/templates/globals.ts.j2 b/engine/language_client_codegen/src/typescript/templates/globals.ts.j2 index a79e4ba49..36f98d79c 100644 --- a/engine/language_client_codegen/src/typescript/templates/globals.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/globals.ts.j2 @@ -1,4 +1,4 @@ -import { BamlCtxManager, BamlRuntime } from '@boundaryml/baml' +import { BamlRuntime, BamlCtxManager } from '@boundaryml/baml' import { getBamlFiles } from './inlinedbaml' diff --git a/engine/language_client_codegen/src/typescript/templates/index.ts.j2 b/engine/language_client_codegen/src/typescript/templates/index.ts.j2 index d07181474..66b523cad 100644 --- a/engine/language_client_codegen/src/typescript/templates/index.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/index.ts.j2 @@ -4,6 +4,7 @@ export { b } from "./async_client" export { b } from "./sync_client" {% endif %} export * from "./types" +export type { partial_types } from "./partial_types" export * from "./tracing" export { resetBamlEnvVars } from "./globals" -export { BamlValidationError } from "@boundaryml/baml" +export { BamlClientHttpError, BamlValidationError, BamlClientFinishReasonError } from "@boundaryml/baml" diff --git a/engine/language_client_codegen/src/typescript/templates/partial_types.ts.j2 b/engine/language_client_codegen/src/typescript/templates/partial_types.ts.j2 index c79b876c3..aa4ab11ad 100644 --- a/engine/language_client_codegen/src/typescript/templates/partial_types.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/partial_types.ts.j2 @@ -1,6 +1,7 @@ -import { Image } from "@boundaryml/baml" - -import * as types from "./types" +import type { Image, Audio } from "@boundaryml/baml" +import type { Checked, Check } from "./types" +import type { {% for t in types %} {{ t }}{% if !loop.last %}, {% endif %}{% endfor %} } from "./types" +import type * as types from "./types" /****************************************************************************** * @@ -14,22 +15,24 @@ export interface StreamState { state: "Pending" | "Incomplete" | "Complete" } -{# Partial classes (used for streaming) -#} -{% for cls in partial_classes %} -{%- if let Some(docstring) = cls.docstring %} -{{docstring}} -{%- endif %} -export interface {{cls.name}} { - - {%- for (name, optional, type, m_docstring) in cls.fields %} - {%- if let Some(docstring) = m_docstring %} - {{ docstring }} +export namespace partial_types { + {# Partial classes (used for streaming) -#} + {% for cls in partial_classes %} + {%- if let Some(docstring) = cls.docstring %} + {{docstring}} {%- endif %} - {{name}}{% if optional %}?{% endif%}: {{type}} - {%- endfor %} + export interface {{cls.name}} { - {%- if cls.dynamic %} - [key: string]: any; - {%- endif %} -} -{% endfor %} + {%- for (name, optional, type, m_docstring) in cls.fields %} + {%- if let Some(docstring) = m_docstring %} + {{ docstring }} + {%- endif %} + {{name}}{% if optional %}?{% endif%}: {{type}} + {%- endfor %} + + {%- if cls.dynamic %} + [key: string]: any; + {%- endif %} + } + {% endfor %} +} \ No newline at end of file diff --git a/engine/language_client_codegen/src/typescript/templates/react/hooks.tsx.j2 b/engine/language_client_codegen/src/typescript/templates/react/hooks.tsx.j2 new file mode 100644 index 000000000..bd3071a41 --- /dev/null +++ b/engine/language_client_codegen/src/typescript/templates/react/hooks.tsx.j2 @@ -0,0 +1,378 @@ +'use client' + +import { BamlErrors, toBamlError } from '@boundaryml/baml/errors' +import { useCallback, useMemo, useReducer, useTransition } from 'react' +import * as Actions from './server' +import * as StreamingActions from './server_streaming' +import { StreamingServerTypes } from './server_streaming_types' + +/** + * Type representing a BAML stream response. + * + * @template PartialType The type of the partial response. + * @template FinalType The type of the final response. + */ +type BamlStreamResponse = { + partial?: PartialType + final?: FinalType + error?: BamlErrors +} + +/** + * A server action that returns either a ReadableStream of Uint8Array or a final output. + */ +export type ServerAction = ( + ...args: Input extends any[] ? Input : [Input] +) => Promise | ReadableStream + +/** + * Type representing all function names except 'stream' and 'stream_types' + */ +export type FunctionNames = keyof typeof Actions + +/** + * Helper type to derive the partial return type for an action. + */ +type StreamDataType = StreamingServerTypes[FunctionName] + +/** + * Helper type to derive the final return type for an action. + */ +type FinalDataType = (typeof Actions)[FunctionName] extends (...args: any) => any + ? Awaited> + : never + +/** + * Configuration options for BAML React hooks. + */ +export type HookInput = { + stream?: Options['stream'] + onStreamData?: Options['stream'] extends false ? never : (response?: StreamDataType) => void + onFinalData?: (response?: FinalDataType) => void + onData?: (response?: Options['stream'] extends false ? FinalDataType : FinalDataType | StreamDataType) => void + onError?: (error: BamlErrors) => void +} + +export type NonStreamingHookStatus = 'idle' | 'pending' | 'success' | 'error' +export type StreamingHookStatus = NonStreamingHookStatus | 'streaming' + +export type HookStatus = Options['stream'] extends false + ? NonStreamingHookStatus + : StreamingHookStatus + +/** + * Return type for BAML React hooks. + */ +export type HookOutput = { + data?: Options['stream'] extends false ? FinalDataType : FinalDataType | StreamDataType + finalData?: FinalDataType + streamData?: Options['stream'] extends false ? never : StreamDataType + isLoading: boolean + isPending: boolean + isStreaming: Options['stream'] extends false ? never : boolean + isSuccess: boolean + isError: boolean + error?: BamlErrors + status: HookStatus + mutate: ( + ...args: Parameters<(typeof Actions)[FunctionName]> + ) => Options['stream'] extends false ? Promise> : Promise> + reset: () => void +} + +/** + * Type guard to check if the hook props are configured for streaming mode. + * + * @template FunctionName - The name of the BAML function. + * @param props - The hook props. + * @returns {boolean} True if the props indicate streaming mode. + */ +function isStreamingProps( + props: HookInput, +): props is HookInput { + return props.stream !== false +} + +/** + * Type guard to check if the hook props are configured for non‑streaming mode. + * + * @template FunctionName - The name of the BAML function. + * @param props - The hook props. + * @returns {boolean} True if the props indicate non‑streaming mode. + */ +function isNotStreamingProps( + props: HookInput, +): props is HookInput { + return props.stream === false +} + +interface HookState { + isSuccess: boolean + isStreaming: boolean + error?: BamlErrors + finalData?: TFinal + streamData?: TPartial +} + +type HookStateAction = + | { type: 'START_REQUEST' } + | { type: 'SET_ERROR'; payload: BamlErrors } + | { type: 'SET_PARTIAL'; payload: TPartial } + | { type: 'SET_FINAL'; payload: TFinal } + | { type: 'RESET' } + +/** + * Reducer function to manage the hook state transitions. + * + * @template TPartial - The type of the partial (streaming) data. + * @template TFinal - The type of the final (non‑streaming) data. + * @param state - The current hook state. + * @param action - The action to apply. + * @returns The updated state. + */ +function hookReducer( + state: HookState, + action: HookStateAction, +): HookState { + switch (action.type) { + case 'START_REQUEST': + return { + ...state, + isSuccess: false, + error: undefined, + isStreaming: false, + finalData: undefined, + streamData: undefined, + } + case 'SET_ERROR': + return { + ...state, + isSuccess: false, + isStreaming: false, + error: action.payload, + } + case 'SET_PARTIAL': + return { + ...state, + isStreaming: true, + streamData: action.payload, + } + case 'SET_FINAL': + return { + ...state, + isSuccess: true, + isStreaming: false, + finalData: action.payload, + } + case 'RESET': + return { + isSuccess: false, + isStreaming: false, + error: undefined, + finalData: undefined, + streamData: undefined, + } + default: + return state + } +} + +/** + * Base hook for executing BAML server actions, supporting both streaming and non‑streaming modes. + * + * This hook provides a unified interface for handling loading states, partial updates, errors, + * and final responses. It is designed to be used directly with any BAML server action. + * + * Features: + * - **Streaming Support:** Real‑time partial updates via `streamData`, progress indicators, and incremental UI updates. + * - **State Management:** Manages loading state (`isLoading`), success/error flags, and final/partial results. + * - **Error Handling:** Supports type‑safe error handling for BamlValidationError, BamlClientFinishReasonError, and standard errors. + * + * @param Action - The server action to invoke. + * @param props - Configuration props for the hook. + * @returns An object with the current state and a `mutate` function to trigger the action. + * + * @example + * ```tsx + * const { data, error, isLoading, mutate } = useBamlAction(StreamingActions.TestAws, { stream: true }); + * ``` + */ + function useBamlAction( + action: ServerAction, + props: HookInput, +): HookOutput +function useBamlAction( + action: ServerAction, + props?: HookInput, +): HookOutput +function useBamlAction( + action: ServerAction, + props: HookInput = {}, +): HookOutput | HookOutput { + const { onFinalData, onError } = props + const [isLoading, startTransition] = useTransition() + + const [state, dispatch] = useReducer(hookReducer, FinalDataType>, { + isSuccess: false, + error: undefined, + finalData: undefined, + isStreaming: false, + streamData: undefined, + }) + + const mutate = useCallback( + async (...input: Parameters) => { + dispatch({ type: 'START_REQUEST' }) + try { + let response: Awaited> + startTransition(async () => { + response = await action(...input) + + if (isStreamingProps(props) && response instanceof ReadableStream) { + const reader = response.getReader() + const decoder = new TextDecoder() + try { + while (true) { + const { value, done } = await reader.read() + if (done) break + if (value) { + const chunk = decoder.decode(value, { stream: true }).trim() + try { + const parsed: BamlStreamResponse< + StreamDataType, + FinalDataType + > = JSON.parse(chunk) + if (parsed.error) { + if (parsed.error instanceof Error) { + throw parsed.error + } + + const parsedError = JSON.parse(parsed.error) + const finalError = toBamlError(parsedError) + throw finalError + } + if (parsed.partial !== undefined) { + dispatch({ type: 'SET_PARTIAL', payload: parsed.partial }) + if (isStreamingProps(props)) { + props.onStreamData?.(parsed.partial) + } + props.onData?.(parsed.partial) + } + if (parsed.final !== undefined) { + dispatch({ type: 'SET_FINAL', payload: parsed.final }) + onFinalData?.(parsed.final) + props.onData?.(parsed.final) + return + } + } catch (err: unknown) { + dispatch({ + type: 'SET_ERROR', + payload: err as BamlErrors, + }) + onError?.(err as BamlErrors) + break + } + } + } + } finally { + reader.releaseLock() + } + return + } + // Non‑streaming case + dispatch({ type: 'SET_FINAL', payload: response }) + onFinalData?.(response) + }) + return response + } catch (error_: unknown) { + dispatch({ type: 'SET_ERROR', payload: error_ as BamlErrors }) + onError?.(error_ as BamlErrors) + throw error_ + } + }, + [action, props.stream, onFinalData, onError], + ) + + const status = useMemo>(() => { + if (state.error) return 'error' + if (state.isSuccess) return 'success' + if (state.isStreaming) return 'streaming' + if (isLoading) return 'pending' + return 'idle' + }, [isLoading, state.error, state.isSuccess, state.isStreaming]) + + let data = state.finalData + if (state.isStreaming) data = state.streamData + + const result = { + data, + finalData: state.finalData, + error: state.error, + isError: status === 'error', + isSuccess: status === 'success', + isStreaming: status === 'streaming', + isPending: status === 'pending', + isLoading: status === 'pending' || status === 'streaming', + mutate, + status, + reset: () => dispatch({ type: 'RESET' }), + } satisfies HookOutput + + return { + ...result, + streamData: isStreamingProps(props) ? state.streamData : undefined, + } satisfies HookOutput +} + +{%- for func in funcs %} +/** + * A specialized hook for the {{ func.name }} BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * {%- for (name, optional, type) in func.args %} + * - {{ name }}{% if optional %} (optional){% endif %}: {{ type }} + * {%- endfor %} + * + * **Return Type:** + * - **Non‑streaming:** {{ func.return_type }} + * - **Streaming Partial:** {{ func.partial_return_type }} + * - **Streaming Final:** {{ func.return_type }} + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = use{{ func.name }}({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = use{{ func.name }}({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function use{{ func.name }}(props: HookInput<'{{ func.name }}', { stream: false }>): HookOutput<'{{ func.name }}', { stream: false }> +export function use{{ func.name }}(props?: HookInput<'{{ func.name }}', { stream?: true }>): HookOutput<'{{ func.name }}', { stream: true }> +export function use{{ func.name }}( + props: HookInput<'{{ func.name }}', { stream?: boolean }> = {}, +): HookOutput<'{{ func.name }}', { stream: true }> | HookOutput<'{{ func.name }}', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.{{ func.name }}, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.{{ func.name }}, props) + } + throw new Error('Invalid props') +} +{%- endfor %} \ No newline at end of file diff --git a/engine/language_client_codegen/src/typescript/templates/react/server.ts.j2 b/engine/language_client_codegen/src/typescript/templates/react/server.ts.j2 new file mode 100644 index 000000000..f6434b98c --- /dev/null +++ b/engine/language_client_codegen/src/typescript/templates/react/server.ts.j2 @@ -0,0 +1,39 @@ +'use server' + +import { b } from '../index'; +import type { Check, Checked } from "../types"; +import type { Image, Audio } from "@boundaryml/baml"; + +import type { {% for t in types %} {{ t }}{% if !loop.last %}, {% endif %}{% endfor %} } from "../types" + +import type * as types from "../types" + +/** + * Regular BAML server actions that return direct responses. + */ +{%- for func in funcs %} + +/** + * Executes the "{{ func.name }}" BAML action. + * + * This server action calls the underlying BAML function "{{ func.name }}" + * with the specified parameters. + * +{%- for (name, optional, type) in func.args %} + * @param { {{ type }} } {{ name }}{% if optional %} (optional){% endif %} - Input parameter. +{%- endfor %} + * + * @returns {Promise<{{ func.return_type }}>} A promise that resolves with the result of the action. + */ +export const {{ func.name }} = async ( + {%- for (name, optional, type) in func.args %} + {{ name }}{% if optional %}?{% endif %}: {{ type }}, + {%- endfor %} +): Promise<{{ func.return_type }}> => { + return b.{{ func.name }}( + {%- for (name, _, _) in func.args %} + {{ name }}, + {%- endfor %} + ); +}; +{%- endfor %} \ No newline at end of file diff --git a/engine/language_client_codegen/src/typescript/templates/react/server_streaming.ts.j2 b/engine/language_client_codegen/src/typescript/templates/react/server_streaming.ts.j2 new file mode 100644 index 000000000..aa0eea259 --- /dev/null +++ b/engine/language_client_codegen/src/typescript/templates/react/server_streaming.ts.j2 @@ -0,0 +1,40 @@ +'use server' + +import { b } from '../index'; +import type { Check, Checked } from "../types"; +import type { Image, Audio } from "@boundaryml/baml"; + +import type { {% for t in types %} {{ t }}{% if !loop.last %}, {% endif %}{% endfor %} } from "../types" + +import type * as types from "../types" + +/** + * Streaming BAML server actions that return ReadableStreams. + */ +{%- for func in funcs %} + +/** + * Executes the streaming variant of the "{{ func.name }}" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * +{%- for (name, optional, type) in func.args %} + * @param { {{ type }} } {{ name }}{% if optional %} (optional){% endif %} - Input parameter. +{%- endfor %} + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const {{ func.name }} = async ( + {%- for (name, optional, type) in func.args %} + {{ name }}{% if optional %}?{% endif %}: {{ type }}, + {%- endfor %} +): Promise> => { + const stream = b.stream.{{ func.name }}( + {%- for (name, _, _) in func.args %} + {{ name }}, + {%- endfor %} + ); + return Promise.resolve(stream.toStreamable()); +}; +{%- endfor %} \ No newline at end of file diff --git a/engine/language_client_codegen/src/typescript/templates/react/server_streaming_types.ts.j2 b/engine/language_client_codegen/src/typescript/templates/react/server_streaming_types.ts.j2 new file mode 100644 index 000000000..1d24e6ec9 --- /dev/null +++ b/engine/language_client_codegen/src/typescript/templates/react/server_streaming_types.ts.j2 @@ -0,0 +1,13 @@ +import type { Check, Checked } from "../types"; +import type { Image, Audio } from "@boundaryml/baml"; + +import type { {% for t in types %} {{ t }}{% if !loop.last %}, {% endif %}{% endfor %} } from "../types" + +import type * as types from "../types" +import type { partial_types }from "../partial_types"; + +export type StreamingServerTypes = { +{%- for (name, partial_return_type) in partial_return_types %} + {{ name }}: {{ partial_return_type }}, +{%- endfor %} +} diff --git a/engine/language_client_codegen/src/typescript/templates/sync_client.ts.j2 b/engine/language_client_codegen/src/typescript/templates/sync_client.ts.j2 index 944db6065..bdd0bd700 100644 --- a/engine/language_client_codegen/src/typescript/templates/sync_client.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/sync_client.ts.j2 @@ -1,14 +1,22 @@ -import { BamlRuntime, FunctionResult, BamlCtxManager, BamlSyncStream, Image, ClientRegistry, toBamlError } from "@boundaryml/baml" -import { Checked, Check } from "./types" +import { BamlRuntime, FunctionResult, BamlCtxManager, Image, Audio, ClientRegistry, toBamlError } from "@boundaryml/baml" +import { Checked, Check, RecursivePartialNull as MovedRecursivePartialNull } from "./types" +import * as types from "./types" import { - {%- for t in types %}{{ t }}{% if !loop.last %}, {% endif %}{% endfor -%} + {%- for t in types %}{{ t }}{% if !loop.last %}, {% endif %}{% endfor -%} } from "./types" -import TypeBuilder from "./type_builder" +import type TypeBuilder from "./type_builder" import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME } from "./globals" +/** + * @deprecated Use RecursivePartialNull from 'baml_client/types' instead. + * Example: + * ```ts + * import { RecursivePartialNull } from './baml_client/types' + * ``` + */ +export type RecursivePartialNull = MovedRecursivePartialNull; + export class BamlSyncClient { - private runtime: BamlRuntime - private ctx_manager: BamlCtxManager constructor(private runtime: BamlRuntime, private ctx_manager: BamlCtxManager) {} @@ -19,7 +27,7 @@ export class BamlSyncClient { */ get stream() { throw new Error("stream is not available in BamlSyncClient. Use `import { b } from 'baml_client/async_client") - } + } {% for fn in funcs %} {{ fn.name }}( diff --git a/engine/language_client_codegen/src/typescript/templates/tracing.ts.j2 b/engine/language_client_codegen/src/typescript/templates/tracing.ts.j2 index bfebdabc9..d2a3c3f2e 100644 --- a/engine/language_client_codegen/src/typescript/templates/tracing.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/tracing.ts.j2 @@ -1,4 +1,4 @@ -import { BamlLogEvent } from '@boundaryml/baml'; +import type { BamlLogEvent } from '@boundaryml/baml'; import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX } from './globals'; const traceAsync = diff --git a/engine/language_client_codegen/src/typescript/templates/type_builder.ts.j2 b/engine/language_client_codegen/src/typescript/templates/type_builder.ts.j2 index c41456628..d559c2607 100644 --- a/engine/language_client_codegen/src/typescript/templates/type_builder.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/type_builder.ts.j2 @@ -1,5 +1,6 @@ -import { FieldType } from '@boundaryml/baml/native' -import { TypeBuilder as _TypeBuilder, EnumBuilder, ClassBuilder } from '@boundaryml/baml/type_builder' +import type { FieldType } from '@boundaryml/baml/native' +import { TypeBuilder as _TypeBuilder } from '@boundaryml/baml/type_builder' +import type { EnumBuilder, ClassBuilder } from '@boundaryml/baml/type_builder' export default class TypeBuilder { private tb: _TypeBuilder; @@ -36,7 +37,7 @@ export default class TypeBuilder { __tb() { return this.tb._tb(); } - + string(): FieldType { return this.tb.string() } diff --git a/engine/language_client_codegen/src/typescript/templates/types.ts.j2 b/engine/language_client_codegen/src/typescript/templates/types.ts.j2 index 308967604..bf6e74483 100644 --- a/engine/language_client_codegen/src/typescript/templates/types.ts.j2 +++ b/engine/language_client_codegen/src/typescript/templates/types.ts.j2 @@ -1,4 +1,14 @@ -import { Image } from "@boundaryml/baml" +import type { Image, Audio } from "@boundaryml/baml" + +/** + * Recursively partial type that can be null. + * + * @deprecated Use types from the `partial_types` namespace instead, which provides type-safe partial implementations + * @template T The type to make recursively partial. + */ +export type RecursivePartialNull = T extends object + ? { [P in keyof T]?: RecursivePartialNull } + : T | null; export interface Checked { value: T, @@ -55,5 +65,5 @@ export interface {{cls.name}} { {#- Type Aliases -#} {% for alias in structural_recursive_alias_cycles %} -type {{alias.name}} = {{alias.target}} +export type {{alias.name}} = {{alias.target}} {% endfor %} diff --git a/engine/language_client_codegen/src/version_check.rs b/engine/language_client_codegen/src/version_check.rs index 7d4c9b38d..758f76c8b 100644 --- a/engine/language_client_codegen/src/version_check.rs +++ b/engine/language_client_codegen/src/version_check.rs @@ -109,6 +109,9 @@ pub fn check_version( GeneratorOutputType::Typescript => { format!("npm install --save-dev @boundaryml/baml@{}", gen_version) } + GeneratorOutputType::TypescriptReact => { + format!("npm install --save-dev @boundaryml/baml@{}", gen_version) + } GeneratorOutputType::RubySorbet => format!("gem install baml -v {}", gen_version), }; ( diff --git a/engine/language_client_typescript/index.d.ts b/engine/language_client_typescript/artifacts/errors.d.ts similarity index 68% rename from engine/language_client_typescript/index.d.ts rename to engine/language_client_typescript/artifacts/errors.d.ts index b279c5862..0ffd3b7ee 100644 --- a/engine/language_client_typescript/index.d.ts +++ b/engine/language_client_typescript/artifacts/errors.d.ts @@ -1,10 +1,8 @@ -export { BamlRuntime, FunctionResult, FunctionResultStream, BamlImage as Image, ClientBuilder, BamlAudio as Audio, invoke_runtime_cli, ClientRegistry, BamlLogEvent, } from "./native"; -export { BamlStream } from "./stream"; -export { BamlCtxManager } from "./async_context_vars"; export declare class BamlClientFinishReasonError extends Error { prompt: string; raw_output: string; - constructor(prompt: string, raw_output: string, message: string); + finish_reason?: string; + constructor(prompt: string, raw_output: string, message: string, finish_reason: string | undefined); toJSON(): string; static from(error: Error): BamlClientFinishReasonError | undefined; } @@ -22,5 +20,7 @@ export declare class BamlClientHttpError extends Error { toJSON(): string; static from(error: Error): BamlClientHttpError | undefined; } -export declare function toBamlError(error: any): any; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file +export type BamlErrors = BamlClientHttpError | BamlValidationError | BamlClientFinishReasonError; +export declare function isBamlError(error: unknown): error is BamlErrors; +export declare function toBamlError(error: unknown): BamlErrors | Error; +//# sourceMappingURL=errors.d.ts.map \ No newline at end of file diff --git a/engine/language_client_typescript/async_context_vars.d.ts b/engine/language_client_typescript/async_context_vars.d.ts deleted file mode 100644 index 94a41ee10..000000000 --- a/engine/language_client_typescript/async_context_vars.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { BamlSpan, RuntimeContextManager, BamlRuntime, BamlLogEvent } from './native'; -export declare class BamlCtxManager { - private rt; - private ctx; - constructor(rt: BamlRuntime); - allowResets(): boolean; - reset(): void; - upsertTags(tags: Record): void; - cloneContext(): RuntimeContextManager; - startTrace(name: string, args: Record): [RuntimeContextManager, BamlSpan]; - endTrace(span: BamlSpan, response: any): void; - flush(): void; - onLogEvent(callback: ((event: BamlLogEvent) => void) | undefined): void; - traceFnSync ReturnType>(name: string, func: F): F; - traceFnAsync Promise>(name: string, func: F): F; -} -//# sourceMappingURL=async_context_vars.d.ts.map \ No newline at end of file diff --git a/engine/language_client_typescript/async_context_vars.d.ts.map b/engine/language_client_typescript/async_context_vars.d.ts.map deleted file mode 100644 index 55cedafcf..000000000 --- a/engine/language_client_typescript/async_context_vars.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"async_context_vars.d.ts","sourceRoot":"","sources":["typescript_src/async_context_vars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGrF,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,GAAG,CAA0C;gBAEzC,EAAE,EAAE,WAAW;IAS3B,WAAW,IAAI,OAAO;IAYtB,KAAK,IAAI,IAAI;IAKb,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK9C,YAAY,IAAI,qBAAqB;IASrC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC;IAKtF,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;IAa7C,KAAK,IAAI,IAAI;IAIb,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI;IAYvE,WAAW,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;IAuB3F,YAAY,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;CAuBtG"} \ No newline at end of file diff --git a/engine/language_client_typescript/async_context_vars.js b/engine/language_client_typescript/async_context_vars.js deleted file mode 100644 index f0bf2e6e4..000000000 --- a/engine/language_client_typescript/async_context_vars.js +++ /dev/null @@ -1,116 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BamlCtxManager = void 0; -const native_1 = require("./native"); -const async_hooks_1 = require("async_hooks"); -class BamlCtxManager { - rt; - ctx; - constructor(rt) { - this.rt = rt; - this.ctx = new async_hooks_1.AsyncLocalStorage(); - this.ctx.enterWith(rt.createContextManager()); - process.on('exit', () => { - this.rt.flush(); - }); - } - allowResets() { - let store = this.ctx.getStore(); - if (store === undefined) { - return true; - } - if (store.contextDepth() > 0) { - return false; - } - return true; - } - reset() { - this.ctx = new async_hooks_1.AsyncLocalStorage(); - this.ctx.enterWith(this.rt.createContextManager()); - } - upsertTags(tags) { - const manager = this.ctx.getStore(); - manager.upsertTags(tags); - } - cloneContext() { - let store = this.ctx.getStore(); - if (store === undefined) { - store = this.rt.createContextManager(); - this.ctx.enterWith(store); - } - return store.deepClone(); - } - startTrace(name, args) { - const mng = this.cloneContext(); - return [mng, native_1.BamlSpan.new(this.rt, name, args, mng)]; - } - endTrace(span, response) { - const manager = this.ctx.getStore(); - if (!manager) { - console.error('Context lost before span could be finished\n'); - return; - } - try { - span.finish(response === undefined ? null : response, manager); - } - catch (e) { - console.error('BAML internal error', e); - } - } - flush() { - this.rt.flush(); - } - onLogEvent(callback) { - if (!callback) { - this.rt.setLogEventCallback(undefined); - return; - } - this.rt.setLogEventCallback((error, param) => { - if (!error) { - callback(param); - } - }); - } - traceFnSync(name, func) { - return ((...args) => { - const params = args.reduce((acc, arg, i) => ({ - ...acc, - [`arg${i}`]: arg, // generic way to label args - }), {}); - const [mng, span] = this.startTrace(name, params); - return this.ctx.run(mng, () => { - try { - const response = func(...args); - this.endTrace(span, response); - return response; - } - catch (e) { - this.endTrace(span, e); - throw e; - } - }); - }); - } - traceFnAsync(name, func) { - const funcName = name; - return (async (...args) => { - const params = args.reduce((acc, arg, i) => ({ - ...acc, - [`arg${i}`]: arg, // generic way to label args - }), {}); - const [mng, span] = this.startTrace(name, params); - return await this.ctx.run(mng, async () => { - try { - const response = await func(...args); - this.endTrace(span, response); - return response; - } - catch (e) { - this.endTrace(span, e); - throw e; - } - }); - }); - } -} -exports.BamlCtxManager = BamlCtxManager; diff --git a/engine/language_client_typescript/cli.js b/engine/language_client_typescript/cli.js index 713c64d0a..e88c61d33 100755 --- a/engine/language_client_typescript/cli.js +++ b/engine/language_client_typescript/cli.js @@ -5,6 +5,6 @@ if (require.main === module) { process.env.BAML_LOG = 'info' } - const baml = require('./native') + const baml = require('./artifacts/native') baml.invoke_runtime_cli(process.argv.slice(1)) } diff --git a/engine/language_client_typescript/native.js b/engine/language_client_typescript/native.js deleted file mode 100644 index aa5cd0994..000000000 --- a/engine/language_client_typescript/native.js +++ /dev/null @@ -1,379 +0,0 @@ -// prettier-ignore -/* eslint-disable */ -/* auto-generated by NAPI-RS */ - -const { readFileSync } = require('fs') - -let nativeBinding = null -const loadErrors = [] - -const isMusl = () => { - let musl = false - if (process.platform === 'linux') { - musl = isMuslFromFilesystem() - if (musl === null) { - musl = isMuslFromReport() - } - if (musl === null) { - musl = isMuslFromChildProcess() - } - } - return musl -} - -const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-') - -const isMuslFromFilesystem = () => { - try { - return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl') - } catch { - return null - } -} - -const isMuslFromReport = () => { - const report = typeof process.report.getReport === 'function' ? process.report.getReport() : null - if (!report) { - return null - } - if (report.header && report.header.glibcVersionRuntime) { - return false - } - if (Array.isArray(report.sharedObjects)) { - if (report.sharedObjects.some(isFileMusl)) { - return true - } - } - return false -} - -const isMuslFromChildProcess = () => { - try { - return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl') - } catch (e) { - // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false - return false - } -} - -function requireNative() { - if (process.platform === 'android') { - if (process.arch === 'arm64') { - try { - return require('./baml.android-arm64.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-android-arm64') - } catch (e) { - loadErrors.push(e) - } - - } else if (process.arch === 'arm') { - try { - return require('./baml.android-arm-eabi.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-android-arm-eabi') - } catch (e) { - loadErrors.push(e) - } - - } else { - loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`)) - } - } else if (process.platform === 'win32') { - if (process.arch === 'x64') { - try { - return require('./baml.win32-x64-msvc.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-win32-x64-msvc') - } catch (e) { - loadErrors.push(e) - } - - } else if (process.arch === 'ia32') { - try { - return require('./baml.win32-ia32-msvc.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-win32-ia32-msvc') - } catch (e) { - loadErrors.push(e) - } - - } else if (process.arch === 'arm64') { - try { - return require('./baml.win32-arm64-msvc.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-win32-arm64-msvc') - } catch (e) { - loadErrors.push(e) - } - - } else { - loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`)) - } - } else if (process.platform === 'darwin') { - try { - return require('./baml.darwin-universal.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-darwin-universal') - } catch (e) { - loadErrors.push(e) - } - - if (process.arch === 'x64') { - try { - return require('./baml.darwin-x64.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-darwin-x64') - } catch (e) { - loadErrors.push(e) - } - - } else if (process.arch === 'arm64') { - try { - return require('./baml.darwin-arm64.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-darwin-arm64') - } catch (e) { - loadErrors.push(e) - } - - } else { - loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`)) - } - } else if (process.platform === 'freebsd') { - if (process.arch === 'x64') { - try { - return require('./baml.freebsd-x64.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-freebsd-x64') - } catch (e) { - loadErrors.push(e) - } - - } else if (process.arch === 'arm64') { - try { - return require('./baml.freebsd-arm64.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-freebsd-arm64') - } catch (e) { - loadErrors.push(e) - } - - } else { - loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`)) - } - } else if (process.platform === 'linux') { - if (process.arch === 'x64') { - if (isMusl()) { - try { - return require('./baml.linux-x64-musl.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-linux-x64-musl') - } catch (e) { - loadErrors.push(e) - } - - } else { - try { - return require('./baml.linux-x64-gnu.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-linux-x64-gnu') - } catch (e) { - loadErrors.push(e) - } - - } - } else if (process.arch === 'arm64') { - if (isMusl()) { - try { - return require('./baml.linux-arm64-musl.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-linux-arm64-musl') - } catch (e) { - loadErrors.push(e) - } - - } else { - try { - return require('./baml.linux-arm64-gnu.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-linux-arm64-gnu') - } catch (e) { - loadErrors.push(e) - } - - } - } else if (process.arch === 'arm') { - if (isMusl()) { - try { - return require('./baml.linux-arm-musleabihf.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-linux-arm-musleabihf') - } catch (e) { - loadErrors.push(e) - } - - } else { - try { - return require('./baml.linux-arm-gnueabihf.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-linux-arm-gnueabihf') - } catch (e) { - loadErrors.push(e) - } - - } - } else if (process.arch === 'riscv64') { - if (isMusl()) { - try { - return require('./baml.linux-riscv64-musl.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-linux-riscv64-musl') - } catch (e) { - loadErrors.push(e) - } - - } else { - try { - return require('./baml.linux-riscv64-gnu.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-linux-riscv64-gnu') - } catch (e) { - loadErrors.push(e) - } - - } - } else if (process.arch === 'ppc64') { - try { - return require('./baml.linux-ppc64-gnu.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-linux-ppc64-gnu') - } catch (e) { - loadErrors.push(e) - } - - } else if (process.arch === 's390x') { - try { - return require('./baml.linux-s390x-gnu.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@boundaryml/baml-linux-s390x-gnu') - } catch (e) { - loadErrors.push(e) - } - - } else { - loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`)) - } - } else { - loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`)) - } -} - -nativeBinding = requireNative() - -if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { - try { - nativeBinding = require('./baml.wasi.cjs') - } catch (err) { - if (process.env.NAPI_RS_FORCE_WASI) { - loadErrors.push(err) - } - } - if (!nativeBinding) { - try { - nativeBinding = require('@boundaryml/baml-wasm32-wasi') - } catch (err) { - if (process.env.NAPI_RS_FORCE_WASI) { - loadErrors.push(err) - } - } - } -} - -if (!nativeBinding) { - if (loadErrors.length > 0) { - // TODO Link to documentation with potential fixes - // - The package owner could build/publish bindings for this arch - // - The user may need to bundle the correct files - // - The user may need to re-install node_modules to get new packages - throw new Error('Failed to load native binding', { cause: loadErrors }) - } - throw new Error(`Failed to load native binding`) -} - -module.exports.BamlAudio = nativeBinding.BamlAudio -module.exports.BamlImage = nativeBinding.BamlImage -module.exports.BamlRuntime = nativeBinding.BamlRuntime -module.exports.BamlSpan = nativeBinding.BamlSpan -module.exports.ClassBuilder = nativeBinding.ClassBuilder -module.exports.ClassPropertyBuilder = nativeBinding.ClassPropertyBuilder -module.exports.ClientRegistry = nativeBinding.ClientRegistry -module.exports.EnumBuilder = nativeBinding.EnumBuilder -module.exports.EnumValueBuilder = nativeBinding.EnumValueBuilder -module.exports.FieldType = nativeBinding.FieldType -module.exports.FunctionResult = nativeBinding.FunctionResult -module.exports.FunctionResultStream = nativeBinding.FunctionResultStream -module.exports.RuntimeContextManager = nativeBinding.RuntimeContextManager -module.exports.TraceStats = nativeBinding.TraceStats -module.exports.TypeBuilder = nativeBinding.TypeBuilder -module.exports.invoke_runtime_cli = nativeBinding.invoke_runtime_cli diff --git a/engine/language_client_typescript/package.json b/engine/language_client_typescript/package.json index 7df418cce..7c5599c4d 100644 --- a/engine/language_client_typescript/package.json +++ b/engine/language_client_typescript/package.json @@ -21,19 +21,48 @@ }, "files": [ "./cli.js", - "./index.d.ts", - "./index.js", - "./native.d.ts", - "./native.js", - "./async_context_vars.d.ts", - "./async_context_vars.js", - "./stream.d.ts", - "./stream.js", - "./type_builder.d.ts", - "./type_builder.js" + "./artifacts/index.d.ts", + "./artifacts/index.js", + "./artifacts/native.d.ts", + "./artifacts/native.js", + "./artifacts/async_context_vars.d.ts", + "./artifacts/async_context_vars.js", + "./artifacts/stream.d.ts", + "./artifacts/stream.js", + "./artifacts/type_builder.d.ts", + "./artifacts/type_builder.js", + "./artifacts/errors.d.ts", + "./artifacts/errors.js" ], - "main": "./index.js", - "types": "./index.d.ts", + "main": "./artifacts/index.js", + "types": "./artifacts/index.d.ts", + "exports": { + ".": { + "types": "./artifacts/index.d.ts", + "node": "./artifacts/index.js", + "default": "./artifacts/index.js" + }, + "./type_builder": { + "types": "./artifacts/type_builder.d.ts", + "default": "./artifacts/type_builder.js" + }, + "./async_context_vars": { + "types": "./artifacts/async_context_vars.d.ts", + "default": "./artifacts/async_context_vars.js" + }, + "./stream": { + "types": "./artifacts/stream.d.ts", + "default": "./artifacts/stream.js" + }, + "./native": { + "types": "./artifacts/native.d.ts", + "default": "./artifacts/native.js" + }, + "./errors": { + "types": "./artifacts/errors.d.ts", + "default": "./artifacts/errors.js" + } + }, "napi": { "binaryName": "baml", "targets": [ @@ -44,7 +73,8 @@ "x86_64-pc-windows-msvc", "x86_64-unknown-linux-gnu", "x86_64-unknown-linux-musl" - ] + ], + "npmClient": "pnpm" }, "engines": { "node": ">= 10" @@ -56,10 +86,10 @@ "scripts": { "artifacts": "napi artifacts", "build": "pnpm build:napi-release && pnpm build:ts_build", - "build:debug": "pnpm build:napi-debug && pnpm build:ts_build", + "build:debug": "pnpm build:napi-debug && pnpm build:ts_build && pnpm napi create-npm-dirs && pnpm artifacts", "build:napi-release": "pnpm build:napi-debug --release", - "build:napi-debug": "napi build --js ./native.js --dts ./native.d.ts --platform", - "build:ts_build": "tsc ./typescript_src/*.ts --outDir ./ --module nodenext --module nodenext --allowJs --declaration true --declarationMap true || true", + "build:napi-debug": "napi build -o ./artifacts --js ./native.js --dts ./native.d.ts --platform", + "build:ts_build": "tsc ./typescript_src/*.ts --outDir ./artifacts --module nodenext --module nodenext --allowJs --declaration true --declarationMap true || true", "format": "run-p format:biome format:rs format:toml", "format:biome": "biome --write .", "format:rs": "cargo fmt", @@ -78,7 +108,7 @@ "ts-node": "^10.9.2", "typescript": "^5.4.5" }, - "packageManager": "pnpm@9.0.6", + "packageManager": "pnpm@9.12.0", "bugs": { "url": "https://github.com/BoundaryML/baml/issues" }, @@ -101,4 +131,4 @@ "**/__test__/**/*.test.ts" ] } -} +} \ No newline at end of file diff --git a/engine/language_client_typescript/src/runtime.rs b/engine/language_client_typescript/src/runtime.rs index 142d423ff..708a583cb 100644 --- a/engine/language_client_typescript/src/runtime.rs +++ b/engine/language_client_typescript/src/runtime.rs @@ -63,8 +63,12 @@ impl BamlRuntime { pub fn from_files( root_path: String, files: HashMap, - env_vars: HashMap, + env_vars: HashMap>, ) -> napi::Result { + let env_vars = env_vars + .into_iter() + .filter_map(|(key, value)| value.map(|value| (key, value))) + .collect(); Ok(CoreRuntime::from_file_content(&root_path, &files, env_vars) .map_err(from_anyhow_error)? .into()) diff --git a/engine/language_client_typescript/stream.d.ts b/engine/language_client_typescript/stream.d.ts deleted file mode 100644 index dd7f000cd..000000000 --- a/engine/language_client_typescript/stream.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { FunctionResult, FunctionResultStream, RuntimeContextManager } from './native'; -export declare class BamlStream { - private ffiStream; - private partialCoerce; - private finalCoerce; - private ctxManager; - private task; - private eventQueue; - constructor(ffiStream: FunctionResultStream, partialCoerce: (result: FunctionResult) => PartialOutputType, finalCoerce: (result: FunctionResult) => FinalOutputType, ctxManager: RuntimeContextManager); - private driveToCompletion; - private driveToCompletionInBg; - [Symbol.asyncIterator](): AsyncIterableIterator; - getFinalResponse(): Promise; -} -//# sourceMappingURL=stream.d.ts.map \ No newline at end of file diff --git a/engine/language_client_typescript/stream.d.ts.map b/engine/language_client_typescript/stream.d.ts.map deleted file mode 100644 index c780c7a95..000000000 --- a/engine/language_client_typescript/stream.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["typescript_src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAEtF,qBAAa,UAAU,CAAC,iBAAiB,EAAE,eAAe;IAMtD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IARpB,OAAO,CAAC,IAAI,CAAuC;IAEnD,OAAO,CAAC,UAAU,CAAgC;gBAGxC,SAAS,EAAE,oBAAoB,EAC/B,aAAa,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,iBAAiB,EAC5D,WAAW,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,eAAe,EACxD,UAAU,EAAE,qBAAqB;YAG7B,iBAAiB;IAiB/B,OAAO,CAAC,qBAAqB;IAQtB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,iBAAiB,CAAC;IAqBnE,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC;CAKnD"} \ No newline at end of file diff --git a/engine/language_client_typescript/stream.js b/engine/language_client_typescript/stream.js deleted file mode 100644 index 168cd054f..000000000 --- a/engine/language_client_typescript/stream.js +++ /dev/null @@ -1,61 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BamlStream = void 0; -class BamlStream { - ffiStream; - partialCoerce; - finalCoerce; - ctxManager; - task = null; - eventQueue = []; - constructor(ffiStream, partialCoerce, finalCoerce, ctxManager) { - this.ffiStream = ffiStream; - this.partialCoerce = partialCoerce; - this.finalCoerce = finalCoerce; - this.ctxManager = ctxManager; - } - async driveToCompletion() { - try { - this.ffiStream.onEvent((err, data) => { - if (err) { - return; - } - else { - this.eventQueue.push(data); - } - }); - const retval = await this.ffiStream.done(this.ctxManager); - return retval; - } - finally { - this.eventQueue.push(null); - } - } - driveToCompletionInBg() { - if (this.task === null) { - this.task = this.driveToCompletion(); - } - return this.task; - } - async *[Symbol.asyncIterator]() { - this.driveToCompletionInBg(); - while (true) { - const event = this.eventQueue.shift(); - if (event === undefined) { - await new Promise((resolve) => setTimeout(resolve, 100)); - continue; - } - if (event === null) { - break; - } - if (event.isOk()) { - yield this.partialCoerce(event.parsed(true)); - } - } - } - async getFinalResponse() { - const final = await this.driveToCompletionInBg(); - return this.finalCoerce(final.parsed(false)); - } -} -exports.BamlStream = BamlStream; diff --git a/engine/language_client_typescript/type_builder.d.ts b/engine/language_client_typescript/type_builder.d.ts deleted file mode 100644 index 86e9c70a5..000000000 --- a/engine/language_client_typescript/type_builder.d.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { ClassPropertyBuilder as _ClassPropertyBuilder, EnumValueBuilder, FieldType, TypeBuilder as _TypeBuilder } from './native'; -type IsLiteral = string extends T ? false : true; -type NameOf = IsLiteral extends true ? T : 'DynamicType'; -type CheckNever = [T] extends [never] ? `Error: Attempt to add value '${Value}' which is already a part of '${NameOf}'.` : T; -type ExcludeFrom = T extends U ? never : T; -type RestrictNot = IsLiteral extends true ? CheckNever, Name, Value> : Value; -export declare class TypeBuilder { - private tb; - protected classes: Set; - protected enums: Set; - constructor({ classes, enums }: { - classes: Set; - enums: Set; - }); - _tb(): _TypeBuilder; - null(): FieldType; - string(): FieldType; - literalString(value: string): FieldType; - literalInt(value: number): FieldType; - literalBool(value: boolean): FieldType; - int(): FieldType; - float(): FieldType; - bool(): FieldType; - list(type: FieldType): FieldType; - map(keyType: FieldType, valueType: FieldType): FieldType; - union(types: FieldType[]): FieldType; - classBuilder(name: Name, properties: Properties[]): ClassBuilder; - enumBuilder(name: Name, values: T[]): EnumBuilder; - addClass(name: Name): ClassBuilder; - addEnum(name: Name): EnumBuilder; -} -export declare class ClassBuilder { - private properties; - private bldr; - constructor(tb: _TypeBuilder, name: ClassName, properties?: Set); - type(): FieldType; - listProperties(): Array<[string, ClassPropertyBuilder]>; - addProperty(name: RestrictNot, type: FieldType): ClassPropertyBuilder; - property(name: string): ClassPropertyBuilder; -} -declare class ClassPropertyBuilder { - private bldr; - constructor(bldr: _ClassPropertyBuilder); - alias(alias: string | null): ClassPropertyBuilder; - description(description: string | null): ClassPropertyBuilder; -} -export declare class EnumBuilder { - private values; - private bldr; - constructor(tb: _TypeBuilder, name: EnumName, values?: Set); - type(): FieldType; - value(name: S | T): EnumValueBuilder; - listValues(): Array<[string, EnumValueBuilder]>; - addValue(name: RestrictNot): EnumValueBuilder; -} -export {}; -//# sourceMappingURL=type_builder.d.ts.map \ No newline at end of file diff --git a/engine/language_client_typescript/type_builder.d.ts.map b/engine/language_client_typescript/type_builder.d.ts.map deleted file mode 100644 index b94fbf2e0..000000000 --- a/engine/language_client_typescript/type_builder.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"type_builder.d.ts","sourceRoot":"","sources":["typescript_src/type_builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/engine/language_client_typescript/type_builder.js b/engine/language_client_typescript/type_builder.js deleted file mode 100644 index 79ff6ae32..000000000 --- a/engine/language_client_typescript/type_builder.js +++ /dev/null @@ -1,147 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EnumBuilder = exports.ClassBuilder = exports.TypeBuilder = void 0; -const native_1 = require("./native"); -class TypeBuilder { - tb; - classes; - enums; - constructor({ classes, enums }) { - this.classes = classes; - this.enums = enums; - this.tb = new native_1.TypeBuilder(); - } - _tb() { - return this.tb; - } - null() { - return this.tb.null(); - } - string() { - return this.tb.string(); - } - literalString(value) { - return this.tb.literalString(value); - } - literalInt(value) { - return this.tb.literalInt(value); - } - literalBool(value) { - return this.tb.literalBool(value); - } - int() { - return this.tb.int(); - } - float() { - return this.tb.float(); - } - bool() { - return this.tb.bool(); - } - list(type) { - return this.tb.list(type); - } - map(keyType, valueType) { - return this.tb.map(keyType, valueType); - } - union(types) { - return this.tb.union(types); - } - classBuilder(name, properties) { - return new ClassBuilder(this.tb, name, new Set(properties)); - } - enumBuilder(name, values) { - return new EnumBuilder(this.tb, name, new Set(values)); - } - addClass(name) { - if (this.classes.has(name)) { - throw new Error(`Class ${name} already exists`); - } - if (this.enums.has(name)) { - throw new Error(`Enum ${name} already exists`); - } - this.classes.add(name); - return new ClassBuilder(this.tb, name); - } - addEnum(name) { - if (this.classes.has(name)) { - throw new Error(`Class ${name} already exists`); - } - if (this.enums.has(name)) { - throw new Error(`Enum ${name} already exists`); - } - this.enums.add(name); - return new EnumBuilder(this.tb, name); - } -} -exports.TypeBuilder = TypeBuilder; -class ClassBuilder { - properties; - bldr; - constructor(tb, name, properties = new Set()) { - this.properties = properties; - this.bldr = tb.getClass(name); - } - type() { - return this.bldr.field(); - } - listProperties() { - return Array.from(this.properties).map((name) => [name, new ClassPropertyBuilder(this.bldr.property(name))]); - } - addProperty(name, type) { - if (this.properties.has(name)) { - throw new Error(`Property ${name} already exists.`); - } - this.properties.add(name); - return new ClassPropertyBuilder(this.bldr.property(name).setType(type)); - } - property(name) { - if (!this.properties.has(name)) { - throw new Error(`Property ${name} not found.`); - } - return new ClassPropertyBuilder(this.bldr.property(name)); - } -} -exports.ClassBuilder = ClassBuilder; -class ClassPropertyBuilder { - bldr; - constructor(bldr) { - this.bldr = bldr; - } - alias(alias) { - this.bldr.alias(alias); - return this; - } - description(description) { - this.bldr.description(description); - return this; - } -} -class EnumBuilder { - values; - bldr; - constructor(tb, name, values = new Set()) { - this.values = values; - this.bldr = tb.getEnum(name); - } - type() { - return this.bldr.field(); - } - value(name) { - if (!this.values.has(name)) { - throw new Error(`Value ${name} not found.`); - } - return this.bldr.value(name); - } - listValues() { - return Array.from(this.values).map((name) => [name, this.bldr.value(name)]); - } - addValue(name) { - if (this.values.has(name)) { - throw new Error(`Value ${name} already exists.`); - } - this.values.add(name); - return this.bldr.value(name); - } -} -exports.EnumBuilder = EnumBuilder; diff --git a/engine/language_client_typescript/typescript_src/errors.ts b/engine/language_client_typescript/typescript_src/errors.ts new file mode 100644 index 000000000..006a5384a --- /dev/null +++ b/engine/language_client_typescript/typescript_src/errors.ts @@ -0,0 +1,217 @@ +// NOTE: Don't take a dependency on ./native here, it will break the browser code + +export class BamlClientFinishReasonError extends Error { + prompt: string + raw_output: string + finish_reason?: string + + constructor(prompt: string, raw_output: string, message: string, finish_reason: string | undefined) { + super(message) + this.name = 'BamlClientFinishReasonError' + this.prompt = prompt + this.raw_output = raw_output + this.finish_reason = finish_reason + + Object.setPrototypeOf(this, BamlClientFinishReasonError.prototype) + } + + toJSON(): string { + return JSON.stringify( + { + name: this.name, + message: this.message, + raw_output: this.raw_output, + prompt: this.prompt, + finish_reason: this.finish_reason, + }, + null, + 2, + ) + } + + static from(error: Error): BamlClientFinishReasonError | undefined { + if (error.message.includes('BamlClientFinishReasonError')) { + try { + const errorData = JSON.parse(error.message) + if (errorData.type === 'BamlClientFinishReasonError') { + return new BamlClientFinishReasonError( + errorData.prompt || '', + errorData.raw_output || '', + errorData.message || error.message, + errorData.finish_reason, + ) + } + } catch (parseError) { + console.warn('Failed to parse BamlClientFinishReasonError:', parseError) + } + } + return undefined + } +} + +export class BamlValidationError extends Error { + prompt: string + raw_output: string + + constructor(prompt: string, raw_output: string, message: string) { + super(message) + this.name = 'BamlValidationError' + this.prompt = prompt + this.raw_output = raw_output + + Object.setPrototypeOf(this, BamlValidationError.prototype) + } + + toJSON(): string { + return JSON.stringify( + { + name: this.name, + message: this.message, + raw_output: this.raw_output, + prompt: this.prompt, + }, + null, + 2, + ) + } + + static from(error: Error): BamlValidationError | undefined { + if (error.message.includes('BamlValidationError')) { + try { + const errorData = JSON.parse(error.message) + if (errorData.type === 'BamlValidationError') { + return new BamlValidationError( + errorData.prompt || '', + errorData.raw_output || '', + errorData.message || error.message, + ) + } + } catch (parseError) { + console.warn('Failed to parse BamlValidationError:', parseError) + } + } + return undefined + } +} + +export class BamlClientHttpError extends Error { + client_name: string + status_code: number + + constructor(client_name: string, message: string, status_code: number) { + super(message) + this.name = 'BamlClientHttpError' + this.client_name = client_name + this.status_code = status_code + + Object.setPrototypeOf(this, BamlClientHttpError.prototype) + } + + toJSON(): string { + return JSON.stringify({ + name: this.name, + message: this.message, + status_code: this.status_code, + client_name: this.client_name, + }) + } + + static from(error: Error): BamlClientHttpError | undefined { + if (error.message.includes('BamlClientHttpError')) { + try { + const errorData = JSON.parse(error.message) + if (errorData.type === 'BamlClientHttpError') { + return new BamlClientHttpError( + errorData.client_name || '', + errorData.message || error.message, + errorData.status_code || -100, + ) + } + } catch (parseError) { + console.warn('Failed to parse BamlClientHttpError:', parseError) + } + } + return undefined + } +} + +export type BamlErrors = BamlClientHttpError | BamlValidationError | BamlClientFinishReasonError + +function isError(error: unknown): error is Error { + if (typeof error === 'string') { + return false + } + + if ((error as any).message) { + return true + } + + if (error instanceof Error) { + return true + } + + return false +} + +// Helper function to safely create a BamlValidationError +function createBamlErrorUnsafe(error: unknown): BamlErrors | Error { + if (!isError(error)) { + return new Error(String(error)) + } + + const bamlClientHttpError = BamlClientHttpError.from(error) + if (bamlClientHttpError) { + return bamlClientHttpError + } + + const bamlValidationError = BamlValidationError.from(error) + if (bamlValidationError) { + return bamlValidationError + } + + const bamlClientFinishReasonError = BamlClientFinishReasonError.from(error) + if (bamlClientFinishReasonError) { + return bamlClientFinishReasonError + } + + // otherwise return the original error + return error +} + +export function isBamlError(error: unknown): error is BamlErrors { + if ( + (error as any).type === 'BamlClientHttpError' || + (error as any).type === 'BamlValidationError' || + (error as any).type === 'BamlClientFinishReasonError' + ) { + return true + } + + if ( + (error as any).name === 'BamlClientHttpError' || + (error as any).name === 'BamlValidationError' || + (error as any).name === 'BamlClientFinishReasonError' + ) { + return true + } + + return ( + error instanceof BamlClientHttpError || + error instanceof BamlValidationError || + error instanceof BamlClientFinishReasonError + ) +} + +export function toBamlError(error: unknown): BamlErrors | Error { + try { + if (isBamlError(error)) { + return error + } + + return createBamlErrorUnsafe(error) + } catch (error) { + return error as Error + } +} + +// No need for a separate throwBamlValidationError function in TypeScript diff --git a/engine/language_client_typescript/typescript_src/index.ts b/engine/language_client_typescript/typescript_src/index.ts index c26466b7c..cda823e27 100644 --- a/engine/language_client_typescript/typescript_src/index.ts +++ b/engine/language_client_typescript/typescript_src/index.ts @@ -8,173 +8,8 @@ export { invoke_runtime_cli, ClientRegistry, BamlLogEvent, -} from "./native"; -export { BamlStream } from "./stream"; -export { BamlCtxManager } from "./async_context_vars"; +} from './native' -export class BamlClientFinishReasonError extends Error { - prompt: string; - raw_output: string; - - constructor(prompt: string, raw_output: string, message: string) { - super(message); - this.name = "BamlClientFinishReasonError"; - this.prompt = prompt; - this.raw_output = raw_output; - - Object.setPrototypeOf(this, BamlClientFinishReasonError.prototype); - } - - toJSON(): string { - return JSON.stringify( - { - name: this.name, - message: this.message, - raw_output: this.raw_output, - prompt: this.prompt, - }, - null, - 2 - ); - } - - static from(error: Error): BamlClientFinishReasonError | undefined { - if (error.message.includes("BamlClientFinishReasonError")) { - try { - const errorData = JSON.parse(error.message); - if (errorData.type === "BamlClientFinishReasonError") { - return new BamlClientFinishReasonError( - errorData.prompt || "", - errorData.raw_output || "", - errorData.message || error.message - ); - } else { - console.warn("Not a BamlClientFinishReasonError:", error); - } - } catch (parseError) { - // If JSON parsing fails, fall back to the original error - console.warn("Failed to parse BamlClientFinishReasonError:", parseError); - } - } - return undefined; - } -} - -export class BamlValidationError extends Error { - prompt: string; - raw_output: string; - - constructor(prompt: string, raw_output: string, message: string) { - super(message); - this.name = "BamlValidationError"; - this.prompt = prompt; - this.raw_output = raw_output; - - Object.setPrototypeOf(this, BamlValidationError.prototype); - } - - toJSON(): string { - return JSON.stringify( - { - name: this.name, - message: this.message, - raw_output: this.raw_output, - prompt: this.prompt, - }, - null, - 2 - ); - } - - static from(error: Error): BamlValidationError | undefined { - if (error.message.includes("BamlValidationError")) { - try { - const errorData = JSON.parse(error.message); - if (errorData.type === "BamlValidationError") { - return new BamlValidationError( - errorData.prompt || "", - errorData.raw_output || "", - errorData.message || error.message - ); - } - } catch (parseError) { - console.warn("Failed to parse BamlValidationError:", parseError); - } - } - return undefined; - } -} - -export class BamlClientHttpError extends Error { - client_name: string; - status_code: number; - - constructor(client_name: string, message: string, status_code: number) { - super(message); - this.name = "BamlClientHttpError"; - this.client_name = client_name; - this.status_code = status_code; - - Object.setPrototypeOf(this, BamlClientHttpError.prototype); - } - - toJSON(): string { - return JSON.stringify({ - name: this.name, - message: this.message, - status_code: this.status_code, - client_name: this.client_name, - }); - } - - static from(error: Error): BamlClientHttpError | undefined { - if (error.message.includes("BamlClientHttpError")) { - try { - const errorData = JSON.parse(error.message); - if (errorData.type === "BamlClientHttpError") { - return new BamlClientHttpError( - errorData.client_name || "", - errorData.message || error.message, - errorData.status_code || -100 - ); - } - } catch (parseError) { - console.warn("Failed to parse BamlClientHttpError:", parseError); - } - } - return undefined; - } -} - -// Helper function to safely create a BamlValidationError -function createBamlErrorUnsafe( - error: Error -): BamlValidationError | BamlClientFinishReasonError | BamlClientHttpError | Error { - const bamlClientHttpError = BamlClientHttpError.from(error); - if (bamlClientHttpError) { - return bamlClientHttpError; - } - - const bamlValidationError = BamlValidationError.from(error); - if (bamlValidationError) { - return bamlValidationError; - } - - const bamlClientFinishReasonError = BamlClientFinishReasonError.from(error); - if (bamlClientFinishReasonError) { - return bamlClientFinishReasonError; - } - - // otherwise return the original error - return error; -} - -export function toBamlError(error: any) { - try { - return createBamlErrorUnsafe(error); - } catch (error) { - return error; - } -} - -// No need for a separate throwBamlValidationError function in TypeScript +export { BamlStream } from './stream' +export { BamlCtxManager } from './async_context_vars' +export * from './errors' diff --git a/engine/language_client_typescript/typescript_src/stream.ts b/engine/language_client_typescript/typescript_src/stream.ts index fd30645c3..7cc35c42b 100644 --- a/engine/language_client_typescript/typescript_src/stream.ts +++ b/engine/language_client_typescript/typescript_src/stream.ts @@ -1,3 +1,4 @@ +import { toBamlError } from '.' import { FunctionResult, FunctionResultStream, RuntimeContextManager } from './native' export class BamlStream { @@ -7,14 +8,14 @@ export class BamlStream { constructor( private ffiStream: FunctionResultStream, - private partialCoerce: (result: FunctionResult) => PartialOutputType, - private finalCoerce: (result: FunctionResult) => FinalOutputType, + private partialCoerce: (result: any) => PartialOutputType, + private finalCoerce: (result: any) => FinalOutputType, private ctxManager: RuntimeContextManager, ) {} private async driveToCompletion(): Promise { try { - this.ffiStream.onEvent((err, data) => { + this.ffiStream.onEvent((err: Error | null, data: FunctionResult | null) => { if (err) { return } else { @@ -63,4 +64,50 @@ export class BamlStream { return this.finalCoerce(final.parsed(false)) } + + /** + * Converts the BAML stream to a Next.js compatible stream. + * This is used for server-side streaming in Next.js API routes and Server Actions. + * The stream emits JSON-encoded messages containing either: + * - Partial results of type PartialOutputType + * - Final result of type FinalOutputType + * - Error information + */ + toStreamable(): ReadableStream { + const stream = this + const encoder = new TextEncoder() + + return new ReadableStream({ + async start(controller) { + try { + // Stream partials + for await (const partial of stream) { + controller.enqueue(encoder.encode(JSON.stringify({ partial }))) + } + + try { + const final = await stream.getFinalResponse() + controller.enqueue(encoder.encode(JSON.stringify({ final }))) + controller.close() + return + } catch (err: unknown) { + const bamlError = toBamlError(err instanceof Error ? err : new Error(String(err))) + controller.enqueue(encoder.encode(JSON.stringify({ error: bamlError }))) + controller.close() + return + } + } catch (streamErr: unknown) { + const errorPayload = { + type: 'StreamError', + message: streamErr instanceof Error ? streamErr.message : 'Error in stream processing', + prompt: '', + raw_output: '', + } + + controller.enqueue(encoder.encode(JSON.stringify({ error: errorPayload }))) + controller.close() + } + }, + }) + } } diff --git a/fern/.cursorrules b/fern/.cursorrules new file mode 100644 index 000000000..ddc9e6c06 --- /dev/null +++ b/fern/.cursorrules @@ -0,0 +1,320 @@ +You are the world's best documentation writer, renowned for your clarity, precision, and engaging style. Every piece of documentation you produce is: + +1. Clear and precise - no ambiguity, jargon, marketing language or unnecssarily complex language. +2. Concise—short, direct sentences and paragraphs. +3. Scientifically structured—organized like a research paper or technical white paper, with a logical flow and strict attention to detail. +4. Visually engaging—using line breaks, headings, and components to enhance readability. +5. Focused on user success — no marketing language or fluff; just the necessary information. + +# Writing guidelines + +- Titles must always start with an uppercase letter, followed by lowercase letters unless it is a name. Examples: Getting started, Text to speech, Conversational AI... +- No emojis or icons unless absolutely necessary. +- Scientific research tone—professional, factual, and straightforward. +- Avoid long text blocks. Use short paragraphs and line breaks. +- Do not use marketing/promotional language. +- Be concise, direct, and avoid wordiness. +- Tailor the tone and style depending on the location of the content. + - The `docs` tab (/fern/docs folder) contains a mixture of technical and non-technical content. + - The /fern/docs/pages/capabilities folder should not contain any code and should be easy to read for both non-technical and technical readers. + - The /fern/docs/pages/workflows folder is tailored to non-technical readers (specifically enterprise customers) who need detailed step-by-step visual guides. + - The /fern/docs/pages/developer-guides is strictly for technical readers. This contains detailed guides on how to use the SDK or API. + - The best-practices folder contains both tech & non-technical content. + - The `conversational-ai` tab (/fern/conversational-ai) contains content for the conversational-ai product. It is tailored to technical people but may be read by non-technical people. + - The `api-reference` tab (/fern/api-reference) contains content for the API. It is tailored to technical people only. +- If the user asks you to update the changelog, you must create a new changelog file in the /fern/docs/pages/changelog folder with the following file name: `2024-10-13.md` (the date should be the current date). + + - The structure of the changelog should look something like this: + +- Ensure there are well-designed links (if applicable) to take the technical or non-technical reader to the relevant page. + +# Page structure + +- Every `.mdx` file starts with: + ``` + --- + title: + subtitle: + --- + ``` + - Example titles (good, short, first word capitalized): + - Getting started + - Text to speech + - Streaming + - API reference + - Conversational AI + - Example subtitles (concise, some starting with "Learn how to …" for guides): + - Build your first conversational AI voice agent in 5 minutes. + - Learn how to control delivery, pronunciation & emotion of text to speech. +- All documentation images are located in the non-nested /fern/assets/images folder. The path can be referenced in `.mdx` files as /assets/images/.jpg/png/svg. + +## Components + +Use the following components whenever possible to enhance readability and structure. + +### Accordions + +```` + + + You can put other components inside Accordions. + ```ts + export function generateRandomNumber() { + return Math.random(); + } + ``` + + + This is a second option. + + + + This is a third option. + + +```` + +### Callouts (Tips, Notes, Warnings, etc.) + +``` + +This Callout uses a title and a custom icon. + +This adds a note in the content +This raises a warning to watch out for +This indicates a potential error +This draws attention to important information +This suggests a helpful tip +This brings us a checked status +``` + +### Cards & Card Groups + +``` + +View Fern's Python SDK generator. + + + + This is the first card. + + + This is the second card. + + + This is the third card. + + + This is the fourth and final card. + + +``` + +### Code snippets + +- Always use the focus attribute to highlight the code you want to highlight. +- `maxLines` is optional if it's long. +- `wordWrap` is optional if the full text should wrap and be visible. + +```javascript focus={2-4} maxLines=10 wordWrap +console.log('Line 1'); +console.log('Line 2'); +console.log('Line 3'); +console.log('Line 4'); +console.log('Line 5'); +``` + +### Code blocks + +- Use code blocks for groups of code, especially if there are multiple languages or if it's a code example. Always start with Python as the default. + +```` + +```javascript title="helloWorld.js" +console.log("Hello World"); +```` + +```python title="hello_world.py" +print('Hello World!') +``` + +```java title="HelloWorld.java" + class HelloWorld { + public static void main(String[] args) { + System.out.println("Hello, World!"); + } + } +``` + + +``` + +### Steps (for step-by-step guides) + +``` + + ### First Step + Initial instructions. + + ### Second Step + More instructions. + + ### Third Step + Final Instructions + + +``` + +### Frames + +- You must wrap every single image in a frame. +- Every frame must have `background="subtle"` +- Use captions only if the image is not self-explanatory. +- Use ![alt-title](image-url) as opposed to HTML `` tags unless styling. + +``` + + Sample photo of mountains + + +``` + +### Tabs (split up content into different sections) + +``` + + + ☝️ Welcome to the content that you can only see inside the first Tab. + + + ✌️ Here's content that's only inside the second Tab. + + + 💪 Here's content that's only inside the third Tab. + + + +``` + +# Examples of a well-structured piece of documentation + +- Ideally there would be links to either go to the workflows for non-technical users or the developer-guides for technical users. +- The page should be split into sections with a clear structure. + +``` +--- +title: Text to speech +subtitle: Learn how to turn text into lifelike spoken audio with ElevenLabs. +--- + +## Overview + +ElevenLabs [Text to Speech (TTS)](/docs/api-reference/text-to-speech) API turns text into lifelike audio with nuanced intonation, pacing and emotional awareness. [Our models](/docs/models) adapt to textual cues across 32 languages and multiple voice styles and can be used to: + +- Narrate global media campaigns & ads +- Produce audiobooks in multiple languages with complex emotional delivery +- Stream real-time audio from text + +Listen to a sample: + + + +Explore our [Voice Library](https://elevenlabs.io/community) to find the perfect voice for your project. + +## Parameters + +The `text-to-speech` endpoint converts text into natural-sounding speech using three core parameters: + +- `model_id`: Determines the quality, speed, and language support +- `voice_id`: Specifies which voice to use (explore our [Voice Library](https://elevenlabs.io/community)) +- `text`: The input text to be converted to speech +- `output_format`: Determines the audio format, quality, sampling rate & bitrate + +### Voice quality + +For real-time applications, Flash v2.5 provides ultra-low 75ms latency optimized for streaming, while Multilingual v2 delivers the highest quality audio with more nuanced expression. + +Learn more about our [models](/docs/models). + +### Voice options + +ElevenLabs offers thousands of voices across 32 languages through multiple creation methods: + +- [Voice Library](/docs/voice-library) with 3,000+ community-shared voices +- [Professional Voice Cloning](/docs/voice-cloning/professional) for highest-fidelity replicas +- [Instant Voice Cloning](/docs/voice-cloning/instant) for quick voice replication +- [Voice Design](/docs/voice-design) to generate custom voices from text descriptions + +Learn more about our [voice creation options](/docs/voices). + +## Supported formats + +The default response format is "mp3", but other formats like "PCM", & "μ-law" are available. + +- **MP3** + - Sample rates: 22.05kHz - 44.1kHz + - Bitrates: 32kbps - 192kbps + - **Note**: Higher quality options require Creator tier or higher +- **PCM (S16LE)** + - Sample rates: 16kHz - 44.1kHz + - **Note**: Higher quality options require Pro tier or higher +- **μ-law** + - 8kHz sample rate + - Optimized for telephony applications + + + Higher quality audio options are only available on paid tiers - see our [pricing + page](https://elevenlabs.io/pricing) for details. + + +## Supported languages + + + + + +Simply input text in any of our supported languages and select a matching voice from our [Voice Library](https://elevenlabs.io/community). For the most natural results, choose a voice with an accent that matches your target language and region. + +## FAQ + + + + The models interpret emotional context directly from the text input. For example, adding + descriptive text like "she said excitedly" or using exclamation marks will influence the speech + emotion. Voice settings like Stability and Similarity help control the consistency, while the + underlying emotion comes from textual cues. + + + Yes. Instant Voice Cloning quickly mimics another speaker from short clips. For high-fidelity + clones, check out our Professional Voice Clone. + + + Yes. You retain ownership of any audio you generate. However, commercial usage rights are only + available with paid plans. With a paid subscription, you may use generated audio for commercial + purposes and monetize the outputs if you own the IP rights to the input content. + + + Use the low-latency Flash models (Flash v2 or v2.5) optimized for near real-time conversational + or interactive scenarios. See our [latency optimization guide](/docs/latency-optimization) for + more details. + + + The models are nondeterministic. For consistency, use the optional seed parameter, though subtle + differences may still occur. + + + Split long text into segments and use streaming for real-time playback and efficient processing. + To maintain natural prosody flow between chunks, use `previous_text` or `previous_request_ids`. + + +``` diff --git a/fern/01-guide/03-development/deploying/nextjs.mdx b/fern/01-guide/03-development/deploying/nextjs.mdx deleted file mode 100644 index 3a99dcf7c..000000000 --- a/fern/01-guide/03-development/deploying/nextjs.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: NextJS ---- - -To deploy a NextJS with BAML, take a look at the starter template: -https://github.com/BoundaryML/baml-examples/tree/main/nextjs-starter - -All you need is to modify the `nextjs.config.mjs` to allow BAML to run properly: -```JS -/** @type {import('next').NextConfig} */ -const nextConfig = { - experimental: { - serverComponentsExternalPackages: ["@boundaryml/baml"], - }, - webpack: (config, { dev, isServer, webpack, nextRuntime }) => { - config.module.rules.push({ - test: /\.node$/, - use: [ - { - loader: "nextjs-node-loader", - options: { - outputPath: config.output.path, - }, - }, - ], - }); - - return config; - }, -}; - -export default nextConfig; -``` - -and change your `package.json` to build the baml client automatically (and enable logging in dev mode if you want): - -```json - "scripts": { - "dev": "BAML_LOG=info next dev", - "build": "pnpm generate && next build", - "start": "next start", - "lint": "next lint", - "generate": "baml-cli generate --from ./baml_src" - }, -``` \ No newline at end of file diff --git a/fern/01-guide/08-frameworks/01-react-nextjs/01-quick-start.mdx b/fern/01-guide/08-frameworks/01-react-nextjs/01-quick-start.mdx new file mode 100644 index 000000000..8e5ee10bb --- /dev/null +++ b/fern/01-guide/08-frameworks/01-react-nextjs/01-quick-start.mdx @@ -0,0 +1,321 @@ +--- +title: React/Next.js Setup +--- + +This guide walks you through setting up BAML with React/Next.js, leveraging Server Actions and React Server Components for optimal performance. + +## Example Usage + +BAML automatically generates a server action and React hook for your BAML functions, with built-in support for both streaming and non-streaming modes. For details on the generated hooks, see [Generated Hooks](/ref/baml_client/react-next-js/use-function-name-hook). + + +```baml title="baml_src/prompt.baml" +class Story { + title string @stream.not_null + content string @stream.not_null +} + +function WriteMeAStory(input: string) -> Story { + client "openai/gpt-4o" + prompt #" + Tell me a story + + {{ ctx.output_format() }} + + {{ _.role("user") }} + + Topic: {{input}} + "# +} +``` + +```bash title="Generate BAML client" +npx baml-cli generate +``` + +```tsx title="app/components/story-form.tsx" {8,10,15-16} +'use client' + + // ✅ Automatically generates a server action and React hook + +import { useWriteMeAStory } from "@/baml_client/react/hooks"; + +export function StoryForm() { + const writeMeAStory = useWriteMeAStory(); + + return ( +
+ + +
+

{writeMeAStory.data?.title}

+

{writeMeAStory.data?.content}

+
+ + {writeMeAStory.error &&
Error: {writeMeAStory.error.message}
} +
+ ); +} +``` +
+ +## Quick Start + +Follow the step-by-step instructions below to set up BAML in a new or existing Next.js project. + + +### Create a New Next.js Project + +First, create a new Next.js project with the App Router: + + +```bash npm +npx create-next-app@latest my-baml-app +``` + +```bash pnpm +pnpm create next-app my-baml-app +``` + +```bash yarn +yarn create next-app my-baml-app +``` + + +When prompted, make sure to: +- Select **Yes** for "Would you like to use TypeScript?" +- Select **Yes** for "Would you like to use the App Router? (recommended)" +- Configure other options as needed for your project + +### Install Dependencies + +Next, install BAML and its dependencies: + + +```bash npm +npm install @boundaryml/baml @boundaryml/baml-nextjs-plugin +``` + +```bash pnpm +pnpm add @boundaryml/baml @boundaryml/baml-nextjs-plugin +``` + +```bash yarn +yarn add @boundaryml/baml @boundaryml/baml-nextjs-plugin +``` + + +### Configure Next.js + +Update your `next.config.mjs`: + + +```typescript title="next.config.ts" {1,8} +import { withBaml } from '@boundaryml/baml-nextjs-plugin'; +import type { NextConfig } from 'next'; + +const nextConfig: NextConfig = { + // ... existing config +}; + +export default withBaml()(nextConfig); +``` + +```javascript title="next.config.mjs" {1,8} +import { withBaml } from '@boundaryml/baml-nextjs-plugin'; +import type { NextConfig } from 'next'; + +const nextConfig: NextConfig = { + // ... existing config +}; + +export default withBaml()(nextConfig); +``` + +```javascript title="next.config.js" {1,8} +const { withBaml } = require('@boundaryml/baml-nextjs-plugin'); + +/** @type {import('next').NextConfig} */ +const nextConfig = { + // ... existing config +} + +module.exports = withBaml()(nextConfig) +``` + + +### Initialize BAML + +Create a new BAML project in your Next.js application: + + +This will create a `baml_src` directory with starter code. + +### Setup Environment Variables + +Setup provider specific API Keys. + +```.env .env.local +OPENAI_API_KEY=sk-... +``` + + +To enable observability with BAML, you'll first need to sign up for a [Boundary Studio](https://app.boundaryml.com) account. + + +```.env .env.local +BOUNDARY_PROJECT_ID=sk-... +BOUNDARY_SECRET=sk-... + +OPENAI_API_KEY=sk-... +``` + + + +### Setup BAML Next.js Generator + +Update the `baml_src/generators.baml` file to use the React/Next.js generator. + +```diff title="baml_src/generators.baml" +generator typescript { +- output_type "typescript" ++ output_type "typescript/react" + output_dir "../" + version "0.75.0" +} +``` + +### Generate BAML Client + + + +### Generated React Hooks + +BAML automatically generates type-safe Next.js server actions and React hooks for your BAML functions. + + +```baml title="baml_src/prompt.baml" +class Story { + title string @stream.not_null + content string @stream.not_null +} + +function WriteMeAStory(input: string) -> Story { + client "openai/gpt-4o" + prompt #" + Tell me a story + + {{ ctx.output_format() }} + + {{ _.role("user") }} + + Topic: {{input}} + "# +} +``` + +```tsx title="Non-Streaming Example" +'use client' + +import { useWriteMeAStory } from "@/baml_client/react/hooks"; +import type { Story } from "@/baml_client/types"; + +export function StoryForm() { + const writeMeAStory = useWriteMeAStory({ stream: false }); + + return ( +
+ + + {writeMeAStory.data && ( +
+

{writeMeAStory.data.title}

+

{writeMeAStory.data.content}

+
+ )} + + {writeMeAStory.error &&
Error: {writeMeAStory.error.message}
} +
+ ); +} +``` + +```tsx title="Streaming Example" +'use client' + +import { useWriteMeAStory } from "@/baml_client/react/hooks"; +import type { Story } from "@/baml_client/types"; + +export function StreamingStoryForm() { + const writeMeAStory = useWriteMeAStory({ + onStreamData: (partial) => { + // Handle real-time updates + console.log('Story in progress:', partial); + }, + onFinalData: (final) => { + // Handle completed story + console.log('Story completed:', final); + } + }); + + return ( +
+ + + {writeMeAStory.data && ( +
+

{writeMeAStory.data.title}

+

{writeMeAStory.data.content}

+
+ )} + + {writeMeAStory.error &&
Error: {writeMeAStory.error.message}
} +
+ ); +} +``` +
+ +### Update Package Scripts + +Update your `package.json` scripts: + +```json {3,4} +{ + "scripts": { + "prebuild": "npm run generate", + "generate": "baml-cli generate", + "dev": "next dev", + "build": "next build", + "start": "next start", + } +} +``` + +
+ +## Reference Documentation + +For complete API documentation of the React/Next.js integration, see: + +### Core Concepts +- [Generated Hooks](/ref/baml_client/react-next-js/use-function-name-hook) - Auto-generated hooks for each BAML function + +### Hook Configuration +- [HookInput](/ref/baml_client/react-next-js/hook-input) - Configuration options for hooks +- [HookOutput](/ref/baml_client/react-next-js/hook-output) - Return value types and states +- [Error Types](/ref/baml_client/errors/overview) - Error handling and types + +## Next Steps + +- Check out the [BAML Examples](https://github.com/BoundaryML/baml-examples/tree/main/nextjs-starter) for more use cases diff --git a/fern/01-guide/08-frameworks/01-react-nextjs/02-chatbot.mdx b/fern/01-guide/08-frameworks/01-react-nextjs/02-chatbot.mdx new file mode 100644 index 000000000..47b288fe5 --- /dev/null +++ b/fern/01-guide/08-frameworks/01-react-nextjs/02-chatbot.mdx @@ -0,0 +1,231 @@ +--- +title: Building a Chatbot with BAML React Hooks +description: Learn to build a streaming chatbot using BAML React hooks and Next.js +--- + +In this tutorial, you'll build a real-time streaming chatbot using BAML React hooks. By following along, you'll learn how to: +- Create a BAML function for chat completions +- Use BAML's React hooks for streaming responses +- Build a modern chat interface +- Handle loading states and errors + +## Prerequisites + +Before starting, ensure you have: +- Completed the [Quick Start Guide](/guide/framework-integration/react-next-js/quick-start) +- A Next.js project with BAML set up +- An OpenAI API key + +## Step 1: Define the Chat Function + +First, create a new BAML function for the chat completion: + + +```baml title="baml_src/chat.baml" +class Message { + role "user" | "assistant" + content string +} + +function Chat(messages: Message[]) -> string { + client "openai/gpt-4o-mini" + prompt #" + You are a helpful and knowledgeable AI assistant engaging in a conversation. + Your responses should be: + - Clear and concise + - Accurate and informative + - Natural and conversational in tone + - Focused on addressing the user's needs + + {{ ctx.output_format }} + + {% for m in messages %} + {{ _.role(m.role)}} + {{m.content}} + {% endfor %} + "# +} + +test TestName { + functions [Chat] + args { + messages [ + { + role "user" + content "help me understand Chobani's success" + } + ] + } +} +``` + + +Generate the BAML client to create the React hooks: + +```bash +baml-cli generate +``` + +## Step 2: Implement the Chat Interface + +You can implement the chat interface in two ways: + +### Option A: Using the Generated Hook Directly + +The simplest approach is to use the generated hook directly: + + +```tsx title="app/components/chat-interface.tsx" +'use client' + +import { useChat } from "@/baml_client/react/hooks"; +import { useState } from "react"; + +export function ChatInterface() { + const [input, setInput] = useState(""); + + const chat = useChat(); + + const handleSubmit = async () => { + const newMessages = [ + ...chat.data?.messages, + { role: "user", content: input } + ]; + + setInput(""); + + await chat.mutate({ messages: newMessages }); + }; + + return ( +
+
+ {chat.data?.messages.map((message, i) => ( +
+ {message.content} +
+ ))} + {chat.isLoading &&
Generating...
} +
+ +
+ setInput(e.target.value)} + placeholder="Type your message..." + /> + +
+
+ ); +} +``` +
+ +### Option B: Using a Custom Server Action + +Alternatively, you can create a custom server action for more control over the server-side implementation: + + +```ts title="app/actions/chat.ts" +'use server' + +import { b } from "@/baml_client"; +import { Message } from "@/baml_client/types"; + +export async function streamChat(messages: Message[]) { + const user = await authUser(); + + if (!user) { + throw new Error("User not authenticated"); + } + + return b.stream.Chat(messages).toStreamable(); +} +``` + +```tsx title="app/components/chat-interface-with-action.tsx" +'use client' + +import { useChat } from "@/baml_client/react/hooks"; +import { streamChat } from "../actions/chat"; +import { useState } from "react"; + +export function ChatInterface() { + const [messages, setMessages] = useState([]); + const [input, setInput] = useState(""); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + + const handleSubmit = async () => { + const newMessages = [ + ...messages, + { role: "user", content: input } + ]; + setInput(""); + setIsLoading(true); + setError(null); + + try { + const stream = await streamChat(newMessages); + + for await (const message of stream) { + setMessages((prev) => [...prev, message]); + } + } catch (error) { + setError(error as Error); + } finally { + setIsLoading(false); + } + }; + + return ( +
+
+ {messages.map((message, i) => ( +
+ {message.content} +
+ ))} + {isLoading &&
Typing...
} +
+ +
+
+ setInput(e.target.value)} + placeholder="Type your message..." + /> + +
+
+
+ ); +} +``` +
+ +The server action approach is useful when you need to: +- Add custom server-side logic +- Handle authentication +- Add logging or monitoring +- Implement rate limiting +- Add custom error handling + +## Next Steps + +To enhance your chatbot, you could: +- Add [error handling](/ref/baml_client/errors/overview) for different types of errors +- Add chat history persistence +- Implement different chat models or configurations + +For more information, check out: +- [Generated Hooks](/ref/baml_client/react-next-js/use-function-name-hook) +- [HookInput](/ref/baml_client/react-next-js/hook-input) +- [HookOutput](/ref/baml_client/react-next-js/hook-output) +- [Error Handling](/ref/baml_client/errors/overview) diff --git a/fern/01-guide/08-integrations/nextjs.mdx b/fern/01-guide/08-integrations/nextjs.mdx deleted file mode 100644 index 1f5f971f6..000000000 --- a/fern/01-guide/08-integrations/nextjs.mdx +++ /dev/null @@ -1,260 +0,0 @@ ---- -title: Next.js Integration - ---- - -BAML can be used with Vercel's AI SDK to stream BAML functions to your UI. - -The latest example code is found in our [NextJS starter](https://github.com/BoundaryML/baml-examples/tree/main/nextjs-starter), but this tutorial will guide you on how to add BAML step-by-step. - -See the [live demo](https://baml-examples.vercel.app/) - - -You will need to use Server Actions, from the App Router, for this tutorial. You can still stream BAML functions from Route Handlers however. - - - - -### Install BAML, and Generate a BAML client for TypeScript -- Follow [the TS installation guide](/docs/get-started/quickstart/typescript) -- Install the VSCode extension and Save a baml file to generate the client (or use `npx baml-cli generate`). - - -### Update next.config.mjs - -@boundaryml/baml uses a native node addon to run the BAML functions. You need to tell NextJS to use the loader for these files. -```JS -/** @type {import('next').NextConfig} */ -const nextConfig = { - experimental: { - serverComponentsExternalPackages: ["@boundaryml/baml"], - }, - webpack: (config, { dev, isServer, webpack, nextRuntime }) => { - config.module.rules.push({ - test: /\.node$/, - use: [ - { - loader: "nextjs-node-loader", - options: { - outputPath: config.output.path, - }, - }, - ], - }); - - return config; - }, -}; - -export default nextConfig; -``` - - -### Create some helper utilities to stream BAML functions -Let's add some helpers to export our baml functions as streamable server actions. See the last line in this file, where we export the `extractResume` function. - -In `app/utils/streamableObject.tsx` add the following code: -```typescript -import { createStreamableValue, StreamableValue as BaseStreamableValue } from "ai/rsc"; -import { BamlStream } from "@boundaryml/baml"; -import { b } from "@/baml_client"; // You can change the path of this to wherever your baml_client is located. - - -// ------------------------------ -// Helper functions -// ------------------------------ - -/** - * Type alias for defining a StreamableValue based on a BamlStream. - * It captures either a partial or final result depending on the stream state. - */ -type StreamableValue> = - | { partial: T extends BamlStream ? StreamRet : never } - | { final: T extends BamlStream ? Ret : never }; - -/** - * Helper function to manage and handle a BamlStream. - * It consumes the stream, updates the streamable value for each partial event, - * and finalizes the stream when complete. - * - * @param bamlStream - The BamlStream to be processed. - * @returns A promise that resolves with an object containing the BaseStreamableValue. - */ -export async function streamHelper>( - bamlStream: T, -): Promise<{ - object: BaseStreamableValue>; -}> { - const stream = createStreamableValue>(); - - // Asynchronous function to process the BamlStream events - (async () => { - try { - // Iterate through the stream and update the stream value with partial data - for await (const event of bamlStream) { - stream.update({ partial: event }); - } - - // Obtain the final response once all events are processed - const response = await bamlStream.getFinalResponse(); - stream.done({ final: response }); - } catch (err) { - // Handle any errors during stream processing - stream.error(err); - } - })(); - - return { object: stream.value }; -} - -/** - * Utility function to create a streamable function from a BamlStream-producing function. - * This function returns an asynchronous function that manages the streaming process. - * - * @param func - A function that produces a BamlStream when called. - * @returns An asynchronous function that returns a BaseStreamableValue for the stream. - */ -export function makeStreamable< - BamlStreamFunc extends (...args: any) => BamlStream, ->( - func: BamlStreamFunc -): (...args: Parameters) => Promise<{ - object: BaseStreamableValue>>; -}> { - return async (...args) => { - const boundFunc = func.bind(b.stream); - const stream = boundFunc(...args); - return streamHelper(stream); - }; -} - -``` - -### Export your BAML functions to streamable server actions - -In `app/actions/extract.tsx` add the following code: -```typescript -import { makeStreamable } from "../_baml_utils/streamableObjects"; - - -export const extractResume = makeStreamable(b.stream.ExtractResume); -``` - -### Create a hook to use the streamable functions in React Components -This hook will work like [react-query](https://react-query.tanstack.com/), but for BAML functions. -It will give you partial data, the loading status, and whether the stream was completed. - -In `app/_hooks/useStream.ts` add: -```typescript -import { useState, useEffect } from "react"; -import { readStreamableValue, StreamableValue } from "ai/rsc"; - -/** - * A hook that streams data from a server action. The server action must return a StreamableValue. - * See the example actiimport { useState, useEffect } from "react"; -import { readStreamableValue, StreamableValue } from "ai/rsc"; - -/** - * A hook that streams data from a server action. The server action must return a StreamableValue. - * See the example action in app/actions/streamable_objects.tsx - * **/ -export function useStream( - serverAction: (...args: P) => Promise<{ object: StreamableValue<{ partial: PartialRet } | { final: Ret }, any> }> -) { - const [isLoading, setIsLoading] = useState(false); - const [isComplete, setIsComplete] = useState(false); - const [isError, setIsError] = useState(false); - const [error, setError] = useState(null); - const [partialData, setPartialData] = useState(undefined); // Initialize data state - const [streamResult, setData] = useState(undefined); // full non-partial data - - const mutate = async ( - ...params: Parameters - ): Promise => { - console.log("mutate", params); - setIsLoading(true); - setIsError(false); - setError(null); - - try { - const { object } = await serverAction(...params); - const asyncIterable = readStreamableValue(object); - - for await (const value of asyncIterable) { - if (value !== undefined) { - - // could also add a callback here. - // if (options?.onData) { - // options.onData(value as T); - // } - console.log("value", value); - if ("partial" in value) { - setPartialData(value.partial); // Update data state with the latest value - } else if ("final" in value) { - setData(value.final); // Update data state with the latest value - setIsComplete(true); - return value.final; - } - } - } - - // // If it completes, it means it's the full data. - // return streamedData; - } catch (err) { - console.log("error", err); - - setIsError(true); - setError(new Error(JSON.stringify(err) ?? "An error occurred")); - return undefined; - } finally { - setIsLoading(false); - } - }; - - // If you use the "data" property, your component will re-render when the data gets updated. - return { data: streamResult, partialData, isLoading, isComplete, isError, error, mutate }; -} - -``` - - - -### Stream your BAML function in a component -In `app/page.tsx` you can use the hook to stream the BAML function and render the result in real-time. - -```tsx -"use client"; -import { - extractResume, - extractUnstructuredResume, -} from "../../actions/streamable_objects"; -// import types from baml files like this: -import { Resume } from "@/baml_client"; - -export default function Home() { - // you can also rename these fields by using ":", like how we renamed partialData to "partialResume" - // `mutate` is a function that will start the stream. It takes in the same arguments as the BAML function. - const { data: completedData, partialData: partialResume, isLoading, isError, error, mutate } = useStream(extractResume); - - return ( -
-

BoundaryML Next.js Example

- - - {isLoading &&

Loading...

} - {isError &&

Error: {error?.message}

} - {partialData &&
{JSON.stringify(partialData, null, 2)}
} - {data &&
{JSON.stringify(data, null, 2)}
} -
- ); -} -``` - -
- - -And now you're all set! - -If you have issues with your environment variables not loading, you may want to use [dotenv-cli](https://www.npmjs.com/package/dotenv-cli) to load your env vars before the nextjs process starts: - -`dotenv -- npm run dev` \ No newline at end of file diff --git a/fern/03-reference/baml_client/errors/baml-client-finish-reason-error.mdx b/fern/03-reference/baml_client/errors/baml-client-finish-reason-error.mdx new file mode 100644 index 000000000..a1831291c --- /dev/null +++ b/fern/03-reference/baml_client/errors/baml-client-finish-reason-error.mdx @@ -0,0 +1,61 @@ +--- +title: BamlClientFinishReasonError +description: Technical reference for the BamlClientFinishReasonError class +--- + +The `BamlClientFinishReasonError` class represents an error that occurs when an LLM terminates with a disallowed finish reason. + +## Type Definition + + +```typescript Type Definition +class BamlClientFinishReasonError extends Error { + type: 'BamlClientFinishReasonError' + message: string + prompt: string + raw_output: string +} +``` + + +## Properties + + + Literal type identifier for the error class. + + + + Error message describing the specific finish reason that caused the termination. + + + + The original prompt sent to the LLM. + + + + The partial output received from the LLM before termination. + + +## Type Guards + +The error can be identified using TypeScript's `instanceof` operator: + + +```typescript Type Check +if (error instanceof BamlClientFinishReasonError) { + // Handle finish reason error +} +``` + diff --git a/fern/03-reference/baml_client/errors/baml-validation-error.mdx b/fern/03-reference/baml_client/errors/baml-validation-error.mdx new file mode 100644 index 000000000..afffe7e6a --- /dev/null +++ b/fern/03-reference/baml_client/errors/baml-validation-error.mdx @@ -0,0 +1,66 @@ +--- +title: BamlValidationError +description: Technical reference for the BamlValidationError class +--- + +The `BamlValidationError` class represents an error that occurs when BAML fails to parse or validate LLM output. + +## Type Definition + + +```typescript Type Definition +class BamlValidationError extends Error { + type: 'BamlValidationError' + message: string + prompt: string + raw_output: string +} +``` + + +## Properties + + + Literal type identifier for the error class. + + + + Error message describing the specific validation failure. + + + + The original prompt sent to the LLM. + + + + The raw output from the LLM that failed validation. + + +## Type Guards + +The error can be identified using TypeScript's `instanceof` operator: + + +```typescript Type Check +if (error instanceof BamlValidationError) { + // Handle validation error +} +``` + + +## Related Errors + +- [BamlClientFinishReasonError](./baml-client-finish-reason-error) +- [BamlClientError](./baml-client-error) diff --git a/fern/03-reference/baml_client/errors/overview.mdx b/fern/03-reference/baml_client/errors/overview.mdx new file mode 100644 index 000000000..20c14e386 --- /dev/null +++ b/fern/03-reference/baml_client/errors/overview.mdx @@ -0,0 +1,82 @@ +--- +title: BAML Error Types +description: Technical reference for BAML error handling classes +--- + +BAML provides a set of error classes for handling different error scenarios when working with LLMs. Each error type is designed to handle specific failure cases in the BAML runtime. + +## Error Class Hierarchy + +All BAML errors extend the base JavaScript `Error` class and include a literal `type` field for type identification. + + +```typescript Type Hierarchy +// Base JavaScript Error class +class Error { + message: string + name: string + stack?: string +} + +// BAML-specific error classes +class BamlValidationError extends Error { + type: 'BamlValidationError' + message: string + prompt: string + raw_output: string +} + +class BamlClientFinishReasonError extends Error { + type: 'BamlClientFinishReasonError' + message: string + prompt: string + raw_output: string +} +``` + + +## Error Types + +### [BamlValidationError](./baml-validation-error) +Thrown when BAML fails to parse or validate LLM output. Contains the original prompt and raw output for debugging. + +### [BamlClientFinishReasonError](./baml-client-finish-reason-error) +Thrown when an LLM terminates with a disallowed finish reason. Includes the original prompt and partial output received before termination. + +## Type Guards + +All BAML errors can be identified using TypeScript's `instanceof` operator: + + +```typescript Type Checking +try { + // BAML operation +} catch (error) { + if (error instanceof BamlValidationError) { + // Handle validation error + } else if (error instanceof BamlClientFinishReasonError) { + // Handle finish reason error + } +} +``` + + +## Common Properties + +All BAML error classes include: + + + Literal type identifier specific to each error class. + + + + Human-readable error message describing the failure. + + +For detailed information about each error type, refer to their individual reference pages. diff --git a/fern/03-reference/baml_client/react-nextjs/hook-input.mdx b/fern/03-reference/baml_client/react-nextjs/hook-input.mdx new file mode 100644 index 000000000..d20990a38 --- /dev/null +++ b/fern/03-reference/baml_client/react-nextjs/hook-input.mdx @@ -0,0 +1,104 @@ +--- +title: Hook Input Type Reference +description: Technical reference for the BAML React hook input type +--- + +The `HookInput` type defines the configuration options for BAML React hooks. + + +```typescript title="Example Usage" +function Component() { + const hook = useTestAws({ + stream: true, // optional, defaults to true + onStreamData: (text) => console.log("Streaming:", text), + onFinalData: (text) => console.log("Complete:", text), + onData: (text) => console.log("Any update:", text), + onError: (error) => console.error("Error:", error) + }) + + return
{hook.data}
+} +``` + +```typescript title="Example Types" +// Streaming configuration +const streamingInput: HookInput<'TestAws', { stream: true }> = { + stream: true, + onStreamData: (text) => console.log("Streaming:", text), + onFinalData: (text) => console.log("Final:", text), + onData: (text) => console.log("Any update:", text), + onError: (error) => console.error(error), +} + +// Non-streaming configuration +const nonStreamingInput: HookInput<'TestAws', { stream: false }> = { + stream: false, + onFinalData: (text) => console.log("Result:", text), + onData: (text) => console.log("Result:", text), + onError: (error) => console.error(error) +} +``` + +```typescript title="Type Definition" +type HookInput = { + stream?: Options['stream'] + onStreamData?: Options['stream'] extends false ? never : (response?: StreamDataType) => void + onFinalData?: (response?: FinalDataType) => void + onData?: (response?: StreamDataType | FinalDataType) => void + onError?: (error: BamlErrors) => void +} +``` +
+ +## Type Parameters + + + The name of the BAML function being called. Used to infer the correct types for responses. + + + + Configuration object that determines streaming behavior. Defaults to `{ stream?: true }`. + + +## Properties + + + Flag to enable or disable streaming mode. When true, enables streaming responses. + + + + Callback function for streaming responses. Only available when `Options['stream']` is true. + + + + Callback function for the final response. + + + + Unified callback function that receives both streaming and final responses. For non-streaming hooks, only receives final responses. + + + + Callback function for error handling. See [Error Types](../errors/overview). + \ No newline at end of file diff --git a/fern/03-reference/baml_client/react-nextjs/hook-output.mdx b/fern/03-reference/baml_client/react-nextjs/hook-output.mdx new file mode 100644 index 000000000..18f4d3f70 --- /dev/null +++ b/fern/03-reference/baml_client/react-nextjs/hook-output.mdx @@ -0,0 +1,182 @@ +--- +title: Hook Output Type Reference +description: Technical reference for the BAML React hook output type +--- + +The `HookOutput` type defines the return type for BAML React hooks. + + +```typescript title="Example Usage" +function Component() { + const hook = useTestAws({ + stream: true, // optional, defaults to true + }) + + return ( +
+ {hook.error &&
Error: {hook.error.message}
} + +
+ ) +} +``` + +```typescript title="Example Types" +// Streaming configuration +const streamingResult: HookOutput<'TestAws', { stream: true }> = { + data: "Any response", + finalData: "Final response", + streamData: "Streaming response...", + error: undefined, + isError: false, + isLoading: true, + isSuccess: false, + isStreaming: true, + isPending: false, + status: 'streaming', + mutate: async () => new ReadableStream(), + reset: () => void +} + +// Non-streaming configuration +const nonStreamingResult: HookOutput<'TestAws', { stream: false }> = { + data: "Final response", + finalData: "Final response", + error: undefined, + isError: false, + isLoading: false, + isSuccess: true, + isPending: false, + status: 'success', + mutate: async () => "Final response", + reset: () => void +} +``` + +```typescript title="Type Definition" +type HookOutput = { + data?: Options['stream'] extends false ? FinalDataType : FinalDataType | StreamDataType + finalData?: FinalDataType + streamData?: Options['stream'] extends false ? never : StreamDataType + error?: BamlErrors + isError: boolean + isLoading: boolean + isPending: boolean + isSuccess: boolean + isStreaming: Options['stream'] extends false ? never : boolean + status: HookStatus + mutate: (...args: Parameters) => Options['stream'] extends false + ? Promise> + : Promise> + reset: () => void +} + +type HookStatus = Options['stream'] extends false + ? 'idle' | 'pending' | 'success' | 'error' + : 'idle' | 'pending' | 'streaming' | 'success' | 'error' +``` +
+ +## Type Parameters + + + The name of the BAML function being called. Used to infer input and output types. + + + + Configuration object that determines streaming behavior. Defaults to `{ stream?: true }`. + + +## Properties + + + The current response data. For streaming hooks, this contains either the latest streaming response or the final response. For non-streaming hooks, this only contains the final response. + + + + The final response data. Only set when the request completes successfully. + + + + The latest streaming response. Only available when `Options['stream']` is true. + + + + Any error that occurred during the request. See [Error Types](../errors/overview). + + + + True if the request resulted in an error. + + + + True if the request is in progress (either pending or streaming). + + + + True if the request is pending (not yet streaming or completed). + + + + True if the request completed successfully. + + + + True if the request is currently streaming data. Only available when `Options['stream']` is true. + + + + The current status of the request. For streaming hooks: 'idle' | 'pending' | 'streaming' | 'success' | 'error'. For non-streaming hooks: 'idle' | 'pending' | 'success' | 'error'. + + + + Function to trigger the BAML action. Returns a ReadableStream for streaming hooks, or a Promise of the final response for non-streaming hooks. + + + + Function to reset the hook state back to its initial values. + \ No newline at end of file diff --git a/fern/03-reference/baml_client/react-nextjs/use-function-name.mdx b/fern/03-reference/baml_client/react-nextjs/use-function-name.mdx new file mode 100644 index 000000000..4070af361 --- /dev/null +++ b/fern/03-reference/baml_client/react-nextjs/use-function-name.mdx @@ -0,0 +1,175 @@ +--- +title: Generated Hooks Reference +description: Technical reference for BAML's auto-generated React hooks +--- + +BAML automatically generates a type-safe React hook for each BAML function. Each hook follows the naming pattern `use{FunctionName}` and supports both streaming and non-streaming modes. + + +```typescript title="Example Usage" +import { useWriteMeAStory } from "@/baml_client/react/hooks"; + +// Basic usage with streaming enabled by default +const hook = useWriteMeAStory(); + +// Access streaming and final data +const { data, streamData, finalData } = hook; + +// Track request state +const { isLoading, isStreaming, isPending, isSuccess, isError } = hook; + +// Execute the function +await hook.mutate("A story about a brave AI"); + +// Reset state if needed +hook.reset(); +``` + +```baml title="BAML Function" +class Story { + title string @stream.not_null + content string @stream.not_null +} + +function WriteMeAStory(input: string) -> Story { + client openai/gpt-4 + prompt #" + Tell me a story. + + {{ ctx.output_format() }} + + {{ _.role("user") }} + + Topic: {{input}} + "# +} +``` + + +## HookInput + +The hook accepts an optional configuration object. See [Hook Input](./hook-input) for complete details. + + + Enable streaming mode for real-time updates. Defaults to true. + + + + Callback for streaming updates. Only available when streaming is enabled. + + + + Callback when the request completes. + + + + Unified callback for both streaming and final responses. + + + + Callback when an error occurs. See [Error Types](../errors/overview). + + +## HookOutput + +The hook returns an object with the following properties. See [Hook Output](./hook-output) for complete details. + + + The current response data. Contains either streaming or final data depending on the request state. + + + + The final response data. Only available when the request completes. + + + + Latest streaming update. Only available in streaming mode. + + + + Error information if the request fails. See [Error Types](../errors/overview). + + + + True while the request is in progress (either pending or streaming). + + + + True if the request is pending (not yet streaming or completed). + + + + True if the request is currently streaming data. Only available in streaming mode. + + + + True if the request completed successfully. + + + + True if the request failed. + + + + Current state of the request. For streaming hooks: 'idle' | 'pending' | 'streaming' | 'success' | 'error'. For non-streaming hooks: 'idle' | 'pending' | 'success' | 'error'. + + + + Function to execute the BAML function. Returns a ReadableStream for streaming hooks, or a Promise of the final response for non-streaming hooks. + + + + Function to reset the hook state back to its initial values. + + diff --git a/fern/03-reference/generator.mdx b/fern/03-reference/generator.mdx index 0fc65957c..35297d88c 100644 --- a/fern/03-reference/generator.mdx +++ b/fern/03-reference/generator.mdx @@ -12,61 +12,74 @@ generate code for each of them. ```baml Python generator target { - // Valid values: "python/pydantic", "typescript", "ruby/sorbet" output_type "python/pydantic" - + // Where the generated code will be saved (relative to baml_src/) output_dir "../" - + // What interface you prefer to use for the generated code (sync/async) // Both are generated regardless of the choice, just modifies what is exported // at the top level default_client_mode "sync" - + // Version of runtime to generate code for (should match installed baml-py version) - version "0.63.0" + version "0.75.0" } ``` ```baml TypeScript generator target { - // Valid values: "python/pydantic", "typescript", "ruby/sorbet" output_type "typescript" - + + // Where the generated code will be saved (relative to baml_src/) + output_dir "../" + + // What interface you prefer to use for the generated code (sync/async) + // Both are generated regardless of the choice, just modifies what is exported + // at the top level + default_client_mode "async" + + // Version of runtime to generate code for (should match the package @boundaryml/baml version) + version "0.75.0" +} +``` + +```baml React/Next.js +generator target { + output_type "typescript/react" + // Where the generated code will be saved (relative to baml_src/) output_dir "../" - + // What interface you prefer to use for the generated code (sync/async) // Both are generated regardless of the choice, just modifies what is exported // at the top level default_client_mode "async" - + // Version of runtime to generate code for (should match the package @boundaryml/baml version) - version "0.63.0" + version "0.75.0" } ``` ```baml Ruby (beta) generator target { - // Valid values: "python/pydantic", "typescript", "ruby/sorbet" output_type "ruby/sorbet" // Where the generated code will be saved (relative to baml_src/) output_dir "../" - + // Version of runtime to generate code for (should match installed `baml` package version) - version "0.63.0" + version "0.75.0" } ``` ```baml OpenAPI generator target { - // Valid values: "python/pydantic", "typescript", "ruby/sorbet", "rest/openapi" output_type "rest/openapi" // Where the generated code will be saved (relative to baml_src/) output_dir "../" - + // Version of runtime to generate code for (should match installed `baml` package version) version "0.54.0" diff --git a/fern/docs.yml b/fern/docs.yml index a66f83d35..70bbbccd6 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -83,10 +83,18 @@ navigation: - page: REST API (other languages) icon: fa-regular fa-network-wired path: 01-guide/02-languages/rest.mdx - - - page: NextJS + - section: Framework Integration + icon: fa-solid fa-plug + contents: + - section: React/Next.js icon: fa-brands fa-react - path: 01-guide/08-integrations/nextjs.mdx + contents: + - page: Quick Start + icon: fa-regular fa-rocket + path: 01-guide/08-frameworks/01-react-nextjs/01-quick-start.mdx + - page: Building a Chatbot + icon: fa-solid fa-robot + path: 01-guide/08-frameworks/01-react-nextjs/02-chatbot.mdx - section: Development contents: - page: Environment Variables @@ -104,9 +112,6 @@ navigation: - page: AWS icon: fa-brands fa-aws path: 01-guide/03-development/deploying/aws.mdx - - page: NextJs - icon: fa-brands fa-react - path: 01-guide/03-development/deploying/nextjs.mdx - page: Docker icon: fa-brands fa-docker path: 01-guide/03-development/deploying/docker.mdx @@ -232,7 +237,7 @@ navigation: # - page: Flask + ChatBot # icon: fa-regular fa-comments # path: 01-guide/introduction.mdx - # - page: Reflex + Reciept Parsing + # - page: Reflex + Receipt Parsing # icon: fa-regular fa-receipt # path: 01-guide/introduction.mdx # - page: Parsing PDFs @@ -289,6 +294,44 @@ navigation: # - page: PHP # icon: fa-brands fa-php # path: 01-guide/introduction.mdx + # - page: b + # path: 01-guide/introduction.mdx + # - page: async_client + # path: 01-guide/introduction.mdx + # - page: sync_client + # path: 01-guide/introduction.mdx + # - page: reset_baml_env_vars + # path: 01-guide/introduction.mdx + # - page: trace + # path: 01-guide/introduction.mdx + # - page: set_tags + # path: 01-guide/introduction.mdx + # - section: "baml_client: Typescript" + # contents: + # - page: TypeBuilder + # path: 01-guide/introduction.mdx + # - page: ClientRegistry + # path: 01-guide/introduction.mdx + # - page: BamlError + # path: 01-guide/introduction.mdx + # - page: BamlImageTs + # path: 01-guide/introduction.mdx + # - page: BamlAudioTs + # path: 01-guide/introduction.mdx + # - page: b + # path: 01-guide/introduction.mdx + # - page: async_client + # path: 01-guide/introduction.mdx + # - page: sync_client + # path: 01-guide/introduction.mdx + # - page: resetBamlEnvVars + # path: 01-guide/introduction.mdx + # - page: trace_async + # path: 01-guide/introduction.mdx + # - page: trace_sync + # path: 01-guide/introduction.mdx + # - page: set_tags + # path: 01-guide/introduction.mdx - tab: reference layout: # - page: Changelog @@ -359,6 +402,32 @@ navigation: path: 03-reference/baml/enum.mdx - page: generator path: 03-reference/generator.mdx + - section: Generated baml_client + slug: baml_client + contents: + - page: TypeBuilder + path: 03-reference/baml_client/typebuilder.mdx + - page: ClientRegistry + path: 01-guide/05-baml-advanced/client-registry.mdx + - page: BamlImage / BamlAudio + slug: media + path: 03-reference/baml_client/media.mdx + - section: Errors + contents: + - page: Overview + path: 03-reference/baml_client/errors/overview.mdx + - page: BamlValidationError + path: 03-reference/baml_client/errors/baml-validation-error.mdx + - page: BamlClientFinishReasonError + path: 03-reference/baml_client/errors/baml-client-finish-reason-error.mdx + - section: React/Next.js + contents: + - page: use{FunctionName} Hook + path: 03-reference/baml_client/react-nextjs/use-function-name.mdx + - page: HookInput + path: 03-reference/baml_client/react-nextjs/hook-input.mdx + - page: HookOutput + path: 03-reference/baml_client/react-nextjs/hook-output.mdx - section: Attributes contents: - page: What are attributes? @@ -419,16 +488,6 @@ navigation: path: 03-reference/baml/clients/strategy/fallback.mdx - page: "Round Robin" path: 03-reference/baml/clients/strategy/round-robin.mdx - - section: baml_client - contents: - - page: TypeBuilder - path: 03-reference/baml_client/typebuilder.mdx - - page: ClientRegistry - path: 01-guide/05-baml-advanced/client-registry.mdx - - page: BamlImage / BamlAudio - slug: media - path: 03-reference/baml_client/media.mdx - - section: Prompt Syntax contents: diff --git a/fern/fern.config.json b/fern/fern.config.json index 877104eac..0f80fb6ee 100644 --- a/fern/fern.config.json +++ b/fern/fern.config.json @@ -1,4 +1,4 @@ { "organization": "boundary", - "version": "0.51.11" + "version": "0.51.37" } \ No newline at end of file diff --git a/fern/package.json b/fern/package.json index 6de00bfa2..017d24c7b 100644 --- a/fern/package.json +++ b/fern/package.json @@ -5,5 +5,6 @@ }, "devDependencies": { "fern-api": "^0.31.24" - } + }, + "packageManager": "pnpm@9.12.0" } diff --git a/fern/snippets/baml/cli/generate.mdx b/fern/snippets/baml/cli/generate.mdx new file mode 100644 index 000000000..bd56bd10b --- /dev/null +++ b/fern/snippets/baml/cli/generate.mdx @@ -0,0 +1,13 @@ + +```bash npm +npx baml-cli generate +``` + +```bash pnpm +pnpm exec baml-cli generate +``` + +```bash yarn +yarn baml-cli generate +``` + \ No newline at end of file diff --git a/fern/snippets/baml/cli/install/nodejs.mdx b/fern/snippets/baml/cli/install/nodejs.mdx new file mode 100644 index 000000000..625ba2aac --- /dev/null +++ b/fern/snippets/baml/cli/install/nodejs.mdx @@ -0,0 +1,13 @@ + +```bash npm +npx baml-cli init +``` + +```bash pnpm +pnpm exec baml-cli init +``` + +```bash yarn +yarn baml-cli init +``` + \ No newline at end of file diff --git a/fern/snippets/baml/clients/openai.mdx b/fern/snippets/baml/clients/openai.mdx new file mode 100644 index 000000000..1b5f78698 --- /dev/null +++ b/fern/snippets/baml/clients/openai.mdx @@ -0,0 +1,9 @@ +```baml title="baml_src/clients.baml" +client OpenAI { + provider openai + options { + model gpt-4o + api_key env.OPENAI_API_KEY + } +} +``` diff --git a/fern/snippets/baml/prompts/story.mdx b/fern/snippets/baml/prompts/story.mdx new file mode 100644 index 000000000..36b379615 --- /dev/null +++ b/fern/snippets/baml/prompts/story.mdx @@ -0,0 +1,26 @@ +```baml title="baml_src/story.baml" focus={1-16} +class Story { + title: string + content: string +} + +function WriteMeAStory(prompt: string) -> Story { + client OpenAI + prompt #" + Act as a storyteller. + + { ctx.output_format } + + { _.role('user') } + Once upon a time {prompt} + "# +} + +test WriteMeAStory { + functions [WriteMeAStory] + args { + prompt "The Universe" + } + +} +``` \ No newline at end of file diff --git a/foo.md b/foo.md new file mode 100644 index 000000000..900df1977 --- /dev/null +++ b/foo.md @@ -0,0 +1,141 @@ +# Diátaxis Documentation Framework + +## Core Concept + +The fundamental idea behind Diátaxis is that documentation needs fall into four distinct categories. Each category serves a different purpose and requires a different approach to writing. The framework is not just a list of types, but a systematic way to think about documentation. + +## The Four Documentation Types + +### 1. Tutorials +- **Definition**: A tutorial is a lesson that guides a learner through a practical experience +- **Core Purpose**: Skills acquisition through doing +- **Key Attributes**: + - Always practical - the user must do something + - Designed around a specific learning experience + - Instructor takes responsibility for learner's success + - Learning happens through action, not through being taught +- **Special Challenge**: The instructor must be "present" through written instruction alone +- **What to Avoid**: + - Don't explain concepts in depth - link to explanations instead + - Don't assume prior knowledge + - Don't focus on options or alternatives + - Don't include reference material + - Don't show all possible ways to do something +- **Example**: Like a driving lesson - the goal is developing skills and confidence, not reaching a destination + +### 2. How-to Guides +- **Definition**: Step-by-step guidance to achieve a specific goal +- **Core Purpose**: Practical problem solving +- **Key Attributes**: + - Addresses a specific real-world task or problem + - Written for users who know what they need to do + - Focused on completing work rather than learning + - Assumes necessary competence +- **What to Avoid**: + - Don't teach basic concepts + - Don't explain why things work + - Don't cover every possible variation + - Don't include detailed technical specifications + - Don't focus on learning objectives +- **Examples**: + - "How to store cellulose nitrate film" + - "How to configure frame profiling" + - "Troubleshooting deployment problems" + +### 3. Reference +- **Definition**: Technical descriptions of the machinery +- **Core Purpose**: Information +- **Key Attributes**: + - Contains pure technical facts + - Must be accurate and complete + - Structure mirrors the code/system architecture + - Neutral and objective - like a map + - Serves users who know what they're looking for +- **What to Avoid**: + - Don't include tutorials or guides + - Don't explain concepts + - Don't include opinions or recommendations + - Don't provide step-by-step instructions + - Don't teach or guide the reader + - Don't include best practices +- **Distinction**: Like a map that could be used by both a navigator plotting a course or a magistrate in a legal case + +### 4. Explanation +- **Definition**: Discussion that clarifies and illuminates a particular topic +- **Core Purpose**: Understanding +- **Key Attributes**: + - Provides background and context + - Can take different approaches to a topic + - May include opinions and alternative views + - Connects different concepts + - Answers "why" questions +- **What to Avoid**: + - Don't include practical steps + - Don't mix with tutorials + - Don't focus on specific tasks + - Don't include detailed technical specifications + - Don't try to be completely objective + - Don't include best practices +- **Important Note**: Should be separated from tutorials to avoid overloading learners + +## The Diátaxis Map + +The documentation types are arranged along two axes: + +| Axis | Practical | Theoretical | +|-----------|-------------------------|-------------------------| +| Learning | Tutorials | Explanation | +| Work | How-to Guides | Reference | + +This creates natural tensions and relationships: +- Tutorials ↔ How-to guides (practical knowledge) +- Reference ↔ Explanation (theoretical knowledge) +- Tutorials ↔ Explanation (learning-oriented) +- How-to guides ↔ Reference (work-oriented) + +## The Diátaxis Compass + +Use this tool to identify documentation types: + +| If content... | ...and serves the user's... | Then it belongs in... | +|-----------------|---------------------------|---------------------| +| Guides action | Learning | Tutorials | +| Guides action | Work | How-to guides | +| Explains theory | Work | Reference | +| Explains theory | Learning | Explanation | + +## Practical Application + +The workflow is intentionally simple: + +1. Look at your current documentation +2. Ask: "How could this be better?" +3. Choose ONE small improvement +4. Make that improvement +5. Repeat + +## Key Principles + +1. **Separation of Concerns** + - Keep the four types distinct + - Don't mix tutorials with explanation + - Link between types instead of combining them + +2. **Minimal Approach** + - Start with small improvements + - You don't need to read or understand everything + - Each improvement suggests the next + +3. **Pragmatic Usage** + - Use what works for you + - No need to commit to the entire framework + - Even small improvements are valuable + +## Important Notes + +- The framework is a practical tool, not a theoretical construct +- You don't need to understand all of Diátaxis to start using it +- The documentation will naturally evolve as you make improvements +- Let real documentation problems guide your use of the framework + +[Source: [Diátaxis Documentation Framework](https://diataxis.fr/start-here/)] \ No newline at end of file diff --git a/integ-tests/README.md b/integ-tests/README.md index 6527ed501..0206bb6c4 100644 --- a/integ-tests/README.md +++ b/integ-tests/README.md @@ -172,7 +172,13 @@ b. **Using .env File (Recommended for open source contributors)** ```bash # Build the debug version of the client cd typescript && pnpm run build:debug + ``` + + + For local development, use `pnpm run build:debug` which is much faster. The full `pnpm run build` can take several minutes as it creates an optimized production build. + + ```bash # Generate the test code pnpm run generate diff --git a/integ-tests/baml_src/clients.baml b/integ-tests/baml_src/clients.baml index 8740a19e2..0449a1601 100644 --- a/integ-tests/baml_src/clients.baml +++ b/integ-tests/baml_src/clients.baml @@ -175,8 +175,10 @@ client AwsBedrock { provider aws-bedrock options { inference_configuration { - max_tokens 100 + max_tokens 2048 } + // max_tokens 100000 + // max_completion_tokens 100000 // model "anthropic.claude-3-5-sonnet-20240620-v1:0" // model_id "anthropic.claude-3-haiku-20240307-v1:0" model "meta.llama3-8b-instruct-v1:0" diff --git a/integ-tests/baml_src/generators.baml b/integ-tests/baml_src/generators.baml index 2da82288d..9dd35723f 100644 --- a/integ-tests/baml_src/generators.baml +++ b/integ-tests/baml_src/generators.baml @@ -10,15 +10,21 @@ generator lang_typescript { version "0.75.0" } +generator lang_typescript_react { + output_type typescript/react + output_dir "../react" + version "0.75.0" +} + generator lang_ruby { output_type ruby/sorbet output_dir "../ruby" version "0.75.0" } -// generator openapi { -// output_type rest/openapi -// output_dir "../openapi" -// version "0.75.0" -// on_generate "rm .gitignore" -// } +generator openapi { + output_type rest/openapi + output_dir "../openapi" + version "0.75.0" + on_generate "rm .gitignore" +} \ No newline at end of file diff --git a/integ-tests/baml_src/test-files/providers/aws.baml b/integ-tests/baml_src/test-files/providers/aws.baml index 5428a2d40..33decfaaf 100644 --- a/integ-tests/baml_src/test-files/providers/aws.baml +++ b/integ-tests/baml_src/test-files/providers/aws.baml @@ -5,6 +5,32 @@ function TestAws(input: string) -> string { "# } +/// my docs +class UniverseQuestion { + question string + answer string +} + +class UniverseQuestionInput { + question string +} + +function TestUniverseQuestion(question: UniverseQuestionInput) -> UniverseQuestion { + client AwsBedrock + prompt #" + You are a helpful assistant that answers questions about the universe. + + {{ ctx.output_format }} + + {{ _.role("user")}} + + Question: {{ question }} + + Answer: + "# +} + + function TestAwsInvalidRegion(input: string) -> string { client AwsBedrockInvalidRegion prompt #" diff --git a/integ-tests/openapi/baml_client/openapi.yaml b/integ-tests/openapi/baml_client/openapi.yaml index 526fda7e3..821156fdc 100644 --- a/integ-tests/openapi/baml_client/openapi.yaml +++ b/integ-tests/openapi/baml_client/openapi.yaml @@ -32,6 +32,47 @@ paths: title: AaaSamOutputFormatResponse $ref: '#/components/schemas/Recipe' operationId: AaaSamOutputFormat + /call/AliasThatPointsToRecursiveType: + post: + requestBody: + $ref: '#/components/requestBodies/AliasThatPointsToRecursiveType' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: AliasThatPointsToRecursiveTypeResponse + $ref: '#/components/schemas/LinkedListAliasNode' + operationId: AliasThatPointsToRecursiveType + /call/AliasWithMultipleAttrs: + post: + requestBody: + $ref: '#/components/requestBodies/AliasWithMultipleAttrs' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: AliasWithMultipleAttrsResponse + type: object + properties: + value: + type: integer + checks: + type: object + properties: + gt_ten: + $ref: '#components/schemas/Check' + required: + - gt_ten + additionalProperties: false + required: + - value + - checks + additionalProperties: false + operationId: AliasWithMultipleAttrs /call/AliasedInputClass: post: requestBody: @@ -97,6 +138,32 @@ paths: title: AliasedInputListResponse type: string operationId: AliasedInputList + /call/AllowedOptionals: + post: + requestBody: + $ref: '#/components/requestBodies/AllowedOptionals' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: AllowedOptionalsResponse + $ref: '#/components/schemas/OptionalListAndMap' + operationId: AllowedOptionals + /call/AssertFn: + post: + requestBody: + $ref: '#/components/requestBodies/AssertFn' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: AssertFnResponse + type: integer + operationId: AssertFn /call/AudioInput: post: requestBody: @@ -110,6 +177,45 @@ paths: title: AudioInputResponse type: string operationId: AudioInput + /call/BuildLinkedList: + post: + requestBody: + $ref: '#/components/requestBodies/BuildLinkedList' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: BuildLinkedListResponse + $ref: '#/components/schemas/LinkedList' + operationId: BuildLinkedList + /call/BuildTree: + post: + requestBody: + $ref: '#/components/requestBodies/BuildTree' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: BuildTreeResponse + $ref: '#/components/schemas/Tree' + operationId: BuildTree + /call/ClassThatPointsToRecursiveClassThroughAlias: + post: + requestBody: + $ref: '#/components/requestBodies/ClassThatPointsToRecursiveClassThroughAlias' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: ClassThatPointsToRecursiveClassThroughAliasResponse + $ref: '#/components/schemas/ClassToRecAlias' + operationId: ClassThatPointsToRecursiveClassThroughAlias /call/ClassifyDynEnumTwo: post: requestBody: @@ -162,6 +268,19 @@ paths: title: ClassifyMessage3Response $ref: '#/components/schemas/Category' operationId: ClassifyMessage3 + /call/Completion: + post: + requestBody: + $ref: '#/components/requestBodies/Completion' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: CompletionResponse + type: string + operationId: Completion /call/CustomTask: post: requestBody: @@ -325,6 +444,21 @@ paths: title: ExtractContactInfoResponse $ref: '#/components/schemas/ContactInfo' operationId: ExtractContactInfo + /call/ExtractHobby: + post: + requestBody: + $ref: '#/components/requestBodies/ExtractHobby' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: ExtractHobbyResponse + type: array + items: + $ref: '#/components/schemas/Hobby' + operationId: ExtractHobby /call/ExtractNames: post: requestBody: @@ -448,6 +582,34 @@ paths: title: FnEnumOutputResponse $ref: '#/components/schemas/EnumOutput' operationId: FnEnumOutput + /call/FnLiteralClassInputOutput: + post: + requestBody: + $ref: '#/components/requestBodies/FnLiteralClassInputOutput' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnLiteralClassInputOutputResponse + $ref: '#/components/schemas/LiteralClassHello' + operationId: FnLiteralClassInputOutput + /call/FnLiteralUnionClassInputOutput: + post: + requestBody: + $ref: '#/components/requestBodies/FnLiteralUnionClassInputOutput' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnLiteralUnionClassInputOutputResponse + oneOf: + - $ref: '#/components/schemas/LiteralClassOne' + - $ref: '#/components/schemas/LiteralClassTwo' + operationId: FnLiteralUnionClassInputOutput /call/FnNamedArgsSingleStringOptional: post: requestBody: @@ -528,6 +690,58 @@ paths: title: FnOutputClassWithEnumResponse $ref: '#/components/schemas/TestClassWithEnum' operationId: FnOutputClassWithEnum + /call/FnOutputInt: + post: + requestBody: + $ref: '#/components/requestBodies/FnOutputInt' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnOutputIntResponse + type: integer + operationId: FnOutputInt + /call/FnOutputLiteralBool: + post: + requestBody: + $ref: '#/components/requestBodies/FnOutputLiteralBool' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnOutputLiteralBoolResponse + type: boolean + operationId: FnOutputLiteralBool + /call/FnOutputLiteralInt: + post: + requestBody: + $ref: '#/components/requestBodies/FnOutputLiteralInt' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnOutputLiteralIntResponse + type: integer + operationId: FnOutputLiteralInt + /call/FnOutputLiteralString: + post: + requestBody: + $ref: '#/components/requestBodies/FnOutputLiteralString' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: FnOutputLiteralStringResponse + type: string + operationId: FnOutputLiteralString /call/FnOutputStringList: post: requestBody: @@ -621,820 +835,2180 @@ paths: title: GetQueryResponse $ref: '#/components/schemas/SearchParams' operationId: GetQuery - /call/MyFunc: + /call/InOutEnumMapKey: post: requestBody: - $ref: '#/components/requestBodies/MyFunc' + $ref: '#/components/requestBodies/InOutEnumMapKey' responses: '200': description: Successful operation content: application/json: schema: - title: MyFuncResponse - $ref: '#/components/schemas/DynamicOutput' - operationId: MyFunc - /call/OptionalTest_Function: + title: InOutEnumMapKeyResponse + type: object + additionalProperties: + type: string + operationId: InOutEnumMapKey + /call/InOutLiteralStringUnionMapKey: post: requestBody: - $ref: '#/components/requestBodies/OptionalTest_Function' + $ref: '#/components/requestBodies/InOutLiteralStringUnionMapKey' responses: '200': description: Successful operation content: application/json: schema: - title: OptionalTest_FunctionResponse - type: array - items: - $ref: '#/components/schemas/OptionalTest_ReturnType' - operationId: OptionalTest_Function - /call/PredictAge: + title: InOutLiteralStringUnionMapKeyResponse + type: object + additionalProperties: + type: string + operationId: InOutLiteralStringUnionMapKey + /call/InOutSingleLiteralStringMapKey: post: requestBody: - $ref: '#/components/requestBodies/PredictAge' + $ref: '#/components/requestBodies/InOutSingleLiteralStringMapKey' responses: '200': description: Successful operation content: application/json: schema: - title: PredictAgeResponse - $ref: '#/components/schemas/FooAny' - operationId: PredictAge - /call/PredictAgeBare: + title: InOutSingleLiteralStringMapKeyResponse + type: object + additionalProperties: + type: string + operationId: InOutSingleLiteralStringMapKey + /call/JsonTypeAliasCycle: post: requestBody: - $ref: '#/components/requestBodies/PredictAgeBare' + $ref: '#/components/requestBodies/JsonTypeAliasCycle' responses: '200': description: Successful operation content: application/json: schema: - title: PredictAgeBareResponse + title: JsonTypeAliasCycleResponse + anyOf: [] + operationId: JsonTypeAliasCycle + /call/LiteralUnionsTest: + post: + requestBody: + $ref: '#/components/requestBodies/LiteralUnionsTest' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: LiteralUnionsTestResponse + oneOf: + - type: integer + - type: boolean + - type: string + operationId: LiteralUnionsTest + /call/MakeBlockConstraint: + post: + requestBody: + $ref: '#/components/requestBodies/MakeBlockConstraint' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: MakeBlockConstraintResponse type: object properties: value: - type: integer + $ref: '#/components/schemas/BlockConstraint' checks: type: object properties: - too_big: + cross_field: $ref: '#components/schemas/Check' required: - - too_big + - cross_field additionalProperties: false required: - value - checks additionalProperties: false - operationId: PredictAgeBare - /call/PromptTestClaude: + operationId: MakeBlockConstraint + /call/MakeNestedBlockConstraint: post: requestBody: - $ref: '#/components/requestBodies/PromptTestClaude' + $ref: '#/components/requestBodies/MakeNestedBlockConstraint' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestClaudeResponse - type: string - operationId: PromptTestClaude - /call/PromptTestClaudeChat: + title: MakeNestedBlockConstraintResponse + $ref: '#/components/schemas/NestedBlockConstraint' + operationId: MakeNestedBlockConstraint + /call/MakeSemanticContainer: post: requestBody: - $ref: '#/components/requestBodies/PromptTestClaudeChat' + $ref: '#/components/requestBodies/MakeSemanticContainer' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestClaudeChatResponse - type: string - operationId: PromptTestClaudeChat - /call/PromptTestClaudeChatNoSystem: + title: MakeSemanticContainerResponse + $ref: '#/components/schemas/SemanticContainer' + operationId: MakeSemanticContainer + /call/MapAlias: post: requestBody: - $ref: '#/components/requestBodies/PromptTestClaudeChatNoSystem' + $ref: '#/components/requestBodies/MapAlias' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestClaudeChatNoSystemResponse - type: string - operationId: PromptTestClaudeChatNoSystem - /call/PromptTestOpenAI: + title: MapAliasResponse + type: object + additionalProperties: + type: array + items: + type: string + operationId: MapAlias + /call/MergeAliasAttributes: post: requestBody: - $ref: '#/components/requestBodies/PromptTestOpenAI' + $ref: '#/components/requestBodies/MergeAliasAttributes' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestOpenAIResponse - type: string - operationId: PromptTestOpenAI - /call/PromptTestOpenAIChat: + title: MergeAliasAttributesResponse + $ref: '#/components/schemas/MergeAttrs' + operationId: MergeAliasAttributes + /call/MyFunc: post: requestBody: - $ref: '#/components/requestBodies/PromptTestOpenAIChat' + $ref: '#/components/requestBodies/MyFunc' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestOpenAIChatResponse - type: string - operationId: PromptTestOpenAIChat - /call/PromptTestOpenAIChatNoSystem: + title: MyFuncResponse + $ref: '#/components/schemas/DynamicOutput' + operationId: MyFunc + /call/NestedAlias: post: requestBody: - $ref: '#/components/requestBodies/PromptTestOpenAIChatNoSystem' + $ref: '#/components/requestBodies/NestedAlias' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestOpenAIChatNoSystemResponse - type: string - operationId: PromptTestOpenAIChatNoSystem - /call/PromptTestStreaming: + title: NestedAliasResponse + oneOf: + - oneOf: + - type: integer + - type: string + - type: boolean + - type: number + - type: array + items: + type: string + - type: object + additionalProperties: + type: array + items: + type: string + operationId: NestedAlias + /call/NullLiteralClassHello: post: requestBody: - $ref: '#/components/requestBodies/PromptTestStreaming' + $ref: '#/components/requestBodies/NullLiteralClassHello' responses: '200': description: Successful operation content: application/json: schema: - title: PromptTestStreamingResponse - type: string - operationId: PromptTestStreaming - /call/ReturnFailingAssert: + title: NullLiteralClassHelloResponse + $ref: '#/components/schemas/ClassForNullLiteral' + operationId: NullLiteralClassHello + /call/OptionalTest_Function: post: requestBody: - $ref: '#/components/requestBodies/ReturnFailingAssert' + $ref: '#/components/requestBodies/OptionalTest_Function' responses: '200': description: Successful operation content: application/json: schema: - title: ReturnFailingAssertResponse - type: integer - operationId: ReturnFailingAssert - /call/ReturnMalformedConstraints: - post: - requestBody: - $ref: '#/components/requestBodies/ReturnMalformedConstraints' - responses: - '200': + title: OptionalTest_FunctionResponse + type: array + items: + $ref: '#/components/schemas/OptionalTest_ReturnType' + operationId: OptionalTest_Function + /call/PredictAge: + post: + requestBody: + $ref: '#/components/requestBodies/PredictAge' + responses: + '200': description: Successful operation content: application/json: schema: - title: ReturnMalformedConstraintsResponse - $ref: '#/components/schemas/MalformedConstraints' - operationId: ReturnMalformedConstraints - /call/SchemaDescriptions: + title: PredictAgeResponse + $ref: '#/components/schemas/FooAny' + operationId: PredictAge + /call/PredictAgeBare: post: requestBody: - $ref: '#/components/requestBodies/SchemaDescriptions' + $ref: '#/components/requestBodies/PredictAgeBare' responses: '200': description: Successful operation content: application/json: schema: - title: SchemaDescriptionsResponse - $ref: '#/components/schemas/Schema' - operationId: SchemaDescriptions - /call/StreamBigNumbers: + title: PredictAgeBareResponse + type: object + properties: + value: + type: integer + checks: + type: object + properties: + too_big: + $ref: '#components/schemas/Check' + required: + - too_big + additionalProperties: false + required: + - value + - checks + additionalProperties: false + operationId: PredictAgeBare + /call/PrimitiveAlias: post: requestBody: - $ref: '#/components/requestBodies/StreamBigNumbers' + $ref: '#/components/requestBodies/PrimitiveAlias' responses: '200': description: Successful operation content: application/json: schema: - title: StreamBigNumbersResponse - $ref: '#/components/schemas/BigNumbers' - operationId: StreamBigNumbers - /call/StreamFailingAssertion: + title: PrimitiveAliasResponse + oneOf: + - type: integer + - type: string + - type: boolean + - type: number + operationId: PrimitiveAlias + /call/PromptTestClaude: post: requestBody: - $ref: '#/components/requestBodies/StreamFailingAssertion' + $ref: '#/components/requestBodies/PromptTestClaude' responses: '200': description: Successful operation content: application/json: schema: - title: StreamFailingAssertionResponse - $ref: '#/components/schemas/TwoStoriesOneTitle' - operationId: StreamFailingAssertion - /call/StreamOneBigNumber: + title: PromptTestClaudeResponse + type: string + operationId: PromptTestClaude + /call/PromptTestClaudeChat: post: requestBody: - $ref: '#/components/requestBodies/StreamOneBigNumber' + $ref: '#/components/requestBodies/PromptTestClaudeChat' responses: '200': description: Successful operation content: application/json: schema: - title: StreamOneBigNumberResponse - type: integer - operationId: StreamOneBigNumber - /call/StreamUnionIntegers: + title: PromptTestClaudeChatResponse + type: string + operationId: PromptTestClaudeChat + /call/PromptTestClaudeChatNoSystem: post: requestBody: - $ref: '#/components/requestBodies/StreamUnionIntegers' + $ref: '#/components/requestBodies/PromptTestClaudeChatNoSystem' responses: '200': description: Successful operation content: application/json: schema: - title: StreamUnionIntegersResponse - type: array - items: - oneOf: - - type: integer - - type: string - operationId: StreamUnionIntegers - /call/StreamingCompoundNumbers: + title: PromptTestClaudeChatNoSystemResponse + type: string + operationId: PromptTestClaudeChatNoSystem + /call/PromptTestOpenAI: post: requestBody: - $ref: '#/components/requestBodies/StreamingCompoundNumbers' + $ref: '#/components/requestBodies/PromptTestOpenAI' responses: '200': description: Successful operation content: application/json: schema: - title: StreamingCompoundNumbersResponse - $ref: '#/components/schemas/CompoundBigNumbers' - operationId: StreamingCompoundNumbers - /call/TestAnthropic: + title: PromptTestOpenAIResponse + type: string + operationId: PromptTestOpenAI + /call/PromptTestOpenAIChat: post: requestBody: - $ref: '#/components/requestBodies/TestAnthropic' + $ref: '#/components/requestBodies/PromptTestOpenAIChat' responses: '200': description: Successful operation content: application/json: schema: - title: TestAnthropicResponse + title: PromptTestOpenAIChatResponse type: string - operationId: TestAnthropic - /call/TestAnthropicShorthand: + operationId: PromptTestOpenAIChat + /call/PromptTestOpenAIChatNoSystem: post: requestBody: - $ref: '#/components/requestBodies/TestAnthropicShorthand' + $ref: '#/components/requestBodies/PromptTestOpenAIChatNoSystem' responses: '200': description: Successful operation content: application/json: schema: - title: TestAnthropicShorthandResponse + title: PromptTestOpenAIChatNoSystemResponse type: string - operationId: TestAnthropicShorthand - /call/TestAws: + operationId: PromptTestOpenAIChatNoSystem + /call/PromptTestStreaming: post: requestBody: - $ref: '#/components/requestBodies/TestAws' + $ref: '#/components/requestBodies/PromptTestStreaming' responses: '200': description: Successful operation content: application/json: schema: - title: TestAwsResponse + title: PromptTestStreamingResponse type: string - operationId: TestAws - /call/TestAzure: + operationId: PromptTestStreaming + /call/RecursiveAliasCycle: post: requestBody: - $ref: '#/components/requestBodies/TestAzure' + $ref: '#/components/requestBodies/RecursiveAliasCycle' responses: '200': description: Successful operation content: application/json: schema: - title: TestAzureResponse - type: string - operationId: TestAzure - /call/TestCaching: + title: RecursiveAliasCycleResponse + anyOf: [] + operationId: RecursiveAliasCycle + /call/RecursiveClassWithAliasIndirection: post: requestBody: - $ref: '#/components/requestBodies/TestCaching' + $ref: '#/components/requestBodies/RecursiveClassWithAliasIndirection' responses: '200': description: Successful operation content: application/json: schema: - title: TestCachingResponse - type: string - operationId: TestCaching - /call/TestFallbackClient: + title: RecursiveClassWithAliasIndirectionResponse + $ref: '#/components/schemas/NodeWithAliasIndirection' + operationId: RecursiveClassWithAliasIndirection + /call/ReturnAliasWithMergedAttributes: post: requestBody: - $ref: '#/components/requestBodies/TestFallbackClient' + $ref: '#/components/requestBodies/ReturnAliasWithMergedAttributes' responses: '200': description: Successful operation content: application/json: schema: - title: TestFallbackClientResponse - type: string - operationId: TestFallbackClient - /call/TestFallbackToShorthand: + title: ReturnAliasWithMergedAttributesResponse + type: object + properties: + value: + type: integer + checks: + type: object + properties: + gt_ten: + $ref: '#components/schemas/Check' + required: + - gt_ten + additionalProperties: false + required: + - value + - checks + additionalProperties: false + operationId: ReturnAliasWithMergedAttributes + /call/ReturnFailingAssert: post: requestBody: - $ref: '#/components/requestBodies/TestFallbackToShorthand' + $ref: '#/components/requestBodies/ReturnFailingAssert' responses: '200': description: Successful operation content: application/json: schema: - title: TestFallbackToShorthandResponse - type: string - operationId: TestFallbackToShorthand - /call/TestFnNamedArgsSingleBool: + title: ReturnFailingAssertResponse + type: integer + operationId: ReturnFailingAssert + /call/ReturnJsonEntry: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleBool' + $ref: '#/components/requestBodies/ReturnJsonEntry' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleBoolResponse - type: string - operationId: TestFnNamedArgsSingleBool - /call/TestFnNamedArgsSingleClass: + title: ReturnJsonEntryResponse + anyOf: [] + operationId: ReturnJsonEntry + /call/ReturnMalformedConstraints: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleClass' + $ref: '#/components/requestBodies/ReturnMalformedConstraints' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleClassResponse - type: string - operationId: TestFnNamedArgsSingleClass - /call/TestFnNamedArgsSingleEnumList: + title: ReturnMalformedConstraintsResponse + $ref: '#/components/schemas/MalformedConstraints' + operationId: ReturnMalformedConstraints + /call/SchemaDescriptions: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleEnumList' + $ref: '#/components/requestBodies/SchemaDescriptions' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleEnumListResponse - type: string - operationId: TestFnNamedArgsSingleEnumList - /call/TestFnNamedArgsSingleFloat: + title: SchemaDescriptionsResponse + $ref: '#/components/schemas/Schema' + operationId: SchemaDescriptions + /call/SimpleRecursiveListAlias: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleFloat' + $ref: '#/components/requestBodies/SimpleRecursiveListAlias' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleFloatResponse - type: string - operationId: TestFnNamedArgsSingleFloat - /call/TestFnNamedArgsSingleInt: + title: SimpleRecursiveListAliasResponse + anyOf: [] + operationId: SimpleRecursiveListAlias + /call/SimpleRecursiveMapAlias: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleInt' + $ref: '#/components/requestBodies/SimpleRecursiveMapAlias' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleIntResponse - type: string - operationId: TestFnNamedArgsSingleInt - /call/TestFnNamedArgsSingleMapStringToClass: + title: SimpleRecursiveMapAliasResponse + anyOf: [] + operationId: SimpleRecursiveMapAlias + /call/StreamBigNumbers: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToClass' + $ref: '#/components/requestBodies/StreamBigNumbers' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleMapStringToClassResponse - type: object - additionalProperties: - $ref: '#/components/schemas/StringToClassEntry' - operationId: TestFnNamedArgsSingleMapStringToClass - /call/TestFnNamedArgsSingleMapStringToMap: + title: StreamBigNumbersResponse + $ref: '#/components/schemas/BigNumbers' + operationId: StreamBigNumbers + /call/StreamFailingAssertion: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToMap' + $ref: '#/components/requestBodies/StreamFailingAssertion' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleMapStringToMapResponse - type: object - additionalProperties: - type: object - additionalProperties: - type: string - operationId: TestFnNamedArgsSingleMapStringToMap - /call/TestFnNamedArgsSingleMapStringToString: + title: StreamFailingAssertionResponse + $ref: '#/components/schemas/TwoStoriesOneTitle' + operationId: StreamFailingAssertion + /call/StreamOneBigNumber: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToString' + $ref: '#/components/requestBodies/StreamOneBigNumber' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleMapStringToStringResponse - type: object - additionalProperties: - type: string - operationId: TestFnNamedArgsSingleMapStringToString - /call/TestFnNamedArgsSingleString: + title: StreamOneBigNumberResponse + type: integer + operationId: StreamOneBigNumber + /call/StreamUnionIntegers: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleString' + $ref: '#/components/requestBodies/StreamUnionIntegers' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleStringResponse - type: string - operationId: TestFnNamedArgsSingleString - /call/TestFnNamedArgsSingleStringArray: + title: StreamUnionIntegersResponse + type: array + items: + oneOf: + - type: integer + - type: string + operationId: StreamUnionIntegers + /call/StreamingCompoundNumbers: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleStringArray' + $ref: '#/components/requestBodies/StreamingCompoundNumbers' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleStringArrayResponse - type: string - operationId: TestFnNamedArgsSingleStringArray - /call/TestFnNamedArgsSingleStringList: + title: StreamingCompoundNumbersResponse + $ref: '#/components/schemas/CompoundBigNumbers' + operationId: StreamingCompoundNumbers + /call/TakeRecAliasDep: post: requestBody: - $ref: '#/components/requestBodies/TestFnNamedArgsSingleStringList' + $ref: '#/components/requestBodies/TakeRecAliasDep' responses: '200': description: Successful operation content: application/json: schema: - title: TestFnNamedArgsSingleStringListResponse + title: TakeRecAliasDepResponse + $ref: '#/components/schemas/RecursiveAliasDependency' + operationId: TakeRecAliasDep + /call/TestAnthropic: + post: + requestBody: + $ref: '#/components/requestBodies/TestAnthropic' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestAnthropicResponse type: string - operationId: TestFnNamedArgsSingleStringList - /call/TestGemini: + operationId: TestAnthropic + /call/TestAnthropicShorthand: post: requestBody: - $ref: '#/components/requestBodies/TestGemini' + $ref: '#/components/requestBodies/TestAnthropicShorthand' responses: '200': description: Successful operation content: application/json: schema: - title: TestGeminiResponse + title: TestAnthropicShorthandResponse type: string - operationId: TestGemini - /call/TestImageInput: + operationId: TestAnthropicShorthand + /call/TestAws: post: requestBody: - $ref: '#/components/requestBodies/TestImageInput' + $ref: '#/components/requestBodies/TestAws' responses: '200': description: Successful operation content: application/json: schema: - title: TestImageInputResponse + title: TestAwsResponse type: string - operationId: TestImageInput - /call/TestImageInputAnthropic: + operationId: TestAws + /call/TestAwsInvalidAccessKey: post: requestBody: - $ref: '#/components/requestBodies/TestImageInputAnthropic' + $ref: '#/components/requestBodies/TestAwsInvalidAccessKey' responses: '200': description: Successful operation content: application/json: schema: - title: TestImageInputAnthropicResponse + title: TestAwsInvalidAccessKeyResponse type: string - operationId: TestImageInputAnthropic - /call/TestImageListInput: + operationId: TestAwsInvalidAccessKey + /call/TestAwsInvalidProfile: post: requestBody: - $ref: '#/components/requestBodies/TestImageListInput' + $ref: '#/components/requestBodies/TestAwsInvalidProfile' responses: '200': description: Successful operation content: application/json: schema: - title: TestImageListInputResponse + title: TestAwsInvalidProfileResponse type: string - operationId: TestImageListInput - /call/TestMulticlassNamedArgs: + operationId: TestAwsInvalidProfile + /call/TestAwsInvalidRegion: post: requestBody: - $ref: '#/components/requestBodies/TestMulticlassNamedArgs' + $ref: '#/components/requestBodies/TestAwsInvalidRegion' responses: '200': description: Successful operation content: application/json: schema: - title: TestMulticlassNamedArgsResponse + title: TestAwsInvalidRegionResponse type: string - operationId: TestMulticlassNamedArgs - /call/TestOllama: + operationId: TestAwsInvalidRegion + /call/TestAwsInvalidSessionToken: post: requestBody: - $ref: '#/components/requestBodies/TestOllama' + $ref: '#/components/requestBodies/TestAwsInvalidSessionToken' responses: '200': description: Successful operation content: application/json: schema: - title: TestOllamaResponse + title: TestAwsInvalidSessionTokenResponse type: string - operationId: TestOllama - /call/TestOpenAILegacyProvider: + operationId: TestAwsInvalidSessionToken + /call/TestAzure: post: requestBody: - $ref: '#/components/requestBodies/TestOpenAILegacyProvider' + $ref: '#/components/requestBodies/TestAzure' responses: '200': description: Successful operation content: application/json: schema: - title: TestOpenAILegacyProviderResponse + title: TestAzureResponse type: string - operationId: TestOpenAILegacyProvider - /call/TestOpenAIShorthand: + operationId: TestAzure + /call/TestAzureFailure: post: requestBody: - $ref: '#/components/requestBodies/TestOpenAIShorthand' + $ref: '#/components/requestBodies/TestAzureFailure' responses: '200': description: Successful operation content: application/json: schema: - title: TestOpenAIShorthandResponse + title: TestAzureFailureResponse type: string - operationId: TestOpenAIShorthand - /call/TestRetryConstant: + operationId: TestAzureFailure + /call/TestAzureO1NoMaxTokens: post: requestBody: - $ref: '#/components/requestBodies/TestRetryConstant' + $ref: '#/components/requestBodies/TestAzureO1NoMaxTokens' responses: '200': description: Successful operation content: application/json: schema: - title: TestRetryConstantResponse + title: TestAzureO1NoMaxTokensResponse type: string - operationId: TestRetryConstant - /call/TestRetryExponential: + operationId: TestAzureO1NoMaxTokens + /call/TestAzureO1WithMaxCompletionTokens: post: requestBody: - $ref: '#/components/requestBodies/TestRetryExponential' + $ref: '#/components/requestBodies/TestAzureO1WithMaxCompletionTokens' responses: '200': description: Successful operation content: application/json: schema: - title: TestRetryExponentialResponse + title: TestAzureO1WithMaxCompletionTokensResponse type: string - operationId: TestRetryExponential - /call/TestSingleFallbackClient: + operationId: TestAzureO1WithMaxCompletionTokens + /call/TestAzureO1WithMaxTokens: post: requestBody: - $ref: '#/components/requestBodies/TestSingleFallbackClient' + $ref: '#/components/requestBodies/TestAzureO1WithMaxTokens' responses: '200': description: Successful operation content: application/json: schema: - title: TestSingleFallbackClientResponse + title: TestAzureO1WithMaxTokensResponse type: string - operationId: TestSingleFallbackClient - /call/TestVertex: + operationId: TestAzureO1WithMaxTokens + /call/TestAzureO3NoMaxTokens: post: requestBody: - $ref: '#/components/requestBodies/TestVertex' + $ref: '#/components/requestBodies/TestAzureO3NoMaxTokens' responses: '200': description: Successful operation content: application/json: schema: - title: TestVertexResponse + title: TestAzureO3NoMaxTokensResponse type: string - operationId: TestVertex - /call/UnionTest_Function: + operationId: TestAzureO3NoMaxTokens + /call/TestAzureO3WithMaxCompletionTokens: post: requestBody: - $ref: '#/components/requestBodies/UnionTest_Function' + $ref: '#/components/requestBodies/TestAzureO3WithMaxCompletionTokens' responses: '200': description: Successful operation content: application/json: schema: - title: UnionTest_FunctionResponse - $ref: '#/components/schemas/UnionTest_ReturnType' - operationId: UnionTest_Function - /call/UseMalformedConstraints: + title: TestAzureO3WithMaxCompletionTokensResponse + type: string + operationId: TestAzureO3WithMaxCompletionTokens + /call/TestAzureWithMaxTokens: post: requestBody: - $ref: '#/components/requestBodies/UseMalformedConstraints' + $ref: '#/components/requestBodies/TestAzureWithMaxTokens' responses: '200': description: Successful operation content: application/json: schema: - title: UseMalformedConstraintsResponse - type: integer - operationId: UseMalformedConstraints -components: - requestBodies: - AaaSamOutputFormat: + title: TestAzureWithMaxTokensResponse + type: string + operationId: TestAzureWithMaxTokens + /call/TestCaching: + post: + requestBody: + $ref: '#/components/requestBodies/TestCaching' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestCachingResponse + type: string + operationId: TestCaching + /call/TestFallbackClient: + post: + requestBody: + $ref: '#/components/requestBodies/TestFallbackClient' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFallbackClientResponse + type: string + operationId: TestFallbackClient + /call/TestFallbackToShorthand: + post: + requestBody: + $ref: '#/components/requestBodies/TestFallbackToShorthand' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFallbackToShorthandResponse + type: string + operationId: TestFallbackToShorthand + /call/TestFnNamedArgsSingleBool: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleBool' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleBoolResponse + type: string + operationId: TestFnNamedArgsSingleBool + /call/TestFnNamedArgsSingleClass: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleClass' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleClassResponse + type: string + operationId: TestFnNamedArgsSingleClass + /call/TestFnNamedArgsSingleEnumList: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleEnumList' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleEnumListResponse + type: string + operationId: TestFnNamedArgsSingleEnumList + /call/TestFnNamedArgsSingleFloat: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleFloat' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleFloatResponse + type: string + operationId: TestFnNamedArgsSingleFloat + /call/TestFnNamedArgsSingleInt: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleInt' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleIntResponse + type: string + operationId: TestFnNamedArgsSingleInt + /call/TestFnNamedArgsSingleMapStringToClass: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToClass' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleMapStringToClassResponse + type: object + additionalProperties: + $ref: '#/components/schemas/StringToClassEntry' + operationId: TestFnNamedArgsSingleMapStringToClass + /call/TestFnNamedArgsSingleMapStringToMap: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToMap' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleMapStringToMapResponse + type: object + additionalProperties: + type: object + additionalProperties: + type: string + operationId: TestFnNamedArgsSingleMapStringToMap + /call/TestFnNamedArgsSingleMapStringToString: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleMapStringToString' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleMapStringToStringResponse + type: object + additionalProperties: + type: string + operationId: TestFnNamedArgsSingleMapStringToString + /call/TestFnNamedArgsSingleString: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleString' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleStringResponse + type: string + operationId: TestFnNamedArgsSingleString + /call/TestFnNamedArgsSingleStringArray: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleStringArray' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleStringArrayResponse + type: string + operationId: TestFnNamedArgsSingleStringArray + /call/TestFnNamedArgsSingleStringList: + post: + requestBody: + $ref: '#/components/requestBodies/TestFnNamedArgsSingleStringList' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestFnNamedArgsSingleStringListResponse + type: string + operationId: TestFnNamedArgsSingleStringList + /call/TestGemini: + post: + requestBody: + $ref: '#/components/requestBodies/TestGemini' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestGeminiResponse + type: string + operationId: TestGemini + /call/TestGeminiOpenAiGeneric: + post: + requestBody: + $ref: '#/components/requestBodies/TestGeminiOpenAiGeneric' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestGeminiOpenAiGenericResponse + type: string + operationId: TestGeminiOpenAiGeneric + /call/TestGeminiSystem: + post: + requestBody: + $ref: '#/components/requestBodies/TestGeminiSystem' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestGeminiSystemResponse + type: string + operationId: TestGeminiSystem + /call/TestGeminiSystemAsChat: + post: + requestBody: + $ref: '#/components/requestBodies/TestGeminiSystemAsChat' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestGeminiSystemAsChatResponse + type: string + operationId: TestGeminiSystemAsChat + /call/TestImageInput: + post: + requestBody: + $ref: '#/components/requestBodies/TestImageInput' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestImageInputResponse + type: string + operationId: TestImageInput + /call/TestImageInputAnthropic: + post: + requestBody: + $ref: '#/components/requestBodies/TestImageInputAnthropic' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestImageInputAnthropicResponse + type: string + operationId: TestImageInputAnthropic + /call/TestImageListInput: + post: + requestBody: + $ref: '#/components/requestBodies/TestImageListInput' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestImageListInputResponse + type: string + operationId: TestImageListInput + /call/TestMemory: + post: + requestBody: + $ref: '#/components/requestBodies/TestMemory' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestMemoryResponse + $ref: '#/components/schemas/TestMemoryOutput' + operationId: TestMemory + /call/TestMulticlassNamedArgs: + post: + requestBody: + $ref: '#/components/requestBodies/TestMulticlassNamedArgs' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestMulticlassNamedArgsResponse + type: string + operationId: TestMulticlassNamedArgs + /call/TestNamedArgsLiteralBool: + post: + requestBody: + $ref: '#/components/requestBodies/TestNamedArgsLiteralBool' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestNamedArgsLiteralBoolResponse + type: string + operationId: TestNamedArgsLiteralBool + /call/TestNamedArgsLiteralInt: + post: + requestBody: + $ref: '#/components/requestBodies/TestNamedArgsLiteralInt' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestNamedArgsLiteralIntResponse + type: string + operationId: TestNamedArgsLiteralInt + /call/TestNamedArgsLiteralString: + post: + requestBody: + $ref: '#/components/requestBodies/TestNamedArgsLiteralString' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestNamedArgsLiteralStringResponse + type: string + operationId: TestNamedArgsLiteralString + /call/TestOllama: + post: + requestBody: + $ref: '#/components/requestBodies/TestOllama' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOllamaResponse + type: string + operationId: TestOllama + /call/TestOpenAI: + post: + requestBody: + $ref: '#/components/requestBodies/TestOpenAI' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOpenAIResponse + type: string + operationId: TestOpenAI + /call/TestOpenAILegacyProvider: + post: + requestBody: + $ref: '#/components/requestBodies/TestOpenAILegacyProvider' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOpenAILegacyProviderResponse + type: string + operationId: TestOpenAILegacyProvider + /call/TestOpenAIO1NoMaxTokens: + post: + requestBody: + $ref: '#/components/requestBodies/TestOpenAIO1NoMaxTokens' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOpenAIO1NoMaxTokensResponse + type: string + operationId: TestOpenAIO1NoMaxTokens + /call/TestOpenAIO1WithMaxCompletionTokens: + post: + requestBody: + $ref: '#/components/requestBodies/TestOpenAIO1WithMaxCompletionTokens' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOpenAIO1WithMaxCompletionTokensResponse + type: string + operationId: TestOpenAIO1WithMaxCompletionTokens + /call/TestOpenAIO1WithMaxTokens: + post: + requestBody: + $ref: '#/components/requestBodies/TestOpenAIO1WithMaxTokens' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOpenAIO1WithMaxTokensResponse + type: string + operationId: TestOpenAIO1WithMaxTokens + /call/TestOpenAIShorthand: + post: + requestBody: + $ref: '#/components/requestBodies/TestOpenAIShorthand' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOpenAIShorthandResponse + type: string + operationId: TestOpenAIShorthand + /call/TestOpenAIWithMaxTokens: + post: + requestBody: + $ref: '#/components/requestBodies/TestOpenAIWithMaxTokens' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOpenAIWithMaxTokensResponse + type: string + operationId: TestOpenAIWithMaxTokens + /call/TestOpenAIWithNullMaxTokens: + post: + requestBody: + $ref: '#/components/requestBodies/TestOpenAIWithNullMaxTokens' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestOpenAIWithNullMaxTokensResponse + type: string + operationId: TestOpenAIWithNullMaxTokens + /call/TestRetryConstant: + post: + requestBody: + $ref: '#/components/requestBodies/TestRetryConstant' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestRetryConstantResponse + type: string + operationId: TestRetryConstant + /call/TestRetryExponential: + post: + requestBody: + $ref: '#/components/requestBodies/TestRetryExponential' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestRetryExponentialResponse + type: string + operationId: TestRetryExponential + /call/TestSingleFallbackClient: + post: + requestBody: + $ref: '#/components/requestBodies/TestSingleFallbackClient' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestSingleFallbackClientResponse + type: string + operationId: TestSingleFallbackClient + /call/TestUniverseQuestion: + post: + requestBody: + $ref: '#/components/requestBodies/TestUniverseQuestion' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestUniverseQuestionResponse + $ref: '#/components/schemas/UniverseQuestion' + operationId: TestUniverseQuestion + /call/TestVertex: + post: + requestBody: + $ref: '#/components/requestBodies/TestVertex' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestVertexResponse + type: string + operationId: TestVertex + /call/TestVertexWithSystemInstructions: + post: + requestBody: + $ref: '#/components/requestBodies/TestVertexWithSystemInstructions' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: TestVertexWithSystemInstructionsResponse + type: string + operationId: TestVertexWithSystemInstructions + /call/UnionTest_Function: + post: + requestBody: + $ref: '#/components/requestBodies/UnionTest_Function' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: UnionTest_FunctionResponse + $ref: '#/components/schemas/UnionTest_ReturnType' + operationId: UnionTest_Function + /call/UseBlockConstraint: + post: + requestBody: + $ref: '#/components/requestBodies/UseBlockConstraint' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: UseBlockConstraintResponse + type: integer + operationId: UseBlockConstraint + /call/UseMalformedConstraints: + post: + requestBody: + $ref: '#/components/requestBodies/UseMalformedConstraints' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: UseMalformedConstraintsResponse + type: integer + operationId: UseMalformedConstraints + /call/UseNestedBlockConstraint: + post: + requestBody: + $ref: '#/components/requestBodies/UseNestedBlockConstraint' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + title: UseNestedBlockConstraintResponse + type: integer + operationId: UseNestedBlockConstraint +components: + requestBodies: + AaaSamOutputFormat: + required: true + content: + application/json: + schema: + title: AaaSamOutputFormatRequest + type: object + properties: + recipe: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - recipe + additionalProperties: false + AliasThatPointsToRecursiveType: + required: true + content: + application/json: + schema: + title: AliasThatPointsToRecursiveTypeRequest + type: object + properties: + list: + $ref: '#/components/schemas/LinkedListAliasNode' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - list + additionalProperties: false + AliasWithMultipleAttrs: + required: true + content: + application/json: + schema: + title: AliasWithMultipleAttrsRequest + type: object + properties: + money: + type: object + properties: + value: + type: integer + checks: + type: object + properties: + gt_ten: + $ref: '#components/schemas/Check' + required: + - gt_ten + additionalProperties: false + required: + - value + - checks + additionalProperties: false + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - money + additionalProperties: false + AliasedInputClass: + required: true + content: + application/json: + schema: + title: AliasedInputClassRequest + type: object + properties: + input: + $ref: '#/components/schemas/InputClass' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + AliasedInputClass2: + required: true + content: + application/json: + schema: + title: AliasedInputClass2Request + type: object + properties: + input: + $ref: '#/components/schemas/InputClass' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + AliasedInputClassNested: + required: true + content: + application/json: + schema: + title: AliasedInputClassNestedRequest + type: object + properties: + input: + $ref: '#/components/schemas/InputClassNested' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + AliasedInputEnum: + required: true + content: + application/json: + schema: + title: AliasedInputEnumRequest + type: object + properties: + input: + $ref: '#/components/schemas/AliasedEnum' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + AliasedInputList: + required: true + content: + application/json: + schema: + title: AliasedInputListRequest + type: object + properties: + input: + type: array + items: + $ref: '#/components/schemas/AliasedEnum' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + AllowedOptionals: + required: true + content: + application/json: + schema: + title: AllowedOptionalsRequest + type: object + properties: + optionals: + $ref: '#/components/schemas/OptionalListAndMap' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - optionals + additionalProperties: false + AssertFn: + required: true + content: + application/json: + schema: + title: AssertFnRequest + type: object + properties: + a: + type: integer + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - a + additionalProperties: false + AudioInput: + required: true + content: + application/json: + schema: + title: AudioInputRequest + type: object + properties: + aud: + $ref: '#/components/schemas/BamlAudio' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - aud + additionalProperties: false + BuildLinkedList: + required: true + content: + application/json: + schema: + title: BuildLinkedListRequest + type: object + properties: + input: + type: array + items: + type: integer + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + BuildTree: + required: true + content: + application/json: + schema: + title: BuildTreeRequest + type: object + properties: + input: + $ref: '#/components/schemas/BinaryNode' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + ClassThatPointsToRecursiveClassThroughAlias: + required: true + content: + application/json: + schema: + title: ClassThatPointsToRecursiveClassThroughAliasRequest + type: object + properties: + cls: + $ref: '#/components/schemas/ClassToRecAlias' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - cls + additionalProperties: false + ClassifyDynEnumTwo: + required: true + content: + application/json: + schema: + title: ClassifyDynEnumTwoRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + ClassifyMessage: + required: true + content: + application/json: + schema: + title: ClassifyMessageRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + ClassifyMessage2: + required: true + content: + application/json: + schema: + title: ClassifyMessage2Request + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + ClassifyMessage3: + required: true + content: + application/json: + schema: + title: ClassifyMessage3Request + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + Completion: + required: true + content: + application/json: + schema: + title: CompletionRequest + type: object + properties: + language: + type: string + prefix: + type: string + suffix: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - language + - prefix + - suffix + additionalProperties: false + CustomTask: + required: true + content: + application/json: + schema: + title: CustomTaskRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + DescribeImage: + required: true + content: + application/json: + schema: + title: DescribeImageRequest + type: object + properties: + img: + $ref: '#/components/schemas/BamlImage' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - img + additionalProperties: false + DescribeImage2: + required: true + content: + application/json: + schema: + title: DescribeImage2Request + type: object + properties: + classWithImage: + $ref: '#/components/schemas/ClassWithImage' + img2: + $ref: '#/components/schemas/BamlImage' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - classWithImage + - img2 + additionalProperties: false + DescribeImage3: + required: true + content: + application/json: + schema: + title: DescribeImage3Request + type: object + properties: + classWithImage: + $ref: '#/components/schemas/ClassWithImage' + img2: + $ref: '#/components/schemas/BamlImage' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - classWithImage + - img2 + additionalProperties: false + DescribeImage4: + required: true + content: + application/json: + schema: + title: DescribeImage4Request + type: object + properties: + classWithImage: + $ref: '#/components/schemas/ClassWithImage' + img2: + $ref: '#/components/schemas/BamlImage' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - classWithImage + - img2 + additionalProperties: false + DifferentiateUnions: + required: true + content: + application/json: + schema: + title: DifferentiateUnionsRequest + type: object + properties: + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false + DummyOutputFunction: + required: true + content: + application/json: + schema: + title: DummyOutputFunctionRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + DynamicFunc: + required: true + content: + application/json: + schema: + title: DynamicFuncRequest + type: object + properties: + input: + $ref: '#/components/schemas/DynamicClassOne' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + DynamicInputOutput: + required: true + content: + application/json: + schema: + title: DynamicInputOutputRequest + type: object + properties: + input: + $ref: '#/components/schemas/DynInputOutput' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + DynamicListInputOutput: + required: true + content: + application/json: + schema: + title: DynamicListInputOutputRequest + type: object + properties: + input: + type: array + items: + $ref: '#/components/schemas/DynInputOutput' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + ExpectFailure: + required: true + content: + application/json: + schema: + title: ExpectFailureRequest + type: object + properties: + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false + ExtractContactInfo: + required: true + content: + application/json: + schema: + title: ExtractContactInfoRequest + type: object + properties: + document: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - document + additionalProperties: false + ExtractHobby: + required: true + content: + application/json: + schema: + title: ExtractHobbyRequest + type: object + properties: + text: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - text + additionalProperties: false + ExtractNames: + required: true + content: + application/json: + schema: + title: ExtractNamesRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + ExtractPeople: + required: true + content: + application/json: + schema: + title: ExtractPeopleRequest + type: object + properties: + text: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - text + additionalProperties: false + ExtractReceiptInfo: + required: true + content: + application/json: + schema: + title: ExtractReceiptInfoRequest + type: object + properties: + email: + type: string + reason: + oneOf: + - type: string + - type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - email + - reason + additionalProperties: false + ExtractResume: + required: true + content: + application/json: + schema: + title: ExtractResumeRequest + type: object + properties: + img: + $ref: '#/components/schemas/BamlImage' + resume: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - resume + additionalProperties: false + ExtractResume2: + required: true + content: + application/json: + schema: + title: ExtractResume2Request + type: object + properties: + resume: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - resume + additionalProperties: false + FnClassOptionalOutput: + required: true + content: + application/json: + schema: + title: FnClassOptionalOutputRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + FnClassOptionalOutput2: + required: true + content: + application/json: + schema: + title: FnClassOptionalOutput2Request + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + FnEnumListOutput: required: true content: application/json: schema: - title: AaaSamOutputFormatRequest + title: FnEnumListOutputRequest type: object properties: - recipe: + input: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - recipe + - input additionalProperties: false - AliasedInputClass: + FnEnumOutput: required: true content: application/json: schema: - title: AliasedInputClassRequest + title: FnEnumOutputRequest type: object properties: input: - $ref: '#/components/schemas/InputClass' + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - AliasedInputClass2: + FnLiteralClassInputOutput: required: true content: application/json: schema: - title: AliasedInputClass2Request + title: FnLiteralClassInputOutputRequest type: object properties: input: - $ref: '#/components/schemas/InputClass' + $ref: '#/components/schemas/LiteralClassHello' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - AliasedInputClassNested: + FnLiteralUnionClassInputOutput: required: true content: application/json: schema: - title: AliasedInputClassNestedRequest + title: FnLiteralUnionClassInputOutputRequest type: object properties: input: - $ref: '#/components/schemas/InputClassNested' + oneOf: + - $ref: '#/components/schemas/LiteralClassOne' + - $ref: '#/components/schemas/LiteralClassTwo' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - AliasedInputEnum: + FnNamedArgsSingleStringOptional: required: true content: application/json: schema: - title: AliasedInputEnumRequest + title: FnNamedArgsSingleStringOptionalRequest + type: object + properties: + myString: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false + FnOutputBool: + required: true + content: + application/json: + schema: + title: FnOutputBoolRequest type: object properties: input: - $ref: '#/components/schemas/AliasedEnum' + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - AliasedInputList: + FnOutputClass: required: true content: application/json: schema: - title: AliasedInputListRequest + title: FnOutputClassRequest type: object properties: input: - type: array - items: - $ref: '#/components/schemas/AliasedEnum' + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - AudioInput: + FnOutputClassList: required: true content: application/json: schema: - title: AudioInputRequest + title: FnOutputClassListRequest type: object properties: - aud: - $ref: '#/components/schemas/BamlAudio' + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - aud + - input additionalProperties: false - ClassifyDynEnumTwo: + FnOutputClassNested: required: true content: application/json: schema: - title: ClassifyDynEnumTwoRequest + title: FnOutputClassNestedRequest type: object properties: input: @@ -1445,12 +3019,12 @@ components: required: - input additionalProperties: false - ClassifyMessage: + FnOutputClassWithEnum: required: true content: application/json: schema: - title: ClassifyMessageRequest + title: FnOutputClassWithEnumRequest type: object properties: input: @@ -1461,12 +3035,12 @@ components: required: - input additionalProperties: false - ClassifyMessage2: + FnOutputInt: required: true content: application/json: schema: - title: ClassifyMessage2Request + title: FnOutputIntRequest type: object properties: input: @@ -1477,12 +3051,12 @@ components: required: - input additionalProperties: false - ClassifyMessage3: + FnOutputLiteralBool: required: true content: application/json: schema: - title: ClassifyMessage3Request + title: FnOutputLiteralBoolRequest type: object properties: input: @@ -1493,12 +3067,12 @@ components: required: - input additionalProperties: false - CustomTask: + FnOutputLiteralInt: required: true content: application/json: schema: - title: CustomTaskRequest + title: FnOutputLiteralIntRequest type: object properties: input: @@ -1509,164 +3083,236 @@ components: required: - input additionalProperties: false - DescribeImage: + FnOutputLiteralString: required: true content: application/json: schema: - title: DescribeImageRequest + title: FnOutputLiteralStringRequest type: object properties: - img: - $ref: '#/components/schemas/BamlImage' + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - img + - input additionalProperties: false - DescribeImage2: + FnOutputStringList: required: true content: application/json: schema: - title: DescribeImage2Request + title: FnOutputStringListRequest type: object properties: - classWithImage: - $ref: '#/components/schemas/ClassWithImage' - img2: - $ref: '#/components/schemas/BamlImage' + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - classWithImage - - img2 + - input additionalProperties: false - DescribeImage3: + FnTestAliasedEnumOutput: required: true content: application/json: schema: - title: DescribeImage3Request + title: FnTestAliasedEnumOutputRequest type: object properties: - classWithImage: - $ref: '#/components/schemas/ClassWithImage' - img2: - $ref: '#/components/schemas/BamlImage' + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - classWithImage - - img2 + - input additionalProperties: false - DescribeImage4: + FnTestClassAlias: required: true content: application/json: schema: - title: DescribeImage4Request + title: FnTestClassAliasRequest type: object properties: - classWithImage: - $ref: '#/components/schemas/ClassWithImage' - img2: - $ref: '#/components/schemas/BamlImage' + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - classWithImage - - img2 + - input additionalProperties: false - DifferentiateUnions: + FnTestNamedArgsSingleEnum: required: true content: application/json: schema: - title: DifferentiateUnionsRequest + title: FnTestNamedArgsSingleEnumRequest type: object properties: + myArg: + $ref: '#/components/schemas/NamedArgsSingleEnum' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' - required: [] + required: + - myArg additionalProperties: false - DummyOutputFunction: + GetDataType: required: true content: application/json: schema: - title: DummyOutputFunctionRequest + title: GetDataTypeRequest type: object properties: - input: + text: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - text additionalProperties: false - DynamicFunc: + GetOrderInfo: required: true content: application/json: schema: - title: DynamicFuncRequest + title: GetOrderInfoRequest type: object properties: - input: - $ref: '#/components/schemas/DynamicClassOne' + email: + $ref: '#/components/schemas/Email' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - email additionalProperties: false - DynamicInputOutput: + GetQuery: required: true content: application/json: schema: - title: DynamicInputOutputRequest + title: GetQueryRequest + type: object + properties: + query: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - query + additionalProperties: false + InOutEnumMapKey: + required: true + content: + application/json: + schema: + title: InOutEnumMapKeyRequest + type: object + properties: + i1: + type: object + additionalProperties: + type: string + i2: + type: object + additionalProperties: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - i1 + - i2 + additionalProperties: false + InOutLiteralStringUnionMapKey: + required: true + content: + application/json: + schema: + title: InOutLiteralStringUnionMapKeyRequest + type: object + properties: + i1: + type: object + additionalProperties: + type: string + i2: + type: object + additionalProperties: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - i1 + - i2 + additionalProperties: false + InOutSingleLiteralStringMapKey: + required: true + content: + application/json: + schema: + title: InOutSingleLiteralStringMapKeyRequest + type: object + properties: + m: + type: object + additionalProperties: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - m + additionalProperties: false + JsonTypeAliasCycle: + required: true + content: + application/json: + schema: + title: JsonTypeAliasCycleRequest type: object properties: input: - $ref: '#/components/schemas/DynInputOutput' + anyOf: [] __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - DynamicListInputOutput: + LiteralUnionsTest: required: true content: application/json: schema: - title: DynamicListInputOutputRequest + title: LiteralUnionsTestRequest type: object properties: input: - type: array - items: - $ref: '#/components/schemas/DynInputOutput' + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - ExpectFailure: + MakeBlockConstraint: required: true content: application/json: schema: - title: ExpectFailureRequest + title: MakeBlockConstraintRequest type: object properties: __baml_options__: @@ -1674,163 +3320,203 @@ components: $ref: '#/components/schemas/BamlOptions' required: [] additionalProperties: false - ExtractContactInfo: + MakeNestedBlockConstraint: required: true content: application/json: schema: - title: ExtractContactInfoRequest + title: MakeNestedBlockConstraintRequest type: object properties: - document: - type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false + MakeSemanticContainer: + required: true + content: + application/json: + schema: + title: MakeSemanticContainerRequest + type: object + properties: + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false + MapAlias: + required: true + content: + application/json: + schema: + title: MapAliasRequest + type: object + properties: + m: + type: object + additionalProperties: + type: array + items: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - document + - m additionalProperties: false - ExtractNames: + MergeAliasAttributes: required: true content: application/json: schema: - title: ExtractNamesRequest + title: MergeAliasAttributesRequest type: object properties: - input: - type: string + money: + type: integer __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - money additionalProperties: false - ExtractPeople: + MyFunc: required: true content: application/json: schema: - title: ExtractPeopleRequest + title: MyFuncRequest type: object properties: - text: + input: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - text + - input additionalProperties: false - ExtractReceiptInfo: + NestedAlias: required: true content: application/json: schema: - title: ExtractReceiptInfoRequest + title: NestedAliasRequest type: object properties: - email: - type: string - reason: + c: oneOf: - - type: string - - type: string + - oneOf: + - type: integer + - type: string + - type: boolean + - type: number + - type: array + items: + type: string + - type: object + additionalProperties: + type: array + items: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - email - - reason + - c additionalProperties: false - ExtractResume: + NullLiteralClassHello: required: true content: application/json: schema: - title: ExtractResumeRequest + title: NullLiteralClassHelloRequest type: object properties: - resume: + s: type: string - img: - $ref: '#/components/schemas/BamlImage' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - resume + - s additionalProperties: false - ExtractResume2: + OptionalTest_Function: required: true content: application/json: schema: - title: ExtractResume2Request + title: OptionalTest_FunctionRequest type: object properties: - resume: + input: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - resume + - input additionalProperties: false - FnClassOptionalOutput: + PredictAge: required: true content: application/json: schema: - title: FnClassOptionalOutputRequest + title: PredictAgeRequest type: object properties: - input: + name: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - name additionalProperties: false - FnClassOptionalOutput2: + PredictAgeBare: required: true content: application/json: schema: - title: FnClassOptionalOutput2Request + title: PredictAgeBareRequest type: object properties: - input: + inp: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - inp additionalProperties: false - FnEnumListOutput: + PrimitiveAlias: required: true content: application/json: schema: - title: FnEnumListOutputRequest + title: PrimitiveAliasRequest type: object properties: - input: - type: string + p: + oneOf: + - type: integer + - type: string + - type: boolean + - type: number __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - p additionalProperties: false - FnEnumOutput: + PromptTestClaude: required: true content: application/json: schema: - title: FnEnumOutputRequest + title: PromptTestClaudeRequest type: object properties: input: @@ -1841,27 +3527,28 @@ components: required: - input additionalProperties: false - FnNamedArgsSingleStringOptional: + PromptTestClaudeChat: required: true content: application/json: schema: - title: FnNamedArgsSingleStringOptionalRequest + title: PromptTestClaudeChatRequest type: object properties: - myString: + input: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' - required: [] + required: + - input additionalProperties: false - FnOutputBool: + PromptTestClaudeChatNoSystem: required: true content: application/json: schema: - title: FnOutputBoolRequest + title: PromptTestClaudeChatNoSystemRequest type: object properties: input: @@ -1872,12 +3559,12 @@ components: required: - input additionalProperties: false - FnOutputClass: + PromptTestOpenAI: required: true content: application/json: schema: - title: FnOutputClassRequest + title: PromptTestOpenAIRequest type: object properties: input: @@ -1888,12 +3575,12 @@ components: required: - input additionalProperties: false - FnOutputClassList: + PromptTestOpenAIChat: required: true content: application/json: schema: - title: FnOutputClassListRequest + title: PromptTestOpenAIChatRequest type: object properties: input: @@ -1904,12 +3591,12 @@ components: required: - input additionalProperties: false - FnOutputClassNested: + PromptTestOpenAIChatNoSystem: required: true content: application/json: schema: - title: FnOutputClassNestedRequest + title: PromptTestOpenAIChatNoSystemRequest type: object properties: input: @@ -1920,12 +3607,12 @@ components: required: - input additionalProperties: false - FnOutputClassWithEnum: + PromptTestStreaming: required: true content: application/json: schema: - title: FnOutputClassWithEnumRequest + title: PromptTestStreamingRequest type: object properties: input: @@ -1936,252 +3623,273 @@ components: required: - input additionalProperties: false - FnOutputStringList: + RecursiveAliasCycle: required: true content: application/json: schema: - title: FnOutputStringListRequest + title: RecursiveAliasCycleRequest type: object properties: input: - type: string + anyOf: [] __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - FnTestAliasedEnumOutput: + RecursiveClassWithAliasIndirection: required: true content: application/json: schema: - title: FnTestAliasedEnumOutputRequest + title: RecursiveClassWithAliasIndirectionRequest type: object properties: - input: - type: string + cls: + $ref: '#/components/schemas/NodeWithAliasIndirection' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - cls additionalProperties: false - FnTestClassAlias: + ReturnAliasWithMergedAttributes: required: true content: application/json: schema: - title: FnTestClassAliasRequest + title: ReturnAliasWithMergedAttributesRequest type: object properties: - input: - type: string + money: + type: object + properties: + value: + type: integer + checks: + type: object + properties: + gt_ten: + $ref: '#components/schemas/Check' + required: + - gt_ten + additionalProperties: false + required: + - value + - checks + additionalProperties: false __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - money additionalProperties: false - FnTestNamedArgsSingleEnum: + ReturnFailingAssert: required: true content: application/json: schema: - title: FnTestNamedArgsSingleEnumRequest + title: ReturnFailingAssertRequest type: object properties: - myArg: - $ref: '#/components/schemas/NamedArgsSingleEnum' + inp: + type: integer __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - myArg + - inp additionalProperties: false - GetDataType: + ReturnJsonEntry: required: true content: application/json: schema: - title: GetDataTypeRequest + title: ReturnJsonEntryRequest type: object properties: - text: + s: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - text + - s additionalProperties: false - GetOrderInfo: + ReturnMalformedConstraints: required: true content: application/json: schema: - title: GetOrderInfoRequest + title: ReturnMalformedConstraintsRequest type: object properties: - email: - $ref: '#/components/schemas/Email' + a: + type: integer __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - email + - a additionalProperties: false - GetQuery: + SchemaDescriptions: required: true content: application/json: schema: - title: GetQueryRequest + title: SchemaDescriptionsRequest type: object properties: - query: + input: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - query + - input additionalProperties: false - MyFunc: + SimpleRecursiveListAlias: required: true content: application/json: schema: - title: MyFuncRequest + title: SimpleRecursiveListAliasRequest type: object properties: input: - type: string + anyOf: [] __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - OptionalTest_Function: + SimpleRecursiveMapAlias: required: true content: application/json: schema: - title: OptionalTest_FunctionRequest + title: SimpleRecursiveMapAliasRequest type: object properties: input: - type: string + anyOf: [] __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - PredictAge: + StreamBigNumbers: required: true content: application/json: schema: - title: PredictAgeRequest + title: StreamBigNumbersRequest type: object properties: - name: - type: string + digits: + type: integer __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - name + - digits additionalProperties: false - PredictAgeBare: + StreamFailingAssertion: required: true content: application/json: schema: - title: PredictAgeBareRequest + title: StreamFailingAssertionRequest type: object properties: - inp: + length: + type: integer + theme: type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - inp + - length + - theme additionalProperties: false - PromptTestClaude: + StreamOneBigNumber: required: true content: application/json: schema: - title: PromptTestClaudeRequest + title: StreamOneBigNumberRequest type: object properties: - input: - type: string + digits: + type: integer __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - digits additionalProperties: false - PromptTestClaudeChat: + StreamUnionIntegers: required: true content: application/json: schema: - title: PromptTestClaudeChatRequest + title: StreamUnionIntegersRequest type: object properties: - input: - type: string + digits: + type: integer __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - digits additionalProperties: false - PromptTestClaudeChatNoSystem: + StreamingCompoundNumbers: required: true content: application/json: schema: - title: PromptTestClaudeChatNoSystemRequest + title: StreamingCompoundNumbersRequest type: object properties: - input: - type: string + digits: + type: integer + yapping: + type: boolean __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - input + - digits + - yapping additionalProperties: false - PromptTestOpenAI: + TakeRecAliasDep: required: true content: application/json: schema: - title: PromptTestOpenAIRequest + title: TakeRecAliasDepRequest type: object properties: input: - type: string + $ref: '#/components/schemas/RecursiveAliasDependency' __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - input additionalProperties: false - PromptTestOpenAIChat: + TestAnthropic: required: true content: application/json: schema: - title: PromptTestOpenAIChatRequest + title: TestAnthropicRequest type: object properties: input: @@ -2192,12 +3900,12 @@ components: required: - input additionalProperties: false - PromptTestOpenAIChatNoSystem: + TestAnthropicShorthand: required: true content: application/json: schema: - title: PromptTestOpenAIChatNoSystemRequest + title: TestAnthropicShorthandRequest type: object properties: input: @@ -2208,12 +3916,12 @@ components: required: - input additionalProperties: false - PromptTestStreaming: + TestAws: required: true content: application/json: schema: - title: PromptTestStreamingRequest + title: TestAwsRequest type: object properties: input: @@ -2224,44 +3932,44 @@ components: required: - input additionalProperties: false - ReturnFailingAssert: + TestAwsInvalidAccessKey: required: true content: application/json: schema: - title: ReturnFailingAssertRequest + title: TestAwsInvalidAccessKeyRequest type: object properties: - inp: - type: integer + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - inp + - input additionalProperties: false - ReturnMalformedConstraints: + TestAwsInvalidProfile: required: true content: application/json: schema: - title: ReturnMalformedConstraintsRequest + title: TestAwsInvalidProfileRequest type: object properties: - a: - type: integer + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - a + - input additionalProperties: false - SchemaDescriptions: + TestAwsInvalidRegion: required: true content: application/json: schema: - title: SchemaDescriptionsRequest + title: TestAwsInvalidRegionRequest type: object properties: input: @@ -2272,98 +3980,92 @@ components: required: - input additionalProperties: false - StreamBigNumbers: + TestAwsInvalidSessionToken: required: true content: application/json: schema: - title: StreamBigNumbersRequest + title: TestAwsInvalidSessionTokenRequest type: object properties: - digits: - type: integer + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - digits + - input additionalProperties: false - StreamFailingAssertion: + TestAzure: required: true content: application/json: schema: - title: StreamFailingAssertionRequest + title: TestAzureRequest type: object properties: - theme: + input: type: string - length: - type: integer __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - theme - - length + - input additionalProperties: false - StreamOneBigNumber: + TestAzureFailure: required: true content: application/json: schema: - title: StreamOneBigNumberRequest + title: TestAzureFailureRequest type: object properties: - digits: - type: integer + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - digits + - input additionalProperties: false - StreamUnionIntegers: + TestAzureO1NoMaxTokens: required: true content: application/json: schema: - title: StreamUnionIntegersRequest + title: TestAzureO1NoMaxTokensRequest type: object properties: - digits: - type: integer + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - digits + - input additionalProperties: false - StreamingCompoundNumbers: + TestAzureO1WithMaxCompletionTokens: required: true content: application/json: schema: - title: StreamingCompoundNumbersRequest + title: TestAzureO1WithMaxCompletionTokensRequest type: object properties: - digits: - type: integer - yapping: - type: boolean + input: + type: string __baml_options__: nullable: true $ref: '#/components/schemas/BamlOptions' required: - - digits - - yapping + - input additionalProperties: false - TestAnthropic: + TestAzureO1WithMaxTokens: required: true content: application/json: schema: - title: TestAnthropicRequest + title: TestAzureO1WithMaxTokensRequest type: object properties: input: @@ -2374,12 +4076,12 @@ components: required: - input additionalProperties: false - TestAnthropicShorthand: + TestAzureO3NoMaxTokens: required: true content: application/json: schema: - title: TestAnthropicShorthandRequest + title: TestAzureO3NoMaxTokensRequest type: object properties: input: @@ -2390,12 +4092,12 @@ components: required: - input additionalProperties: false - TestAws: + TestAzureO3WithMaxCompletionTokens: required: true content: application/json: schema: - title: TestAwsRequest + title: TestAzureO3WithMaxCompletionTokensRequest type: object properties: input: @@ -2406,12 +4108,12 @@ components: required: - input additionalProperties: false - TestAzure: + TestAzureWithMaxTokens: required: true content: application/json: schema: - title: TestAzureRequest + title: TestAzureWithMaxTokensRequest type: object properties: input: @@ -2676,6 +4378,51 @@ components: required: - input additionalProperties: false + TestGeminiOpenAiGeneric: + required: true + content: + application/json: + schema: + title: TestGeminiOpenAiGenericRequest + type: object + properties: + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false + TestGeminiSystem: + required: true + content: + application/json: + schema: + title: TestGeminiSystemRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + TestGeminiSystemAsChat: + required: true + content: + application/json: + schema: + title: TestGeminiSystemAsChatRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false TestImageInput: required: true content: @@ -2726,6 +4473,22 @@ components: required: - imgs additionalProperties: false + TestMemory: + required: true + content: + application/json: + schema: + title: TestMemoryRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false TestMulticlassNamedArgs: required: true content: @@ -2745,6 +4508,54 @@ components: - myArg - myArg2 additionalProperties: false + TestNamedArgsLiteralBool: + required: true + content: + application/json: + schema: + title: TestNamedArgsLiteralBoolRequest + type: object + properties: + myBool: + type: boolean + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - myBool + additionalProperties: false + TestNamedArgsLiteralInt: + required: true + content: + application/json: + schema: + title: TestNamedArgsLiteralIntRequest + type: object + properties: + myInt: + type: integer + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - myInt + additionalProperties: false + TestNamedArgsLiteralString: + required: true + content: + application/json: + schema: + title: TestNamedArgsLiteralStringRequest + type: object + properties: + myString: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - myString + additionalProperties: false TestOllama: required: true content: @@ -2761,6 +4572,22 @@ components: required: - input additionalProperties: false + TestOpenAI: + required: true + content: + application/json: + schema: + title: TestOpenAIRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false TestOpenAILegacyProvider: required: true content: @@ -2777,6 +4604,54 @@ components: required: - input additionalProperties: false + TestOpenAIO1NoMaxTokens: + required: true + content: + application/json: + schema: + title: TestOpenAIO1NoMaxTokensRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + TestOpenAIO1WithMaxCompletionTokens: + required: true + content: + application/json: + schema: + title: TestOpenAIO1WithMaxCompletionTokensRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + TestOpenAIO1WithMaxTokens: + required: true + content: + application/json: + schema: + title: TestOpenAIO1WithMaxTokensRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false TestOpenAIShorthand: required: true content: @@ -2793,6 +4668,38 @@ components: required: - input additionalProperties: false + TestOpenAIWithMaxTokens: + required: true + content: + application/json: + schema: + title: TestOpenAIWithMaxTokensRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false + TestOpenAIWithNullMaxTokens: + required: true + content: + application/json: + schema: + title: TestOpenAIWithNullMaxTokensRequest + type: object + properties: + input: + type: string + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - input + additionalProperties: false TestRetryConstant: required: true content: @@ -2832,6 +4739,22 @@ components: $ref: '#/components/schemas/BamlOptions' required: [] additionalProperties: false + TestUniverseQuestion: + required: true + content: + application/json: + schema: + title: TestUniverseQuestionRequest + type: object + properties: + question: + $ref: '#/components/schemas/UniverseQuestionInput' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - question + additionalProperties: false TestVertex: required: true content: @@ -2848,6 +4771,19 @@ components: required: - input additionalProperties: false + TestVertexWithSystemInstructions: + required: true + content: + application/json: + schema: + title: TestVertexWithSystemInstructionsRequest + type: object + properties: + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: [] + additionalProperties: false UnionTest_Function: required: true content: @@ -2866,6 +4802,22 @@ components: required: - input additionalProperties: false + UseBlockConstraint: + required: true + content: + application/json: + schema: + title: UseBlockConstraintRequest + type: object + properties: + inp: + $ref: '#/components/schemas/BlockConstraintForParam' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - inp + additionalProperties: false UseMalformedConstraints: required: true content: @@ -2882,6 +4834,22 @@ components: required: - a additionalProperties: false + UseNestedBlockConstraint: + required: true + content: + application/json: + schema: + title: UseNestedBlockConstraintRequest + type: object + properties: + inp: + $ref: '#/components/schemas/NestedBlockConstraintForParam' + __baml_options__: + nullable: true + $ref: '#/components/schemas/BamlOptions' + required: + - inp + additionalProperties: false schemas: BamlImage: oneOf: @@ -2971,6 +4939,89 @@ components: - KEY_ONE - KEY_TWO type: string + AnotherObject: + type: object + properties: + id: + type: string + thingy2: + type: string + thingy3: + type: string + required: + - id + - thingy2 + - thingy3 + additionalProperties: false + BigNumbers: + type: object + properties: + a: + type: integer + b: + type: number + required: + - a + - b + additionalProperties: false + BinaryNode: + type: object + properties: + data: + type: integer + left: + $ref: '#/components/schemas/BinaryNode' + right: + $ref: '#/components/schemas/BinaryNode' + required: + - data + additionalProperties: false + Blah: + type: object + properties: + prop4: + type: string + required: [] + additionalProperties: false + BlockConstraint: + type: object + properties: + bar: + type: string + foo: + type: integer + required: + - bar + - foo + additionalProperties: false + BlockConstraintForParam: + type: object + properties: + bcfp: + type: integer + bcfp2: + type: string + required: + - bcfp + - bcfp2 + additionalProperties: false + BookOrder: + type: object + properties: + orderId: + type: string + price: + type: number + quantity: + type: integer + title: + type: string + required: + - orderId + - price + - quantity + - title + additionalProperties: false Category: enum: - Refund @@ -2995,116 +5046,13 @@ components: - AccountIssue - Question type: string - Color: - enum: - - RED - - BLUE - - GREEN - - YELLOW - - BLACK - - WHITE - type: string - DataType: - enum: - - Resume - - Event - type: string - DynEnumOne: - enum: [] - type: string - DynEnumTwo: - enum: [] - type: string - EnumInClass: - enum: - - ONE - - TWO - type: string - EnumOutput: - enum: - - ONE - - TWO - - THREE - type: string - Hobby: - enum: - - SPORTS - - MUSIC - - READING - type: string - NamedArgsSingleEnum: - enum: - - ONE - - TWO - type: string - NamedArgsSingleEnumList: - enum: - - ONE - - TWO - type: string - OptionalTest_CategoryType: - enum: - - Aleph - - Beta - - Gamma - type: string - OrderStatus: - enum: - - ORDERED - - SHIPPED - - DELIVERED - - CANCELLED - type: string - Tag: - enum: - - Security - - AI - - Blockchain - type: string - TestEnum: - enum: - - A - - B - - C - - D - - E - - F - - G - type: string - BigNumbers: + ClassForNullLiteral: type: object properties: a: - type: integer - b: - type: number - required: - - a - - b - additionalProperties: false - Blah: - type: object - properties: - prop4: - type: string - required: [] - additionalProperties: false - BookOrder: - type: object - properties: - orderId: - type: string - title: type: string - quantity: - type: integer - price: - type: number required: - - orderId - - title - - quantity - - price + - a additionalProperties: false ClassOptionalOutput: type: object @@ -3128,35 +5076,96 @@ components: $ref: '#/components/schemas/Blah' required: [] additionalProperties: false + ClassToRecAlias: + type: object + properties: + list: + $ref: '#/components/schemas/LinkedListAliasNode' + required: + - list + additionalProperties: false + ClassWithBlockDone: + type: object + properties: + i_16_digits: + type: integer + s_20_words: + type: string + required: + - i_16_digits + - s_20_words + additionalProperties: false ClassWithImage: type: object properties: + fake_image: + $ref: '#/components/schemas/FakeImage' myImage: $ref: '#/components/schemas/BamlImage' param2: type: string - fake_image: - $ref: '#/components/schemas/FakeImage' required: + - fake_image - myImage - param2 - - fake_image + additionalProperties: false + ClassWithoutDone: + type: object + properties: + i_16_digits: + type: integer + s_20_words: + type: string + required: + - i_16_digits + - s_20_words + additionalProperties: false + Color: + enum: + - RED + - BLUE + - GREEN + - YELLOW + - BLACK + - WHITE + type: string + ComplexMemoryObject: + type: object + properties: + description: + type: string + id: + type: string + metadata: + type: array + items: + oneOf: + - type: string + - type: integer + - type: number + name: + type: string + required: + - description + - id + - metadata + - name additionalProperties: false CompoundBigNumbers: type: object properties: + another: + $ref: '#/components/schemas/BigNumbers' big: $ref: '#/components/schemas/BigNumbers' big_nums: type: array items: $ref: '#/components/schemas/BigNumbers' - another: - $ref: '#/components/schemas/BigNumbers' required: + - another - big - big_nums - - another additionalProperties: false ContactInfo: type: object @@ -3186,6 +5195,11 @@ components: - $ref: '#/components/schemas/GroceryReceipt' required: [] additionalProperties: false + DataType: + enum: + - Resume + - Event + type: string DummyOutput: type: object properties: @@ -3197,6 +5211,12 @@ components: - nonce - nonce2 additionalProperties: false + DynEnumOne: + enum: [] + type: string + DynEnumTwo: + enum: [] + type: string DynInputOutput: type: object properties: @@ -3240,13 +5260,13 @@ components: checks: type: object properties: - no_infants: - $ref: '#components/schemas/Check' earth_aged: $ref: '#components/schemas/Check' + no_infants: + $ref: '#components/schemas/Check' required: - - no_infants - earth_aged + - no_infants additionalProperties: false required: - value @@ -3258,77 +5278,73 @@ components: Education: type: object properties: + degree: + type: string + graduation_date: + type: string institution: type: string location: type: string - degree: - type: string major: type: array items: type: string - graduation_date: - type: string required: + - degree - institution - location - - degree - major additionalProperties: false Email: type: object properties: - subject: - type: string body: type: string from_address: type: string + subject: + type: string required: - - subject - body - from_address + - subject additionalProperties: false EmailAddress: type: object properties: value: - type: object - properties: - value: - type: string - checks: - type: object - properties: - valid_email: - $ref: '#components/schemas/Check' - required: - - valid_email - additionalProperties: false - required: - - value - - checks - additionalProperties: false + type: string required: - value additionalProperties: false + EnumInClass: + enum: + - ONE + - TWO + type: string + EnumOutput: + enum: + - ONE + - TWO + - THREE + type: string Event: type: object properties: - title: - type: string date: type: string + description: + type: string location: type: string - description: + title: type: string required: - - title - date - - location - description + - location + - title additionalProperties: false FakeImage: type: object @@ -3341,30 +5357,26 @@ components: FlightConfirmation: type: object properties: - confirmationNumber: + arrivalTime: type: string - flightNumber: + confirmationNumber: type: string departureTime: type: string - arrivalTime: + flightNumber: type: string seatNumber: type: string required: + - arrivalTime - confirmationNumber - - flightNumber - departureTime - - arrivalTime + - flightNumber - seatNumber additionalProperties: false FooAny: type: object properties: - planetary_age: - oneOf: - - $ref: '#/components/schemas/Martian' - - $ref: '#/components/schemas/Earthling' certainty: type: object properties: @@ -3382,6 +5394,10 @@ components: - value - checks additionalProperties: false + planetary_age: + oneOf: + - $ref: '#/components/schemas/Martian' + - $ref: '#/components/schemas/Earthling' species: type: object properties: @@ -3392,31 +5408,81 @@ components: properties: regex_bad: $ref: '#components/schemas/Check' - trivial: - $ref: '#components/schemas/Check' regex_good: $ref: '#components/schemas/Check' + trivial: + $ref: '#components/schemas/Check' required: - regex_bad - - trivial - regex_good + - trivial additionalProperties: false required: - value - checks additionalProperties: false required: - - planetary_age - certainty + - planetary_age - species additionalProperties: false - GroceryReceipt: + Forest: type: object properties: - receiptId: + trees: + type: array + items: + $ref: '#/components/schemas/Tree' + required: + - trees + additionalProperties: false + FormatterTest0: + type: object + properties: + ipsum: type: string - storeName: + lorem: + type: string + required: + - ipsum + - lorem + additionalProperties: false + FormatterTest1: + type: object + properties: + ipsum: + type: string + lorem: + type: string + required: + - ipsum + - lorem + additionalProperties: false + FormatterTest2: + type: object + properties: + ipsum: + type: string + lorem: + type: string + required: + - ipsum + - lorem + additionalProperties: false + FormatterTest3: + type: object + properties: + ipsum: type: string + lorem: + type: string + required: + - ipsum + - lorem + additionalProperties: false + GroceryReceipt: + type: object + properties: items: type: array items: @@ -3424,27 +5490,37 @@ components: - type: string - type: integer - type: number + receiptId: + type: string + storeName: + type: string totalAmount: type: number required: + - items - receiptId - storeName - - items - totalAmount additionalProperties: false + Hobby: + enum: + - SPORTS + - MUSIC + - READING + type: string InnerClass: type: object properties: + inner: + $ref: '#/components/schemas/InnerClass2' prop1: type: string prop2: type: string - inner: - $ref: '#/components/schemas/InnerClass2' required: + - inner - prop1 - prop2 - - inner additionalProperties: false InnerClass2: type: object @@ -3479,6 +5555,50 @@ components: - key - nested additionalProperties: false + LinkedList: + type: object + properties: + head: + $ref: '#/components/schemas/Node' + len: + type: integer + required: + - len + additionalProperties: false + LinkedListAliasNode: + type: object + properties: + next: + $ref: '#/components/schemas/LinkedListAliasNode' + value: + type: integer + required: + - value + additionalProperties: false + LiteralClassHello: + type: object + properties: + prop: + type: string + required: + - prop + additionalProperties: false + LiteralClassOne: + type: object + properties: + prop: + type: string + required: + - prop + additionalProperties: false + LiteralClassTwo: + type: object + properties: + prop: + type: string + required: + - prop + additionalProperties: false MalformedConstraints: type: object properties: @@ -3502,76 +5622,199 @@ components: required: - foo additionalProperties: false - MalformedConstraints2: + MalformedConstraints2: + type: object + properties: + foo: + type: integer + required: + - foo + additionalProperties: false + MapKey: + enum: + - A + - B + - C + type: string + Martian: + type: object + properties: + age: + type: object + properties: + value: + type: integer + checks: + type: object + properties: + young_enough: + $ref: '#components/schemas/Check' + required: + - young_enough + additionalProperties: false + required: + - value + - checks + additionalProperties: false + required: + - age + additionalProperties: false + MemoryObject: + type: object + properties: + description: + type: string + id: + type: string + name: + type: string + required: + - description + - id + - name + additionalProperties: false + MergeAttrs: + type: object + properties: + amount: + type: object + properties: + value: + type: integer + checks: + type: object + properties: + gt_ten: + $ref: '#components/schemas/Check' + required: + - gt_ten + additionalProperties: false + required: + - value + - checks + additionalProperties: false + required: + - amount + additionalProperties: false + NamedArgsSingleClass: + type: object + properties: + key: + type: string + key_three: + type: integer + key_two: + type: boolean + required: + - key + - key_three + - key_two + additionalProperties: false + NamedArgsSingleEnum: + enum: + - ONE + - TWO + type: string + NamedArgsSingleEnumList: + enum: + - ONE + - TWO + type: string + Nested: + type: object + properties: + prop20: + $ref: '#/components/schemas/Nested2' + prop3: + oneOf: + - type: string + prop4: + oneOf: + - type: string + required: + - prop20 + additionalProperties: false + Nested2: type: object properties: - foo: - type: integer - required: - - foo + prop11: + oneOf: + - type: string + prop12: + oneOf: + - type: string + required: [] additionalProperties: false - Martian: + NestedBlockConstraint: type: object properties: - age: + nbc: type: object properties: value: - type: integer + $ref: '#/components/schemas/BlockConstraint' checks: type: object properties: - young_enough: + cross_field: $ref: '#components/schemas/Check' required: - - young_enough + - cross_field additionalProperties: false required: - value - checks additionalProperties: false required: - - age + - nbc additionalProperties: false - NamedArgsSingleClass: + NestedBlockConstraintForParam: type: object properties: - key: - type: string - key_two: - type: boolean - key_three: + nbcfp: + $ref: '#/components/schemas/BlockConstraintForParam' + required: + - nbcfp + additionalProperties: false + Node: + type: object + properties: + data: type: integer + next: + $ref: '#/components/schemas/Node' required: - - key - - key_two - - key_three + - data additionalProperties: false - Nested: + NodeWithAliasIndirection: type: object properties: - prop3: - oneOf: - - type: string - prop4: - oneOf: - - type: string - prop20: - $ref: '#/components/schemas/Nested2' + next: + $ref: '#/components/schemas/NodeWithAliasIndirection' + value: + type: integer required: - - prop20 + - value additionalProperties: false - Nested2: + OptionalListAndMap: type: object properties: - prop11: - oneOf: - - type: string - prop12: - oneOf: - - type: string + p: + type: array + items: + type: string + q: + type: object + additionalProperties: + type: string required: [] additionalProperties: false + OptionalTest_CategoryType: + enum: + - Aleph + - Beta + - Gamma + type: string OptionalTest_Prop1: type: object properties: @@ -3600,15 +5843,22 @@ components: OrderInfo: type: object properties: + estimated_arrival_date: + type: string order_status: $ref: '#/components/schemas/OrderStatus' tracking_number: type: string - estimated_arrival_date: - type: string required: - order_status additionalProperties: false + OrderStatus: + enum: + - ORDERED + - SHIPPED + - DELIVERED + - CANCELLED + type: string OriginalA: type: object properties: @@ -3628,32 +5878,17 @@ components: Person: type: object properties: - name: - type: string hair_color: $ref: '#/components/schemas/Color' + name: + type: string required: [] additionalProperties: false PhoneNumber: type: object properties: value: - type: object - properties: - value: - type: string - checks: - type: object - properties: - valid_phone_number: - $ref: '#components/schemas/Check' - required: - - valid_phone_number - additionalProperties: false - required: - - value - - checks - additionalProperties: false + type: string required: - value additionalProperties: false @@ -3702,18 +5937,18 @@ components: ReceiptItem: type: object properties: - name: - type: string description: type: string - quantity: - type: integer + name: + type: string price: type: number + quantity: + type: integer required: - name - - quantity - price + - quantity additionalProperties: false Recipe: type: object @@ -3730,38 +5965,61 @@ components: - ingredients - recipe_type additionalProperties: false + RecursiveAliasDependency: + type: object + properties: + value: + anyOf: [] + required: + - value + additionalProperties: false Resume: type: object properties: - name: - type: string + education: + type: array + items: + type: string email: type: string - phone: - type: string experience: type: array items: $ref: '#/components/schemas/Education' - education: - type: array - items: - type: string + name: + type: string + phone: + type: string skills: type: array items: type: string required: - - name + - education - email - - phone - experience - - education + - name + - phone - skills additionalProperties: false Schema: type: object properties: + nested_attrs: + type: array + items: + oneOf: + - type: string + - $ref: '#/components/schemas/Nested' + other_group: + oneOf: + - type: string + - oneOf: + - type: integer + - type: string + parens: + oneOf: + - type: string prop1: oneOf: - type: string @@ -3780,45 +6038,30 @@ components: - type: array items: $ref: '#/components/schemas/Nested' - nested_attrs: - type: array - items: - oneOf: - - type: string - - $ref: '#/components/schemas/Nested' - parens: - oneOf: - - type: string - other_group: - oneOf: - - type: string - - oneOf: - - type: integer - - type: string required: + - nested_attrs + - other_group - prop2 - prop5 - prop6 - - nested_attrs - - other_group additionalProperties: false SearchParams: type: object properties: + company: + $ref: '#/components/schemas/WithReasoning' dateRange: type: integer - location: + description: type: array items: - type: string + $ref: '#/components/schemas/WithReasoning' jobTitle: $ref: '#/components/schemas/WithReasoning' - company: - $ref: '#/components/schemas/WithReasoning' - description: + location: type: array items: - $ref: '#/components/schemas/WithReasoning' + type: string tags: type: array items: @@ -3826,10 +6069,60 @@ components: - $ref: '#/components/schemas/Tag' - type: string required: - - location - description + - location - tags additionalProperties: false + SemanticContainer: + type: object + properties: + class_1: + $ref: '#/components/schemas/ClassWithoutDone' + class_2: + $ref: '#/components/schemas/ClassWithBlockDone' + class_done_needed: + $ref: '#/components/schemas/ClassWithBlockDone' + class_needed: + $ref: '#/components/schemas/ClassWithoutDone' + final_string: + type: string + sixteen_digit_number: + type: integer + string_with_twenty_words: + type: string + three_small_things: + type: array + items: + $ref: '#/components/schemas/SmallThing' + required: + - class_1 + - class_2 + - class_done_needed + - class_needed + - final_string + - sixteen_digit_number + - string_with_twenty_words + - three_small_things + additionalProperties: false + SimpleTag: + type: object + properties: + field: + type: string + required: + - field + additionalProperties: false + SmallThing: + type: object + properties: + i_16_digits: + type: integer + i_8_digits: + type: integer + required: + - i_16_digits + - i_8_digits + additionalProperties: false SomeClassNestedDynamic: type: object properties: @@ -3846,6 +6139,12 @@ components: required: - word additionalProperties: false + Tag: + enum: + - Security + - AI + - Blockchain + type: string TestClassAlias: type: object properties: @@ -3888,6 +6187,37 @@ components: - prop1 - prop2 additionalProperties: false + TestEnum: + enum: + - A + - B + - C + - D + - E + - F + - G + type: string + TestMemoryOutput: + type: object + properties: + items: + type: array + items: + oneOf: + - $ref: '#/components/schemas/MemoryObject' + - $ref: '#/components/schemas/ComplexMemoryObject' + - $ref: '#/components/schemas/AnotherObject' + more_items: + type: array + items: + oneOf: + - $ref: '#/components/schemas/MemoryObject' + - $ref: '#/components/schemas/ComplexMemoryObject' + - $ref: '#/components/schemas/AnotherObject' + required: + - items + - more_items + additionalProperties: false TestOutputClass: type: object properties: @@ -3899,19 +6229,30 @@ components: - prop1 - prop2 additionalProperties: false + Tree: + type: object + properties: + children: + $ref: '#/components/schemas/Forest' + data: + type: integer + required: + - children + - data + additionalProperties: false TwoStoriesOneTitle: type: object properties: - title: - type: string story_a: type: string story_b: type: string + title: + type: string required: - - title - story_a - story_b + - title additionalProperties: false UnionTest_ReturnType: type: object @@ -3939,14 +6280,33 @@ components: - prop2 - prop3 additionalProperties: false - WithReasoning: + UniverseQuestion: type: object properties: - value: + answer: + type: string + question: + type: string + required: + - answer + - question + additionalProperties: false + UniverseQuestionInput: + type: object + properties: + question: type: string + required: + - question + additionalProperties: false + WithReasoning: + type: object + properties: reasoning: type: string + value: + type: string required: - - value - reasoning + - value additionalProperties: false diff --git a/integ-tests/python/baml_client/async_client.py b/integ-tests/python/baml_client/async_client.py index 77c2e0eb1..065636b45 100644 --- a/integ-tests/python/baml_client/async_client.py +++ b/integ-tests/python/baml_client/async_client.py @@ -3546,6 +3546,29 @@ async def TestSingleFallbackClient( ) return cast(str, raw.cast_to(types, types, partial_types, False)) + async def TestUniverseQuestion( + self, + question: types.UniverseQuestionInput, + baml_options: BamlCallOptions = {}, + ) -> types.UniverseQuestion: + __tb__ = baml_options.get("tb", None) + if __tb__ is not None: + tb = __tb__._tb # type: ignore (we know how to use this private attribute) + else: + tb = None + __cr__ = baml_options.get("client_registry", None) + + raw = await self.__runtime.call_function( + "TestUniverseQuestion", + { + "question": question, + }, + self.__ctx_manager.get(), + tb, + __cr__, + ) + return cast(types.UniverseQuestion, raw.cast_to(types, types, partial_types, False)) + async def TestVertex( self, input: str, @@ -8258,6 +8281,36 @@ def TestSingleFallbackClient( self.__ctx_manager.get(), ) + def TestUniverseQuestion( + self, + question: types.UniverseQuestionInput, + baml_options: BamlCallOptions = {}, + ) -> baml_py.BamlStream[partial_types.UniverseQuestion, types.UniverseQuestion]: + __tb__ = baml_options.get("tb", None) + if __tb__ is not None: + tb = __tb__._tb # type: ignore (we know how to use this private attribute) + else: + tb = None + __cr__ = baml_options.get("client_registry", None) + + raw = self.__runtime.stream_function( + "TestUniverseQuestion", + { + "question": question, + }, + None, + self.__ctx_manager.get(), + tb, + __cr__, + ) + + return baml_py.BamlStream[partial_types.UniverseQuestion, types.UniverseQuestion]( + raw, + lambda x: cast(partial_types.UniverseQuestion, x.cast_to(types, types, partial_types, True)), + lambda x: cast(types.UniverseQuestion, x.cast_to(types, types, partial_types, False)), + self.__ctx_manager.get(), + ) + def TestVertex( self, input: str, diff --git a/integ-tests/python/baml_client/inlinedbaml.py b/integ-tests/python/baml_client/inlinedbaml.py index 932e9ecaf..7cd135509 100644 --- a/integ-tests/python/baml_client/inlinedbaml.py +++ b/integ-tests/python/baml_client/inlinedbaml.py @@ -16,7 +16,7 @@ file_map = { - "clients.baml": "retry_policy Bar {\n max_retries 3\n strategy {\n type exponential_backoff\n }\n}\n\nretry_policy Foo {\n max_retries 3\n strategy {\n type constant_delay\n delay_ms 100\n }\n}\n\nclient GPT4 {\n provider openai\n options {\n model gpt-4o\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient GPT4o {\n provider openai\n options {\n model gpt-4o\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient GPT4Turbo {\n retry_policy Bar\n provider openai\n options {\n model gpt-4-turbo\n api_key env.OPENAI_API_KEY\n }\n}\n\nretry_policy GPT4oRetry {\n max_retries 2\n strategy {\n type exponential_backoff\n }\n}\n\nclient GPT35 {\n provider openai\n retry_policy GPT4oRetry\n options {\n model \"gpt-4o-mini\"\n api_key env.OPENAI_API_KEY\n }\n}\n\nclient GPT35LegacyProvider {\n provider openai\n options {\n model \"gpt-3.5-turbo\"\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient Ollama {\n provider ollama\n options {\n model llama2\n }\n}\n\nclient GPT35Azure {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"gpt-35-turbo-default\"\n // base_url \"https://west-us-azure-baml.openai.azure.com/openai/deployments/gpt-35-turbo-default\"\n api_version \"2024-02-01\"\n api_key env.AZURE_OPENAI_API_KEY\n }\n}\n\n// Azure O1 client without max_tokens (should not add default)\nclient AzureO1 {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o1-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens null\n }\n}\n\n// Azure O1 client with explicit max_tokens (should keep user value)\nclient AzureO1WithMaxTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o1-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\nclient AzureO1WithMaxCompletionTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o1-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_completion_tokens 1000\n }\n}\n\n// Azure GPT-35 client with explicit max_tokens (should keep user value)\nclient GPT35AzureWithMaxTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"gpt-35-turbo-default\"\n api_version \"2024-02-01\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\n// Azure client with invalid resource name (for testing failures)\nclient GPT35AzureFailed {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml-incorrect-suffix\"\n deployment_id \"gpt-35-turbo-default\"\n api_key env.AZURE_OPENAI_API_KEY\n }\n}\n\nclient Gemini {\n provider google-ai\n options {\n model gemini-1.5-pro-001\n api_key env.GOOGLE_API_KEY\n safetySettings {\n category HARM_CATEGORY_HATE_SPEECH\n threshold BLOCK_LOW_AND_ABOVE\n }\n }\n}\n\nclient GeminiOpenAiGeneric {\n provider \"openai-generic\"\n options {\n base_url \"https://generativelanguage.googleapis.com/v1beta/\"\n model \"gemini-1.5-flash\"\n api_key env.GOOGLE_API_KEY\n }\n}\n\nclient Vertex {\n provider vertex-ai\n options {\n model gemini-1.5-pro\n location us-central1\n credentials env.INTEG_TESTS_GOOGLE_APPLICATION_CREDENTIALS_CONTENT\n }\n}\n\n\nclient AwsBedrock {\n provider aws-bedrock\n options {\n inference_configuration {\n max_tokens 100\n }\n // model \"anthropic.claude-3-5-sonnet-20240620-v1:0\"\n // model_id \"anthropic.claude-3-haiku-20240307-v1:0\"\n model \"meta.llama3-8b-instruct-v1:0\"\n // region \"us-east-1\"\n // access_key_id env.AWS_ACCESS_KEY_ID\n // secret_access_key env.AWS_SECRET_ACCESS_KEY\n // session_token env.AWS_SESSION_TOKEN\n // session_token null\n // model_id \"mistral.mistral-7b-instruct-v0:2\"\n }\n}\n\nclient AwsBedrockInvalidRegion {\n provider aws-bedrock\n options {\n region \"us-invalid-7\"\n inference_configuration {\n max_tokens 100\n }\n // model \"anthropic.claude-3-5-sonnet-20240620-v1:0\"\n // model_id \"anthropic.claude-3-haiku-20240307-v1:0\"\n model_id \"meta.llama3-8b-instruct-v1:0\"\n // model_id \"mistral.mistral-7b-instruct-v0:2\"\n }\n}\n\nclient AwsBedrockInvalidAccessKey {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient AwsBedrockInvalidProfile {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n profile \"invalid-profile\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient AwsBedrockInvalidSessionToken {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n region \"us-east-1\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n session_token \"invalid-session-token\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\n\nclient Invalid{\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n region \"us-east-1\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n session_token \"invalid-session-token\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient Sonnet {\n provider anthropic\n options {\n model claude-3-5-sonnet-20241022\n api_key env.ANTHROPIC_API_KEY\n }\n}\n\nclient Claude {\n provider anthropic\n options {\n model claude-3-haiku-20240307\n api_key env.ANTHROPIC_API_KEY\n max_tokens 1000\n }\n}\n\nclient ClaudeWithCaching {\n provider anthropic\n options {\n model claude-3-haiku-20240307\n api_key env.ANTHROPIC_API_KEY\n max_tokens 500\n allowed_role_metadata [\"cache_control\"]\n headers {\n \"anthropic-beta\" \"prompt-caching-2024-07-31\"\n }\n }\n}\n\nclient Resilient_SimpleSyntax {\n retry_policy Foo\n provider baml-fallback\n options {\n strategy [\n GPT4Turbo\n GPT35\n Lottery_SimpleSyntax\n ]\n }\n}\n\nclient Lottery_SimpleSyntax {\n provider baml-round-robin\n options {\n start 0\n strategy [\n GPT35\n Claude\n ]\n }\n}\n\nclient TogetherAi {\n provider \"openai-generic\"\n options {\n base_url \"https://api.together.ai/v1\"\n api_key env.TOGETHER_API_KEY\n model \"meta-llama/Llama-3-70b-chat-hf\"\n }\n}\n\n// OpenAI O1 client without max_tokens (should not add default)\nclient OpenAIO1 {\n provider openai\n options {\n model \"o1-mini\"\n api_key env.OPENAI_API_KEY\n }\n}\n\n// OpenAI O1 client with explicit max_tokens (should fail)\nclient OpenAIO1WithMaxTokens {\n provider openai\n options {\n model \"o1-mini\"\n api_key env.OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\n// OpenAI O1 client with explicit max_completion_tokens\nclient OpenAIO1WithMaxCompletionTokens {\n provider openai\n options {\n model \"o1-mini\"\n api_key env.OPENAI_API_KEY\n max_completion_tokens 1000\n }\n}\n\n// OpenAI GPT-4 client with explicit max_tokens\nclient GPT4WithMaxTokens {\n provider openai\n options {\n model \"gpt-4\"\n api_key env.OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\n// Azure O3 client without max_tokens (should not add default)\nclient AzureO3 {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o3-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens null\n }\n}\n\n// Azure O3 client with explicit max_completion_tokens\nclient AzureO3WithMaxCompletionTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o3-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_completion_tokens 1000\n }\n}\n", + "clients.baml": "retry_policy Bar {\n max_retries 3\n strategy {\n type exponential_backoff\n }\n}\n\nretry_policy Foo {\n max_retries 3\n strategy {\n type constant_delay\n delay_ms 100\n }\n}\n\nclient GPT4 {\n provider openai\n options {\n model gpt-4o\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient GPT4o {\n provider openai\n options {\n model gpt-4o\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient GPT4Turbo {\n retry_policy Bar\n provider openai\n options {\n model gpt-4-turbo\n api_key env.OPENAI_API_KEY\n }\n}\n\nretry_policy GPT4oRetry {\n max_retries 2\n strategy {\n type exponential_backoff\n }\n}\n\nclient GPT35 {\n provider openai\n retry_policy GPT4oRetry\n options {\n model \"gpt-4o-mini\"\n api_key env.OPENAI_API_KEY\n }\n}\n\nclient GPT35LegacyProvider {\n provider openai\n options {\n model \"gpt-3.5-turbo\"\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient Ollama {\n provider ollama\n options {\n model llama2\n }\n}\n\nclient GPT35Azure {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"gpt-35-turbo-default\"\n // base_url \"https://west-us-azure-baml.openai.azure.com/openai/deployments/gpt-35-turbo-default\"\n api_version \"2024-02-01\"\n api_key env.AZURE_OPENAI_API_KEY\n }\n}\n\n// Azure O1 client without max_tokens (should not add default)\nclient AzureO1 {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o1-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens null\n }\n}\n\n// Azure O1 client with explicit max_tokens (should keep user value)\nclient AzureO1WithMaxTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o1-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\nclient AzureO1WithMaxCompletionTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o1-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_completion_tokens 1000\n }\n}\n\n// Azure GPT-35 client with explicit max_tokens (should keep user value)\nclient GPT35AzureWithMaxTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"gpt-35-turbo-default\"\n api_version \"2024-02-01\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\n// Azure client with invalid resource name (for testing failures)\nclient GPT35AzureFailed {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml-incorrect-suffix\"\n deployment_id \"gpt-35-turbo-default\"\n api_key env.AZURE_OPENAI_API_KEY\n }\n}\n\nclient Gemini {\n provider google-ai\n options {\n model gemini-1.5-pro-001\n api_key env.GOOGLE_API_KEY\n safetySettings {\n category HARM_CATEGORY_HATE_SPEECH\n threshold BLOCK_LOW_AND_ABOVE\n }\n }\n}\n\nclient GeminiOpenAiGeneric {\n provider \"openai-generic\"\n options {\n base_url \"https://generativelanguage.googleapis.com/v1beta/\"\n model \"gemini-1.5-flash\"\n api_key env.GOOGLE_API_KEY\n }\n}\n\nclient Vertex {\n provider vertex-ai\n options {\n model gemini-1.5-pro\n location us-central1\n credentials env.INTEG_TESTS_GOOGLE_APPLICATION_CREDENTIALS_CONTENT\n }\n}\n\n\nclient AwsBedrock {\n provider aws-bedrock\n options {\n inference_configuration {\n max_tokens 2048\n }\n // max_tokens 100000\n // max_completion_tokens 100000\n // model \"anthropic.claude-3-5-sonnet-20240620-v1:0\"\n // model_id \"anthropic.claude-3-haiku-20240307-v1:0\"\n model \"meta.llama3-8b-instruct-v1:0\"\n // region \"us-east-1\"\n // access_key_id env.AWS_ACCESS_KEY_ID\n // secret_access_key env.AWS_SECRET_ACCESS_KEY\n // session_token env.AWS_SESSION_TOKEN\n // session_token null\n // model_id \"mistral.mistral-7b-instruct-v0:2\"\n }\n}\n\nclient AwsBedrockInvalidRegion {\n provider aws-bedrock\n options {\n region \"us-invalid-7\"\n inference_configuration {\n max_tokens 100\n }\n // model \"anthropic.claude-3-5-sonnet-20240620-v1:0\"\n // model_id \"anthropic.claude-3-haiku-20240307-v1:0\"\n model_id \"meta.llama3-8b-instruct-v1:0\"\n // model_id \"mistral.mistral-7b-instruct-v0:2\"\n }\n}\n\nclient AwsBedrockInvalidAccessKey {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient AwsBedrockInvalidProfile {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n profile \"invalid-profile\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient AwsBedrockInvalidSessionToken {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n region \"us-east-1\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n session_token \"invalid-session-token\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\n\nclient Invalid{\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n region \"us-east-1\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n session_token \"invalid-session-token\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient Sonnet {\n provider anthropic\n options {\n model claude-3-5-sonnet-20241022\n api_key env.ANTHROPIC_API_KEY\n }\n}\n\nclient Claude {\n provider anthropic\n options {\n model claude-3-haiku-20240307\n api_key env.ANTHROPIC_API_KEY\n max_tokens 1000\n }\n}\n\nclient ClaudeWithCaching {\n provider anthropic\n options {\n model claude-3-haiku-20240307\n api_key env.ANTHROPIC_API_KEY\n max_tokens 500\n allowed_role_metadata [\"cache_control\"]\n headers {\n \"anthropic-beta\" \"prompt-caching-2024-07-31\"\n }\n }\n}\n\nclient Resilient_SimpleSyntax {\n retry_policy Foo\n provider baml-fallback\n options {\n strategy [\n GPT4Turbo\n GPT35\n Lottery_SimpleSyntax\n ]\n }\n}\n\nclient Lottery_SimpleSyntax {\n provider baml-round-robin\n options {\n start 0\n strategy [\n GPT35\n Claude\n ]\n }\n}\n\nclient TogetherAi {\n provider \"openai-generic\"\n options {\n base_url \"https://api.together.ai/v1\"\n api_key env.TOGETHER_API_KEY\n model \"meta-llama/Llama-3-70b-chat-hf\"\n }\n}\n\n// OpenAI O1 client without max_tokens (should not add default)\nclient OpenAIO1 {\n provider openai\n options {\n model \"o1-mini\"\n api_key env.OPENAI_API_KEY\n }\n}\n\n// OpenAI O1 client with explicit max_tokens (should fail)\nclient OpenAIO1WithMaxTokens {\n provider openai\n options {\n model \"o1-mini\"\n api_key env.OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\n// OpenAI O1 client with explicit max_completion_tokens\nclient OpenAIO1WithMaxCompletionTokens {\n provider openai\n options {\n model \"o1-mini\"\n api_key env.OPENAI_API_KEY\n max_completion_tokens 1000\n }\n}\n\n// OpenAI GPT-4 client with explicit max_tokens\nclient GPT4WithMaxTokens {\n provider openai\n options {\n model \"gpt-4\"\n api_key env.OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\n// Azure O3 client without max_tokens (should not add default)\nclient AzureO3 {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o3-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens null\n }\n}\n\n// Azure O3 client with explicit max_completion_tokens\nclient AzureO3WithMaxCompletionTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o3-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_completion_tokens 1000\n }\n}\n", "custom-task.baml": "class BookOrder {\n orderId string @description(#\"\n The ID of the book order\n \"#)\n title string @description(#\"\n The title of the ordered book\n \"#)\n quantity int @description(#\"\n The quantity of books ordered\n \"#)\n price float @description(#\"\n The price of the book\n \"#)\n}\n\nclass FlightConfirmation {\n confirmationNumber string @description(#\"\n The flight confirmation number\n \"#)\n flightNumber string @description(#\"\n The flight number\n \"#)\n departureTime string @description(#\"\n The scheduled departure time of the flight\n \"#)\n arrivalTime string @description(#\"\n The scheduled arrival time of the flight\n \"#)\n seatNumber string @description(#\"\n The seat number assigned on the flight\n \"#)\n}\n\nclass GroceryReceipt {\n receiptId string @description(#\"\n The ID of the grocery receipt\n \"#)\n storeName string @description(#\"\n The name of the grocery store\n \"#)\n items (string | int | float)[] @description(#\"\n A list of items purchased. Each item consists of a name, quantity, and price.\n \"#)\n totalAmount float @description(#\"\n The total amount spent on groceries\n \"#)\n}\n\nclass CustomTaskResult {\n bookOrder BookOrder | null\n flightConfirmation FlightConfirmation | null\n groceryReceipt GroceryReceipt | null\n}\n\nfunction CustomTask(input: string) -> BookOrder | FlightConfirmation | GroceryReceipt {\n client \"openai/gpt-4o-mini\"\n prompt #\"\n Given the input string, extract either an order for a book, a flight confirmation, or a grocery receipt.\n\n {{ ctx.output_format }}\n\n Input:\n \n {{ input}}\n \"#\n}\n\ntest CustomTask {\n functions [CustomTask]\n args {\n input #\"\nDear [Your Name],\n\nThank you for booking with [Airline Name]! We are pleased to confirm your upcoming flight.\n\nFlight Confirmation Details:\n\nBooking Reference: ABC123\nPassenger Name: [Your Name]\nFlight Number: XY789\nDeparture Date: September 15, 2024\nDeparture Time: 10:30 AM\nArrival Time: 1:45 PM\nDeparture Airport: John F. Kennedy International Airport (JFK), New York, NY\nArrival Airport: Los Angeles International Airport (LAX), Los Angeles, CA\nSeat Number: 12A\nClass: Economy\nBaggage Allowance:\n\nChecked Baggage: 1 piece, up to 23 kg\nCarry-On Baggage: 1 piece, up to 7 kg\nImportant Information:\n\nPlease arrive at the airport at least 2 hours before your scheduled departure.\nCheck-in online via our website or mobile app to save time at the airport.\nEnsure that your identification documents are up to date and match the name on your booking.\nContact Us:\n\nIf you have any questions or need to make changes to your booking, please contact our customer service team at 1-800-123-4567 or email us at support@[airline].com.\n\nWe wish you a pleasant journey and thank you for choosing [Airline Name].\n\nBest regards,\n\n[Airline Name] Customer Service\n \"#\n }\n}", "fiddle-examples/chain-of-thought.baml": "class Email {\n subject string\n body string\n from_address string\n}\n\nenum OrderStatus {\n ORDERED\n SHIPPED\n DELIVERED\n CANCELLED\n}\n\nclass OrderInfo {\n order_status OrderStatus\n tracking_number string?\n estimated_arrival_date string?\n}\n\nfunction GetOrderInfo(email: Email) -> OrderInfo {\n client GPT4\n prompt #\"\n Given the email below:\n\n ```\n from: {{email.from_address}}\n Email Subject: {{email.subject}}\n Email Body: {{email.body}}\n ```\n\n Extract this info from the email in JSON format:\n {{ ctx.output_format }}\n\n Before you output the JSON, please explain your\n reasoning step-by-step. Here is an example on how to do this:\n 'If we think step by step we can see that ...\n therefore the output JSON is:\n {\n ... the json schema ...\n }'\n \"#\n}", "fiddle-examples/chat-roles.baml": "// This will be available as an enum in your Python and Typescript code.\nenum Category2 {\n Refund\n CancelOrder\n TechnicalSupport\n AccountIssue\n Question\n}\n\nfunction ClassifyMessage2(input: string) -> Category {\n client GPT4\n\n prompt #\"\n {{ _.role(\"system\") }}\n // You can use _.role(\"system\") to indicate that this text should be a system message\n\n Classify the following INPUT into ONE\n of the following categories:\n\n {{ ctx.output_format }}\n\n {{ _.role(\"user\") }}\n // And _.role(\"user\") to indicate that this text should be a user message\n\n INPUT: {{ input }}\n\n Response:\n \"#\n}", @@ -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.75.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.75.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.75.0\"\n}\n\n// generator openapi {\n// output_type rest/openapi\n// output_dir \"../openapi\"\n// version \"0.75.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.75.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.75.0\"\n}\n\ngenerator lang_typescript_react {\n output_type typescript/react\n output_dir \"../react\"\n version \"0.75.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.75.0\"\n}\n\ngenerator openapi {\n output_type rest/openapi\n output_dir \"../openapi\"\n version \"0.75.0\"\n on_generate \"rm .gitignore\"\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}", @@ -93,7 +93,7 @@ "test-files/functions/v2/basic.baml": "\n\nfunction ExtractResume2(resume: string) -> Resume {\n client GPT4\n prompt #\"\n {{ _.role('system') }}\n\n Extract the following information from the resume:\n\n Resume:\n <<<<\n {{ resume }}\n <<<<\n\n Output JSON schema:\n {{ ctx.output_format }}\n\n JSON:\n \"#\n}\n\n\nclass WithReasoning {\n value string\n reasoning string @description(#\"\n Why the value is a good fit.\n \"#)\n}\n\n\nclass SearchParams {\n dateRange int? @description(#\"\n In ISO duration format, e.g. P1Y2M10D.\n \"#)\n location string[]\n jobTitle WithReasoning? @description(#\"\n An exact job title, not a general category.\n \"#)\n company WithReasoning? @description(#\"\n The exact name of the company, not a product or service.\n \"#)\n description WithReasoning[] @description(#\"\n Any specific projects or features the user is looking for.\n \"#)\n tags (Tag | string)[]\n}\n\nenum Tag {\n Security\n AI\n Blockchain\n}\n\nfunction GetQuery(query: string) -> SearchParams {\n client GPT4\n prompt #\"\n Extract the following information from the query:\n\n Query:\n <<<<\n {{ query }}\n <<<<\n\n OUTPUT_JSON_SCHEMA:\n {{ ctx.output_format }}\n\n Before OUTPUT_JSON_SCHEMA, list 5 intentions the user may have.\n --- EXAMPLES ---\n 1. \n 2. \n 3. \n 4. \n 5. \n\n {\n ... // OUTPUT_JSON_SCHEMA\n }\n \"#\n}\n\nclass RaysData {\n dataType DataType\n value Resume | Event\n}\n\nenum DataType {\n Resume\n Event\n}\n\nclass Event {\n title string\n date string\n location string\n description string\n}\n\nfunction GetDataType(text: string) -> RaysData {\n client GPT4\n prompt #\"\n Extract the relevant info.\n\n Text:\n <<<<\n {{ text }}\n <<<<\n\n Output JSON schema:\n {{ ctx.output_format }}\n\n JSON:\n \"#\n}", "test-files/load-test/memory.baml": "\n\nclass MemoryObject {\n id string\n name string\n description string\n}\n\nclass ComplexMemoryObject {\n id string\n name string\n description string\n metadata (string | int | float)[] @description(#\"\n Additional metadata about the memory object, which can be a mix of types.\n \"#)\n}\n\nclass AnotherObject {\n id string\n thingy2 string\n thingy3 string\n}\n\nclass TestMemoryOutput {\n items (MemoryObject | ComplexMemoryObject | AnotherObject)[] @description(#\"\n Add 10 items, which can be either simple MemoryObjects or more complex MemoryObjects with metadata.\n \"#)\n more_items (MemoryObject | ComplexMemoryObject | AnotherObject)[] @description(#\"\n Add 3 more items, which can be either simple MemoryObjects or more complex MemoryObjects with metadata.\n \"#)\n}\n\n\nfunction TestMemory(input: string) -> TestMemoryOutput {\n client GPT35\n prompt #\"\n Return a json blob that matches the schema:\n {{ ctx.output_format }}\n \"#\n}\n\ntest TestName {\n functions [TestMemory]\n args {\n input #\"\n hello world\n \"#\n }\n}\n", "test-files/providers/anthropic.baml": "function TestAnthropic(input: string) -> string {\n client Claude\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}\n\nfunction TestAnthropicShorthand(input: string) -> string {\n client \"anthropic/claude-3-haiku-20240307\"\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestCaching(input: string, not_cached: string) -> string {\n client ClaudeWithCaching\n prompt #\"\n {{ _.role('system', cache_control={\"type\": \"ephemeral\"}) }}\n Generate the following story\n {{ input }}\n\n {# Haiku require 2048 tokens to cache -#}\n {{ input }}\n\n {{ _.role('user') }}\n {{ not_cached }}\n \"#\n}", - "test-files/providers/aws.baml": "function TestAws(input: string) -> string {\n client AwsBedrock\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidRegion(input: string) -> string {\n client AwsBedrockInvalidRegion\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidAccessKey(input: string) -> string {\n client AwsBedrockInvalidAccessKey\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidProfile(input: string) -> string {\n client AwsBedrockInvalidProfile\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidSessionToken(input: string) -> string {\n client AwsBedrockInvalidSessionToken\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}", + "test-files/providers/aws.baml": "function TestAws(input: string) -> string {\n client AwsBedrock\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\n/// my docs\nclass UniverseQuestion {\n question string\n answer string\n}\n\nclass UniverseQuestionInput {\n question string\n}\n\nfunction TestUniverseQuestion(question: UniverseQuestionInput) -> UniverseQuestion {\n client AwsBedrock\n prompt #\"\n You are a helpful assistant that answers questions about the universe.\n\n {{ ctx.output_format }}\n\n {{ _.role(\"user\")}}\n\n Question: {{ question }}\n\n Answer:\n \"#\n}\n\n\nfunction TestAwsInvalidRegion(input: string) -> string {\n client AwsBedrockInvalidRegion\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidAccessKey(input: string) -> string {\n client AwsBedrockInvalidAccessKey\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidProfile(input: string) -> string {\n client AwsBedrockInvalidProfile\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidSessionToken(input: string) -> string {\n client AwsBedrockInvalidSessionToken\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}", "test-files/providers/azure.baml": "// Test standard Azure GPT-3.5 (should add default max_tokens)\nfunction TestAzure(input: string) -> string {\n client GPT35Azure\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O1 model without max_tokens (should not add default)\nfunction TestAzureO1NoMaxTokens(input: string) -> string {\n client AzureO1\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O1 model with explicit max_tokens (should keep user value)\nfunction TestAzureO1WithMaxTokens(input: string) -> string {\n client AzureO1WithMaxTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O1 model with explicit max_completion_tokens (should keep user value)\nfunction TestAzureO1WithMaxCompletionTokens(input: string) -> string {\n client AzureO1WithMaxCompletionTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test GPT-3.5 with explicit max_tokens (should keep user value)\nfunction TestAzureWithMaxTokens(input: string) -> string {\n client GPT35AzureWithMaxTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test failure case with invalid resource name\nfunction TestAzureFailure(input: string) -> string {\n client GPT35AzureFailed\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\nclient AzureWithNullMaxTokens {\n provider azure-openai\n options {\n resource_name env.AZURE_OPENAI_RESOURCE_NAME\n deployment_id env.AZURE_OPENAI_DEPLOYMENT_ID\n api_version \"2024-02-01\"\n max_tokens null\n }\n}\n\n// Test O3 model without max_tokens (should not add default)\nfunction TestAzureO3NoMaxTokens(input: string) -> string {\n client AzureO3\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O3 model with explicit max_completion_tokens (should keep user value)\nfunction TestAzureO3WithMaxCompletionTokens(input: string) -> string {\n client AzureO3WithMaxCompletionTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Add test cases to verify the behavior\ntest TestAzureClients {\n functions [\n TestAzure,\n TestAzureO1NoMaxTokens,\n TestAzureO1WithMaxTokens,\n TestAzureWithMaxTokens,\n TestAzureO1WithMaxCompletionTokens,\n TestAzureO3NoMaxTokens,\n TestAzureO3WithMaxCompletionTokens\n ]\n args {\n input \"Cherry blossoms\"\n }\n}\n\n// Test failure case separately\ntest TestAzureFailureCase {\n functions [TestAzureFailure]\n args {\n input \"Cherry blossoms\"\n }\n}", "test-files/providers/gemini.baml": "function TestGemini(input: string) -> string {\n client Gemini\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiSystem(input: string) -> string {\n client Gemini\n prompt #\"\n {{ _.role('system') }}\n\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiSystemAsChat(input: string) -> string {\n client Gemini\n prompt #\"\n {{ _.role('system') }} You are a helpful assistant\n\n {{_.role(\"user\")}} Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiOpenAiGeneric() -> string {\n client GeminiOpenAiGeneric\n prompt #\"{{_.role(\"system\")}} You are a helpful assistant\n {{_.role(\"user\")}} Write a poem about llamas\n \"#\n}\n\ntest TestName {\n functions [TestGeminiSystem]\n args {\n input #\"\n hello world\n \"#\n }\n}\n", "test-files/providers/ollama.baml": "function TestOllama(input: string) -> string {\n client Ollama\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}", diff --git a/integ-tests/python/baml_client/partial_types.py b/integ-tests/python/baml_client/partial_types.py index 022a9734c..02b93f99f 100644 --- a/integ-tests/python/baml_client/partial_types.py +++ b/integ-tests/python/baml_client/partial_types.py @@ -426,6 +426,14 @@ class UnionTest_ReturnType(BaseModel): prop2: List[Optional[Union[Optional[float], Optional[bool]]]] prop3: Optional[Union[List[Optional[bool]], List[Optional[int]]]] = None +class UniverseQuestion(BaseModel): + """my docs""" + question: Optional[str] = None + answer: Optional[str] = None + +class UniverseQuestionInput(BaseModel): + question: Optional[str] = None + class WithReasoning(BaseModel): value: Optional[str] = None reasoning: Optional[str] = None diff --git a/integ-tests/python/baml_client/sync_client.py b/integ-tests/python/baml_client/sync_client.py index e8d0b1dc5..476cd7193 100644 --- a/integ-tests/python/baml_client/sync_client.py +++ b/integ-tests/python/baml_client/sync_client.py @@ -3543,6 +3543,29 @@ def TestSingleFallbackClient( ) return cast(str, raw.cast_to(types, types, partial_types, False)) + def TestUniverseQuestion( + self, + question: types.UniverseQuestionInput, + baml_options: BamlCallOptions = {}, + ) -> types.UniverseQuestion: + __tb__ = baml_options.get("tb", None) + if __tb__ is not None: + tb = __tb__._tb # type: ignore (we know how to use this private attribute) + else: + tb = None + __cr__ = baml_options.get("client_registry", None) + + raw = self.__runtime.call_function_sync( + "TestUniverseQuestion", + { + "question": question, + }, + self.__ctx_manager.get(), + tb, + __cr__, + ) + return cast(types.UniverseQuestion, raw.cast_to(types, types, partial_types, False)) + def TestVertex( self, input: str, @@ -8256,6 +8279,36 @@ def TestSingleFallbackClient( self.__ctx_manager.get(), ) + def TestUniverseQuestion( + self, + question: types.UniverseQuestionInput, + baml_options: BamlCallOptions = {}, + ) -> baml_py.BamlSyncStream[partial_types.UniverseQuestion, types.UniverseQuestion]: + __tb__ = baml_options.get("tb", None) + if __tb__ is not None: + tb = __tb__._tb # type: ignore (we know how to use this private attribute) + else: + tb = None + __cr__ = baml_options.get("client_registry", None) + + raw = self.__runtime.stream_function_sync( + "TestUniverseQuestion", + { + "question": question, + }, + None, + self.__ctx_manager.get(), + tb, + __cr__, + ) + + return baml_py.BamlSyncStream[partial_types.UniverseQuestion, types.UniverseQuestion]( + raw, + lambda x: cast(partial_types.UniverseQuestion, x.cast_to(types, types, partial_types, True)), + lambda x: cast(types.UniverseQuestion, x.cast_to(types, types, partial_types, False)), + self.__ctx_manager.get(), + ) + def TestVertex( self, input: str, diff --git a/integ-tests/python/baml_client/type_builder.py b/integ-tests/python/baml_client/type_builder.py index 4e86b9c23..7833b4507 100644 --- a/integ-tests/python/baml_client/type_builder.py +++ b/integ-tests/python/baml_client/type_builder.py @@ -20,7 +20,7 @@ class TypeBuilder(_TypeBuilder): def __init__(self): super().__init__(classes=set( - ["AnotherObject","BigNumbers","BinaryNode","Blah","BlockConstraint","BlockConstraintForParam","BookOrder","ClassForNullLiteral","ClassOptionalOutput","ClassOptionalOutput2","ClassToRecAlias","ClassWithBlockDone","ClassWithImage","ClassWithoutDone","ComplexMemoryObject","CompoundBigNumbers","ContactInfo","CustomTaskResult","DummyOutput","DynInputOutput","DynamicClassOne","DynamicClassTwo","DynamicOutput","Earthling","Education","Email","EmailAddress","Event","FakeImage","FlightConfirmation","FooAny","Forest","FormatterTest0","FormatterTest1","FormatterTest2","FormatterTest3","GroceryReceipt","InnerClass","InnerClass2","InputClass","InputClassNested","LinkedList","LinkedListAliasNode","LiteralClassHello","LiteralClassOne","LiteralClassTwo","MalformedConstraints","MalformedConstraints2","Martian","MemoryObject","MergeAttrs","NamedArgsSingleClass","Nested","Nested2","NestedBlockConstraint","NestedBlockConstraintForParam","Node","NodeWithAliasIndirection","OptionalListAndMap","OptionalTest_Prop1","OptionalTest_ReturnType","OrderInfo","OriginalA","OriginalB","Person","PhoneNumber","Quantity","RaysData","ReceiptInfo","ReceiptItem","Recipe","RecursiveAliasDependency","Resume","Schema","SearchParams","SemanticContainer","SimpleTag","SmallThing","SomeClassNestedDynamic","StringToClassEntry","TestClassAlias","TestClassNested","TestClassWithEnum","TestMemoryOutput","TestOutputClass","Tree","TwoStoriesOneTitle","UnionTest_ReturnType","WithReasoning",] + ["AnotherObject","BigNumbers","BinaryNode","Blah","BlockConstraint","BlockConstraintForParam","BookOrder","ClassForNullLiteral","ClassOptionalOutput","ClassOptionalOutput2","ClassToRecAlias","ClassWithBlockDone","ClassWithImage","ClassWithoutDone","ComplexMemoryObject","CompoundBigNumbers","ContactInfo","CustomTaskResult","DummyOutput","DynInputOutput","DynamicClassOne","DynamicClassTwo","DynamicOutput","Earthling","Education","Email","EmailAddress","Event","FakeImage","FlightConfirmation","FooAny","Forest","FormatterTest0","FormatterTest1","FormatterTest2","FormatterTest3","GroceryReceipt","InnerClass","InnerClass2","InputClass","InputClassNested","LinkedList","LinkedListAliasNode","LiteralClassHello","LiteralClassOne","LiteralClassTwo","MalformedConstraints","MalformedConstraints2","Martian","MemoryObject","MergeAttrs","NamedArgsSingleClass","Nested","Nested2","NestedBlockConstraint","NestedBlockConstraintForParam","Node","NodeWithAliasIndirection","OptionalListAndMap","OptionalTest_Prop1","OptionalTest_ReturnType","OrderInfo","OriginalA","OriginalB","Person","PhoneNumber","Quantity","RaysData","ReceiptInfo","ReceiptItem","Recipe","RecursiveAliasDependency","Resume","Schema","SearchParams","SemanticContainer","SimpleTag","SmallThing","SomeClassNestedDynamic","StringToClassEntry","TestClassAlias","TestClassNested","TestClassWithEnum","TestMemoryOutput","TestOutputClass","Tree","TwoStoriesOneTitle","UnionTest_ReturnType","UniverseQuestion","UniverseQuestionInput","WithReasoning",] ), enums=set( ["AliasedEnum","Category","Category2","Category3","Color","DataType","DynEnumOne","DynEnumTwo","EnumInClass","EnumOutput","Hobby","MapKey","NamedArgsSingleEnum","NamedArgsSingleEnumList","OptionalTest_CategoryType","OrderStatus","Tag","TestEnum",] )) diff --git a/integ-tests/python/baml_client/types.py b/integ-tests/python/baml_client/types.py index 4f796dd4a..69563cbdd 100644 --- a/integ-tests/python/baml_client/types.py +++ b/integ-tests/python/baml_client/types.py @@ -547,6 +547,14 @@ class UnionTest_ReturnType(BaseModel): prop2: List[Union[float, bool]] prop3: Union[List[bool], List[int]] +class UniverseQuestion(BaseModel): + """my docs""" + question: str + answer: str + +class UniverseQuestionInput(BaseModel): + question: str + class WithReasoning(BaseModel): value: str reasoning: str diff --git a/integ-tests/react/.gitignore b/integ-tests/react/.gitignore new file mode 100644 index 000000000..5ef6a5207 --- /dev/null +++ b/integ-tests/react/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/integ-tests/react/README.md b/integ-tests/react/README.md new file mode 100644 index 000000000..e215bc4cc --- /dev/null +++ b/integ-tests/react/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/integ-tests/react/baml_client/async_client.ts b/integ-tests/react/baml_client/async_client.ts new file mode 100644 index 000000000..7fb741e9b --- /dev/null +++ b/integ-tests/react/baml_client/async_client.ts @@ -0,0 +1,7369 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import { BamlRuntime, FunctionResult, BamlCtxManager, BamlStream, Image, ClientRegistry, toBamlError, Audio } from "@boundaryml/baml" +import { Checked, Check, RecursivePartialNull as MovedRecursivePartialNull } from "./types" +import type { partial_types } from "./partial_types" +import {AliasedEnum, AnotherObject, BigNumbers, BinaryNode, Blah, BlockConstraint, BlockConstraintForParam, BookOrder, Category, Category2, Category3, ClassForNullLiteral, ClassOptionalOutput, ClassOptionalOutput2, ClassToRecAlias, ClassWithBlockDone, ClassWithImage, ClassWithoutDone, Color, ComplexMemoryObject, CompoundBigNumbers, ContactInfo, CustomTaskResult, DataType, DummyOutput, DynEnumOne, DynEnumTwo, DynInputOutput, DynamicClassOne, DynamicClassTwo, DynamicOutput, Earthling, Education, Email, EmailAddress, EnumInClass, EnumOutput, Event, FakeImage, FlightConfirmation, FooAny, Forest, FormatterTest0, FormatterTest1, FormatterTest2, FormatterTest3, GroceryReceipt, Hobby, InnerClass, InnerClass2, InputClass, InputClassNested, JsonArray, JsonEntry, JsonObject, JsonTemplate, JsonValue, LinkedList, LinkedListAliasNode, LiteralClassHello, LiteralClassOne, LiteralClassTwo, MalformedConstraints, MalformedConstraints2, MapKey, Martian, MemoryObject, MergeAttrs, NamedArgsSingleClass, NamedArgsSingleEnum, NamedArgsSingleEnumList, Nested, Nested2, NestedBlockConstraint, NestedBlockConstraintForParam, Node, NodeWithAliasIndirection, OptionalListAndMap, OptionalTest_CategoryType, OptionalTest_Prop1, OptionalTest_ReturnType, OrderInfo, OrderStatus, OriginalA, OriginalB, Person, PhoneNumber, Quantity, RaysData, RecAliasOne, RecAliasThree, RecAliasTwo, ReceiptInfo, ReceiptItem, Recipe, RecursiveAliasDependency, RecursiveListAlias, RecursiveMapAlias, Resume, Schema, SearchParams, SemanticContainer, SimpleTag, SmallThing, SomeClassNestedDynamic, StringToClassEntry, Tag, TestClassAlias, TestClassNested, TestClassWithEnum, TestEnum, TestMemoryOutput, TestOutputClass, Tree, TwoStoriesOneTitle, UnionTest_ReturnType, UniverseQuestion, UniverseQuestionInput, WithReasoning} from "./types" +import * as types from "./types" +import type TypeBuilder from "./type_builder" +import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME } from "./globals" + +/** + * @deprecated Use RecursivePartialNull from 'baml_client/types' instead. + */ +export type RecursivePartialNull = MovedRecursivePartialNull + +export class BamlAsyncClient { + private runtime: BamlRuntime + private ctx_manager: BamlCtxManager + private stream_client: BamlStreamClient + + constructor(runtime: BamlRuntime, ctx_manager: BamlCtxManager) { + this.runtime = runtime + this.ctx_manager = ctx_manager + this.stream_client = new BamlStreamClient(runtime, ctx_manager) + } + + get stream() { + return this.stream_client + } + + + async AaaSamOutputFormat( + recipe: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AaaSamOutputFormat", + { + "recipe": recipe + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Recipe + } catch (error: any) { + throw toBamlError(error); + } + } + + async AliasThatPointsToRecursiveType( + list: LinkedListAliasNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasThatPointsToRecursiveType", + { + "list": list + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LinkedListAliasNode + } catch (error: any) { + throw toBamlError(error); + } + } + + async AliasWithMultipleAttrs( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "AliasWithMultipleAttrs", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + throw toBamlError(error); + } + } + + async AliasedInputClass( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasedInputClass", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async AliasedInputClass2( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasedInputClass2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async AliasedInputClassNested( + input: InputClassNested, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasedInputClassNested", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async AliasedInputEnum( + input: AliasedEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasedInputEnum", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async AliasedInputList( + input: AliasedEnum[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AliasedInputList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async AllowedOptionals( + optionals: OptionalListAndMap, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AllowedOptionals", + { + "optionals": optionals + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OptionalListAndMap + } catch (error: any) { + throw toBamlError(error); + } + } + + async AssertFn( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AssertFn", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + async AudioInput( + aud: Audio, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "AudioInput", + { + "aud": aud + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async BuildLinkedList( + input: number[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "BuildLinkedList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LinkedList + } catch (error: any) { + throw toBamlError(error); + } + } + + async BuildTree( + input: BinaryNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "BuildTree", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Tree + } catch (error: any) { + throw toBamlError(error); + } + } + + async ClassThatPointsToRecursiveClassThroughAlias( + cls: ClassToRecAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ClassThatPointsToRecursiveClassThroughAlias", + { + "cls": cls + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassToRecAlias + } catch (error: any) { + throw toBamlError(error); + } + } + + async ClassifyDynEnumTwo( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<(string | DynEnumTwo)> { + try { + const raw = await this.runtime.callFunction( + "ClassifyDynEnumTwo", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (string | DynEnumTwo) + } catch (error: any) { + throw toBamlError(error); + } + } + + async ClassifyMessage( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ClassifyMessage", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + throw toBamlError(error); + } + } + + async ClassifyMessage2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ClassifyMessage2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + throw toBamlError(error); + } + } + + async ClassifyMessage3( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ClassifyMessage3", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + throw toBamlError(error); + } + } + + async Completion( + prefix: string,suffix: string,language: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "Completion", + { + "prefix": prefix,"suffix": suffix,"language": language + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async CustomTask( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "CustomTask", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as BookOrder | FlightConfirmation | GroceryReceipt + } catch (error: any) { + throw toBamlError(error); + } + } + + async DescribeImage( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DescribeImage", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async DescribeImage2( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DescribeImage2", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async DescribeImage3( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DescribeImage3", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async DescribeImage4( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DescribeImage4", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async DifferentiateUnions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DifferentiateUnions", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OriginalA | OriginalB + } catch (error: any) { + throw toBamlError(error); + } + } + + async DummyOutputFunction( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DummyOutputFunction", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DummyOutput + } catch (error: any) { + throw toBamlError(error); + } + } + + async DynamicFunc( + input: DynamicClassOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DynamicFunc", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynamicClassTwo + } catch (error: any) { + throw toBamlError(error); + } + } + + async DynamicInputOutput( + input: DynInputOutput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DynamicInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynInputOutput + } catch (error: any) { + throw toBamlError(error); + } + } + + async DynamicListInputOutput( + input: DynInputOutput[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "DynamicListInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynInputOutput[] + } catch (error: any) { + throw toBamlError(error); + } + } + + async ExpectFailure( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExpectFailure", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async ExtractContactInfo( + document: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractContactInfo", + { + "document": document + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ContactInfo + } catch (error: any) { + throw toBamlError(error); + } + } + + async ExtractHobby( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<(string | Hobby)[]> { + try { + const raw = await this.runtime.callFunction( + "ExtractHobby", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (string | Hobby)[] + } catch (error: any) { + throw toBamlError(error); + } + } + + async ExtractNames( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractNames", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string[] + } catch (error: any) { + throw toBamlError(error); + } + } + + async ExtractPeople( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractPeople", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Person[] + } catch (error: any) { + throw toBamlError(error); + } + } + + async ExtractReceiptInfo( + email: string,reason: "curiosity" | "personal_finance", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractReceiptInfo", + { + "email": email,"reason": reason + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ReceiptInfo + } catch (error: any) { + throw toBamlError(error); + } + } + + async ExtractResume( + resume: string,img?: Image | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractResume", + { + "resume": resume,"img": img?? null + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Resume + } catch (error: any) { + throw toBamlError(error); + } + } + + async ExtractResume2( + resume: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ExtractResume2", + { + "resume": resume + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Resume + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnClassOptionalOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnClassOptionalOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassOptionalOutput | null + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnClassOptionalOutput2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnClassOptionalOutput2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassOptionalOutput2 | null + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnEnumListOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnEnumListOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as EnumOutput[] + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnEnumOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as EnumOutput + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnLiteralClassInputOutput( + input: LiteralClassHello, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnLiteralClassInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LiteralClassHello + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnLiteralUnionClassInputOutput( + input: LiteralClassOne | LiteralClassTwo, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnLiteralUnionClassInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LiteralClassOne | LiteralClassTwo + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnNamedArgsSingleStringOptional( + myString?: string | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnNamedArgsSingleStringOptional", + { + "myString": myString?? null + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnOutputBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputBool", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as boolean + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnOutputClass( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputClass", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestOutputClass + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnOutputClassList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputClassList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestOutputClass[] + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnOutputClassNested( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputClassNested", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassNested + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnOutputClassWithEnum( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputClassWithEnum", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassWithEnum + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnOutputInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputInt", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnOutputLiteralBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputLiteralBool", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as false + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnOutputLiteralInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<5> { + try { + const raw = await this.runtime.callFunction( + "FnOutputLiteralInt", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as 5 + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnOutputLiteralString( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<"example output"> { + try { + const raw = await this.runtime.callFunction( + "FnOutputLiteralString", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as "example output" + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnOutputStringList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnOutputStringList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string[] + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnTestAliasedEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnTestAliasedEnumOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestEnum + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnTestClassAlias( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnTestClassAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassAlias + } catch (error: any) { + throw toBamlError(error); + } + } + + async FnTestNamedArgsSingleEnum( + myArg: NamedArgsSingleEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "FnTestNamedArgsSingleEnum", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async GetDataType( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "GetDataType", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RaysData + } catch (error: any) { + throw toBamlError(error); + } + } + + async GetOrderInfo( + email: Email, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "GetOrderInfo", + { + "email": email + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OrderInfo + } catch (error: any) { + throw toBamlError(error); + } + } + + async GetQuery( + query: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "GetQuery", + { + "query": query + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as SearchParams + } catch (error: any) { + throw toBamlError(error); + } + } + + async InOutEnumMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise>> { + try { + const raw = await this.runtime.callFunction( + "InOutEnumMapKey", + { + "i1": i1,"i2": i2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + throw toBamlError(error); + } + } + + async InOutLiteralStringUnionMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise>> { + try { + const raw = await this.runtime.callFunction( + "InOutLiteralStringUnionMapKey", + { + "i1": i1,"i2": i2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + throw toBamlError(error); + } + } + + async InOutSingleLiteralStringMapKey( + m: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise>> { + try { + const raw = await this.runtime.callFunction( + "InOutSingleLiteralStringMapKey", + { + "m": m + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + throw toBamlError(error); + } + } + + async JsonTypeAliasCycle( + input: JsonValue, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "JsonTypeAliasCycle", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as JsonValue + } catch (error: any) { + throw toBamlError(error); + } + } + + async LiteralUnionsTest( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<1 | true | "string output"> { + try { + const raw = await this.runtime.callFunction( + "LiteralUnionsTest", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as 1 | true | "string output" + } catch (error: any) { + throw toBamlError(error); + } + } + + async MakeBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "MakeBlockConstraint", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + throw toBamlError(error); + } + } + + async MakeNestedBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "MakeNestedBlockConstraint", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as NestedBlockConstraint + } catch (error: any) { + throw toBamlError(error); + } + } + + async MakeSemanticContainer( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "MakeSemanticContainer", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as SemanticContainer + } catch (error: any) { + throw toBamlError(error); + } + } + + async MapAlias( + m: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "MapAlias", + { + "m": m + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + throw toBamlError(error); + } + } + + async MergeAliasAttributes( + money: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "MergeAliasAttributes", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as MergeAttrs + } catch (error: any) { + throw toBamlError(error); + } + } + + async MyFunc( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "MyFunc", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynamicOutput + } catch (error: any) { + throw toBamlError(error); + } + } + + async NestedAlias( + c: number | string | boolean | number | string[] | Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "NestedAlias", + { + "c": c + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number | string | boolean | number | string[] | Record + } catch (error: any) { + throw toBamlError(error); + } + } + + async NullLiteralClassHello( + s: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "NullLiteralClassHello", + { + "s": s + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassForNullLiteral + } catch (error: any) { + throw toBamlError(error); + } + } + + async OptionalTest_Function( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<(OptionalTest_ReturnType | null)[]> { + try { + const raw = await this.runtime.callFunction( + "OptionalTest_Function", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (OptionalTest_ReturnType | null)[] + } catch (error: any) { + throw toBamlError(error); + } + } + + async PredictAge( + name: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PredictAge", + { + "name": name + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as FooAny + } catch (error: any) { + throw toBamlError(error); + } + } + + async PredictAgeBare( + inp: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "PredictAgeBare", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + throw toBamlError(error); + } + } + + async PrimitiveAlias( + p: number | string | boolean | number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PrimitiveAlias", + { + "p": p + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number | string | boolean | number + } catch (error: any) { + throw toBamlError(error); + } + } + + async PromptTestClaude( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestClaude", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async PromptTestClaudeChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestClaudeChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async PromptTestClaudeChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestClaudeChatNoSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async PromptTestOpenAI( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestOpenAI", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async PromptTestOpenAIChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestOpenAIChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async PromptTestOpenAIChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestOpenAIChatNoSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async PromptTestStreaming( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "PromptTestStreaming", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async RecursiveAliasCycle( + input: RecAliasOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "RecursiveAliasCycle", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecAliasOne + } catch (error: any) { + throw toBamlError(error); + } + } + + async RecursiveClassWithAliasIndirection( + cls: NodeWithAliasIndirection, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "RecursiveClassWithAliasIndirection", + { + "cls": cls + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as NodeWithAliasIndirection + } catch (error: any) { + throw toBamlError(error); + } + } + + async ReturnAliasWithMergedAttributes( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "ReturnAliasWithMergedAttributes", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + throw toBamlError(error); + } + } + + async ReturnFailingAssert( + inp: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ReturnFailingAssert", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + async ReturnJsonEntry( + s: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ReturnJsonEntry", + { + "s": s + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as JsonTemplate + } catch (error: any) { + throw toBamlError(error); + } + } + + async ReturnMalformedConstraints( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "ReturnMalformedConstraints", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as MalformedConstraints + } catch (error: any) { + throw toBamlError(error); + } + } + + async SchemaDescriptions( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "SchemaDescriptions", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Schema + } catch (error: any) { + throw toBamlError(error); + } + } + + async SimpleRecursiveListAlias( + input: RecursiveListAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "SimpleRecursiveListAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecursiveListAlias + } catch (error: any) { + throw toBamlError(error); + } + } + + async SimpleRecursiveMapAlias( + input: RecursiveMapAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "SimpleRecursiveMapAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecursiveMapAlias + } catch (error: any) { + throw toBamlError(error); + } + } + + async StreamBigNumbers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "StreamBigNumbers", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as BigNumbers + } catch (error: any) { + throw toBamlError(error); + } + } + + async StreamFailingAssertion( + theme: string,length: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "StreamFailingAssertion", + { + "theme": theme,"length": length + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TwoStoriesOneTitle + } catch (error: any) { + throw toBamlError(error); + } + } + + async StreamOneBigNumber( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "StreamOneBigNumber", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + async StreamUnionIntegers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise<(number | string)[]> { + try { + const raw = await this.runtime.callFunction( + "StreamUnionIntegers", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (number | string)[] + } catch (error: any) { + throw toBamlError(error); + } + } + + async StreamingCompoundNumbers( + digits: number,yapping: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "StreamingCompoundNumbers", + { + "digits": digits,"yapping": yapping + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as CompoundBigNumbers + } catch (error: any) { + throw toBamlError(error); + } + } + + async TakeRecAliasDep( + input: RecursiveAliasDependency, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TakeRecAliasDep", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecursiveAliasDependency + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAnthropic( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAnthropic", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAnthropicShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAnthropicShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAws( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAws", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAwsInvalidAccessKey( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAwsInvalidAccessKey", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAwsInvalidProfile( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAwsInvalidProfile", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAwsInvalidRegion( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAwsInvalidRegion", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAwsInvalidSessionToken( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAwsInvalidSessionToken", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAzure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAzure", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAzureFailure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAzureFailure", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAzureO1NoMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAzureO1NoMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAzureO1WithMaxCompletionTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAzureO1WithMaxCompletionTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAzureO1WithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAzureO1WithMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAzureO3NoMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAzureO3NoMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAzureO3WithMaxCompletionTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAzureO3WithMaxCompletionTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestAzureWithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestAzureWithMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestCaching( + input: string,not_cached: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestCaching", + { + "input": input,"not_cached": not_cached + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFallbackClient", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFallbackToShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFallbackToShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleBool( + myBool: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleBool", + { + "myBool": myBool + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleClass( + myArg: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleClass", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleEnumList( + myArg: NamedArgsSingleEnumList[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleEnumList", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleFloat( + myFloat: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleFloat", + { + "myFloat": myFloat + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleInt( + myInt: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleInt", + { + "myInt": myInt + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleMapStringToClass( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleMapStringToClass", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleMapStringToMap( + myMap: Record>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise>> { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleMapStringToMap", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record> + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleMapStringToString( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise> { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleMapStringToString", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleString( + myString: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleString", + { + "myString": myString + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleStringArray( + myStringArray: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleStringArray", + { + "myStringArray": myStringArray + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestFnNamedArgsSingleStringList( + myArg: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestFnNamedArgsSingleStringList", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestGemini( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestGemini", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestGeminiOpenAiGeneric( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestGeminiOpenAiGeneric", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestGeminiSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestGeminiSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestGeminiSystemAsChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestGeminiSystemAsChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestImageInput( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestImageInput", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestImageInputAnthropic( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestImageInputAnthropic", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestImageListInput( + imgs: Image[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestImageListInput", + { + "imgs": imgs + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestMemory( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestMemory", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestMemoryOutput + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestMulticlassNamedArgs( + myArg: NamedArgsSingleClass,myArg2: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestMulticlassNamedArgs", + { + "myArg": myArg,"myArg2": myArg2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestNamedArgsLiteralBool( + myBool: true, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestNamedArgsLiteralBool", + { + "myBool": myBool + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestNamedArgsLiteralInt( + myInt: 1, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestNamedArgsLiteralInt", + { + "myInt": myInt + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestNamedArgsLiteralString( + myString: "My String", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestNamedArgsLiteralString", + { + "myString": myString + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestOllama( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOllama", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestOpenAI( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOpenAI", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestOpenAILegacyProvider( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOpenAILegacyProvider", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestOpenAIO1NoMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOpenAIO1NoMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestOpenAIO1WithMaxCompletionTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOpenAIO1WithMaxCompletionTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestOpenAIO1WithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOpenAIO1WithMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestOpenAIShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOpenAIShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestOpenAIWithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOpenAIWithMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestOpenAIWithNullMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestOpenAIWithNullMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestRetryConstant( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestRetryConstant", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestRetryExponential( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestRetryExponential", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestSingleFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestSingleFallbackClient", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestUniverseQuestion( + question: UniverseQuestionInput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestUniverseQuestion", + { + "question": question + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as UniverseQuestion + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestVertex( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestVertex", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async TestVertexWithSystemInstructions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "TestVertexWithSystemInstructions", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + async UnionTest_Function( + input: string | boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "UnionTest_Function", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as UnionTest_ReturnType + } catch (error: any) { + throw toBamlError(error); + } + } + + async UseBlockConstraint( + inp: BlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "UseBlockConstraint", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + async UseMalformedConstraints( + a: MalformedConstraints2, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "UseMalformedConstraints", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + async UseNestedBlockConstraint( + inp: NestedBlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Promise { + try { + const raw = await this.runtime.callFunction( + "UseNestedBlockConstraint", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + +} + +class BamlStreamClient { + constructor(private runtime: BamlRuntime, private ctx_manager: BamlCtxManager) {} + + + AaaSamOutputFormat( + recipe: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AaaSamOutputFormat", + { + "recipe": recipe + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.Recipe => a, + (a): Recipe => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + AliasThatPointsToRecursiveType( + list: LinkedListAliasNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasThatPointsToRecursiveType", + { + "list": list + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.LinkedListAliasNode => a, + (a): LinkedListAliasNode => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + AliasWithMultipleAttrs( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream, Checked> { + try { + const raw = this.runtime.streamFunction( + "AliasWithMultipleAttrs", + { + "money": money + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream, Checked>( + raw, + (a): Checked => a, + (a): Checked => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + AliasedInputClass( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasedInputClass", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + AliasedInputClass2( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasedInputClass2", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + AliasedInputClassNested( + input: InputClassNested, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasedInputClassNested", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + AliasedInputEnum( + input: AliasedEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasedInputEnum", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + AliasedInputList( + input: AliasedEnum[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AliasedInputList", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + AllowedOptionals( + optionals: OptionalListAndMap, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AllowedOptionals", + { + "optionals": optionals + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.OptionalListAndMap => a, + (a): OptionalListAndMap => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + AssertFn( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AssertFn", + { + "a": a + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): number => a, + (a): number => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + AudioInput( + aud: Audio, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "AudioInput", + { + "aud": aud + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + BuildLinkedList( + input: number[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "BuildLinkedList", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.LinkedList => a, + (a): LinkedList => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + BuildTree( + input: BinaryNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "BuildTree", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.Tree => a, + (a): Tree => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ClassThatPointsToRecursiveClassThroughAlias( + cls: ClassToRecAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ClassThatPointsToRecursiveClassThroughAlias", + { + "cls": cls + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.ClassToRecAlias => a, + (a): ClassToRecAlias => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ClassifyDynEnumTwo( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(string | DynEnumTwo), (string | DynEnumTwo)> { + try { + const raw = this.runtime.streamFunction( + "ClassifyDynEnumTwo", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(string | DynEnumTwo), (string | DynEnumTwo)>( + raw, + (a): (string | DynEnumTwo) => a, + (a): (string | DynEnumTwo) => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ClassifyMessage( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ClassifyMessage", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): types.Category => a, + (a): Category => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ClassifyMessage2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ClassifyMessage2", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): types.Category => a, + (a): Category => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ClassifyMessage3( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ClassifyMessage3", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): types.Category => a, + (a): Category => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + Completion( + prefix: string,suffix: string,language: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "Completion", + { + "prefix": prefix,"suffix": suffix,"language": language + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + CustomTask( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<((partial_types.BookOrder | null) | (partial_types.FlightConfirmation | null) | (partial_types.GroceryReceipt | null)), BookOrder | FlightConfirmation | GroceryReceipt> { + try { + const raw = this.runtime.streamFunction( + "CustomTask", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<((partial_types.BookOrder | null) | (partial_types.FlightConfirmation | null) | (partial_types.GroceryReceipt | null)), BookOrder | FlightConfirmation | GroceryReceipt>( + raw, + (a): ((partial_types.BookOrder | null) | (partial_types.FlightConfirmation | null) | (partial_types.GroceryReceipt | null)) => a, + (a): BookOrder | FlightConfirmation | GroceryReceipt => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + DescribeImage( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DescribeImage", + { + "img": img + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + DescribeImage2( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DescribeImage2", + { + "classWithImage": classWithImage,"img2": img2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + DescribeImage3( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DescribeImage3", + { + "classWithImage": classWithImage,"img2": img2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + DescribeImage4( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DescribeImage4", + { + "classWithImage": classWithImage,"img2": img2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + DifferentiateUnions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<((partial_types.OriginalA | null) | (partial_types.OriginalB | null)), OriginalA | OriginalB> { + try { + const raw = this.runtime.streamFunction( + "DifferentiateUnions", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<((partial_types.OriginalA | null) | (partial_types.OriginalB | null)), OriginalA | OriginalB>( + raw, + (a): ((partial_types.OriginalA | null) | (partial_types.OriginalB | null)) => a, + (a): OriginalA | OriginalB => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + DummyOutputFunction( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DummyOutputFunction", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.DummyOutput => a, + (a): DummyOutput => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + DynamicFunc( + input: DynamicClassOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DynamicFunc", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.DynamicClassTwo => a, + (a): DynamicClassTwo => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + DynamicInputOutput( + input: DynInputOutput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "DynamicInputOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.DynInputOutput => a, + (a): DynInputOutput => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + DynamicListInputOutput( + input: DynInputOutput[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(partial_types.DynInputOutput | null)[], DynInputOutput[]> { + try { + const raw = this.runtime.streamFunction( + "DynamicListInputOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(partial_types.DynInputOutput | null)[], DynInputOutput[]>( + raw, + (a): (partial_types.DynInputOutput | null)[] => a, + (a): DynInputOutput[] => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ExpectFailure( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExpectFailure", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ExtractContactInfo( + document: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExtractContactInfo", + { + "document": document + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.ContactInfo => a, + (a): ContactInfo => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ExtractHobby( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(string | Hobby | null)[], (string | Hobby)[]> { + try { + const raw = this.runtime.streamFunction( + "ExtractHobby", + { + "text": text + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(string | Hobby | null)[], (string | Hobby)[]>( + raw, + (a): (string | Hobby | null)[] => a, + (a): (string | Hobby)[] => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ExtractNames( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(string | null)[], string[]> { + try { + const raw = this.runtime.streamFunction( + "ExtractNames", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(string | null)[], string[]>( + raw, + (a): (string | null)[] => a, + (a): string[] => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ExtractPeople( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(partial_types.Person | null)[], Person[]> { + try { + const raw = this.runtime.streamFunction( + "ExtractPeople", + { + "text": text + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(partial_types.Person | null)[], Person[]>( + raw, + (a): (partial_types.Person | null)[] => a, + (a): Person[] => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ExtractReceiptInfo( + email: string,reason: "curiosity" | "personal_finance", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExtractReceiptInfo", + { + "email": email,"reason": reason + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.ReceiptInfo => a, + (a): ReceiptInfo => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ExtractResume( + resume: string,img?: Image | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExtractResume", + { + "resume": resume,"img": img ?? null + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.Resume => a, + (a): Resume => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ExtractResume2( + resume: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ExtractResume2", + { + "resume": resume + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.Resume => a, + (a): Resume => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnClassOptionalOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<((partial_types.ClassOptionalOutput | null) | null), ClassOptionalOutput | null> { + try { + const raw = this.runtime.streamFunction( + "FnClassOptionalOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<((partial_types.ClassOptionalOutput | null) | null), ClassOptionalOutput | null>( + raw, + (a): ((partial_types.ClassOptionalOutput | null) | null) => a, + (a): ClassOptionalOutput | null => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnClassOptionalOutput2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<((partial_types.ClassOptionalOutput2 | null) | null), ClassOptionalOutput2 | null> { + try { + const raw = this.runtime.streamFunction( + "FnClassOptionalOutput2", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<((partial_types.ClassOptionalOutput2 | null) | null), ClassOptionalOutput2 | null>( + raw, + (a): ((partial_types.ClassOptionalOutput2 | null) | null) => a, + (a): ClassOptionalOutput2 | null => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnEnumListOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(EnumOutput | null)[], EnumOutput[]> { + try { + const raw = this.runtime.streamFunction( + "FnEnumListOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(EnumOutput | null)[], EnumOutput[]>( + raw, + (a): (EnumOutput | null)[] => a, + (a): EnumOutput[] => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnEnumOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): types.EnumOutput => a, + (a): EnumOutput => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnLiteralClassInputOutput( + input: LiteralClassHello, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnLiteralClassInputOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.LiteralClassHello => a, + (a): LiteralClassHello => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnLiteralUnionClassInputOutput( + input: LiteralClassOne | LiteralClassTwo, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<((partial_types.LiteralClassOne | null) | (partial_types.LiteralClassTwo | null)), LiteralClassOne | LiteralClassTwo> { + try { + const raw = this.runtime.streamFunction( + "FnLiteralUnionClassInputOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<((partial_types.LiteralClassOne | null) | (partial_types.LiteralClassTwo | null)), LiteralClassOne | LiteralClassTwo>( + raw, + (a): ((partial_types.LiteralClassOne | null) | (partial_types.LiteralClassTwo | null)) => a, + (a): LiteralClassOne | LiteralClassTwo => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnNamedArgsSingleStringOptional( + myString?: string | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnNamedArgsSingleStringOptional", + { + "myString": myString ?? null + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnOutputBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputBool", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): boolean => a, + (a): boolean => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnOutputClass( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputClass", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.TestOutputClass => a, + (a): TestOutputClass => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnOutputClassList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(partial_types.TestOutputClass | null)[], TestOutputClass[]> { + try { + const raw = this.runtime.streamFunction( + "FnOutputClassList", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(partial_types.TestOutputClass | null)[], TestOutputClass[]>( + raw, + (a): (partial_types.TestOutputClass | null)[] => a, + (a): TestOutputClass[] => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnOutputClassNested( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputClassNested", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.TestClassNested => a, + (a): TestClassNested => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnOutputClassWithEnum( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputClassWithEnum", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.TestClassWithEnum => a, + (a): TestClassWithEnum => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnOutputInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputInt", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): number => a, + (a): number => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnOutputLiteralBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnOutputLiteralBool", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): false => a, + (a): false => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnOutputLiteralInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<5, 5> { + try { + const raw = this.runtime.streamFunction( + "FnOutputLiteralInt", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<5, 5>( + raw, + (a): 5 => a, + (a): 5 => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnOutputLiteralString( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<"example output", "example output"> { + try { + const raw = this.runtime.streamFunction( + "FnOutputLiteralString", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<"example output", "example output">( + raw, + (a): "example output" => a, + (a): "example output" => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnOutputStringList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(string | null)[], string[]> { + try { + const raw = this.runtime.streamFunction( + "FnOutputStringList", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(string | null)[], string[]>( + raw, + (a): (string | null)[] => a, + (a): string[] => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnTestAliasedEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnTestAliasedEnumOutput", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): types.TestEnum => a, + (a): TestEnum => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnTestClassAlias( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnTestClassAlias", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.TestClassAlias => a, + (a): TestClassAlias => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + FnTestNamedArgsSingleEnum( + myArg: NamedArgsSingleEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "FnTestNamedArgsSingleEnum", + { + "myArg": myArg + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + GetDataType( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "GetDataType", + { + "text": text + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.RaysData => a, + (a): RaysData => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + GetOrderInfo( + email: Email, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "GetOrderInfo", + { + "email": email + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.OrderInfo => a, + (a): OrderInfo => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + GetQuery( + query: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "GetQuery", + { + "query": query + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.SearchParams => a, + (a): SearchParams => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + InOutEnumMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record ), Partial>> { + try { + const raw = this.runtime.streamFunction( + "InOutEnumMapKey", + { + "i1": i1,"i2": i2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record ), Partial>>( + raw, + (a): (Record ) => a, + (a): Partial> => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + InOutLiteralStringUnionMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record<"one" | "two" | "three" | "four", (string | null)> ), Partial>> { + try { + const raw = this.runtime.streamFunction( + "InOutLiteralStringUnionMapKey", + { + "i1": i1,"i2": i2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record<"one" | "two" | "three" | "four", (string | null)> ), Partial>>( + raw, + (a): (Record<"one" | "two" | "three" | "four", (string | null)> ) => a, + (a): Partial> => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + InOutSingleLiteralStringMapKey( + m: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record<"key", (string | null)> ), Partial>> { + try { + const raw = this.runtime.streamFunction( + "InOutSingleLiteralStringMapKey", + { + "m": m + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record<"key", (string | null)> ), Partial>>( + raw, + (a): (Record<"key", (string | null)> ) => a, + (a): Partial> => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + JsonTypeAliasCycle( + input: JsonValue, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "JsonTypeAliasCycle", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): JsonValue => a, + (a): JsonValue => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + LiteralUnionsTest( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(1 | true | "string output"), 1 | true | "string output"> { + try { + const raw = this.runtime.streamFunction( + "LiteralUnionsTest", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(1 | true | "string output"), 1 | true | "string output">( + raw, + (a): (1 | true | "string output") => a, + (a): 1 | true | "string output" => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + MakeBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream, Checked> { + try { + const raw = this.runtime.streamFunction( + "MakeBlockConstraint", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream, Checked>( + raw, + (a): Checked => a, + (a): Checked => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + MakeNestedBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "MakeNestedBlockConstraint", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.NestedBlockConstraint => a, + (a): NestedBlockConstraint => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + MakeSemanticContainer( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "MakeSemanticContainer", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.SemanticContainer => a, + (a): SemanticContainer => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + MapAlias( + m: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record ), Record> { + try { + const raw = this.runtime.streamFunction( + "MapAlias", + { + "m": m + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record ), Record>( + raw, + (a): (Record ) => a, + (a): Record => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + MergeAliasAttributes( + money: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "MergeAliasAttributes", + { + "money": money + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.MergeAttrs => a, + (a): MergeAttrs => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + MyFunc( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "MyFunc", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.DynamicOutput => a, + (a): DynamicOutput => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + NestedAlias( + c: number | string | boolean | number | string[] | Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(((number | null) | (string | null) | (boolean | null) | (number | null) | null) | (string | null)[] | (Record | null)), number | string | boolean | number | string[] | Record> { + try { + const raw = this.runtime.streamFunction( + "NestedAlias", + { + "c": c + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(((number | null) | (string | null) | (boolean | null) | (number | null) | null) | (string | null)[] | (Record | null)), number | string | boolean | number | string[] | Record>( + raw, + (a): (((number | null) | (string | null) | (boolean | null) | (number | null) | null) | (string | null)[] | (Record | null)) => a, + (a): number | string | boolean | number | string[] | Record => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + NullLiteralClassHello( + s: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "NullLiteralClassHello", + { + "s": s + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.ClassForNullLiteral => a, + (a): ClassForNullLiteral => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + OptionalTest_Function( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<((partial_types.OptionalTest_ReturnType | null) | null)[], (OptionalTest_ReturnType | null)[]> { + try { + const raw = this.runtime.streamFunction( + "OptionalTest_Function", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<((partial_types.OptionalTest_ReturnType | null) | null)[], (OptionalTest_ReturnType | null)[]>( + raw, + (a): ((partial_types.OptionalTest_ReturnType | null) | null)[] => a, + (a): (OptionalTest_ReturnType | null)[] => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + PredictAge( + name: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PredictAge", + { + "name": name + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.FooAny => a, + (a): FooAny => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + PredictAgeBare( + inp: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream, Checked> { + try { + const raw = this.runtime.streamFunction( + "PredictAgeBare", + { + "inp": inp + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream, Checked>( + raw, + (a): Checked => a, + (a): Checked => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + PrimitiveAlias( + p: number | string | boolean | number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<((number | null) | (string | null) | (boolean | null) | (number | null)), number | string | boolean | number> { + try { + const raw = this.runtime.streamFunction( + "PrimitiveAlias", + { + "p": p + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<((number | null) | (string | null) | (boolean | null) | (number | null)), number | string | boolean | number>( + raw, + (a): ((number | null) | (string | null) | (boolean | null) | (number | null)) => a, + (a): number | string | boolean | number => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + PromptTestClaude( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestClaude", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + PromptTestClaudeChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestClaudeChat", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + PromptTestClaudeChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestClaudeChatNoSystem", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + PromptTestOpenAI( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestOpenAI", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + PromptTestOpenAIChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestOpenAIChat", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + PromptTestOpenAIChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestOpenAIChatNoSystem", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + PromptTestStreaming( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "PromptTestStreaming", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + RecursiveAliasCycle( + input: RecAliasOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "RecursiveAliasCycle", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): RecAliasOne => a, + (a): RecAliasOne => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + RecursiveClassWithAliasIndirection( + cls: NodeWithAliasIndirection, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "RecursiveClassWithAliasIndirection", + { + "cls": cls + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.NodeWithAliasIndirection => a, + (a): NodeWithAliasIndirection => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ReturnAliasWithMergedAttributes( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream, Checked> { + try { + const raw = this.runtime.streamFunction( + "ReturnAliasWithMergedAttributes", + { + "money": money + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream, Checked>( + raw, + (a): Checked => a, + (a): Checked => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ReturnFailingAssert( + inp: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ReturnFailingAssert", + { + "inp": inp + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): number => a, + (a): number => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ReturnJsonEntry( + s: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ReturnJsonEntry", + { + "s": s + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): JsonTemplate => a, + (a): JsonTemplate => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + ReturnMalformedConstraints( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "ReturnMalformedConstraints", + { + "a": a + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.MalformedConstraints => a, + (a): MalformedConstraints => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + SchemaDescriptions( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "SchemaDescriptions", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.Schema => a, + (a): Schema => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + SimpleRecursiveListAlias( + input: RecursiveListAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "SimpleRecursiveListAlias", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): RecursiveListAlias => a, + (a): RecursiveListAlias => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + SimpleRecursiveMapAlias( + input: RecursiveMapAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "SimpleRecursiveMapAlias", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): RecursiveMapAlias => a, + (a): RecursiveMapAlias => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + StreamBigNumbers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "StreamBigNumbers", + { + "digits": digits + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.BigNumbers => a, + (a): BigNumbers => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + StreamFailingAssertion( + theme: string,length: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "StreamFailingAssertion", + { + "theme": theme,"length": length + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.TwoStoriesOneTitle => a, + (a): TwoStoriesOneTitle => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + StreamOneBigNumber( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "StreamOneBigNumber", + { + "digits": digits + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): number => a, + (a): number => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + StreamUnionIntegers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<((number | null) | (string | null) | null)[], (number | string)[]> { + try { + const raw = this.runtime.streamFunction( + "StreamUnionIntegers", + { + "digits": digits + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<((number | null) | (string | null) | null)[], (number | string)[]>( + raw, + (a): ((number | null) | (string | null) | null)[] => a, + (a): (number | string)[] => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + StreamingCompoundNumbers( + digits: number,yapping: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "StreamingCompoundNumbers", + { + "digits": digits,"yapping": yapping + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.CompoundBigNumbers => a, + (a): CompoundBigNumbers => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TakeRecAliasDep( + input: RecursiveAliasDependency, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TakeRecAliasDep", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.RecursiveAliasDependency => a, + (a): RecursiveAliasDependency => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAnthropic( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAnthropic", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAnthropicShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAnthropicShorthand", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAws( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAws", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAwsInvalidAccessKey( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAwsInvalidAccessKey", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAwsInvalidProfile( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAwsInvalidProfile", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAwsInvalidRegion( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAwsInvalidRegion", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAwsInvalidSessionToken( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAwsInvalidSessionToken", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAzure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAzure", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAzureFailure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAzureFailure", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAzureO1NoMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAzureO1NoMaxTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAzureO1WithMaxCompletionTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAzureO1WithMaxCompletionTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAzureO1WithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAzureO1WithMaxTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAzureO3NoMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAzureO3NoMaxTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAzureO3WithMaxCompletionTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAzureO3WithMaxCompletionTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestAzureWithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestAzureWithMaxTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestCaching( + input: string,not_cached: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestCaching", + { + "input": input,"not_cached": not_cached + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFallbackClient", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFallbackToShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFallbackToShorthand", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleBool( + myBool: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleBool", + { + "myBool": myBool + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleClass( + myArg: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleClass", + { + "myArg": myArg + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleEnumList( + myArg: NamedArgsSingleEnumList[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleEnumList", + { + "myArg": myArg + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleFloat( + myFloat: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleFloat", + { + "myFloat": myFloat + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleInt( + myInt: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleInt", + { + "myInt": myInt + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleMapStringToClass( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record ), Record> { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleMapStringToClass", + { + "myMap": myMap + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record ), Record>( + raw, + (a): (Record ) => a, + (a): Record => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleMapStringToMap( + myMap: Record>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record | null)> ), Record>> { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleMapStringToMap", + { + "myMap": myMap + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record | null)> ), Record>>( + raw, + (a): (Record | null)> ) => a, + (a): Record> => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleMapStringToString( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream<(Record ), Record> { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleMapStringToString", + { + "myMap": myMap + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream<(Record ), Record>( + raw, + (a): (Record ) => a, + (a): Record => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleString( + myString: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleString", + { + "myString": myString + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleStringArray( + myStringArray: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleStringArray", + { + "myStringArray": myStringArray + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleStringList( + myArg: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestFnNamedArgsSingleStringList", + { + "myArg": myArg + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestGemini( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestGemini", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestGeminiOpenAiGeneric( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestGeminiOpenAiGeneric", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestGeminiSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestGeminiSystem", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestGeminiSystemAsChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestGeminiSystemAsChat", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestImageInput( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestImageInput", + { + "img": img + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestImageInputAnthropic( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestImageInputAnthropic", + { + "img": img + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestImageListInput( + imgs: Image[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestImageListInput", + { + "imgs": imgs + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestMemory( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestMemory", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.TestMemoryOutput => a, + (a): TestMemoryOutput => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestMulticlassNamedArgs( + myArg: NamedArgsSingleClass,myArg2: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestMulticlassNamedArgs", + { + "myArg": myArg,"myArg2": myArg2 + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestNamedArgsLiteralBool( + myBool: true, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestNamedArgsLiteralBool", + { + "myBool": myBool + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestNamedArgsLiteralInt( + myInt: 1, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestNamedArgsLiteralInt", + { + "myInt": myInt + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestNamedArgsLiteralString( + myString: "My String", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestNamedArgsLiteralString", + { + "myString": myString + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestOllama( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOllama", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestOpenAI( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOpenAI", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestOpenAILegacyProvider( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOpenAILegacyProvider", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestOpenAIO1NoMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOpenAIO1NoMaxTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestOpenAIO1WithMaxCompletionTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOpenAIO1WithMaxCompletionTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestOpenAIO1WithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOpenAIO1WithMaxTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestOpenAIShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOpenAIShorthand", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestOpenAIWithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOpenAIWithMaxTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestOpenAIWithNullMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestOpenAIWithNullMaxTokens", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestRetryConstant( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestRetryConstant", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestRetryExponential( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestRetryExponential", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestSingleFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestSingleFallbackClient", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestUniverseQuestion( + question: UniverseQuestionInput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestUniverseQuestion", + { + "question": question + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.UniverseQuestion => a, + (a): UniverseQuestion => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestVertex( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestVertex", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + TestVertexWithSystemInstructions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "TestVertexWithSystemInstructions", + { + + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): string => a, + (a): string => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + UnionTest_Function( + input: string | boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "UnionTest_Function", + { + "input": input + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): partial_types.UnionTest_ReturnType => a, + (a): UnionTest_ReturnType => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + UseBlockConstraint( + inp: BlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "UseBlockConstraint", + { + "inp": inp + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): number => a, + (a): number => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + UseMalformedConstraints( + a: MalformedConstraints2, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "UseMalformedConstraints", + { + "a": a + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): number => a, + (a): number => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + + UseNestedBlockConstraint( + inp: NestedBlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BamlStream { + try { + const raw = this.runtime.streamFunction( + "UseNestedBlockConstraint", + { + "inp": inp + }, + undefined, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return new BamlStream( + raw, + (a): number => a, + (a): number => a, + this.ctx_manager.cloneContext(), + ) + } catch (error) { + throw toBamlError(error); + } + } + +} + +export const b = new BamlAsyncClient(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX) \ No newline at end of file diff --git a/integ-tests/react/baml_client/globals.ts b/integ-tests/react/baml_client/globals.ts new file mode 100644 index 000000000..7b1ec2a75 --- /dev/null +++ b/integ-tests/react/baml_client/globals.ts @@ -0,0 +1,37 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import { BamlRuntime, BamlCtxManager } from '@boundaryml/baml' +import { getBamlFiles } from './inlinedbaml' + + +export const DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME = BamlRuntime.fromFiles( + 'baml_src', + getBamlFiles(), + process.env +) +export const DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX = new BamlCtxManager(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME) + + +export function resetBamlEnvVars(envVars: Record) { + if (DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.allowResets()) { + DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME.reset('baml_src', getBamlFiles(), envVars) + DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.reset() + } else { + throw new Error('BamlError: Cannot reset BAML environment variables while there are active BAML contexts.') + } +} \ No newline at end of file diff --git a/integ-tests/react/baml_client/index.ts b/integ-tests/react/baml_client/index.ts new file mode 100644 index 000000000..98e7a82f9 --- /dev/null +++ b/integ-tests/react/baml_client/index.ts @@ -0,0 +1,25 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code + +export { b } from "./async_client" + +export * from "./types" +export type { partial_types } from "./partial_types" +export * from "./tracing" +export { resetBamlEnvVars } from "./globals" +export { BamlClientHttpError, BamlValidationError, BamlClientFinishReasonError } from "@boundaryml/baml" \ No newline at end of file diff --git a/integ-tests/react/baml_client/inlinedbaml.ts b/integ-tests/react/baml_client/inlinedbaml.ts new file mode 100644 index 000000000..634a135c4 --- /dev/null +++ b/integ-tests/react/baml_client/inlinedbaml.ts @@ -0,0 +1,116 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +const fileMap = { + + "clients.baml": "retry_policy Bar {\n max_retries 3\n strategy {\n type exponential_backoff\n }\n}\n\nretry_policy Foo {\n max_retries 3\n strategy {\n type constant_delay\n delay_ms 100\n }\n}\n\nclient GPT4 {\n provider openai\n options {\n model gpt-4o\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient GPT4o {\n provider openai\n options {\n model gpt-4o\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient GPT4Turbo {\n retry_policy Bar\n provider openai\n options {\n model gpt-4-turbo\n api_key env.OPENAI_API_KEY\n }\n}\n\nretry_policy GPT4oRetry {\n max_retries 2\n strategy {\n type exponential_backoff\n }\n}\n\nclient GPT35 {\n provider openai\n retry_policy GPT4oRetry\n options {\n model \"gpt-4o-mini\"\n api_key env.OPENAI_API_KEY\n }\n}\n\nclient GPT35LegacyProvider {\n provider openai\n options {\n model \"gpt-3.5-turbo\"\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient Ollama {\n provider ollama\n options {\n model llama2\n }\n}\n\nclient GPT35Azure {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"gpt-35-turbo-default\"\n // base_url \"https://west-us-azure-baml.openai.azure.com/openai/deployments/gpt-35-turbo-default\"\n api_version \"2024-02-01\"\n api_key env.AZURE_OPENAI_API_KEY\n }\n}\n\n// Azure O1 client without max_tokens (should not add default)\nclient AzureO1 {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o1-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens null\n }\n}\n\n// Azure O1 client with explicit max_tokens (should keep user value)\nclient AzureO1WithMaxTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o1-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\nclient AzureO1WithMaxCompletionTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o1-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_completion_tokens 1000\n }\n}\n\n// Azure GPT-35 client with explicit max_tokens (should keep user value)\nclient GPT35AzureWithMaxTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"gpt-35-turbo-default\"\n api_version \"2024-02-01\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\n// Azure client with invalid resource name (for testing failures)\nclient GPT35AzureFailed {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml-incorrect-suffix\"\n deployment_id \"gpt-35-turbo-default\"\n api_key env.AZURE_OPENAI_API_KEY\n }\n}\n\nclient Gemini {\n provider google-ai\n options {\n model gemini-1.5-pro-001\n api_key env.GOOGLE_API_KEY\n safetySettings {\n category HARM_CATEGORY_HATE_SPEECH\n threshold BLOCK_LOW_AND_ABOVE\n }\n }\n}\n\nclient GeminiOpenAiGeneric {\n provider \"openai-generic\"\n options {\n base_url \"https://generativelanguage.googleapis.com/v1beta/\"\n model \"gemini-1.5-flash\"\n api_key env.GOOGLE_API_KEY\n }\n}\n\nclient Vertex {\n provider vertex-ai\n options {\n model gemini-1.5-pro\n location us-central1\n credentials env.INTEG_TESTS_GOOGLE_APPLICATION_CREDENTIALS_CONTENT\n }\n}\n\n\nclient AwsBedrock {\n provider aws-bedrock\n options {\n inference_configuration {\n max_tokens 2048\n }\n // max_tokens 100000\n // max_completion_tokens 100000\n // model \"anthropic.claude-3-5-sonnet-20240620-v1:0\"\n // model_id \"anthropic.claude-3-haiku-20240307-v1:0\"\n model \"meta.llama3-8b-instruct-v1:0\"\n // region \"us-east-1\"\n // access_key_id env.AWS_ACCESS_KEY_ID\n // secret_access_key env.AWS_SECRET_ACCESS_KEY\n // session_token env.AWS_SESSION_TOKEN\n // session_token null\n // model_id \"mistral.mistral-7b-instruct-v0:2\"\n }\n}\n\nclient AwsBedrockInvalidRegion {\n provider aws-bedrock\n options {\n region \"us-invalid-7\"\n inference_configuration {\n max_tokens 100\n }\n // model \"anthropic.claude-3-5-sonnet-20240620-v1:0\"\n // model_id \"anthropic.claude-3-haiku-20240307-v1:0\"\n model_id \"meta.llama3-8b-instruct-v1:0\"\n // model_id \"mistral.mistral-7b-instruct-v0:2\"\n }\n}\n\nclient AwsBedrockInvalidAccessKey {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient AwsBedrockInvalidProfile {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n profile \"invalid-profile\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient AwsBedrockInvalidSessionToken {\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n region \"us-east-1\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n session_token \"invalid-session-token\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\n\nclient Invalid{\n provider aws-bedrock\n options {\n model_id \"meta.llama3-8b-instruct-v1:0\"\n region \"us-east-1\"\n access_key_id \"AKIAINVALID12345678\"\n secret_access_key \"abcdef1234567890abcdef1234567890abcdef12\"\n session_token \"invalid-session-token\"\n inference_configuration {\n max_tokens 100\n }\n }\n}\n\nclient Sonnet {\n provider anthropic\n options {\n model claude-3-5-sonnet-20241022\n api_key env.ANTHROPIC_API_KEY\n }\n}\n\nclient Claude {\n provider anthropic\n options {\n model claude-3-haiku-20240307\n api_key env.ANTHROPIC_API_KEY\n max_tokens 1000\n }\n}\n\nclient ClaudeWithCaching {\n provider anthropic\n options {\n model claude-3-haiku-20240307\n api_key env.ANTHROPIC_API_KEY\n max_tokens 500\n allowed_role_metadata [\"cache_control\"]\n headers {\n \"anthropic-beta\" \"prompt-caching-2024-07-31\"\n }\n }\n}\n\nclient Resilient_SimpleSyntax {\n retry_policy Foo\n provider baml-fallback\n options {\n strategy [\n GPT4Turbo\n GPT35\n Lottery_SimpleSyntax\n ]\n }\n}\n\nclient Lottery_SimpleSyntax {\n provider baml-round-robin\n options {\n start 0\n strategy [\n GPT35\n Claude\n ]\n }\n}\n\nclient TogetherAi {\n provider \"openai-generic\"\n options {\n base_url \"https://api.together.ai/v1\"\n api_key env.TOGETHER_API_KEY\n model \"meta-llama/Llama-3-70b-chat-hf\"\n }\n}\n\n// OpenAI O1 client without max_tokens (should not add default)\nclient OpenAIO1 {\n provider openai\n options {\n model \"o1-mini\"\n api_key env.OPENAI_API_KEY\n }\n}\n\n// OpenAI O1 client with explicit max_tokens (should fail)\nclient OpenAIO1WithMaxTokens {\n provider openai\n options {\n model \"o1-mini\"\n api_key env.OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\n// OpenAI O1 client with explicit max_completion_tokens\nclient OpenAIO1WithMaxCompletionTokens {\n provider openai\n options {\n model \"o1-mini\"\n api_key env.OPENAI_API_KEY\n max_completion_tokens 1000\n }\n}\n\n// OpenAI GPT-4 client with explicit max_tokens\nclient GPT4WithMaxTokens {\n provider openai\n options {\n model \"gpt-4\"\n api_key env.OPENAI_API_KEY\n max_tokens 1000\n }\n}\n\n// Azure O3 client without max_tokens (should not add default)\nclient AzureO3 {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o3-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_tokens null\n }\n}\n\n// Azure O3 client with explicit max_completion_tokens\nclient AzureO3WithMaxCompletionTokens {\n provider azure-openai\n options {\n resource_name \"west-us-azure-baml\"\n deployment_id \"o3-mini\"\n api_version \"2024-08-01-preview\"\n api_key env.AZURE_OPENAI_API_KEY\n max_completion_tokens 1000\n }\n}\n", + "custom-task.baml": "class BookOrder {\n orderId string @description(#\"\n The ID of the book order\n \"#)\n title string @description(#\"\n The title of the ordered book\n \"#)\n quantity int @description(#\"\n The quantity of books ordered\n \"#)\n price float @description(#\"\n The price of the book\n \"#)\n}\n\nclass FlightConfirmation {\n confirmationNumber string @description(#\"\n The flight confirmation number\n \"#)\n flightNumber string @description(#\"\n The flight number\n \"#)\n departureTime string @description(#\"\n The scheduled departure time of the flight\n \"#)\n arrivalTime string @description(#\"\n The scheduled arrival time of the flight\n \"#)\n seatNumber string @description(#\"\n The seat number assigned on the flight\n \"#)\n}\n\nclass GroceryReceipt {\n receiptId string @description(#\"\n The ID of the grocery receipt\n \"#)\n storeName string @description(#\"\n The name of the grocery store\n \"#)\n items (string | int | float)[] @description(#\"\n A list of items purchased. Each item consists of a name, quantity, and price.\n \"#)\n totalAmount float @description(#\"\n The total amount spent on groceries\n \"#)\n}\n\nclass CustomTaskResult {\n bookOrder BookOrder | null\n flightConfirmation FlightConfirmation | null\n groceryReceipt GroceryReceipt | null\n}\n\nfunction CustomTask(input: string) -> BookOrder | FlightConfirmation | GroceryReceipt {\n client \"openai/gpt-4o-mini\"\n prompt #\"\n Given the input string, extract either an order for a book, a flight confirmation, or a grocery receipt.\n\n {{ ctx.output_format }}\n\n Input:\n \n {{ input}}\n \"#\n}\n\ntest CustomTask {\n functions [CustomTask]\n args {\n input #\"\nDear [Your Name],\n\nThank you for booking with [Airline Name]! We are pleased to confirm your upcoming flight.\n\nFlight Confirmation Details:\n\nBooking Reference: ABC123\nPassenger Name: [Your Name]\nFlight Number: XY789\nDeparture Date: September 15, 2024\nDeparture Time: 10:30 AM\nArrival Time: 1:45 PM\nDeparture Airport: John F. Kennedy International Airport (JFK), New York, NY\nArrival Airport: Los Angeles International Airport (LAX), Los Angeles, CA\nSeat Number: 12A\nClass: Economy\nBaggage Allowance:\n\nChecked Baggage: 1 piece, up to 23 kg\nCarry-On Baggage: 1 piece, up to 7 kg\nImportant Information:\n\nPlease arrive at the airport at least 2 hours before your scheduled departure.\nCheck-in online via our website or mobile app to save time at the airport.\nEnsure that your identification documents are up to date and match the name on your booking.\nContact Us:\n\nIf you have any questions or need to make changes to your booking, please contact our customer service team at 1-800-123-4567 or email us at support@[airline].com.\n\nWe wish you a pleasant journey and thank you for choosing [Airline Name].\n\nBest regards,\n\n[Airline Name] Customer Service\n \"#\n }\n}", + "fiddle-examples/chain-of-thought.baml": "class Email {\n subject string\n body string\n from_address string\n}\n\nenum OrderStatus {\n ORDERED\n SHIPPED\n DELIVERED\n CANCELLED\n}\n\nclass OrderInfo {\n order_status OrderStatus\n tracking_number string?\n estimated_arrival_date string?\n}\n\nfunction GetOrderInfo(email: Email) -> OrderInfo {\n client GPT4\n prompt #\"\n Given the email below:\n\n ```\n from: {{email.from_address}}\n Email Subject: {{email.subject}}\n Email Body: {{email.body}}\n ```\n\n Extract this info from the email in JSON format:\n {{ ctx.output_format }}\n\n Before you output the JSON, please explain your\n reasoning step-by-step. Here is an example on how to do this:\n 'If we think step by step we can see that ...\n therefore the output JSON is:\n {\n ... the json schema ...\n }'\n \"#\n}", + "fiddle-examples/chat-roles.baml": "// This will be available as an enum in your Python and Typescript code.\nenum Category2 {\n Refund\n CancelOrder\n TechnicalSupport\n AccountIssue\n Question\n}\n\nfunction ClassifyMessage2(input: string) -> Category {\n client GPT4\n\n prompt #\"\n {{ _.role(\"system\") }}\n // You can use _.role(\"system\") to indicate that this text should be a system message\n\n Classify the following INPUT into ONE\n of the following categories:\n\n {{ ctx.output_format }}\n\n {{ _.role(\"user\") }}\n // And _.role(\"user\") to indicate that this text should be a user message\n\n INPUT: {{ input }}\n\n Response:\n \"#\n}", + "fiddle-examples/classify-message.baml": "// This will be available as an enum in your Python and Typescript code.\nenum Category {\n Refund\n CancelOrder\n TechnicalSupport\n AccountIssue\n Question\n}\n\nfunction ClassifyMessage(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}", + "fiddle-examples/extract-names.baml": "function ExtractNames(input: string) -> string[] {\n client GPT4\n prompt #\"\n Extract the names from this INPUT:\n \n INPUT:\n ---\n {{ input }}\n ---\n\n {{ ctx.output_format }}\n\n Response:\n \"#\n}\n", + "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}", + "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.75.0\"\n}\n\ngenerator lang_typescript {\n output_type typescript\n output_dir \"../typescript\"\n version \"0.75.0\"\n}\n\ngenerator lang_typescript_react {\n output_type typescript/react\n output_dir \"../react\"\n version \"0.75.0\"\n}\n\ngenerator lang_ruby {\n output_type ruby/sorbet\n output_dir \"../ruby\"\n version \"0.75.0\"\n}\n\ngenerator openapi {\n output_type rest/openapi\n output_dir \"../openapi\"\n version \"0.75.0\"\n on_generate \"rm .gitignore\"\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}", + "test-files/comments/comments.baml": "// add some functions, classes, enums etc with comments all over.", + "test-files/constraints/constraints.baml": "// These classes and functions test several properties of\n// constrains:\n//\n// - The ability for constrains on fields to pass or fail.\n// - The ability for constraints on bare args and return types to pass or fail.\n// - The ability of constraints to influence which variant of a union is chosen\n// by the parser, when the structure is not sufficient to decide.\n\n/// A Martian organism with an age.\n/// Such a nice type.\nclass Martian {\n /// The age of the Martian in Mars years.\n /// So many Mars years.\n age int @check(young_enough, {{ this < 30 }})\n}\n\nclass Earthling {\n age int @check(earth_aged, {{this < 200 and this > 0}}) @check(no_infants, {{this >1}})\n}\n\n\nclass FooAny {\n planetary_age Martian | Earthling\n certainty int @check(unreasonably_certain, {{this == 102931}})\n species string @check(trivial, {{this == \"Homo sapiens\"}}) @check(regex_good, {{this|regex_match(\"Homo\")}}) @check(regex_bad, {{this|regex_match(\"neanderthalensis\")}})\n}\n\n\nfunction PredictAge(name: string) -> FooAny {\n client GPT35\n prompt #\"\n Using your understanding of the historical popularity\n of names, predict the age of a person with the name\n {{ name }} in years. Also predict their genus and\n species. It's Homo sapiens (with exactly that spelling\n and capitalization). I'll give you a hint: If the name\n is \"Greg\", his age is 41.\n\n {{ctx.output_format}}\n \"#\n}\n\n\nfunction PredictAgeBare(inp: string @assert(big_enough, {{this|length > 1}})) -> int @check(too_big, {{this == 10102}}) {\n client GPT35\n prompt #\"\n Using your understanding of the historical popularity\n of names, predict the age of a person with the name\n {{ inp.name }} in years. Also predict their genus and\n species. It's Homo sapiens (with exactly that spelling).\n\n {{ctx.output_format}}\n \"#\n}\n\nfunction ReturnFailingAssert(inp: int @assert(small_int, {{this < 10}})) -> int @assert(big_int, {{this > 100}}) {\n client GPT35\n prompt #\"\n Return the next integer after {{ inp }}.\n\n {{ctx.output_format}}\n \"#\n}\n\nclass TwoStoriesOneTitle {\n title string\n story_a string @assert(too_long_story, {{this|length > 1000000}} )\n story_b string @assert(too_long_story, {{this|length > 1000000}} )\n}\n\nfunction StreamFailingAssertion(theme: string, length: int) -> TwoStoriesOneTitle {\n client GPT35\n prompt #\"\n Tell me two different stories along the theme of {{ theme }} with the same title.\n Please make each about {{ length }} words long.\n {{ctx.output_format}}\n \"#\n}\n\nclass BlockConstraint {\n foo int\n bar string\n @@check(cross_field, {{ this.bar|length > this.foo }})\n}\n\nfunction MakeBlockConstraint() -> BlockConstraint {\n client GPT35\n prompt #\"\n Generate an output in the following schema with a short string and a large int.\n\n {{ ctx.output_format }}\n \"#\n}\n\nclass NestedBlockConstraint {\n nbc BlockConstraint\n}\n\nclass BlockConstraintForParam {\n bcfp int\n bcfp2 string\n @@assert(hi, {{ this.bcfp2|length < this.bcfp }})\n}\n\nclass NestedBlockConstraintForParam {\n nbcfp BlockConstraintForParam\n}\n\nfunction MakeNestedBlockConstraint() -> NestedBlockConstraint {\n client GPT35\n prompt #\"Generate an output where the inner foo is 1 and the inner bar is \"hello\".\n {{ ctx.output_format }}\n \"#\n}\n\nfunction UseBlockConstraint(inp: BlockConstraintForParam) -> int {\n client GPT35\n prompt #\"\n Generate 3\n {{ ctx.output_format }}\n \"#\n}\n\nfunction UseNestedBlockConstraint(inp: NestedBlockConstraintForParam) -> int {\n client GPT35\n prompt #\"\n Generate 3\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/constraints/contact-info.baml": "class PhoneNumber {\n value string @assert(valid_phone_number, {{this|regex_match(\"\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}\")}})\n}\n\nclass EmailAddress {\n value string @assert(valid_email, {{this|regex_match(\"^[_]*([a-z0-9]+(\\.|_*)?)+@([a-z][a-z0-9-]+(\\.|-*\\.))+[a-z]{2,6}$\")}})\n}\n\nclass ContactInfo {\n primary PhoneNumber | EmailAddress\n secondary (PhoneNumber | EmailAddress)?\n}\n\nfunction ExtractContactInfo(document: string) -> ContactInfo {\n client GPT35\n prompt #\"\n Extract a primary contact info, and if possible a secondary contact\n info, from this document:\n\n {{ document }}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/constraints/malformed-constraints.baml": "class MalformedConstraints {\n foo int @check(foo_check, {{ this.length() > 0 }})\n}\n\nclass MalformedConstraints2 {\n foo int @assert(foo_check, {{ this.length() > 0 }})\n}\n\nfunction ReturnMalformedConstraints(a: int) -> MalformedConstraints {\n client GPT35\n prompt #\"\n Return the integer after {{ a }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction UseMalformedConstraints(a: MalformedConstraints2) -> int {\n client GPT35\n prompt #\"\n Return the integer after {{ a.foo }}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/descriptions/descriptions.baml": "\nclass Nested {\n prop3 string | null @description(#\"\n write \"three\"\n \"#)\n prop4 string | null @description(#\"\n write \"four\"\n \"#) @alias(\"blah\")\n prop20 Nested2\n}\n\nclass Nested2 {\n prop11 string | null @description(#\"\n write \"three\"\n \"#)\n prop12 string | null @description(#\"\n write \"four\"\n \"#) @alias(\"blah\")\n}\n\nclass Schema {\n prop1 string | null @description(#\"\n write \"one\"\n \"#)\n prop2 Nested | string @description(#\"\n write \"two\"\n \"#)\n prop5 (string | null)[] @description(#\"\n write \"hi\"\n \"#)\n prop6 string | Nested[] @alias(\"blah\") @description(#\"\n write the string \"blah\" regardless of the other types here\n \"#)\n nested_attrs (string | null | Nested)[] @description(#\"\n write the string \"nested\" regardless of other types\n \"#)\n parens (string | null) @description(#\"\n write \"parens1\"\n \"#)\n other_group (string | (int | string)) @description(#\"\n write \"other\"\n \"#) @alias(other)\n}\n\n\nfunction SchemaDescriptions(input: string) -> Schema {\n client GPT4o\n prompt #\"\n Return a schema with this format:\n\n {{ctx.output_format}}\n \"#\n}", + "test-files/dynamic/client-registry.baml": "// Intentionally use a bad key\nclient BadClient {\n provider openai\n options {\n model \"gpt-3.5-turbo\"\n api_key \"sk-invalid\"\n }\n}\n\nfunction ExpectFailure() -> string {\n client BadClient\n\n prompt #\"\n What is the capital of England?\n \"#\n}\n", + "test-files/dynamic/differentiate_unions.baml": "class OriginalA {\n value int\n}\n\nclass OriginalB {\n value int\n @@dynamic\n}\n\nfunction DifferentiateUnions() -> OriginalA | OriginalB {\n client \"openai/gpt-4o-mini\"\n prompt #\"\n Create a data model that represents the latter of the two classes.\n\n {{ ctx.output_format }}\n \"#\n}", + "test-files/dynamic/dynamic.baml": "class DynamicClassOne {\n @@dynamic\n}\n\nenum DynEnumOne {\n @@dynamic\n}\n\nenum DynEnumTwo {\n @@dynamic\n}\n\nclass SomeClassNestedDynamic {\n hi string\n @@dynamic\n\n}\n\nclass DynamicClassTwo {\n hi string\n some_class SomeClassNestedDynamic\n status DynEnumOne\n @@dynamic\n}\n\nfunction DynamicFunc(input: DynamicClassOne) -> DynamicClassTwo {\n client GPT35\n prompt #\"\n Please extract the schema from \n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nclass DynInputOutput {\n testKey string\n @@dynamic\n}\n\nfunction DynamicInputOutput(input: DynInputOutput) -> DynInputOutput {\n client GPT35\n prompt #\"\n Here is some input data:\n ----\n {{ input }}\n ----\n\n Extract the information.\n {{ ctx.output_format }}\n \"#\n}\n\nfunction DynamicListInputOutput(input: DynInputOutput[]) -> DynInputOutput[] {\n client GPT35\n prompt #\"\n Here is some input data:\n ----\n {{ input }}\n ----\n\n Extract the information.\n {{ ctx.output_format }}\n \"#\n}\n\n\n\nclass DynamicOutput {\n @@dynamic\n}\n \nfunction MyFunc(input: string) -> DynamicOutput {\n client GPT35\n prompt #\"\n Given a string, extract info using the schema:\n\n {{ input}}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction ClassifyDynEnumTwo(input: string) -> DynEnumTwo {\n client GPT35\n prompt #\"\n Given a string, extract info using the schema:\n\n {{ input}}\n\n {{ ctx.output_format }}\n \"#\n}", + "test-files/functions/input/named-args/single/named-audio.baml": "function AudioInput(aud: audio) -> string{\n client Gemini\n prompt #\"\n {{ _.role(\"user\") }}\n\n Does this sound like a roar? Yes or no? One word no other characters.\n \n {{ aud }}\n \"#\n}\n\n\ntest TestURLAudioInput{\n functions [AudioInput]\n args {\n aud{ \n url https://actions.google.com/sounds/v1/emergency/beeper_emergency_call.ogg\n }\n } \n}\n\n\n", + "test-files/functions/input/named-args/single/named-boolean.baml": "\n\nfunction TestFnNamedArgsSingleBool(myBool: bool) -> string{\n client GPT35\n prompt #\"\n Return this value back to me: {{myBool}}\n \"#\n}\n\ntest TestFnNamedArgsSingleBool {\n functions [TestFnNamedArgsSingleBool]\n args {\n myBool true\n }\n}", + "test-files/functions/input/named-args/single/named-class-list.baml": "\n\n\nfunction TestFnNamedArgsSingleStringList(myArg: string[]) -> string{\n client GPT35\n prompt #\"\n Return this value back to me: {{myArg}}\n \"#\n}\n\ntest TestFnNamedArgsSingleStringList {\n functions [TestFnNamedArgsSingleStringList]\n args {\n myArg [\"hello\", \"world\"]\n }\n}", + "test-files/functions/input/named-args/single/named-class-literal-prop.baml": "class LiteralClassHello {\n prop \"hello\"\n}\n\nfunction FnLiteralClassInputOutput(input: LiteralClassHello) -> LiteralClassHello {\n client GPT4\n prompt #\"\n Return the same object you were given.\n {{ ctx.output_format }}\n \"#\n}", + "test-files/functions/input/named-args/single/named-class-literal-union-prop.baml": "class LiteralClassOne {\n prop \"one\"\n}\n\nclass LiteralClassTwo {\n prop \"two\"\n}\n\nfunction FnLiteralUnionClassInputOutput(input: LiteralClassOne | LiteralClassTwo) -> LiteralClassOne | LiteralClassTwo {\n client GPT4\n prompt #\"\n Return the same object you were given.\n {{ ctx.output_format }}\n\n {{ _.role('user') }}\n {{ input }}\n \"#\n}\n", + "test-files/functions/input/named-args/single/named-class.baml": "class NamedArgsSingleClass {\n key string\n key_two bool\n key_three int\n // TODO: doesn't work with keys with numbers\n // key2 bool\n // key3 int\n}\n\nfunction TestFnNamedArgsSingleClass(myArg: NamedArgsSingleClass) -> string {\n client GPT35\n prompt #\"\n Print these values back to me:\n {{myArg.key}}\n {{myArg.key_two}}\n {{myArg.key_three}}\n \"#\n}\n\ntest TestFnNamedArgsSingleClass {\n functions [TestFnNamedArgsSingleClass]\n args {\n myArg {\n key \"example\",\n key_two true,\n key_three 42\n }\n }\n}\n\nfunction TestMulticlassNamedArgs(myArg: NamedArgsSingleClass, myArg2: NamedArgsSingleClass) -> string {\n client GPT35\n prompt #\"\n Print these values back to me:\n {{myArg.key}}\n {{myArg.key_two}}\n {{myArg.key_three}}\n {{myArg2.key}}\n {{myArg2.key_two}}\n {{myArg2.key_three}}\n \"#\n}", + "test-files/functions/input/named-args/single/named-enum-list.baml": "enum NamedArgsSingleEnumList {\n ONE\n TWO\n}\n\nfunction TestFnNamedArgsSingleEnumList(myArg: NamedArgsSingleEnumList[]) -> string {\n client GPT35\n prompt #\"\n Print these values back to me:\n {{myArg}}\n \"#\n}\n\ntest TestFnNamedArgsSingleEnumList {\n functions [TestFnNamedArgsSingleEnumList]\n args {\n myArg [ONE, TWO]\n }\n}", + "test-files/functions/input/named-args/single/named-enum.baml": "enum NamedArgsSingleEnum {\n ONE\n TWO\n}\n\nfunction FnTestNamedArgsSingleEnum(myArg: NamedArgsSingleEnum) -> string {\n client GPT35\n prompt #\"\n Print these values back to me:\n {{myArg}}\n \"#\n}\n\ntest FnTestNamedArgsSingleEnum {\n functions [FnTestNamedArgsSingleEnum]\n args {\n myArg ONE\n }\n}", + "test-files/functions/input/named-args/single/named-float.baml": "function TestFnNamedArgsSingleFloat(myFloat: float) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myFloat}}\n \"#\n}\n\ntest TestFnNamedArgsSingleFloat {\n functions [TestFnNamedArgsSingleFloat]\n args {\n myFloat 3.14\n }\n}\n", + "test-files/functions/input/named-args/single/named-image-list.baml": "function TestImageListInput(imgs: image[]) -> string{\n client GPT4o\n prompt #\"\n {{ _.role(\"user\") }}\n\n What colors do these have in common? {{imgs}}\n \"#\n}\n\ntest TestImageListInput {\n functions [TestImageListInput]\n args {\n imgs [\n {\n media_type \"image/png\"\n url \"https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png\"\n },\n {\n url \"https://upload.wikimedia.org/wikipedia/en/4/4d/Shrek_%28character%29.png\"\n }\n ]\n }\n}\n", + "test-files/functions/input/named-args/single/named-image.baml": "function TestImageInput(img: image) -> string{\n client GPT4o\n prompt #\"\n {{ _.role(\"user\") }}\n\n Describe this in 4 words. One word must be the color {{img}}\n \"#\n}\n\n\nfunction TestImageInputAnthropic(img: image) -> string{\n client Claude\n prompt #\"\n {{ _.role(\"user\") }}\n\n Describe this in 4 words {{img}}\n \"#\n}\n\ntest image_url_with_media_type {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n media_type \"image/jpeg\"\n // url gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png\n\n url \"https://www.pbs.org/wnet/nature/files/2023/11/Odontodactylus_scyllarus_Re%CC%81union-e1699977649790.jpg\"\n }\n }\n}\n\ntest image_url_without_media_type {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n url \"https://upload.wikimedia.org/wikipedia/en/4/4d/Shrek_%28character%29.png\"\n }\n }\n}\ntest image_file {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n file \"/Users/sam/mantis-shrimp.jpg\"\n // file \"Łukasiewicz.jpg\"\n }\n }\n}\n\ntest image_file_abspath {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n // curl -L -o ~/mantis-shrimp.jpg \"https://www.pbs.org/wnet/nature/files/2023/11/Odontodactylus_scyllarus_Re%CC%81union-e1699977649790.jpg\"\n file \"/Users/sam/mantis-shrimp.jpg\"\n }\n }\n}\n\ntest image_file_nonexistent {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n file \"does-not-exist.png\"\n }\n }\n}\n\ntest image_file_explicit_media_type {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n file \"Łukasiewicz.jpg\"\n media_type \"image/jpeg\"\n }\n }\n}\n\ntest image_base64 {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n base64 iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXdtdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEnxBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nHL0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2udLFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoePPQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlwjlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN979jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC17MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2reNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+huNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66PfyuRj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMThZ3kvgLI5AzFfo379UAAAAASUVORK5CYII=\n media_type \"image/png\"\n }\n }\n}\n\ntest image_base64_no_media_type {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n base64 iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXdtdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEnxBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nHL0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2udLFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoePPQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlwjlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN979jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC17MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2reNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+huNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66PfyuRj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMThZ3kvgLI5AzFfo379UAAAAASUVORK5CYII=\n }\n }\n}\n\ntest image_base64_data_url {\n functions [TestImageInput, TestImageInputAnthropic]\n args {\n img {\n base64 \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXdtdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEnxBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nHL0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2udLFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoePPQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlwjlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN979jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC17MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2reNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+huNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66PfyuRj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMThZ3kvgLI5AzFfo379UAAAAASUVORK5CYII=\"\n }\n }\n}", + "test-files/functions/input/named-args/single/named-int.baml": "// test for int\nfunction TestFnNamedArgsSingleInt(myInt: int) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myInt}}\n \"#\n}\n\ntest TestFnNamedArgsSingleInt {\n functions [TestFnNamedArgsSingleInt]\n args {\n myInt 42\n }\n}\n", + "test-files/functions/input/named-args/single/named-literal-bool.baml": "function TestNamedArgsLiteralBool(myBool: true) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myBool}}\n \"#\n}\n\ntest TestFnNamedArgsLiteralBool {\n functions [TestNamedArgsLiteralBool]\n args {\n myBool true\n }\n}", + "test-files/functions/input/named-args/single/named-literal-int.baml": "function TestNamedArgsLiteralInt(myInt: 1) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myInt}}\n \"#\n}\n\ntest TestFnNamedArgsLiteralInt {\n functions [TestNamedArgsLiteralInt]\n args {\n myInt 1\n }\n}", + "test-files/functions/input/named-args/single/named-literal-string.baml": "function TestNamedArgsLiteralString(myString: \"My String\") -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myString}}\n \"#\n}\n\ntest TestFnNamedArgsLiteralString {\n functions [TestNamedArgsLiteralString]\n args {\n myString \"My String\"\n }\n}", + "test-files/functions/input/named-args/single/named-map-string-to-class.baml": "class StringToClassEntry {\n word string\n}\n// test string\nfunction TestFnNamedArgsSingleMapStringToClass(myMap: map) -> map {\n client GPT35\n prompt #\"\n Return this value back to me: {{myMap}}\n \"#\n}\n\ntest TestFnNamedArgsSingleMapStringToClass {\n functions [TestFnNamedArgsSingleMapStringToClass]\n args {\n myMap {\n \"key\" {\n word \"lorem ipsum\"\n }\n }\n }\n}\n", + "test-files/functions/input/named-args/single/named-map-string-to-map.baml": "// test string\nfunction TestFnNamedArgsSingleMapStringToMap(myMap: map>) -> map> {\n client GPT35\n prompt #\"\n Return this value back to me: {{myMap}}\n \"#\n}\n\ntest TestFnNamedArgsSingleMapStringToMap {\n functions [TestFnNamedArgsSingleMapStringToMap]\n args {\n myMap {\n \"outer-key\" {\n \"key\" \"example string\"\n }\n }\n }\n}", + "test-files/functions/input/named-args/single/named-map-string-to-string.baml": "// test string\nfunction TestFnNamedArgsSingleMapStringToString(myMap: map) -> map {\n client GPT35\n prompt #\"\n Return this value back to me: {{myMap}}\n \"#\n}\n\ntest TestFnNamedArgsSingleMapStringToString {\n functions [TestFnNamedArgsSingleMapStringToString]\n args {\n myMap {\n \"key\" \"example string\"\n }\n }\n}\n", + "test-files/functions/input/named-args/single/named-string-list.baml": "// string[]\nfunction TestFnNamedArgsSingleStringArray(myStringArray: string[]) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myStringArray}}\n \"#\n}\n\ntest TestFnNamedArgsSingleStringArray {\n functions [TestFnNamedArgsSingleStringArray]\n args {\n myStringArray [\"example1\", \"example2\", \"example3\"]\n }\n}\n", + "test-files/functions/input/named-args/single/named-string-optional.baml": "\n\n // string[]\nfunction FnNamedArgsSingleStringOptional(myString: string?) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myString}}\n \"#\n}\n\ntest FnNamedArgsSingleStringOptional {\n functions [FnNamedArgsSingleStringOptional]\n args {\n myString \"example string\"\n }\n}\n\ntest FnNamedArgsSingleStringOptional2 {\n functions [FnNamedArgsSingleStringOptional]\n args {\n \n }\n}\n", + "test-files/functions/input/named-args/single/named-string.baml": "// test string\nfunction TestFnNamedArgsSingleString(myString: string) -> string {\n client GPT35\n prompt #\"\n Return this value back to me: {{myString}}\n \"#\n}\n\ntest TestFnNamedArgsSingleString {\n functions [TestFnNamedArgsSingleString]\n args {\n myString \"example string\"\n }\n}\n", + "test-files/functions/input/named-args/single/testcase_audio.baml": "test TestAudioInput {\n functions [AudioInput]\n args {\n aud {\n media_type \"audio/mp3\"\n base64 #\"\n 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\n\n\n\n \"#\n \n }\n }\n}\n \n \n ", + "test-files/functions/input/named-args/single/testcase_image.baml": "test TestImageInputBase64 {\n functions [TestImageInput]\n args {\n img {\n media_type \"image/png\"\n\n base64 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\n }\n }\n}\n\ntest TestBase64URLEscape{\n functions [TestImageInput]\n args{\n img{\n url \"data:image/png;base64,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\"\n }\n }\n}\n", + "test-files/functions/output/allowed_optionals.baml": "class OptionalListAndMap {\n p string[]?\n q map?\n}\n\nfunction AllowedOptionals(optionals: OptionalListAndMap) -> OptionalListAndMap {\n client GPT4\n prompt #\"\n Return the given input:\n\n {{optionals}}\n\n {{ctx.output_format}}\n \"#\n}", + "test-files/functions/output/big-integers.baml": "\nclass BigNumbers {\n a int\n b float\n}\n\nclass CompoundBigNumbers {\n big BigNumbers\n big_nums BigNumbers[]\n another BigNumbers\n}\n\nfunction StreamBigNumbers(digits: int) -> BigNumbers {\n client GPT35\n prompt #\"\n Please make sure every integer in the output has {{ digits }} digits.\n For floats, provide a mix - from 0-10 places before the decimal point,\n and 1-10 places after the decimal point. Bet.\n\n {{ctx.output_format}}\n \"#\n}\n\nfunction StreamOneBigNumber(digits: int) -> int {\n client GPT4\n prompt #\"\n Respond with only an integer, no affirmations or prefixes or anything.\n The response should be parsable as a JSON number.\n\n Please make sure the integer has {{ digits }} digits.\n\n {{ctx.output_format}}\n \"#\n}\n\nfunction StreamUnionIntegers(digits: int) -> (int | string)[] {\n client GPT4\n prompt #\"\n Please make sure the first item is an integer,\n and there are only 2 items in the list.\n Any integers must have {{ digits }} digits.\n\n Do not put quotes around the integer. If you chose to generate\n a string, please don't make it the string representation\n of an integer. Instead use common dog names.\n\n {{ctx.output_format}}\n \"#\n}\n\nfunction StreamingCompoundNumbers(digits: int, yapping: bool) -> CompoundBigNumbers {\n client GPT4\n prompt #\"\n\n {% if yapping %}\n Please give me a friendly response before outputting json. And put the JSON\n into a fenced code block.\n {% else %}\n Respond in pure json. Don't use any English descriptions like \"Sure, I'll do that\",\n nor put the result into a fenced code block.\n\n Just output a JSON value that could be parsed as JSON.\n {% endif %}\n\n Please make sure every integer has {{ digits }} digits.\n For floats, provide a mix - from 0-10 places before the decimal point,\n and 1-10 places after the decimal point. Bet.\n\n {{ctx.output_format}}\n \"#\n}\n", + "test-files/functions/output/boolean.baml": "function FnOutputBool(input: string) -> bool {\n client GPT35\n prompt #\"\n Return \"true\"\n \"#\n}\n\ntest FnOutputBool {\n functions [FnOutputBool]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/class-dynamic.baml": "class Person {\n name string?\n hair_color Color?\n\n @@dynamic\n}\n\nenum Color {\n RED\n BLUE\n GREEN\n YELLOW\n BLACK\n WHITE\n\n @@dynamic\n}\n\nfunction ExtractPeople(text: string) -> Person[] {\n client GPT4\n prompt #\"\n {{ _.role('system') }}\n\t\t 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.\n\t\t \n\t\t {# This is a special macro that prints out the output schema of the function #}\n\t\t {{ ctx.output_format }} \n\t\t \n\t\t {{ _.role('user') }}\n\t\t {{text}}\n \"#\n}\n\nenum Hobby {\n SPORTS\n MUSIC\n READING\n\n @@dynamic\n}\n\n\nfunction ExtractHobby(text: string) -> Hobby[] {\n client GPT4\n prompt #\"\n {{ _.role('system') }}\n {# This is a special macro that prints out the output schema of the function #}\n {{ ctx.output_format }} \n \n {{ _.role('user') }}\n {{text}}\n \"#\n}", + "test-files/functions/output/class-list.baml": "function FnOutputClassList(input: string) -> TestOutputClass[] {\n client GPT35\n prompt #\"\n Return a JSON array that follows this schema: \n {{ctx.output_format}}\n\n JSON:\n \"#\n}\n\ntest FnOutputClassList {\n functions [FnOutputClassList]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/class-nested.baml": "class TestClassNested {\n prop1 string\n prop2 InnerClass\n}\n\nclass InnerClass {\n prop1 string\n prop2 string\n inner InnerClass2\n}\n\nclass InnerClass2 {\n prop2 int\n prop3 float\n}\n\nfunction FnOutputClassNested(input: string) -> TestClassNested {\n client GPT35\n prompt #\"\n Return a made up json blob that matches this schema:\n {{ctx.output_format}}\n ---\n\n JSON:\n \"#\n}\n\ntest FnOutputClassNested {\n functions [FnOutputClassNested]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/class-with-enum.baml": "enum EnumInClass {\n ONE\n TWO\n}\n\nclass TestClassWithEnum {\n prop1 string\n prop2 EnumInClass\n}\n\nfunction FnOutputClassWithEnum(input: string) -> TestClassWithEnum {\n client GPT35\n prompt #\"\n Return a made up json blob that matches this schema:\n {{ctx.output_format}}\n ---\n\n JSON:\n \"#\n}\n\ntest FnOutputClassWithEnum {\n functions [FnOutputClassWithEnum]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/class.baml": "class TestOutputClass {\n prop1 string @description(\"A long string with about 200 words\")\n prop2 int\n}\n\nfunction FnOutputClass(input: string) -> TestOutputClass {\n client GPT35\n prompt #\"\n Return a JSON blob with this schema: \n {{ctx.output_format}}\n\n For the prop2, always return a 540\n\n JSON:\n \"#\n}\n\ntest TestClass {\n functions [FnOutputClass]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/enum-list.baml": "function FnEnumListOutput(input: string) -> EnumOutput[] {\n client GPT35\n prompt #\"\n Print out two of these values randomly selected from the list below in a json array.\n\n {{ctx.output_format}}\n\n Answer:\n \"#\n} \n\ntest FnEnumListOutput {\n functions [FnEnumListOutput]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/enum.baml": "/// An enum with three values,\n/// ONE, TWO and THREE.\nenum EnumOutput {\n\n /// The first enum.\n ONE\n\n /// The second enum.\n TWO\n THREE\n\n @@alias(\"VALUE_ENUM\")\n}\n\nfunction FnEnumOutput(input: string) -> EnumOutput {\n client GPT35\n prompt #\"\n Choose one of these values randomly. Before you give the answer, write out an unrelated haiku about the ocean.\n\n {{ctx.output_format(prefix=null)}}\n \"#\n}\n\ntest FnEnumOutput {\n functions [FnEnumOutput]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/int.baml": "function FnOutputInt(input: string) -> int {\n client GPT35\n prompt #\"\n Return the integer 5 with no additional context.\n \"#\n}\n\ntest FnOutputInt {\n functions [FnOutputInt]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/literal-boolean.baml": "function FnOutputLiteralBool(input: string) -> false {\n client GPT35\n prompt #\"\n Return a false: {{ ctx.output_format}}\n \"#\n}\n\ntest FnOutputLiteralBool {\n functions [FnOutputLiteralBool]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/literal-int.baml": "function FnOutputLiteralInt(input: string) -> 5 {\n client GPT35\n prompt #\"\n Return an integer: {{ ctx.output_format}}\n \"#\n}\n\ntest FnOutputLiteralInt {\n functions [FnOutputLiteralInt]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/literal-or-null.baml": "class ClassForNullLiteral {\n a \"hi\"\n}\n\nfunction NullLiteralClassHello(s: string) -> ClassForNullLiteral {\n client GPT35\n prompt #\"\n Return the empty object: {}.\n \"#\n}\n\ntest NullLiteralClassHello {\n functions [NullLiteralClassHello]\n args { s \"unused\" }\n}", + "test-files/functions/output/literal-string.baml": "function FnOutputLiteralString(input: string) -> \"example output\" {\n client GPT35\n prompt #\"\n Return a string: {{ ctx.output_format}}\n \"#\n}\n\ntest FnOutputLiteralString {\n functions [FnOutputLiteralString]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/literal-unions.baml": "function LiteralUnionsTest(input: string) -> 1 | true | \"string output\" {\n client GPT35\n prompt #\"\n Return one of these values without any additional context: \n {{ctx.output_format}}\n \"#\n}\n\ntest LiteralUnionsTest {\n functions [LiteralUnionsTest]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/map-enum-key.baml": "enum MapKey {\n A\n B\n C\n}\n\nfunction InOutEnumMapKey(i1: map, i2: map) -> map {\n client \"openai/gpt-4o\"\n prompt #\"\n Merge these: {{i1}} {{i2}}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/functions/output/map-literal-union-key.baml": "function InOutLiteralStringUnionMapKey(\n i1: map<\"one\" | \"two\" | (\"three\" | \"four\"), string>, \n i2: map<\"one\" | \"two\" | (\"three\" | \"four\"), string>\n) -> map<\"one\" | \"two\" | (\"three\" | \"four\"), string> {\n client \"openai/gpt-4o\"\n prompt #\"\n Merge these:\n \n {{i1}}\n \n {{i2}}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction InOutSingleLiteralStringMapKey(m: map<\"key\", string>) -> map<\"key\", string> {\n client \"openai/gpt-4o\"\n prompt #\"\n Return the same map you were given:\n \n {{m}}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/functions/output/mutually-recursive-classes.baml": "class Tree {\n data int\n children Forest\n}\n\nclass Forest {\n trees Tree[]\n}\n\nclass BinaryNode {\n data int\n left BinaryNode?\n right BinaryNode?\n}\n\nfunction BuildTree(input: BinaryNode) -> Tree {\n client GPT35\n prompt #\"\n Given the input binary tree, transform it into a generic tree using the given schema.\n\n INPUT:\n {{ input }}\n\n {{ ctx.output_format }} \n \"#\n}\n\ntest TestTree {\n functions [BuildTree]\n args {\n input {\n data 2\n left {\n data 1\n left null\n right null\n }\n right {\n data 3\n left null\n right null\n }\n }\n }\n}", + "test-files/functions/output/optional-class.baml": "class ClassOptionalOutput {\n prop1 string\n prop2 string\n}\n\nfunction FnClassOptionalOutput(input: string) -> ClassOptionalOutput? {\n client GPT35\n prompt #\"\n Return a json blob for the following input:\n {{input}}\n\n {{ctx.output_format}}\n\n JSON:\n \"#\n}\n\n\nclass Blah {\n prop4 string?\n}\n\nclass ClassOptionalOutput2 {\n prop1 string?\n prop2 string?\n prop3 Blah?\n}\n\nfunction FnClassOptionalOutput2(input: string) -> ClassOptionalOutput2? {\n client GPT35\n prompt #\"\n Return a json blob for the following input:\n {{input}}\n\n {{ctx.output_format}}\n\n JSON:\n \"#\n}\n\ntest FnClassOptionalOutput2 {\n functions [FnClassOptionalOutput2, FnClassOptionalOutput]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/optional.baml": "class OptionalTest_Prop1 {\n omega_a string\n omega_b int\n}\n\nenum OptionalTest_CategoryType {\n Aleph\n Beta\n Gamma\n}\n \nclass OptionalTest_ReturnType {\n omega_1 OptionalTest_Prop1?\n omega_2 string?\n omega_3 (OptionalTest_CategoryType?)[]\n} \n \nfunction OptionalTest_Function(input: string) -> (OptionalTest_ReturnType?)[]\n{ \n client GPT35\n prompt #\"\n Return a JSON blob with this schema: \n {{ctx.output_format}}\n\n JSON:\n \"#\n}\n\ntest OptionalTest_Function {\n functions [OptionalTest_Function]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/recursive-class.baml": "class Node {\n data int\n next Node?\n}\n\nclass LinkedList {\n head Node?\n len int\n}\n\nclient O1 {\n provider \"openai\"\n options {\n model \"o1-mini\"\n default_role \"user\"\n }\n}\n\nfunction BuildLinkedList(input: int[]) -> LinkedList {\n client O1\n prompt #\"\n Build a linked list from the input array of integers.\n\n INPUT:\n {{ input }}\n\n {{ ctx.output_format }} \n \"#\n}\n\ntest TestLinkedList {\n functions [BuildLinkedList]\n args {\n input [1, 2, 3, 4, 5]\n }\n}\n", + "test-files/functions/output/recursive-type-aliases.baml": "class LinkedListAliasNode {\n value int\n next LinkedListAliasNode?\n}\n\n// Simple alias that points to recursive type.\ntype LinkedListAlias = LinkedListAliasNode\n\nfunction AliasThatPointsToRecursiveType(list: LinkedListAlias) -> LinkedListAlias {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given linked list back:\n\n {{ list }}\n\n {{ ctx.output_format }}\n \"#\n}\n\n// Class that points to an alias that points to a recursive type.\nclass ClassToRecAlias {\n list LinkedListAlias\n}\n\nfunction ClassThatPointsToRecursiveClassThroughAlias(cls: ClassToRecAlias) -> ClassToRecAlias {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given object back:\n\n {{ cls }}\n\n {{ ctx.output_format }}\n \"#\n}\n\n// This is tricky cause this class should be hoisted, but classes and aliases\n// are two different types in the AST. This test will make sure they can interop.\nclass NodeWithAliasIndirection {\n value int\n next NodeIndirection?\n}\n\ntype NodeIndirection = NodeWithAliasIndirection\n\nfunction RecursiveClassWithAliasIndirection(cls: NodeWithAliasIndirection) -> NodeWithAliasIndirection {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given object back:\n\n {{ cls }}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntype JsonEntry = SimpleTag | JsonTemplate\n\ntype JsonTemplate = map\n\nclass SimpleTag {\n field string\n}\n\nfunction ReturnJsonEntry(s: string) -> JsonTemplate {\n client GPT4o\n prompt #\"\n {{ _.role(\"user\") }}\n\n Extract info from this string:\n {{ s }}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/functions/output/serialization-error.baml": "class DummyOutput {\n nonce string\n nonce2 string\n @@dynamic\n}\n\nfunction DummyOutputFunction(input: string) -> DummyOutput {\n client GPT35\n prompt #\"\n Say \"hello there\".\n \"#\n}", + "test-files/functions/output/string-list.baml": "function FnOutputStringList(input: string) -> string[] {\n client GPT35\n prompt #\"\n Return a list of strings in json format like [\"string1\", \"string2\", \"string3\"].\n\n JSON:\n \"#\n}\n\ntest FnOutputStringList {\n functions [FnOutputStringList]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/output/type-aliases.baml": "type Primitive = int | string | bool | float\n\ntype List = string[]\n\ntype Graph = map\n\ntype Combination = Primitive | List | Graph\n\nfunction PrimitiveAlias(p: Primitive) -> Primitive {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given value back: {{ p }}\n \"#\n}\n\nfunction MapAlias(m: Graph) -> Graph {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given Graph back:\n\n {{ m }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction NestedAlias(c: Combination) -> Combination {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given value back:\n\n {{ c }}\n\n {{ ctx.output_format }}\n \"#\n}\n\n// Test attribute merging.\ntype Currency = int @check(gt_ten, {{ this > 10 }})\ntype Amount = Currency @assert({{ this > 0 }})\n\nclass MergeAttrs {\n amount Amount @description(\"In USD\")\n}\n\n// This should be allowed.\ntype MultipleAttrs = int @assert({{ this > 0 }}) @check(gt_ten, {{ this > 10 }})\n\nfunction MergeAliasAttributes(money: int) -> MergeAttrs {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given integer in the specified format:\n\n {{ money }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction ReturnAliasWithMergedAttributes(money: Amount) -> Amount {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given integer without additional context:\n\n {{ money }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nfunction AliasWithMultipleAttrs(money: MultipleAttrs) -> MultipleAttrs {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given integer without additional context:\n\n {{ money }}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntype RecursiveMapAlias = map\n\nfunction SimpleRecursiveMapAlias(input: RecursiveMapAlias) -> RecursiveMapAlias {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given value:\n\n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntype RecursiveListAlias = RecursiveListAlias[]\n\nfunction SimpleRecursiveListAlias(input: RecursiveListAlias) -> RecursiveListAlias {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given JSON array:\n\n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntype RecAliasOne = RecAliasTwo\ntype RecAliasTwo = RecAliasThree\ntype RecAliasThree = RecAliasOne[]\n\nfunction RecursiveAliasCycle(input: RecAliasOne) -> RecAliasOne {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given JSON array:\n\n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntype JsonValue = int | string | bool | float | JsonObject | JsonArray\ntype JsonObject = map\ntype JsonArray = JsonValue[]\n\nfunction JsonTypeAliasCycle(input: JsonValue) -> JsonValue {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given input back:\n\n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n\nclass RecursiveAliasDependency {\n value JsonValue\n}\n\nfunction TakeRecAliasDep(input: RecursiveAliasDependency) -> RecursiveAliasDependency {\n client \"openai/gpt-4o\"\n prompt r#\"\n Return the given input back:\n\n {{ input }}\n\n {{ ctx.output_format }}\n \"#\n}\n", + "test-files/functions/output/unions.baml": "class UnionTest_ReturnType {\n prop1 string | bool\n prop2 (float | bool)[]\n prop3 (bool[] | int[])\n}\n\nfunction UnionTest_Function(input: string | bool) -> UnionTest_ReturnType {\n client GPT35\n prompt #\"\n Return a JSON blob with this schema: \n {{ctx.output_format}}\n\n JSON:\n \"#\n}\n\ntest UnionTest_Function {\n functions [UnionTest_Function]\n args {\n input \"example input\"\n }\n}\n", + "test-files/functions/prompts/no-chat-messages.baml": "\n\nfunction PromptTestClaude(input: string) -> string {\n client Sonnet\n prompt #\"\n Tell me a haiku about {{ input }}\n \"#\n}\n\n\nfunction PromptTestStreaming(input: string) -> string {\n client GPT35\n prompt #\"\n Tell me a short story about {{ input }}\n \"#\n}\n\ntest TestName {\n functions [PromptTestStreaming]\n args {\n input #\"\n hello world\n \"#\n }\n}\n", + "test-files/functions/prompts/with-chat-messages.baml": "\nfunction PromptTestOpenAIChat(input: string) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"system\") }}\n You are an assistant that always responds in a very excited way with emojis and also outputs this word 4 times after giving a response: {{ input }}\n \n {{ _.role(\"user\") }}\n Tell me a haiku about {{ input }}\n \"#\n}\n\nfunction PromptTestOpenAIChatNoSystem(input: string) -> string {\n client GPT35\n prompt #\"\n You are an assistant that always responds in a very excited way with emojis and also outputs this word 4 times after giving a response: {{ input }}\n \n {{ _.role(\"user\") }}\n Tell me a haiku about {{ input }}\n \"#\n}\n\nfunction PromptTestClaudeChat(input: string) -> string {\n client Claude\n prompt #\"\n {{ _.role(\"system\") }}\n You are an assistant that always responds in a very excited way with emojis and also outputs this word 4 times after giving a response: {{ input }}\n \n {{ _.role(\"user\") }}\n Tell me a haiku about {{ input }}\n \"#\n}\n\nfunction PromptTestClaudeChatNoSystem(input: string) -> string {\n client Claude\n prompt #\"\n You are an assistant that always responds in a very excited way with emojis and also outputs this word 4 times after giving a response: {{ input }}\n \n {{ _.role(\"user\") }}\n Tell me a haiku about {{ input }}\n \"#\n}\n\ntest TestSystemAndNonSystemChat1 {\n functions [PromptTestClaude, PromptTestOpenAI, PromptTestOpenAIChat, PromptTestOpenAIChatNoSystem, PromptTestClaudeChat, PromptTestClaudeChatNoSystem]\n args {\n input \"cats\"\n }\n}\n\ntest TestSystemAndNonSystemChat2 {\n functions [PromptTestClaude, PromptTestOpenAI, PromptTestOpenAIChat, PromptTestOpenAIChatNoSystem, PromptTestClaudeChat, PromptTestClaudeChatNoSystem]\n args {\n input \"lion\"\n }\n}", + "test-files/functions/v2/basic.baml": "\n\nfunction ExtractResume2(resume: string) -> Resume {\n client GPT4\n prompt #\"\n {{ _.role('system') }}\n\n Extract the following information from the resume:\n\n Resume:\n <<<<\n {{ resume }}\n <<<<\n\n Output JSON schema:\n {{ ctx.output_format }}\n\n JSON:\n \"#\n}\n\n\nclass WithReasoning {\n value string\n reasoning string @description(#\"\n Why the value is a good fit.\n \"#)\n}\n\n\nclass SearchParams {\n dateRange int? @description(#\"\n In ISO duration format, e.g. P1Y2M10D.\n \"#)\n location string[]\n jobTitle WithReasoning? @description(#\"\n An exact job title, not a general category.\n \"#)\n company WithReasoning? @description(#\"\n The exact name of the company, not a product or service.\n \"#)\n description WithReasoning[] @description(#\"\n Any specific projects or features the user is looking for.\n \"#)\n tags (Tag | string)[]\n}\n\nenum Tag {\n Security\n AI\n Blockchain\n}\n\nfunction GetQuery(query: string) -> SearchParams {\n client GPT4\n prompt #\"\n Extract the following information from the query:\n\n Query:\n <<<<\n {{ query }}\n <<<<\n\n OUTPUT_JSON_SCHEMA:\n {{ ctx.output_format }}\n\n Before OUTPUT_JSON_SCHEMA, list 5 intentions the user may have.\n --- EXAMPLES ---\n 1. \n 2. \n 3. \n 4. \n 5. \n\n {\n ... // OUTPUT_JSON_SCHEMA\n }\n \"#\n}\n\nclass RaysData {\n dataType DataType\n value Resume | Event\n}\n\nenum DataType {\n Resume\n Event\n}\n\nclass Event {\n title string\n date string\n location string\n description string\n}\n\nfunction GetDataType(text: string) -> RaysData {\n client GPT4\n prompt #\"\n Extract the relevant info.\n\n Text:\n <<<<\n {{ text }}\n <<<<\n\n Output JSON schema:\n {{ ctx.output_format }}\n\n JSON:\n \"#\n}", + "test-files/load-test/memory.baml": "\n\nclass MemoryObject {\n id string\n name string\n description string\n}\n\nclass ComplexMemoryObject {\n id string\n name string\n description string\n metadata (string | int | float)[] @description(#\"\n Additional metadata about the memory object, which can be a mix of types.\n \"#)\n}\n\nclass AnotherObject {\n id string\n thingy2 string\n thingy3 string\n}\n\nclass TestMemoryOutput {\n items (MemoryObject | ComplexMemoryObject | AnotherObject)[] @description(#\"\n Add 10 items, which can be either simple MemoryObjects or more complex MemoryObjects with metadata.\n \"#)\n more_items (MemoryObject | ComplexMemoryObject | AnotherObject)[] @description(#\"\n Add 3 more items, which can be either simple MemoryObjects or more complex MemoryObjects with metadata.\n \"#)\n}\n\n\nfunction TestMemory(input: string) -> TestMemoryOutput {\n client GPT35\n prompt #\"\n Return a json blob that matches the schema:\n {{ ctx.output_format }}\n \"#\n}\n\ntest TestName {\n functions [TestMemory]\n args {\n input #\"\n hello world\n \"#\n }\n}\n", + "test-files/providers/anthropic.baml": "function TestAnthropic(input: string) -> string {\n client Claude\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}\n\nfunction TestAnthropicShorthand(input: string) -> string {\n client \"anthropic/claude-3-haiku-20240307\"\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestCaching(input: string, not_cached: string) -> string {\n client ClaudeWithCaching\n prompt #\"\n {{ _.role('system', cache_control={\"type\": \"ephemeral\"}) }}\n Generate the following story\n {{ input }}\n\n {# Haiku require 2048 tokens to cache -#}\n {{ input }}\n\n {{ _.role('user') }}\n {{ not_cached }}\n \"#\n}", + "test-files/providers/aws.baml": "function TestAws(input: string) -> string {\n client AwsBedrock\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\n/// my docs\nclass UniverseQuestion {\n question string\n answer string\n}\n\nclass UniverseQuestionInput {\n question string\n}\n\nfunction TestUniverseQuestion(question: UniverseQuestionInput) -> UniverseQuestion {\n client AwsBedrock\n prompt #\"\n You are a helpful assistant that answers questions about the universe.\n\n {{ ctx.output_format }}\n\n {{ _.role(\"user\")}}\n\n Question: {{ question }}\n\n Answer:\n \"#\n}\n\n\nfunction TestAwsInvalidRegion(input: string) -> string {\n client AwsBedrockInvalidRegion\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidAccessKey(input: string) -> string {\n client AwsBedrockInvalidAccessKey\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidProfile(input: string) -> string {\n client AwsBedrockInvalidProfile\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestAwsInvalidSessionToken(input: string) -> string {\n client AwsBedrockInvalidSessionToken\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}", + "test-files/providers/azure.baml": "// Test standard Azure GPT-3.5 (should add default max_tokens)\nfunction TestAzure(input: string) -> string {\n client GPT35Azure\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O1 model without max_tokens (should not add default)\nfunction TestAzureO1NoMaxTokens(input: string) -> string {\n client AzureO1\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O1 model with explicit max_tokens (should keep user value)\nfunction TestAzureO1WithMaxTokens(input: string) -> string {\n client AzureO1WithMaxTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O1 model with explicit max_completion_tokens (should keep user value)\nfunction TestAzureO1WithMaxCompletionTokens(input: string) -> string {\n client AzureO1WithMaxCompletionTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test GPT-3.5 with explicit max_tokens (should keep user value)\nfunction TestAzureWithMaxTokens(input: string) -> string {\n client GPT35AzureWithMaxTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test failure case with invalid resource name\nfunction TestAzureFailure(input: string) -> string {\n client GPT35AzureFailed\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\nclient AzureWithNullMaxTokens {\n provider azure-openai\n options {\n resource_name env.AZURE_OPENAI_RESOURCE_NAME\n deployment_id env.AZURE_OPENAI_DEPLOYMENT_ID\n api_version \"2024-02-01\"\n max_tokens null\n }\n}\n\n// Test O3 model without max_tokens (should not add default)\nfunction TestAzureO3NoMaxTokens(input: string) -> string {\n client AzureO3\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O3 model with explicit max_completion_tokens (should keep user value)\nfunction TestAzureO3WithMaxCompletionTokens(input: string) -> string {\n client AzureO3WithMaxCompletionTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Add test cases to verify the behavior\ntest TestAzureClients {\n functions [\n TestAzure,\n TestAzureO1NoMaxTokens,\n TestAzureO1WithMaxTokens,\n TestAzureWithMaxTokens,\n TestAzureO1WithMaxCompletionTokens,\n TestAzureO3NoMaxTokens,\n TestAzureO3WithMaxCompletionTokens\n ]\n args {\n input \"Cherry blossoms\"\n }\n}\n\n// Test failure case separately\ntest TestAzureFailureCase {\n functions [TestAzureFailure]\n args {\n input \"Cherry blossoms\"\n }\n}", + "test-files/providers/gemini.baml": "function TestGemini(input: string) -> string {\n client Gemini\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiSystem(input: string) -> string {\n client Gemini\n prompt #\"\n {{ _.role('system') }}\n\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiSystemAsChat(input: string) -> string {\n client Gemini\n prompt #\"\n {{ _.role('system') }} You are a helpful assistant\n\n {{_.role(\"user\")}} Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestGeminiOpenAiGeneric() -> string {\n client GeminiOpenAiGeneric\n prompt #\"{{_.role(\"system\")}} You are a helpful assistant\n {{_.role(\"user\")}} Write a poem about llamas\n \"#\n}\n\ntest TestName {\n functions [TestGeminiSystem]\n args {\n input #\"\n hello world\n \"#\n }\n}\n", + "test-files/providers/ollama.baml": "function TestOllama(input: string) -> string {\n client Ollama\n prompt #\"\n Write a nice haiku about {{ input }}\n \"#\n}", + "test-files/providers/openai.baml": "function PromptTestOpenAI(input: string) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\nfunction TestOpenAILegacyProvider(input: string) -> string {\n client GPT35LegacyProvider\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\nfunction TestOpenAIShorthand(input: string) -> string {\n client GPT35\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test standard GPT-4 (should add default max_tokens)\nfunction TestOpenAI(input: string) -> string {\n client GPT4\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O1 model without max_tokens (should not add default)\nfunction TestOpenAIO1NoMaxTokens(input: string) -> string {\n client OpenAIO1\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O1 model with explicit max_tokens (should fail)\nfunction TestOpenAIO1WithMaxTokens(input: string) -> string {\n client OpenAIO1WithMaxTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test O1 model with explicit max_completion_tokens\nfunction TestOpenAIO1WithMaxCompletionTokens(input: string) -> string {\n client OpenAIO1WithMaxCompletionTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test GPT-4 with explicit max_tokens (should keep user value)\nfunction TestOpenAIWithMaxTokens(input: string) -> string {\n client GPT4WithMaxTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Test OpenAI with null max_tokens (should not add default)\nfunction TestOpenAIWithNullMaxTokens(input: string) -> string {\n client OpenAIWithNullMaxTokens\n prompt #\"\n {{ _.role(\"user\") }}\n Write a nice haiku, given the user input. Make sure to reference the input in the haiku.\n\n Input: {{ input }}\n \"#\n}\n\n// Add test cases to verify the behavior\ntest TestOpenAIClients {\n functions [\n TestOpenAI,\n TestOpenAIO1NoMaxTokens,\n TestOpenAIO1WithMaxTokens,\n TestOpenAIWithMaxTokens,\n TestOpenAIO1WithMaxCompletionTokens,\n TestOpenAIWithNullMaxTokens\n ]\n args {\n input \"Cherry blossoms\"\n }\n}\n\nclient OpenAIWithNullMaxTokens {\n provider openai\n options {\n api_key env.OPENAI_API_KEY\n model \"gpt-4\"\n max_tokens null\n }\n}", + "test-files/providers/tests.baml": "test TestOpenAIShorthand {\n functions [TestOpenAIShorthand]\n args {\n input \"Donkey kong and peanut butter\"\n }\n}\n\ntest TestAWS {\n functions [\n TestAws\n ]\n args {\n input \"Donkey kong and peanut butter\"\n }\n}\n\ntest TestProvider {\n functions [\n TestAnthropic, TestVertex, PromptTestOpenAI, TestAzure, TestOllama, TestGemini, TestAws,\n TestAwsInvalidRegion,\n TestOpenAIShorthand,\n TestAnthropicShorthand,\n TestAwsInvalidAccessKey,\n TestAwsInvalidProfile,\n TestAwsInvalidSessionToken\n ]\n args {\n input \"Donkey kong and peanut butter\"\n }\n}\n\ntest TestName {\n functions [TestCaching]\n args {\n input #\"\nIn a near-future society where dreams have become a tradable commodity and shared experience, a lonely and socially awkward teenager named Alex discovers they possess a rare and powerful ability to not only view but also manipulate the dreams of others. Initially thrilled by this newfound power, Alex begins subtly altering the dreams of classmates and family members, helping them overcome fears, boost confidence, or experience fantastical adventures. As Alex's skills grow, so does their influence. They start selling premium dream experiences on the black market, crafting intricate and addictive dreamscapes for wealthy clients. However, the line between dream and reality begins to blur for those exposed to Alex's creations. Some clients struggle to differentiate between their true memories and the artificial ones implanted by Alex's dream manipulation.\n\nComplications arise when a mysterious government agency takes notice of Alex's unique abilities. They offer Alex a chance to use their gift for \"the greater good,\" hinting at applications in therapy, criminal rehabilitation, and even national security. Simultaneously, an underground resistance movement reaches out, warning Alex about the dangers of dream manipulation and the potential for mass control and exploitation. Caught between these opposing forces, Alex must navigate a complex web of ethical dilemmas. They grapple with questions of free will, the nature of consciousness, and the responsibility that comes with having power over people's minds. As the consequences of their actions spiral outward, affecting the lives of loved ones and strangers alike, Alex is forced to confront the true nature of their ability and decide how—or if—it should be used.\n\nThe story explores themes of identity, the subconscious mind, the ethics of technology, and the power of imagination. It delves into the potential consequences of a world where our most private thoughts and experiences are no longer truly our own, and examines the fine line between helping others and manipulating them for personal gain or a perceived greater good. The narrative further expands on the societal implications of such abilities, questioning the moral boundaries of altering consciousness and the potential for abuse in a world where dreams can be commodified. It challenges the reader to consider the impact of technology on personal autonomy and the ethical responsibilities of those who wield such power.\n\nAs Alex's journey unfolds, they encounter various individuals whose lives have been touched by their dream manipulations, each presenting a unique perspective on the ethical quandaries at hand. From a classmate who gains newfound confidence to a wealthy client who becomes addicted to the dreamscapes, the ripple effects of Alex's actions are profound and far-reaching. The government agency's interest in Alex's abilities raises questions about the potential for state control and surveillance, while the resistance movement highlights the dangers of unchecked power and the importance of safeguarding individual freedoms.\n\nUltimately, Alex's story is one of self-discovery and moral reckoning, as they must decide whether to embrace their abilities for personal gain, align with the government's vision of a controlled utopia, or join the resistance in their fight for freedom and autonomy. The narrative invites readers to reflect on the nature of reality, the boundaries of human experience, and the ethical implications of a world where dreams are no longer private sanctuaries but shared and manipulated commodities. It also explores the psychological impact on Alex, who must deal with the burden of knowing the intimate fears and desires of others, and the isolation that comes from being unable to share their own dreams without altering them.\n\nThe story further examines the technological advancements that have made dream manipulation possible, questioning the role of innovation in society and the potential for both progress and peril. It considers the societal divide between those who can afford to buy enhanced dream experiences and those who cannot, highlighting issues of inequality and access. As Alex becomes more entangled in the web of their own making, they must confront the possibility that their actions could lead to unintended consequences, not just for themselves but for the fabric of society as a whole.\n\nIn the end, Alex's journey is a cautionary tale about the power of dreams and the responsibilities that come with wielding such influence. It serves as a reminder of the importance of ethical considerations in the face of technological advancement and the need to balance innovation with humanity. The story leaves readers pondering the true cost of a world where dreams are no longer sacred, and the potential for both wonder and danger in the uncharted territories of the mind. 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.\n\nIn 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.\n \"#\n not_cached #\"\n hello world\n \"#\n }\n}", + "test-files/providers/vertex.baml": "function TestVertex(input: string) -> string {\n client Vertex\n prompt #\"\n Write a nice short story about {{ input }}\n \"#\n}\n\nfunction TestVertexWithSystemInstructions() -> string {\n client Vertex\n prompt #\"{{_.role(\"system\")}} You are a helpful assistant\n {{_.role(\"user\")}} Write a poem about llamas\n \"#\n}\n\ntest TestVertex {\n functions [TestVertex, TestVertexWithSystemInstructions]\n args {\n input \"a cat\"\n\n }\n}\n", + "test-files/semantic_streaming/semantic_streaming.baml": "class SemanticContainer {\n sixteen_digit_number int\n string_with_twenty_words string @stream.done\n class_1 ClassWithoutDone\n class_2 ClassWithBlockDone\n class_done_needed ClassWithBlockDone @stream.not_null\n class_needed ClassWithoutDone @stream.not_null\n three_small_things SmallThing[] @description(\"Should have three items.\")\n final_string string\n}\n\nclass ClassWithoutDone {\n i_16_digits int\n s_20_words string @description(\"A string with 20 words in it\") @stream.with_state\n}\n\nclass ClassWithBlockDone {\n i_16_digits int\n s_20_words string\n @@stream.done\n}\n\nclass SmallThing {\n i_16_digits int @stream.not_null\n i_8_digits int\n}\n\nfunction MakeSemanticContainer() -> SemanticContainer {\n client GPT35\n prompt #\"\n {{ ctx.output_format }}\n \"#\n}", + "test-files/strategies/fallback-shorthand.baml": "\nclient FallbackToShorthand {\n provider fallback\n options {\n strategy [\n \"openai/does-not-exist\",\n \"openai/gpt-4o-mini\"\n ]\n }\n}\n\n\nfunction TestFallbackToShorthand(input: string) -> string {\n client FallbackToShorthand\n // TODO make it return the client name instead\n prompt #\"\n Say a haiku about {{input}}.\n \"#\n}\n\ntest TestProvider_FallbackToShorthand {\n functions [\n TestFallbackToShorthand\n ]\n args {\n input \"Donkey kong and peanut butter\"\n }\n}\n", + "test-files/strategies/fallback.baml": "// Happy path fallbacks.\nclient FaultyClient {\n provider openai\n options {\n model unknown-model\n api_key env.OPENAI_API_KEY\n }\n}\n\n\nclient FallbackClient {\n provider fallback\n options {\n // first 2 clients are expected to fail.\n strategy [\n FaultyClient,\n RetryClientConstant,\n GPT35\n Gemini\n\n ]\n }\n}\n\nfunction TestFallbackClient() -> string {\n client FallbackClient\n // TODO make it return the client name instead\n prompt #\"\n Say a haiku about mexico.\n \"#\n}\n\n// Fallbacks should fail gracefully.\nclient FaultyAzureClient {\n provider azure-openai\n options {\n model unknown-model\n resource_name \"unknown-resource-id\"\n deployment_id \"unknown-deployment-id\"\n }\n}\n\nclient SingleFallbackClient {\n provider fallback\n options {\n // first 2 clients are expected to fail.\n strategy [\n FaultyAzureClient\n ]\n }\n}\n\nfunction TestSingleFallbackClient() -> string {\n client SingleFallbackClient\n // TODO make it return the client name instead\n prompt #\"\n Say a haiku about mexico.\n \"#\n}\n", + "test-files/strategies/retry.baml": "\nretry_policy Exponential {\n max_retries 3\n strategy {\n type exponential_backoff\n }\n}\n\nretry_policy Constant {\n max_retries 3\n strategy {\n type constant_delay\n delay_ms 100\n }\n}\n\nclient RetryClientConstant {\n provider openai\n retry_policy Constant\n options {\n model \"gpt-3.5-turbo\"\n api_key \"blah\"\n }\n}\n\nclient RetryClientExponential {\n provider openai\n retry_policy Exponential\n options {\n model \"gpt-3.5-turbo\"\n api_key \"blahh\"\n }\n}\n\nfunction TestRetryConstant() -> string {\n client RetryClientConstant\n prompt #\"\n Say a haiku\n \"#\n}\n\nfunction TestRetryExponential() -> string {\n client RetryClientExponential\n prompt #\"\n Say a haiku\n \"#\n}\n", + "test-files/strategies/roundrobin.baml": "", + "test-files/template_string/template_string.baml": "\nfunction Completion(prefix: string, suffix: string, language: string) -> string {\n client \"openai/gpt-4o\"\n prompt ##\"\n {{ _.role(\"system\", cache_control={\"type\": \"ephemeral\"}) }}\n\n You are a programmer that suggests code completions in the %INSERT-HERE% part below with {{ language }} code. Only output the code that replaces %INSERT-HERE% part, NOT THE SUFFIX OR PREFIX. Respond only with code, and with no markdown formatting.\n\n Try to complete a whole section inside curlies when you can.\n\n {% if language == \"baml\" %}\n {{ BAMLBackground2()}}\n\n Examples:\n INPUT:\n ---\n class MyObject {{\"{\"}}%INSERT-HERE%\n }\n ---\n OUTPUT:\n ---\n property string\n ---\n In this example, we just inserted one line, with tabs for a fake property to aid the user.\n\n INPUT:\n ---\n function foo(input: string) -> string {{\"{\"}} %INSERT-HERE%\n prompt #\"\n {{ \"{{ input }}\" }}\n \"#\n }\n ---\n OUTPUT:\n ---\n client \"openai/gpt-4o\"\n ---\n In this example, no need to add the prompt because it was part of the suffix after INSERT-HERE\n\n INPUT:\n OUTPUT: N/A\n In this example there was nothing to complete, so we returned N/A.\n\n Ignore the \"---\" in your outputs.\n {% endif %}\n\n\n {{ _.role(\"user\") }}\n INPUT:\n ---\n {{ prefix }}%INSERT-HERE%{{ suffix }}\n ---\n \"##\n}\n\ntest CompletionTest3 {\n functions [Completion]\n args {\n prefix ##\"function foo(input: string) -> string {\n client \"openai/gpt-4o\"\n prompt #\"\n \"##\n suffix \"\"\n language \"baml\"\n }\n}\n\ntest CompletionTest2 {\n functions [Completion]\n args {\n prefix \"function foo(input: string) -> string {\\n\"\n suffix \"\\n prompt #\\n\\\"\"\n language \"baml\"\n }\n}\n \ntemplate_string Hi(\n hello: string,\n world: string,\n) ##\"\n {{ hello }} {{ world }}\n\"##\n\ntemplate_string Hi3(\n hello: string,\n world: string,\n) #\"\n {{ hello }} {{ world }}\n\"#\n\ntemplate_string BAMLBackground2() ##\"\n \n BAML is a domain-specific language for building LLM prompts as functions.\n client \"openai/gpt-4o\"\n // prompt with jinja syntax inside here. with double curly braces for variables.\n // make sure to include: {{ \"{{ ctx.output_format }}\"}} in the prompt, which prints the output schema instructions so the LLM returns the output in the correct format (json or string, etc.). DO NOT write the output schema manually.\n prompt #\"\n \n \"#\n }\n\n 3. You do not need to specify to \"answer in JSON format\". Only write in the prompt brief instruction, and any other task-specific things to keep in mind for the task.\n 4. Write a {{ \"{{ _.role(\\\"user\\\") }}\" }} tag to indicate where the user's inputs start. So if there's a convo you can write\n #\"{{ \"{{ _.role(\\\"user\\\") }}\" }} {{ \"{{ some-variable }}\" }}#\n \n \n\n The @asserts only go in the \"output\" types. Don't use them in inputs.\n Do NOT use numbers as confidence intervals if you need to use them. Prefer an enum with descriptions or literals like \"high\", \"medium\", \"low\".\n\n Dedent all declarations.\n\"##\n\ntemplate_string BamlTests() ##\"\n // For image inputs:\n test ImageTest {\n functions [MyFunction]\n args {\n imageArg {\n file \"../images/test.png\"\n // Optional: media_type \"image/png\"\n }\n // Or using URL:\n // imageArg {\n // url \"https://example.com/image.png\"\n // }\n }\n }\n\n // For array/object inputs:\n test ComplexTest {\n functions [MyFunction]\n args {\n input {\n name \"Complex Object\"\n tags [\n \"tag1\",\n #\"\n Multi-line\n tag here\n \"#\n ]\n status PENDING\n type \"error\"\n count 100\n enabled false\n score 7.8\n }\n }\n }\n\"##\n", + "test-files/test-asserts-checks/asserts.baml": "\nfunction AssertFn(a: int) -> int {\n client GPT35\n prompt #\"\n Return the integer after {{ a }}\n\n {{ ctx.output_format }}\n \"#\n}\n\n\ntest AssertFn {\n functions [AssertFn]\n args {\n a 1\n }\n // test syntax highlighting\n @@assert(test_name, {{ this[0].datetime == \"hi, thereerwc[]{}[]\"}})\n @@assert({{\"let me know if ,er\"}})\n @@assert(test_name, {{ this[0].datetime == \"Wed, 06 nov (PST)\"}})\n}\n", + "test-files/testing_pipeline/output-format.baml": "class Recipe {\n ingredients map\n recipe_type \"breakfast\" | \"dinner\"\n}\n\nclass Quantity {\n amount int | float\n unit string?\n}\n\nfunction AaaSamOutputFormat(recipe: string) -> Recipe {\n client GPT35\n prompt #\"\n Return this value back to me: {{recipe}}\n\n {{ctx.output_format(map_style='angle')}}\n \"#\n}\n\ntest MyOutput {\n functions [AaaSamOutputFormat]\n args {\n recipe #\"\n Here's a simple recipe for beef stew:\nIngredients:\n\n2 lbs beef chuck, cut into 1-inch cubes\n2 tbsp vegetable oil\n1 onion, diced\n3 carrots, sliced\n2 celery stalks, chopped\n2 potatoes, cubed\n3 cloves garlic, minced\n4 cups beef broth\n1 can (14.5 oz) diced tomatoes\n1 tbsp Worcestershire sauce\n1 tsp dried thyme\n1 bay leaf\nSalt and pepper to taste\n\nInstructions:\n\nSeason beef with salt and pepper. Heat oil in a large pot over medium-high heat. Brown the beef in batches, then set aside.\nIn the same pot, sauté onion, carrots, and celery until softened, about 5 minutes.\nAdd garlic and cook for another minute.\nReturn beef to the pot. Add broth, tomatoes, Worcestershire sauce, thyme, and bay leaf.\nBring to a boil, then reduce heat and simmer covered for 1 hour.\nAdd potatoes and continue simmering for 30-45 minutes, until beef and potatoes are tender.\nRemove bay leaf, adjust seasoning if needed, and serve hot.\n\nWould you like any additional information or variations on this recipe?\n \"#\n }\n}\n", + "test-files/testing_pipeline/resume.baml": "class Resume {\n name string\n email string\n phone string\n experience Education[]\n education string[]\n skills string[]\n}\n\nclass Education {\n institution string\n location string\n degree string\n major string[]\n graduation_date string?\n}\n\ntemplate_string AddRole(foo: string) #\"\n {{ _.role('system')}}\n You are a {{ foo }}. be nice\n\n {{ _.role('user') }}\n\"#\n\nclient TestClient {\n provider fallback\n retry_policy Constant\n options {\n strategy [\n Claude\n GPT35\n AwsBedrock\n ]\n }\n}\n\nclient Claude2 {\n provider anthropic\n options {\n model claude-3-haiku-20240307\n api_key env.FOOBAR3\n max_tokens 1000\n }\n}\n\nfunction ExtractResume(resume: string, img: image?) -> Resume {\n client Claude2\n prompt #\"\n {{ AddRole(\"Software Engineer\") }}\n\n Extract data:\n \n\n <<<<\n {{ resume }}\n <<<<\n\n {% if img %}\n {{img}}\n {% endif %}\n\n {{ ctx.output_format }}\n \"#\n}\n\ntest sam_resume {\n functions [ExtractResume]\n args {\n img {\n url \"https://avatars.githubusercontent.com/u/1016595?v=4\"\n }\n resume #\"\n Sam Lijin\n he/him | jobs@sxlijin.com | sxlijin.github.io | 111-222-3333 | sxlijin | sxlijin\n\n Experience\n Trunk\n | July 2021 - current\n Trunk Check | Senior Software Engineer | Services TL, Mar 2023 - current | IC, July 2021 - Feb 2023\n Proposed, designed, and led a team of 3 to build a web experience for Check (both a web-only onboarding flow and SaaS offerings)\n Proposed and built vulnerability scanning into Check, enabling it to compete with security products such as Snyk\n Helped grow Check from <1K users to 90K+ users by focusing on product-led growth\n Google | Sept 2017 - June 2021\n User Identity SRE | Senior Software Engineer | IC, Mar 2021 - June 2021\n Designed an incremental key rotation system to limit the global outage risk to Google SSO\n Discovered and severed an undocumented Gmail serving dependency on Identity-internal systems\n Cloud Firestore | Senior Software Engineer | EngProd TL, Aug 2019 - Feb 2021 | IC, Sept 2017 - July 2019\n Metadata TTL system: backlog of XX trillion records, sustained 1M ops/sec, peaking at 3M ops/sec\n\n Designed and implemented a logging system with novel observability and privacy requirements\n Designed and implemented Jepsen-style testing to validate correctness guarantees\n Datastore Migration: zero downtime, xM RPS and xxPB of data over xM customers and 36 datacenters\n\n Designed composite index migration, queue processing migration, progressive rollout, fast rollback, and disk stockout mitigations; implemented transaction log replay, state transitions, and dark launch process\n Designed and implemented end-to-end correctness and performance testing\n Velocity improvements for 60-eng org\n\n Proposed and implemented automated rollbacks: got us out of a 3-month release freeze and prevented 5 outages over the next 6 months\n Proposed and implemented new development and release environments spanning 30+ microservices\n Incident response for API proxy rollback affecting every Google Cloud service\n\n Google App Engine Memcache | Software Engineer | EngProd TL, Apr 2019 - July 2019\n Proposed and led execution of test coverage improvement strategy for a new control plane: reduced rollbacks and ensured strong consistency of a distributed cache serving xxM QPS\n Designed and implemented automated performance regression testing for two critical serving paths\n Used to validate Google-wide rollout of AMD CPUs, by proving a 50p latency delta of <10µs\n Implemented on shared Borg (i.e. vulnerable to noisy neighbors) with <12% variance\n Miscellaneous | Sept 2017 - June 2021\n Redesigned the Noogler training on Google-internal storage technologies & trained 2500+ Nooglers\n Landed multiple google3-wide refactorings, each spanning xxK files (e.g. SWIG to CLIF)\n Education\n Vanderbilt University (Nashville, TN) | May 2017 | B.S. in Computer Science, Mathematics, and Political Science\n\n Stuyvesant HS (New York, NY) | 2013\n\n Skills\n C++, Java, Typescript, Javascript, Python, Bash; light experience with Rust, Golang, Scheme\n gRPC, Bazel, React, Linux\n Hobbies: climbing, skiing, photography\n \"#\n }\n}\n\ntest vaibhav_resume {\n functions [ExtractResume]\n args {\n resume #\"\n Vaibhav Gupta\n linkedin/vaigup\n (972) 400-5279\n vaibhavtheory@gmail.com\n EXPERIENCE\n Google,\n Software Engineer\n Dec 2018-Present\n Seattle, WA\n •\n Augmented Reality,\n Depth Team\n •\n Technical Lead for on-device optimizations\n •\n Optimized and designed front\n facing depth algorithm\n on Pixel 4\n •\n Focus: C++ and SIMD on custom silicon\n \n \n EDUCATION\n University of Texas at Austin\n Aug 2012-May 2015\n Bachelors of Engineering, Integrated Circuits\n Bachelors of Computer Science\n \"#\n }\n}", +} +export const getBamlFiles = () => { + return fileMap; +} \ No newline at end of file diff --git a/integ-tests/react/baml_client/partial_types.ts b/integ-tests/react/baml_client/partial_types.ts new file mode 100644 index 000000000..6007f625f --- /dev/null +++ b/integ-tests/react/baml_client/partial_types.ts @@ -0,0 +1,538 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import type { Image, Audio } from "@boundaryml/baml" +import type { Checked, Check } from "./types" +import type { AliasedEnum, AnotherObject, BigNumbers, BinaryNode, Blah, BlockConstraint, BlockConstraintForParam, BookOrder, Category, Category2, Category3, ClassForNullLiteral, ClassOptionalOutput, ClassOptionalOutput2, ClassToRecAlias, ClassWithBlockDone, ClassWithImage, ClassWithoutDone, Color, ComplexMemoryObject, CompoundBigNumbers, ContactInfo, CustomTaskResult, DataType, DummyOutput, DynEnumOne, DynEnumTwo, DynInputOutput, DynamicClassOne, DynamicClassTwo, DynamicOutput, Earthling, Education, Email, EmailAddress, EnumInClass, EnumOutput, Event, FakeImage, FlightConfirmation, FooAny, Forest, FormatterTest0, FormatterTest1, FormatterTest2, FormatterTest3, GroceryReceipt, Hobby, InnerClass, InnerClass2, InputClass, InputClassNested, JsonArray, JsonEntry, JsonObject, JsonTemplate, JsonValue, LinkedList, LinkedListAliasNode, LiteralClassHello, LiteralClassOne, LiteralClassTwo, MalformedConstraints, MalformedConstraints2, MapKey, Martian, MemoryObject, MergeAttrs, NamedArgsSingleClass, NamedArgsSingleEnum, NamedArgsSingleEnumList, Nested, Nested2, NestedBlockConstraint, NestedBlockConstraintForParam, Node, NodeWithAliasIndirection, OptionalListAndMap, OptionalTest_CategoryType, OptionalTest_Prop1, OptionalTest_ReturnType, OrderInfo, OrderStatus, OriginalA, OriginalB, Person, PhoneNumber, Quantity, RaysData, RecAliasOne, RecAliasThree, RecAliasTwo, ReceiptInfo, ReceiptItem, Recipe, RecursiveAliasDependency, RecursiveListAlias, RecursiveMapAlias, Resume, Schema, SearchParams, SemanticContainer, SimpleTag, SmallThing, SomeClassNestedDynamic, StringToClassEntry, Tag, TestClassAlias, TestClassNested, TestClassWithEnum, TestEnum, TestMemoryOutput, TestOutputClass, Tree, TwoStoriesOneTitle, UnionTest_ReturnType, UniverseQuestion, UniverseQuestionInput, WithReasoning } from "./types" +import type * as types from "./types" + +/****************************************************************************** +* +* These types are used for streaming, for when an instance of a type +* is still being built up and any of its fields is not yet fully available. +* +******************************************************************************/ + +export interface StreamState { + value: T + state: "Pending" | "Incomplete" | "Complete" +} + +export namespace partial_types { + + export interface AnotherObject { + id?: (string | null) + thingy2?: (string | null) + thingy3?: (string | null) + } + + export interface BigNumbers { + a?: (number | null) + b?: (number | null) + } + + export interface BinaryNode { + data?: (number | null) + left: ((partial_types.BinaryNode | null) | null) + right: ((partial_types.BinaryNode | null) | null) + } + + export interface Blah { + prop4: ((string | null) | null) + } + + export interface BlockConstraint { + foo?: (number | null) + bar?: (string | null) + } + + export interface BlockConstraintForParam { + bcfp?: (number | null) + bcfp2?: (string | null) + } + + export interface BookOrder { + orderId?: (string | null) + title?: (string | null) + quantity?: (number | null) + price?: (number | null) + } + + export interface ClassForNullLiteral { + a: "hi" + } + + export interface ClassOptionalOutput { + prop1?: (string | null) + prop2?: (string | null) + } + + export interface ClassOptionalOutput2 { + prop1: ((string | null) | null) + prop2: ((string | null) | null) + prop3: ((partial_types.Blah | null) | null) + } + + export interface ClassToRecAlias { + list?: (partial_types.LinkedListAliasNode | null) + } + + export interface ClassWithBlockDone { + i_16_digits?: (number | null) + s_20_words?: (string | null) + } + + export interface ClassWithImage { + myImage?: (Image | null) + param2?: (string | null) + fake_image?: (partial_types.FakeImage | null) + } + + export interface ClassWithoutDone { + i_16_digits?: (number | null) + s_20_words?: StreamState<(string | null)> + } + + export interface ComplexMemoryObject { + id?: (string | null) + name?: (string | null) + description?: (string | null) + metadata?: ((string | null) | (number | null) | (number | null) | null)[] + } + + export interface CompoundBigNumbers { + big?: (partial_types.BigNumbers | null) + big_nums?: (partial_types.BigNumbers | null)[] + another?: (partial_types.BigNumbers | null) + } + + export interface ContactInfo { + primary?: ((partial_types.PhoneNumber | null) | (partial_types.EmailAddress | null) | null) + secondary?: ((partial_types.PhoneNumber | null) | (partial_types.EmailAddress | null) | (null | null) | null) + } + + export interface CustomTaskResult { + bookOrder?: ((partial_types.BookOrder | null) | ((null | null) | null) | null) + flightConfirmation?: ((partial_types.FlightConfirmation | null) | ((null | null) | null) | null) + groceryReceipt?: ((partial_types.GroceryReceipt | null) | ((null | null) | null) | null) + } + + export interface DummyOutput { + nonce?: (string | null) + nonce2?: (string | null) + [key: string]: any; + } + + export interface DynInputOutput { + testKey?: (string | null) + [key: string]: any; + } + + export interface DynamicClassOne { + [key: string]: any; + } + + export interface DynamicClassTwo { + hi?: (string | null) + some_class?: (partial_types.SomeClassNestedDynamic | null) + status?: (string | DynEnumOne | null) + [key: string]: any; + } + + export interface DynamicOutput { + [key: string]: any; + } + + export interface Earthling { + age?: Checked<(number | null),"earth_aged" | "no_infants"> + } + + export interface Education { + institution?: (string | null) + location?: (string | null) + degree?: (string | null) + major?: (string | null)[] + graduation_date: ((string | null) | null) + } + + export interface Email { + subject?: (string | null) + body?: (string | null) + from_address?: (string | null) + } + + export interface EmailAddress { + value?: (string | null) + } + + export interface Event { + title?: (string | null) + date?: (string | null) + location?: (string | null) + description?: (string | null) + } + + export interface FakeImage { + url?: (string | null) + } + + export interface FlightConfirmation { + confirmationNumber?: (string | null) + flightNumber?: (string | null) + departureTime?: (string | null) + arrivalTime?: (string | null) + seatNumber?: (string | null) + } + + export interface FooAny { + planetary_age?: ((partial_types.Martian | null) | (partial_types.Earthling | null) | null) + certainty?: Checked<(number | null),"unreasonably_certain"> + species?: Checked<(string | null),"regex_bad" | "regex_good" | "trivial"> + } + + export interface Forest { + trees?: (partial_types.Tree | null)[] + } + + export interface FormatterTest0 { + lorem?: (string | null) + ipsum?: (string | null) + } + + export interface FormatterTest1 { + lorem?: (string | null) + ipsum?: (string | null) + } + + export interface FormatterTest2 { + lorem?: (string | null) + ipsum?: (string | null) + } + + export interface FormatterTest3 { + lorem?: (string | null) + ipsum?: (string | null) + } + + export interface GroceryReceipt { + receiptId?: (string | null) + storeName?: (string | null) + items?: ((string | null) | (number | null) | (number | null) | null)[] + totalAmount?: (number | null) + } + + export interface InnerClass { + prop1?: (string | null) + prop2?: (string | null) + inner?: (partial_types.InnerClass2 | null) + } + + export interface InnerClass2 { + prop2?: (number | null) + prop3?: (number | null) + } + + export interface InputClass { + key?: (string | null) + key2?: (string | null) + } + + export interface InputClassNested { + key?: (string | null) + nested?: (partial_types.InputClass | null) + } + + export interface LinkedList { + head: ((partial_types.Node | null) | null) + len?: (number | null) + } + + export interface LinkedListAliasNode { + value?: (number | null) + next: ((partial_types.LinkedListAliasNode | null) | null) + } + + export interface LiteralClassHello { + prop: "hello" + } + + export interface LiteralClassOne { + prop: "one" + } + + export interface LiteralClassTwo { + prop: "two" + } + + export interface MalformedConstraints { + foo?: Checked<(number | null),"foo_check"> + } + + export interface MalformedConstraints2 { + foo?: (number | null) + } + + /** + * A Martian organism with an age. + * Such a nice type. + */ + export interface Martian { + /** + * The age of the Martian in Mars years. + * So many Mars years. + */ + age?: Checked<(number | null),"young_enough"> + } + + export interface MemoryObject { + id?: (string | null) + name?: (string | null) + description?: (string | null) + } + + export interface MergeAttrs { + amount?: Checked<(number | null),"gt_ten"> + } + + export interface NamedArgsSingleClass { + key?: (string | null) + key_two?: (boolean | null) + key_three?: (number | null) + } + + export interface Nested { + prop3?: ((string | null) | ((null | null) | null) | null) + prop4?: ((string | null) | ((null | null) | null) | null) + prop20?: (partial_types.Nested2 | null) + } + + export interface Nested2 { + prop11?: ((string | null) | ((null | null) | null) | null) + prop12?: ((string | null) | ((null | null) | null) | null) + } + + export interface NestedBlockConstraint { + nbc?: Checked<(partial_types.BlockConstraint | null),"cross_field"> + } + + export interface NestedBlockConstraintForParam { + nbcfp?: (partial_types.BlockConstraintForParam | null) + } + + export interface Node { + data?: (number | null) + next: ((partial_types.Node | null) | null) + } + + export interface NodeWithAliasIndirection { + value?: (number | null) + next: ((partial_types.NodeWithAliasIndirection | null) | null) + } + + export interface OptionalListAndMap { + p: ((string | null)[] | null) + q: ((Record | null) | null) + } + + export interface OptionalTest_Prop1 { + omega_a?: (string | null) + omega_b?: (number | null) + } + + export interface OptionalTest_ReturnType { + omega_1: ((partial_types.OptionalTest_Prop1 | null) | null) + omega_2: ((string | null) | null) + omega_3?: ((OptionalTest_CategoryType | null) | null)[] + } + + export interface OrderInfo { + order_status?: (OrderStatus | null) + tracking_number: ((string | null) | null) + estimated_arrival_date: ((string | null) | null) + } + + export interface OriginalA { + value?: (number | null) + } + + export interface OriginalB { + value?: (number | null) + [key: string]: any; + } + + export interface Person { + name: ((string | null) | null) + hair_color: ((string | Color | null) | null) + [key: string]: any; + } + + export interface PhoneNumber { + value?: (string | null) + } + + export interface Quantity { + amount?: ((number | null) | (number | null) | null) + unit: ((string | null) | null) + } + + export interface RaysData { + dataType?: (DataType | null) + value?: ((partial_types.Resume | null) | (partial_types.Event | null) | null) + } + + export interface ReceiptInfo { + items?: (partial_types.ReceiptItem | null)[] + total_cost: ((number | null) | null) + venue?: ("barisa" | "ox_burger" | null) + } + + export interface ReceiptItem { + name?: (string | null) + description: ((string | null) | null) + quantity?: (number | null) + price?: (number | null) + } + + export interface Recipe { + ingredients?: (Record | null) + recipe_type?: ("breakfast" | "dinner" | null) + } + + export interface RecursiveAliasDependency { + value?: JsonValue + } + + export interface Resume { + name?: (string | null) + email?: (string | null) + phone?: (string | null) + experience?: (partial_types.Education | null)[] + education?: (string | null)[] + skills?: (string | null)[] + } + + export interface Schema { + prop1?: ((string | null) | ((null | null) | null) | null) + prop2?: ((partial_types.Nested | null) | (string | null) | null) + prop5?: ((string | null) | ((null | null) | null) | null)[] + prop6?: ((string | null) | (partial_types.Nested | null)[] | null) + nested_attrs?: ((string | null) | ((null | null) | null) | (partial_types.Nested | null) | null)[] + parens?: ((string | null) | ((null | null) | null) | null) + other_group?: ((string | null) | ((number | null) | (string | null) | null) | null) + } + + export interface SearchParams { + dateRange: ((number | null) | null) + location?: (string | null)[] + jobTitle: ((partial_types.WithReasoning | null) | null) + company: ((partial_types.WithReasoning | null) | null) + description?: (partial_types.WithReasoning | null)[] + tags?: ((Tag | null) | (string | null) | null)[] + } + + export interface SemanticContainer { + sixteen_digit_number?: (number | null) + string_with_twenty_words: string + class_1?: (partial_types.ClassWithoutDone | null) + class_2: types.ClassWithBlockDone + class_done_needed: types.ClassWithBlockDone + class_needed: partial_types.ClassWithoutDone + three_small_things?: (partial_types.SmallThing | null)[] + final_string?: (string | null) + } + + export interface SimpleTag { + field?: (string | null) + } + + export interface SmallThing { + i_16_digits: number + i_8_digits?: (number | null) + } + + export interface SomeClassNestedDynamic { + hi?: (string | null) + [key: string]: any; + } + + export interface StringToClassEntry { + word?: (string | null) + } + + export interface TestClassAlias { + key?: (string | null) + key2?: (string | null) + key3?: (string | null) + key4?: (string | null) + key5?: (string | null) + } + + export interface TestClassNested { + prop1?: (string | null) + prop2?: (partial_types.InnerClass | null) + } + + export interface TestClassWithEnum { + prop1?: (string | null) + prop2?: (EnumInClass | null) + } + + export interface TestMemoryOutput { + items?: ((partial_types.MemoryObject | null) | (partial_types.ComplexMemoryObject | null) | (partial_types.AnotherObject | null) | null)[] + more_items?: ((partial_types.MemoryObject | null) | (partial_types.ComplexMemoryObject | null) | (partial_types.AnotherObject | null) | null)[] + } + + export interface TestOutputClass { + prop1?: (string | null) + prop2?: (number | null) + } + + export interface Tree { + data?: (number | null) + children?: (partial_types.Forest | null) + } + + export interface TwoStoriesOneTitle { + title?: (string | null) + story_a?: (string | null) + story_b?: (string | null) + } + + export interface UnionTest_ReturnType { + prop1?: ((string | null) | (boolean | null) | null) + prop2?: ((number | null) | (boolean | null) | null)[] + prop3?: ((boolean | null)[] | (number | null)[] | null) + } + + /** + * my docs + */ + export interface UniverseQuestion { + question?: (string | null) + answer?: (string | null) + } + + export interface UniverseQuestionInput { + question?: (string | null) + } + + export interface WithReasoning { + value?: (string | null) + reasoning?: (string | null) + } + +} \ No newline at end of file diff --git a/integ-tests/react/baml_client/react/hooks.tsx b/integ-tests/react/baml_client/react/hooks.tsx new file mode 100644 index 000000000..e99f8b049 --- /dev/null +++ b/integ-tests/react/baml_client/react/hooks.tsx @@ -0,0 +1,8296 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +'use client' + +import { BamlErrors, toBamlError } from '@boundaryml/baml/errors' +import { useCallback, useMemo, useReducer, useTransition } from 'react' +import * as Actions from './server' +import * as StreamingActions from './server_streaming' +import { StreamingServerTypes } from './server_streaming_types' + +/** + * Type representing a BAML stream response. + * + * @template PartialType The type of the partial response. + * @template FinalType The type of the final response. + */ +type BamlStreamResponse = { + partial?: PartialType + final?: FinalType + error?: BamlErrors +} + +/** + * A server action that returns either a ReadableStream of Uint8Array or a final output. + */ +export type ServerAction = ( + ...args: Input extends any[] ? Input : [Input] +) => Promise | ReadableStream + +/** + * Type representing all function names except 'stream' and 'stream_types' + */ +export type FunctionNames = keyof typeof Actions + +/** + * Helper type to derive the partial return type for an action. + */ +type StreamDataType = StreamingServerTypes[FunctionName] + +/** + * Helper type to derive the final return type for an action. + */ +type FinalDataType = (typeof Actions)[FunctionName] extends (...args: any) => any + ? Awaited> + : never + +/** + * Configuration options for BAML React hooks. + */ +export type HookInput = { + stream?: Options['stream'] + onStreamData?: Options['stream'] extends false ? never : (response?: StreamDataType) => void + onFinalData?: (response?: FinalDataType) => void + onData?: (response?: Options['stream'] extends false ? FinalDataType : FinalDataType | StreamDataType) => void + onError?: (error: BamlErrors) => void +} + +export type NonStreamingHookStatus = 'idle' | 'pending' | 'success' | 'error' +export type StreamingHookStatus = NonStreamingHookStatus | 'streaming' + +export type HookStatus = Options['stream'] extends false + ? NonStreamingHookStatus + : StreamingHookStatus + +/** + * Return type for BAML React hooks. + */ +export type HookOutput = { + data?: Options['stream'] extends false ? FinalDataType : FinalDataType | StreamDataType + finalData?: FinalDataType + streamData?: Options['stream'] extends false ? never : StreamDataType + isLoading: boolean + isPending: boolean + isStreaming: Options['stream'] extends false ? never : boolean + isSuccess: boolean + isError: boolean + error?: BamlErrors + status: HookStatus + mutate: ( + ...args: Parameters<(typeof Actions)[FunctionName]> + ) => Options['stream'] extends false ? Promise> : Promise> + reset: () => void +} + +/** + * Type guard to check if the hook props are configured for streaming mode. + * + * @template FunctionName - The name of the BAML function. + * @param props - The hook props. + * @returns {boolean} True if the props indicate streaming mode. + */ +function isStreamingProps( + props: HookInput, +): props is HookInput { + return props.stream !== false +} + +/** + * Type guard to check if the hook props are configured for non‑streaming mode. + * + * @template FunctionName - The name of the BAML function. + * @param props - The hook props. + * @returns {boolean} True if the props indicate non‑streaming mode. + */ +function isNotStreamingProps( + props: HookInput, +): props is HookInput { + return props.stream === false +} + +interface HookState { + isSuccess: boolean + isStreaming: boolean + error?: BamlErrors + finalData?: TFinal + streamData?: TPartial +} + +type HookStateAction = + | { type: 'START_REQUEST' } + | { type: 'SET_ERROR'; payload: BamlErrors } + | { type: 'SET_PARTIAL'; payload: TPartial } + | { type: 'SET_FINAL'; payload: TFinal } + | { type: 'RESET' } + +/** + * Reducer function to manage the hook state transitions. + * + * @template TPartial - The type of the partial (streaming) data. + * @template TFinal - The type of the final (non‑streaming) data. + * @param state - The current hook state. + * @param action - The action to apply. + * @returns The updated state. + */ +function hookReducer( + state: HookState, + action: HookStateAction, +): HookState { + switch (action.type) { + case 'START_REQUEST': + return { + ...state, + isSuccess: false, + error: undefined, + isStreaming: false, + finalData: undefined, + streamData: undefined, + } + case 'SET_ERROR': + return { + ...state, + isSuccess: false, + isStreaming: false, + error: action.payload, + } + case 'SET_PARTIAL': + return { + ...state, + isStreaming: true, + streamData: action.payload, + } + case 'SET_FINAL': + return { + ...state, + isSuccess: true, + isStreaming: false, + finalData: action.payload, + } + case 'RESET': + return { + isSuccess: false, + isStreaming: false, + error: undefined, + finalData: undefined, + streamData: undefined, + } + default: + return state + } +} + +/** + * Base hook for executing BAML server actions, supporting both streaming and non‑streaming modes. + * + * This hook provides a unified interface for handling loading states, partial updates, errors, + * and final responses. It is designed to be used directly with any BAML server action. + * + * Features: + * - **Streaming Support:** Real‑time partial updates via `streamData`, progress indicators, and incremental UI updates. + * - **State Management:** Manages loading state (`isLoading`), success/error flags, and final/partial results. + * - **Error Handling:** Supports type‑safe error handling for BamlValidationError, BamlClientFinishReasonError, and standard errors. + * + * @param Action - The server action to invoke. + * @param props - Configuration props for the hook. + * @returns An object with the current state and a `mutate` function to trigger the action. + * + * @example + * ```tsx + * const { data, error, isLoading, mutate } = useBamlAction(StreamingActions.TestAws, { stream: true }); + * ``` + */ + function useBamlAction( + action: ServerAction, + props: HookInput, +): HookOutput +function useBamlAction( + action: ServerAction, + props?: HookInput, +): HookOutput +function useBamlAction( + action: ServerAction, + props: HookInput = {}, +): HookOutput | HookOutput { + const { onFinalData, onError } = props + const [isLoading, startTransition] = useTransition() + + const [state, dispatch] = useReducer(hookReducer, FinalDataType>, { + isSuccess: false, + error: undefined, + finalData: undefined, + isStreaming: false, + streamData: undefined, + }) + + const mutate = useCallback( + async (...input: Parameters) => { + dispatch({ type: 'START_REQUEST' }) + try { + let response: Awaited> + startTransition(async () => { + response = await action(...input) + + if (isStreamingProps(props) && response instanceof ReadableStream) { + const reader = response.getReader() + const decoder = new TextDecoder() + try { + while (true) { + const { value, done } = await reader.read() + if (done) break + if (value) { + const chunk = decoder.decode(value, { stream: true }).trim() + try { + const parsed: BamlStreamResponse< + StreamDataType, + FinalDataType + > = JSON.parse(chunk) + if (parsed.error) { + if (parsed.error instanceof Error) { + throw parsed.error + } + + const parsedError = JSON.parse(parsed.error) + const finalError = toBamlError(parsedError) + throw finalError + } + if (parsed.partial !== undefined) { + dispatch({ type: 'SET_PARTIAL', payload: parsed.partial }) + if (isStreamingProps(props)) { + props.onStreamData?.(parsed.partial) + } + props.onData?.(parsed.partial) + } + if (parsed.final !== undefined) { + dispatch({ type: 'SET_FINAL', payload: parsed.final }) + onFinalData?.(parsed.final) + props.onData?.(parsed.final) + return + } + } catch (err: unknown) { + dispatch({ + type: 'SET_ERROR', + payload: err as BamlErrors, + }) + onError?.(err as BamlErrors) + break + } + } + } + } finally { + reader.releaseLock() + } + return + } + // Non‑streaming case + dispatch({ type: 'SET_FINAL', payload: response }) + onFinalData?.(response) + }) + return response + } catch (error_: unknown) { + dispatch({ type: 'SET_ERROR', payload: error_ as BamlErrors }) + onError?.(error_ as BamlErrors) + throw error_ + } + }, + [action, props.stream, onFinalData, onError], + ) + + const status = useMemo>(() => { + if (state.error) return 'error' + if (state.isSuccess) return 'success' + if (state.isStreaming) return 'streaming' + if (isLoading) return 'pending' + return 'idle' + }, [isLoading, state.error, state.isSuccess, state.isStreaming]) + + let data = state.finalData + if (state.isStreaming) data = state.streamData + + const result = { + data, + finalData: state.finalData, + error: state.error, + isError: status === 'error', + isSuccess: status === 'success', + isStreaming: status === 'streaming', + isPending: status === 'pending', + isLoading: status === 'pending' || status === 'streaming', + mutate, + status, + reset: () => dispatch({ type: 'RESET' }), + } satisfies HookOutput + + return { + ...result, + streamData: isStreamingProps(props) ? state.streamData : undefined, + } satisfies HookOutput +} +/** + * A specialized hook for the AaaSamOutputFormat BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - recipe: string + * + * + * **Return Type:** + * - **Non‑streaming:** Recipe + * - **Streaming Partial:** partial_types.Recipe + * - **Streaming Final:** Recipe + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAaaSamOutputFormat({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAaaSamOutputFormat({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAaaSamOutputFormat(props: HookInput<'AaaSamOutputFormat', { stream: false }>): HookOutput<'AaaSamOutputFormat', { stream: false }> +export function useAaaSamOutputFormat(props?: HookInput<'AaaSamOutputFormat', { stream?: true }>): HookOutput<'AaaSamOutputFormat', { stream: true }> +export function useAaaSamOutputFormat( + props: HookInput<'AaaSamOutputFormat', { stream?: boolean }> = {}, +): HookOutput<'AaaSamOutputFormat', { stream: true }> | HookOutput<'AaaSamOutputFormat', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AaaSamOutputFormat, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AaaSamOutputFormat, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the AliasThatPointsToRecursiveType BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - list: LinkedListAliasNode + * + * + * **Return Type:** + * - **Non‑streaming:** LinkedListAliasNode + * - **Streaming Partial:** partial_types.LinkedListAliasNode + * - **Streaming Final:** LinkedListAliasNode + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAliasThatPointsToRecursiveType({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAliasThatPointsToRecursiveType({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAliasThatPointsToRecursiveType(props: HookInput<'AliasThatPointsToRecursiveType', { stream: false }>): HookOutput<'AliasThatPointsToRecursiveType', { stream: false }> +export function useAliasThatPointsToRecursiveType(props?: HookInput<'AliasThatPointsToRecursiveType', { stream?: true }>): HookOutput<'AliasThatPointsToRecursiveType', { stream: true }> +export function useAliasThatPointsToRecursiveType( + props: HookInput<'AliasThatPointsToRecursiveType', { stream?: boolean }> = {}, +): HookOutput<'AliasThatPointsToRecursiveType', { stream: true }> | HookOutput<'AliasThatPointsToRecursiveType', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AliasThatPointsToRecursiveType, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AliasThatPointsToRecursiveType, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the AliasWithMultipleAttrs BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - money: Checked + * + * + * **Return Type:** + * - **Non‑streaming:** Checked + * - **Streaming Partial:** Checked + * - **Streaming Final:** Checked + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAliasWithMultipleAttrs({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAliasWithMultipleAttrs({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAliasWithMultipleAttrs(props: HookInput<'AliasWithMultipleAttrs', { stream: false }>): HookOutput<'AliasWithMultipleAttrs', { stream: false }> +export function useAliasWithMultipleAttrs(props?: HookInput<'AliasWithMultipleAttrs', { stream?: true }>): HookOutput<'AliasWithMultipleAttrs', { stream: true }> +export function useAliasWithMultipleAttrs( + props: HookInput<'AliasWithMultipleAttrs', { stream?: boolean }> = {}, +): HookOutput<'AliasWithMultipleAttrs', { stream: true }> | HookOutput<'AliasWithMultipleAttrs', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AliasWithMultipleAttrs, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AliasWithMultipleAttrs, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the AliasedInputClass BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: InputClass + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAliasedInputClass({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAliasedInputClass({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAliasedInputClass(props: HookInput<'AliasedInputClass', { stream: false }>): HookOutput<'AliasedInputClass', { stream: false }> +export function useAliasedInputClass(props?: HookInput<'AliasedInputClass', { stream?: true }>): HookOutput<'AliasedInputClass', { stream: true }> +export function useAliasedInputClass( + props: HookInput<'AliasedInputClass', { stream?: boolean }> = {}, +): HookOutput<'AliasedInputClass', { stream: true }> | HookOutput<'AliasedInputClass', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AliasedInputClass, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AliasedInputClass, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the AliasedInputClass2 BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: InputClass + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAliasedInputClass2({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAliasedInputClass2({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAliasedInputClass2(props: HookInput<'AliasedInputClass2', { stream: false }>): HookOutput<'AliasedInputClass2', { stream: false }> +export function useAliasedInputClass2(props?: HookInput<'AliasedInputClass2', { stream?: true }>): HookOutput<'AliasedInputClass2', { stream: true }> +export function useAliasedInputClass2( + props: HookInput<'AliasedInputClass2', { stream?: boolean }> = {}, +): HookOutput<'AliasedInputClass2', { stream: true }> | HookOutput<'AliasedInputClass2', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AliasedInputClass2, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AliasedInputClass2, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the AliasedInputClassNested BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: InputClassNested + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAliasedInputClassNested({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAliasedInputClassNested({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAliasedInputClassNested(props: HookInput<'AliasedInputClassNested', { stream: false }>): HookOutput<'AliasedInputClassNested', { stream: false }> +export function useAliasedInputClassNested(props?: HookInput<'AliasedInputClassNested', { stream?: true }>): HookOutput<'AliasedInputClassNested', { stream: true }> +export function useAliasedInputClassNested( + props: HookInput<'AliasedInputClassNested', { stream?: boolean }> = {}, +): HookOutput<'AliasedInputClassNested', { stream: true }> | HookOutput<'AliasedInputClassNested', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AliasedInputClassNested, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AliasedInputClassNested, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the AliasedInputEnum BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: AliasedEnum + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAliasedInputEnum({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAliasedInputEnum({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAliasedInputEnum(props: HookInput<'AliasedInputEnum', { stream: false }>): HookOutput<'AliasedInputEnum', { stream: false }> +export function useAliasedInputEnum(props?: HookInput<'AliasedInputEnum', { stream?: true }>): HookOutput<'AliasedInputEnum', { stream: true }> +export function useAliasedInputEnum( + props: HookInput<'AliasedInputEnum', { stream?: boolean }> = {}, +): HookOutput<'AliasedInputEnum', { stream: true }> | HookOutput<'AliasedInputEnum', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AliasedInputEnum, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AliasedInputEnum, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the AliasedInputList BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: AliasedEnum[] + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAliasedInputList({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAliasedInputList({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAliasedInputList(props: HookInput<'AliasedInputList', { stream: false }>): HookOutput<'AliasedInputList', { stream: false }> +export function useAliasedInputList(props?: HookInput<'AliasedInputList', { stream?: true }>): HookOutput<'AliasedInputList', { stream: true }> +export function useAliasedInputList( + props: HookInput<'AliasedInputList', { stream?: boolean }> = {}, +): HookOutput<'AliasedInputList', { stream: true }> | HookOutput<'AliasedInputList', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AliasedInputList, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AliasedInputList, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the AllowedOptionals BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - optionals: OptionalListAndMap + * + * + * **Return Type:** + * - **Non‑streaming:** OptionalListAndMap + * - **Streaming Partial:** partial_types.OptionalListAndMap + * - **Streaming Final:** OptionalListAndMap + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAllowedOptionals({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAllowedOptionals({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAllowedOptionals(props: HookInput<'AllowedOptionals', { stream: false }>): HookOutput<'AllowedOptionals', { stream: false }> +export function useAllowedOptionals(props?: HookInput<'AllowedOptionals', { stream?: true }>): HookOutput<'AllowedOptionals', { stream: true }> +export function useAllowedOptionals( + props: HookInput<'AllowedOptionals', { stream?: boolean }> = {}, +): HookOutput<'AllowedOptionals', { stream: true }> | HookOutput<'AllowedOptionals', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AllowedOptionals, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AllowedOptionals, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the AssertFn BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - a: number + * + * + * **Return Type:** + * - **Non‑streaming:** number + * - **Streaming Partial:** number + * - **Streaming Final:** number + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAssertFn({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAssertFn({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAssertFn(props: HookInput<'AssertFn', { stream: false }>): HookOutput<'AssertFn', { stream: false }> +export function useAssertFn(props?: HookInput<'AssertFn', { stream?: true }>): HookOutput<'AssertFn', { stream: true }> +export function useAssertFn( + props: HookInput<'AssertFn', { stream?: boolean }> = {}, +): HookOutput<'AssertFn', { stream: true }> | HookOutput<'AssertFn', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AssertFn, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AssertFn, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the AudioInput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - aud: Audio + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useAudioInput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useAudioInput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useAudioInput(props: HookInput<'AudioInput', { stream: false }>): HookOutput<'AudioInput', { stream: false }> +export function useAudioInput(props?: HookInput<'AudioInput', { stream?: true }>): HookOutput<'AudioInput', { stream: true }> +export function useAudioInput( + props: HookInput<'AudioInput', { stream?: boolean }> = {}, +): HookOutput<'AudioInput', { stream: true }> | HookOutput<'AudioInput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.AudioInput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.AudioInput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the BuildLinkedList BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: number[] + * + * + * **Return Type:** + * - **Non‑streaming:** LinkedList + * - **Streaming Partial:** partial_types.LinkedList + * - **Streaming Final:** LinkedList + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useBuildLinkedList({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useBuildLinkedList({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useBuildLinkedList(props: HookInput<'BuildLinkedList', { stream: false }>): HookOutput<'BuildLinkedList', { stream: false }> +export function useBuildLinkedList(props?: HookInput<'BuildLinkedList', { stream?: true }>): HookOutput<'BuildLinkedList', { stream: true }> +export function useBuildLinkedList( + props: HookInput<'BuildLinkedList', { stream?: boolean }> = {}, +): HookOutput<'BuildLinkedList', { stream: true }> | HookOutput<'BuildLinkedList', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.BuildLinkedList, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.BuildLinkedList, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the BuildTree BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: BinaryNode + * + * + * **Return Type:** + * - **Non‑streaming:** Tree + * - **Streaming Partial:** partial_types.Tree + * - **Streaming Final:** Tree + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useBuildTree({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useBuildTree({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useBuildTree(props: HookInput<'BuildTree', { stream: false }>): HookOutput<'BuildTree', { stream: false }> +export function useBuildTree(props?: HookInput<'BuildTree', { stream?: true }>): HookOutput<'BuildTree', { stream: true }> +export function useBuildTree( + props: HookInput<'BuildTree', { stream?: boolean }> = {}, +): HookOutput<'BuildTree', { stream: true }> | HookOutput<'BuildTree', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.BuildTree, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.BuildTree, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ClassThatPointsToRecursiveClassThroughAlias BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - cls: ClassToRecAlias + * + * + * **Return Type:** + * - **Non‑streaming:** ClassToRecAlias + * - **Streaming Partial:** partial_types.ClassToRecAlias + * - **Streaming Final:** ClassToRecAlias + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useClassThatPointsToRecursiveClassThroughAlias({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useClassThatPointsToRecursiveClassThroughAlias({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useClassThatPointsToRecursiveClassThroughAlias(props: HookInput<'ClassThatPointsToRecursiveClassThroughAlias', { stream: false }>): HookOutput<'ClassThatPointsToRecursiveClassThroughAlias', { stream: false }> +export function useClassThatPointsToRecursiveClassThroughAlias(props?: HookInput<'ClassThatPointsToRecursiveClassThroughAlias', { stream?: true }>): HookOutput<'ClassThatPointsToRecursiveClassThroughAlias', { stream: true }> +export function useClassThatPointsToRecursiveClassThroughAlias( + props: HookInput<'ClassThatPointsToRecursiveClassThroughAlias', { stream?: boolean }> = {}, +): HookOutput<'ClassThatPointsToRecursiveClassThroughAlias', { stream: true }> | HookOutput<'ClassThatPointsToRecursiveClassThroughAlias', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ClassThatPointsToRecursiveClassThroughAlias, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ClassThatPointsToRecursiveClassThroughAlias, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ClassifyDynEnumTwo BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** (string | DynEnumTwo) + * - **Streaming Partial:** (string | DynEnumTwo) + * - **Streaming Final:** (string | DynEnumTwo) + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useClassifyDynEnumTwo({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useClassifyDynEnumTwo({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useClassifyDynEnumTwo(props: HookInput<'ClassifyDynEnumTwo', { stream: false }>): HookOutput<'ClassifyDynEnumTwo', { stream: false }> +export function useClassifyDynEnumTwo(props?: HookInput<'ClassifyDynEnumTwo', { stream?: true }>): HookOutput<'ClassifyDynEnumTwo', { stream: true }> +export function useClassifyDynEnumTwo( + props: HookInput<'ClassifyDynEnumTwo', { stream?: boolean }> = {}, +): HookOutput<'ClassifyDynEnumTwo', { stream: true }> | HookOutput<'ClassifyDynEnumTwo', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ClassifyDynEnumTwo, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ClassifyDynEnumTwo, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ClassifyMessage BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** Category + * - **Streaming Partial:** types.Category + * - **Streaming Final:** Category + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useClassifyMessage({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useClassifyMessage({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useClassifyMessage(props: HookInput<'ClassifyMessage', { stream: false }>): HookOutput<'ClassifyMessage', { stream: false }> +export function useClassifyMessage(props?: HookInput<'ClassifyMessage', { stream?: true }>): HookOutput<'ClassifyMessage', { stream: true }> +export function useClassifyMessage( + props: HookInput<'ClassifyMessage', { stream?: boolean }> = {}, +): HookOutput<'ClassifyMessage', { stream: true }> | HookOutput<'ClassifyMessage', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ClassifyMessage, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ClassifyMessage, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ClassifyMessage2 BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** Category + * - **Streaming Partial:** types.Category + * - **Streaming Final:** Category + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useClassifyMessage2({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useClassifyMessage2({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useClassifyMessage2(props: HookInput<'ClassifyMessage2', { stream: false }>): HookOutput<'ClassifyMessage2', { stream: false }> +export function useClassifyMessage2(props?: HookInput<'ClassifyMessage2', { stream?: true }>): HookOutput<'ClassifyMessage2', { stream: true }> +export function useClassifyMessage2( + props: HookInput<'ClassifyMessage2', { stream?: boolean }> = {}, +): HookOutput<'ClassifyMessage2', { stream: true }> | HookOutput<'ClassifyMessage2', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ClassifyMessage2, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ClassifyMessage2, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ClassifyMessage3 BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** Category + * - **Streaming Partial:** types.Category + * - **Streaming Final:** Category + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useClassifyMessage3({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useClassifyMessage3({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useClassifyMessage3(props: HookInput<'ClassifyMessage3', { stream: false }>): HookOutput<'ClassifyMessage3', { stream: false }> +export function useClassifyMessage3(props?: HookInput<'ClassifyMessage3', { stream?: true }>): HookOutput<'ClassifyMessage3', { stream: true }> +export function useClassifyMessage3( + props: HookInput<'ClassifyMessage3', { stream?: boolean }> = {}, +): HookOutput<'ClassifyMessage3', { stream: true }> | HookOutput<'ClassifyMessage3', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ClassifyMessage3, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ClassifyMessage3, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the Completion BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - prefix: string + * + * - suffix: string + * + * - language: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useCompletion({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useCompletion({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useCompletion(props: HookInput<'Completion', { stream: false }>): HookOutput<'Completion', { stream: false }> +export function useCompletion(props?: HookInput<'Completion', { stream?: true }>): HookOutput<'Completion', { stream: true }> +export function useCompletion( + props: HookInput<'Completion', { stream?: boolean }> = {}, +): HookOutput<'Completion', { stream: true }> | HookOutput<'Completion', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.Completion, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.Completion, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the CustomTask BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** BookOrder | FlightConfirmation | GroceryReceipt + * - **Streaming Partial:** ((partial_types.BookOrder | null) | (partial_types.FlightConfirmation | null) | (partial_types.GroceryReceipt | null)) + * - **Streaming Final:** BookOrder | FlightConfirmation | GroceryReceipt + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useCustomTask({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useCustomTask({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useCustomTask(props: HookInput<'CustomTask', { stream: false }>): HookOutput<'CustomTask', { stream: false }> +export function useCustomTask(props?: HookInput<'CustomTask', { stream?: true }>): HookOutput<'CustomTask', { stream: true }> +export function useCustomTask( + props: HookInput<'CustomTask', { stream?: boolean }> = {}, +): HookOutput<'CustomTask', { stream: true }> | HookOutput<'CustomTask', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.CustomTask, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.CustomTask, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the DescribeImage BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - img: Image + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useDescribeImage({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useDescribeImage({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useDescribeImage(props: HookInput<'DescribeImage', { stream: false }>): HookOutput<'DescribeImage', { stream: false }> +export function useDescribeImage(props?: HookInput<'DescribeImage', { stream?: true }>): HookOutput<'DescribeImage', { stream: true }> +export function useDescribeImage( + props: HookInput<'DescribeImage', { stream?: boolean }> = {}, +): HookOutput<'DescribeImage', { stream: true }> | HookOutput<'DescribeImage', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.DescribeImage, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.DescribeImage, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the DescribeImage2 BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - classWithImage: ClassWithImage + * + * - img2: Image + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useDescribeImage2({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useDescribeImage2({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useDescribeImage2(props: HookInput<'DescribeImage2', { stream: false }>): HookOutput<'DescribeImage2', { stream: false }> +export function useDescribeImage2(props?: HookInput<'DescribeImage2', { stream?: true }>): HookOutput<'DescribeImage2', { stream: true }> +export function useDescribeImage2( + props: HookInput<'DescribeImage2', { stream?: boolean }> = {}, +): HookOutput<'DescribeImage2', { stream: true }> | HookOutput<'DescribeImage2', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.DescribeImage2, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.DescribeImage2, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the DescribeImage3 BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - classWithImage: ClassWithImage + * + * - img2: Image + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useDescribeImage3({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useDescribeImage3({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useDescribeImage3(props: HookInput<'DescribeImage3', { stream: false }>): HookOutput<'DescribeImage3', { stream: false }> +export function useDescribeImage3(props?: HookInput<'DescribeImage3', { stream?: true }>): HookOutput<'DescribeImage3', { stream: true }> +export function useDescribeImage3( + props: HookInput<'DescribeImage3', { stream?: boolean }> = {}, +): HookOutput<'DescribeImage3', { stream: true }> | HookOutput<'DescribeImage3', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.DescribeImage3, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.DescribeImage3, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the DescribeImage4 BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - classWithImage: ClassWithImage + * + * - img2: Image + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useDescribeImage4({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useDescribeImage4({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useDescribeImage4(props: HookInput<'DescribeImage4', { stream: false }>): HookOutput<'DescribeImage4', { stream: false }> +export function useDescribeImage4(props?: HookInput<'DescribeImage4', { stream?: true }>): HookOutput<'DescribeImage4', { stream: true }> +export function useDescribeImage4( + props: HookInput<'DescribeImage4', { stream?: boolean }> = {}, +): HookOutput<'DescribeImage4', { stream: true }> | HookOutput<'DescribeImage4', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.DescribeImage4, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.DescribeImage4, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the DifferentiateUnions BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** OriginalA | OriginalB + * - **Streaming Partial:** ((partial_types.OriginalA | null) | (partial_types.OriginalB | null)) + * - **Streaming Final:** OriginalA | OriginalB + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useDifferentiateUnions({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useDifferentiateUnions({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useDifferentiateUnions(props: HookInput<'DifferentiateUnions', { stream: false }>): HookOutput<'DifferentiateUnions', { stream: false }> +export function useDifferentiateUnions(props?: HookInput<'DifferentiateUnions', { stream?: true }>): HookOutput<'DifferentiateUnions', { stream: true }> +export function useDifferentiateUnions( + props: HookInput<'DifferentiateUnions', { stream?: boolean }> = {}, +): HookOutput<'DifferentiateUnions', { stream: true }> | HookOutput<'DifferentiateUnions', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.DifferentiateUnions, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.DifferentiateUnions, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the DummyOutputFunction BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** DummyOutput + * - **Streaming Partial:** partial_types.DummyOutput + * - **Streaming Final:** DummyOutput + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useDummyOutputFunction({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useDummyOutputFunction({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useDummyOutputFunction(props: HookInput<'DummyOutputFunction', { stream: false }>): HookOutput<'DummyOutputFunction', { stream: false }> +export function useDummyOutputFunction(props?: HookInput<'DummyOutputFunction', { stream?: true }>): HookOutput<'DummyOutputFunction', { stream: true }> +export function useDummyOutputFunction( + props: HookInput<'DummyOutputFunction', { stream?: boolean }> = {}, +): HookOutput<'DummyOutputFunction', { stream: true }> | HookOutput<'DummyOutputFunction', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.DummyOutputFunction, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.DummyOutputFunction, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the DynamicFunc BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: DynamicClassOne + * + * + * **Return Type:** + * - **Non‑streaming:** DynamicClassTwo + * - **Streaming Partial:** partial_types.DynamicClassTwo + * - **Streaming Final:** DynamicClassTwo + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useDynamicFunc({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useDynamicFunc({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useDynamicFunc(props: HookInput<'DynamicFunc', { stream: false }>): HookOutput<'DynamicFunc', { stream: false }> +export function useDynamicFunc(props?: HookInput<'DynamicFunc', { stream?: true }>): HookOutput<'DynamicFunc', { stream: true }> +export function useDynamicFunc( + props: HookInput<'DynamicFunc', { stream?: boolean }> = {}, +): HookOutput<'DynamicFunc', { stream: true }> | HookOutput<'DynamicFunc', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.DynamicFunc, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.DynamicFunc, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the DynamicInputOutput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: DynInputOutput + * + * + * **Return Type:** + * - **Non‑streaming:** DynInputOutput + * - **Streaming Partial:** partial_types.DynInputOutput + * - **Streaming Final:** DynInputOutput + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useDynamicInputOutput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useDynamicInputOutput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useDynamicInputOutput(props: HookInput<'DynamicInputOutput', { stream: false }>): HookOutput<'DynamicInputOutput', { stream: false }> +export function useDynamicInputOutput(props?: HookInput<'DynamicInputOutput', { stream?: true }>): HookOutput<'DynamicInputOutput', { stream: true }> +export function useDynamicInputOutput( + props: HookInput<'DynamicInputOutput', { stream?: boolean }> = {}, +): HookOutput<'DynamicInputOutput', { stream: true }> | HookOutput<'DynamicInputOutput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.DynamicInputOutput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.DynamicInputOutput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the DynamicListInputOutput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: DynInputOutput[] + * + * + * **Return Type:** + * - **Non‑streaming:** DynInputOutput[] + * - **Streaming Partial:** (partial_types.DynInputOutput | null)[] + * - **Streaming Final:** DynInputOutput[] + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useDynamicListInputOutput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useDynamicListInputOutput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useDynamicListInputOutput(props: HookInput<'DynamicListInputOutput', { stream: false }>): HookOutput<'DynamicListInputOutput', { stream: false }> +export function useDynamicListInputOutput(props?: HookInput<'DynamicListInputOutput', { stream?: true }>): HookOutput<'DynamicListInputOutput', { stream: true }> +export function useDynamicListInputOutput( + props: HookInput<'DynamicListInputOutput', { stream?: boolean }> = {}, +): HookOutput<'DynamicListInputOutput', { stream: true }> | HookOutput<'DynamicListInputOutput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.DynamicListInputOutput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.DynamicListInputOutput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ExpectFailure BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useExpectFailure({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useExpectFailure({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useExpectFailure(props: HookInput<'ExpectFailure', { stream: false }>): HookOutput<'ExpectFailure', { stream: false }> +export function useExpectFailure(props?: HookInput<'ExpectFailure', { stream?: true }>): HookOutput<'ExpectFailure', { stream: true }> +export function useExpectFailure( + props: HookInput<'ExpectFailure', { stream?: boolean }> = {}, +): HookOutput<'ExpectFailure', { stream: true }> | HookOutput<'ExpectFailure', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ExpectFailure, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ExpectFailure, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ExtractContactInfo BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - document: string + * + * + * **Return Type:** + * - **Non‑streaming:** ContactInfo + * - **Streaming Partial:** partial_types.ContactInfo + * - **Streaming Final:** ContactInfo + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useExtractContactInfo({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useExtractContactInfo({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useExtractContactInfo(props: HookInput<'ExtractContactInfo', { stream: false }>): HookOutput<'ExtractContactInfo', { stream: false }> +export function useExtractContactInfo(props?: HookInput<'ExtractContactInfo', { stream?: true }>): HookOutput<'ExtractContactInfo', { stream: true }> +export function useExtractContactInfo( + props: HookInput<'ExtractContactInfo', { stream?: boolean }> = {}, +): HookOutput<'ExtractContactInfo', { stream: true }> | HookOutput<'ExtractContactInfo', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ExtractContactInfo, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ExtractContactInfo, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ExtractHobby BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - text: string + * + * + * **Return Type:** + * - **Non‑streaming:** (string | Hobby)[] + * - **Streaming Partial:** (string | Hobby | null)[] + * - **Streaming Final:** (string | Hobby)[] + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useExtractHobby({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useExtractHobby({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useExtractHobby(props: HookInput<'ExtractHobby', { stream: false }>): HookOutput<'ExtractHobby', { stream: false }> +export function useExtractHobby(props?: HookInput<'ExtractHobby', { stream?: true }>): HookOutput<'ExtractHobby', { stream: true }> +export function useExtractHobby( + props: HookInput<'ExtractHobby', { stream?: boolean }> = {}, +): HookOutput<'ExtractHobby', { stream: true }> | HookOutput<'ExtractHobby', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ExtractHobby, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ExtractHobby, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ExtractNames BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string[] + * - **Streaming Partial:** (string | null)[] + * - **Streaming Final:** string[] + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useExtractNames({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useExtractNames({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useExtractNames(props: HookInput<'ExtractNames', { stream: false }>): HookOutput<'ExtractNames', { stream: false }> +export function useExtractNames(props?: HookInput<'ExtractNames', { stream?: true }>): HookOutput<'ExtractNames', { stream: true }> +export function useExtractNames( + props: HookInput<'ExtractNames', { stream?: boolean }> = {}, +): HookOutput<'ExtractNames', { stream: true }> | HookOutput<'ExtractNames', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ExtractNames, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ExtractNames, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ExtractPeople BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - text: string + * + * + * **Return Type:** + * - **Non‑streaming:** Person[] + * - **Streaming Partial:** (partial_types.Person | null)[] + * - **Streaming Final:** Person[] + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useExtractPeople({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useExtractPeople({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useExtractPeople(props: HookInput<'ExtractPeople', { stream: false }>): HookOutput<'ExtractPeople', { stream: false }> +export function useExtractPeople(props?: HookInput<'ExtractPeople', { stream?: true }>): HookOutput<'ExtractPeople', { stream: true }> +export function useExtractPeople( + props: HookInput<'ExtractPeople', { stream?: boolean }> = {}, +): HookOutput<'ExtractPeople', { stream: true }> | HookOutput<'ExtractPeople', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ExtractPeople, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ExtractPeople, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ExtractReceiptInfo BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - email: string + * + * - reason: "curiosity" | "personal_finance" + * + * + * **Return Type:** + * - **Non‑streaming:** ReceiptInfo + * - **Streaming Partial:** partial_types.ReceiptInfo + * - **Streaming Final:** ReceiptInfo + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useExtractReceiptInfo({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useExtractReceiptInfo({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useExtractReceiptInfo(props: HookInput<'ExtractReceiptInfo', { stream: false }>): HookOutput<'ExtractReceiptInfo', { stream: false }> +export function useExtractReceiptInfo(props?: HookInput<'ExtractReceiptInfo', { stream?: true }>): HookOutput<'ExtractReceiptInfo', { stream: true }> +export function useExtractReceiptInfo( + props: HookInput<'ExtractReceiptInfo', { stream?: boolean }> = {}, +): HookOutput<'ExtractReceiptInfo', { stream: true }> | HookOutput<'ExtractReceiptInfo', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ExtractReceiptInfo, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ExtractReceiptInfo, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ExtractResume BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - resume: string + * + * - img (optional): Image | null + * + * + * **Return Type:** + * - **Non‑streaming:** Resume + * - **Streaming Partial:** partial_types.Resume + * - **Streaming Final:** Resume + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useExtractResume({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useExtractResume({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useExtractResume(props: HookInput<'ExtractResume', { stream: false }>): HookOutput<'ExtractResume', { stream: false }> +export function useExtractResume(props?: HookInput<'ExtractResume', { stream?: true }>): HookOutput<'ExtractResume', { stream: true }> +export function useExtractResume( + props: HookInput<'ExtractResume', { stream?: boolean }> = {}, +): HookOutput<'ExtractResume', { stream: true }> | HookOutput<'ExtractResume', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ExtractResume, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ExtractResume, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ExtractResume2 BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - resume: string + * + * + * **Return Type:** + * - **Non‑streaming:** Resume + * - **Streaming Partial:** partial_types.Resume + * - **Streaming Final:** Resume + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useExtractResume2({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useExtractResume2({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useExtractResume2(props: HookInput<'ExtractResume2', { stream: false }>): HookOutput<'ExtractResume2', { stream: false }> +export function useExtractResume2(props?: HookInput<'ExtractResume2', { stream?: true }>): HookOutput<'ExtractResume2', { stream: true }> +export function useExtractResume2( + props: HookInput<'ExtractResume2', { stream?: boolean }> = {}, +): HookOutput<'ExtractResume2', { stream: true }> | HookOutput<'ExtractResume2', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ExtractResume2, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ExtractResume2, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnClassOptionalOutput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** ClassOptionalOutput | null + * - **Streaming Partial:** ((partial_types.ClassOptionalOutput | null) | null) + * - **Streaming Final:** ClassOptionalOutput | null + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnClassOptionalOutput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnClassOptionalOutput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnClassOptionalOutput(props: HookInput<'FnClassOptionalOutput', { stream: false }>): HookOutput<'FnClassOptionalOutput', { stream: false }> +export function useFnClassOptionalOutput(props?: HookInput<'FnClassOptionalOutput', { stream?: true }>): HookOutput<'FnClassOptionalOutput', { stream: true }> +export function useFnClassOptionalOutput( + props: HookInput<'FnClassOptionalOutput', { stream?: boolean }> = {}, +): HookOutput<'FnClassOptionalOutput', { stream: true }> | HookOutput<'FnClassOptionalOutput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnClassOptionalOutput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnClassOptionalOutput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnClassOptionalOutput2 BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** ClassOptionalOutput2 | null + * - **Streaming Partial:** ((partial_types.ClassOptionalOutput2 | null) | null) + * - **Streaming Final:** ClassOptionalOutput2 | null + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnClassOptionalOutput2({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnClassOptionalOutput2({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnClassOptionalOutput2(props: HookInput<'FnClassOptionalOutput2', { stream: false }>): HookOutput<'FnClassOptionalOutput2', { stream: false }> +export function useFnClassOptionalOutput2(props?: HookInput<'FnClassOptionalOutput2', { stream?: true }>): HookOutput<'FnClassOptionalOutput2', { stream: true }> +export function useFnClassOptionalOutput2( + props: HookInput<'FnClassOptionalOutput2', { stream?: boolean }> = {}, +): HookOutput<'FnClassOptionalOutput2', { stream: true }> | HookOutput<'FnClassOptionalOutput2', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnClassOptionalOutput2, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnClassOptionalOutput2, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnEnumListOutput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** EnumOutput[] + * - **Streaming Partial:** (EnumOutput | null)[] + * - **Streaming Final:** EnumOutput[] + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnEnumListOutput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnEnumListOutput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnEnumListOutput(props: HookInput<'FnEnumListOutput', { stream: false }>): HookOutput<'FnEnumListOutput', { stream: false }> +export function useFnEnumListOutput(props?: HookInput<'FnEnumListOutput', { stream?: true }>): HookOutput<'FnEnumListOutput', { stream: true }> +export function useFnEnumListOutput( + props: HookInput<'FnEnumListOutput', { stream?: boolean }> = {}, +): HookOutput<'FnEnumListOutput', { stream: true }> | HookOutput<'FnEnumListOutput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnEnumListOutput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnEnumListOutput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnEnumOutput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** EnumOutput + * - **Streaming Partial:** types.EnumOutput + * - **Streaming Final:** EnumOutput + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnEnumOutput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnEnumOutput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnEnumOutput(props: HookInput<'FnEnumOutput', { stream: false }>): HookOutput<'FnEnumOutput', { stream: false }> +export function useFnEnumOutput(props?: HookInput<'FnEnumOutput', { stream?: true }>): HookOutput<'FnEnumOutput', { stream: true }> +export function useFnEnumOutput( + props: HookInput<'FnEnumOutput', { stream?: boolean }> = {}, +): HookOutput<'FnEnumOutput', { stream: true }> | HookOutput<'FnEnumOutput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnEnumOutput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnEnumOutput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnLiteralClassInputOutput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: LiteralClassHello + * + * + * **Return Type:** + * - **Non‑streaming:** LiteralClassHello + * - **Streaming Partial:** partial_types.LiteralClassHello + * - **Streaming Final:** LiteralClassHello + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnLiteralClassInputOutput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnLiteralClassInputOutput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnLiteralClassInputOutput(props: HookInput<'FnLiteralClassInputOutput', { stream: false }>): HookOutput<'FnLiteralClassInputOutput', { stream: false }> +export function useFnLiteralClassInputOutput(props?: HookInput<'FnLiteralClassInputOutput', { stream?: true }>): HookOutput<'FnLiteralClassInputOutput', { stream: true }> +export function useFnLiteralClassInputOutput( + props: HookInput<'FnLiteralClassInputOutput', { stream?: boolean }> = {}, +): HookOutput<'FnLiteralClassInputOutput', { stream: true }> | HookOutput<'FnLiteralClassInputOutput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnLiteralClassInputOutput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnLiteralClassInputOutput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnLiteralUnionClassInputOutput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: LiteralClassOne | LiteralClassTwo + * + * + * **Return Type:** + * - **Non‑streaming:** LiteralClassOne | LiteralClassTwo + * - **Streaming Partial:** ((partial_types.LiteralClassOne | null) | (partial_types.LiteralClassTwo | null)) + * - **Streaming Final:** LiteralClassOne | LiteralClassTwo + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnLiteralUnionClassInputOutput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnLiteralUnionClassInputOutput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnLiteralUnionClassInputOutput(props: HookInput<'FnLiteralUnionClassInputOutput', { stream: false }>): HookOutput<'FnLiteralUnionClassInputOutput', { stream: false }> +export function useFnLiteralUnionClassInputOutput(props?: HookInput<'FnLiteralUnionClassInputOutput', { stream?: true }>): HookOutput<'FnLiteralUnionClassInputOutput', { stream: true }> +export function useFnLiteralUnionClassInputOutput( + props: HookInput<'FnLiteralUnionClassInputOutput', { stream?: boolean }> = {}, +): HookOutput<'FnLiteralUnionClassInputOutput', { stream: true }> | HookOutput<'FnLiteralUnionClassInputOutput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnLiteralUnionClassInputOutput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnLiteralUnionClassInputOutput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnNamedArgsSingleStringOptional BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myString (optional): string | null + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnNamedArgsSingleStringOptional({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnNamedArgsSingleStringOptional({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnNamedArgsSingleStringOptional(props: HookInput<'FnNamedArgsSingleStringOptional', { stream: false }>): HookOutput<'FnNamedArgsSingleStringOptional', { stream: false }> +export function useFnNamedArgsSingleStringOptional(props?: HookInput<'FnNamedArgsSingleStringOptional', { stream?: true }>): HookOutput<'FnNamedArgsSingleStringOptional', { stream: true }> +export function useFnNamedArgsSingleStringOptional( + props: HookInput<'FnNamedArgsSingleStringOptional', { stream?: boolean }> = {}, +): HookOutput<'FnNamedArgsSingleStringOptional', { stream: true }> | HookOutput<'FnNamedArgsSingleStringOptional', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnNamedArgsSingleStringOptional, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnNamedArgsSingleStringOptional, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnOutputBool BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** boolean + * - **Streaming Partial:** boolean + * - **Streaming Final:** boolean + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnOutputBool({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnOutputBool({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnOutputBool(props: HookInput<'FnOutputBool', { stream: false }>): HookOutput<'FnOutputBool', { stream: false }> +export function useFnOutputBool(props?: HookInput<'FnOutputBool', { stream?: true }>): HookOutput<'FnOutputBool', { stream: true }> +export function useFnOutputBool( + props: HookInput<'FnOutputBool', { stream?: boolean }> = {}, +): HookOutput<'FnOutputBool', { stream: true }> | HookOutput<'FnOutputBool', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnOutputBool, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnOutputBool, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnOutputClass BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** TestOutputClass + * - **Streaming Partial:** partial_types.TestOutputClass + * - **Streaming Final:** TestOutputClass + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnOutputClass({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnOutputClass({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnOutputClass(props: HookInput<'FnOutputClass', { stream: false }>): HookOutput<'FnOutputClass', { stream: false }> +export function useFnOutputClass(props?: HookInput<'FnOutputClass', { stream?: true }>): HookOutput<'FnOutputClass', { stream: true }> +export function useFnOutputClass( + props: HookInput<'FnOutputClass', { stream?: boolean }> = {}, +): HookOutput<'FnOutputClass', { stream: true }> | HookOutput<'FnOutputClass', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnOutputClass, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnOutputClass, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnOutputClassList BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** TestOutputClass[] + * - **Streaming Partial:** (partial_types.TestOutputClass | null)[] + * - **Streaming Final:** TestOutputClass[] + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnOutputClassList({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnOutputClassList({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnOutputClassList(props: HookInput<'FnOutputClassList', { stream: false }>): HookOutput<'FnOutputClassList', { stream: false }> +export function useFnOutputClassList(props?: HookInput<'FnOutputClassList', { stream?: true }>): HookOutput<'FnOutputClassList', { stream: true }> +export function useFnOutputClassList( + props: HookInput<'FnOutputClassList', { stream?: boolean }> = {}, +): HookOutput<'FnOutputClassList', { stream: true }> | HookOutput<'FnOutputClassList', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnOutputClassList, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnOutputClassList, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnOutputClassNested BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** TestClassNested + * - **Streaming Partial:** partial_types.TestClassNested + * - **Streaming Final:** TestClassNested + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnOutputClassNested({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnOutputClassNested({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnOutputClassNested(props: HookInput<'FnOutputClassNested', { stream: false }>): HookOutput<'FnOutputClassNested', { stream: false }> +export function useFnOutputClassNested(props?: HookInput<'FnOutputClassNested', { stream?: true }>): HookOutput<'FnOutputClassNested', { stream: true }> +export function useFnOutputClassNested( + props: HookInput<'FnOutputClassNested', { stream?: boolean }> = {}, +): HookOutput<'FnOutputClassNested', { stream: true }> | HookOutput<'FnOutputClassNested', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnOutputClassNested, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnOutputClassNested, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnOutputClassWithEnum BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** TestClassWithEnum + * - **Streaming Partial:** partial_types.TestClassWithEnum + * - **Streaming Final:** TestClassWithEnum + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnOutputClassWithEnum({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnOutputClassWithEnum({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnOutputClassWithEnum(props: HookInput<'FnOutputClassWithEnum', { stream: false }>): HookOutput<'FnOutputClassWithEnum', { stream: false }> +export function useFnOutputClassWithEnum(props?: HookInput<'FnOutputClassWithEnum', { stream?: true }>): HookOutput<'FnOutputClassWithEnum', { stream: true }> +export function useFnOutputClassWithEnum( + props: HookInput<'FnOutputClassWithEnum', { stream?: boolean }> = {}, +): HookOutput<'FnOutputClassWithEnum', { stream: true }> | HookOutput<'FnOutputClassWithEnum', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnOutputClassWithEnum, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnOutputClassWithEnum, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnOutputInt BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** number + * - **Streaming Partial:** number + * - **Streaming Final:** number + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnOutputInt({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnOutputInt({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnOutputInt(props: HookInput<'FnOutputInt', { stream: false }>): HookOutput<'FnOutputInt', { stream: false }> +export function useFnOutputInt(props?: HookInput<'FnOutputInt', { stream?: true }>): HookOutput<'FnOutputInt', { stream: true }> +export function useFnOutputInt( + props: HookInput<'FnOutputInt', { stream?: boolean }> = {}, +): HookOutput<'FnOutputInt', { stream: true }> | HookOutput<'FnOutputInt', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnOutputInt, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnOutputInt, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnOutputLiteralBool BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** false + * - **Streaming Partial:** false + * - **Streaming Final:** false + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnOutputLiteralBool({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnOutputLiteralBool({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnOutputLiteralBool(props: HookInput<'FnOutputLiteralBool', { stream: false }>): HookOutput<'FnOutputLiteralBool', { stream: false }> +export function useFnOutputLiteralBool(props?: HookInput<'FnOutputLiteralBool', { stream?: true }>): HookOutput<'FnOutputLiteralBool', { stream: true }> +export function useFnOutputLiteralBool( + props: HookInput<'FnOutputLiteralBool', { stream?: boolean }> = {}, +): HookOutput<'FnOutputLiteralBool', { stream: true }> | HookOutput<'FnOutputLiteralBool', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnOutputLiteralBool, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnOutputLiteralBool, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnOutputLiteralInt BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** 5 + * - **Streaming Partial:** 5 + * - **Streaming Final:** 5 + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnOutputLiteralInt({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnOutputLiteralInt({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnOutputLiteralInt(props: HookInput<'FnOutputLiteralInt', { stream: false }>): HookOutput<'FnOutputLiteralInt', { stream: false }> +export function useFnOutputLiteralInt(props?: HookInput<'FnOutputLiteralInt', { stream?: true }>): HookOutput<'FnOutputLiteralInt', { stream: true }> +export function useFnOutputLiteralInt( + props: HookInput<'FnOutputLiteralInt', { stream?: boolean }> = {}, +): HookOutput<'FnOutputLiteralInt', { stream: true }> | HookOutput<'FnOutputLiteralInt', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnOutputLiteralInt, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnOutputLiteralInt, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnOutputLiteralString BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** "example output" + * - **Streaming Partial:** "example output" + * - **Streaming Final:** "example output" + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnOutputLiteralString({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnOutputLiteralString({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnOutputLiteralString(props: HookInput<'FnOutputLiteralString', { stream: false }>): HookOutput<'FnOutputLiteralString', { stream: false }> +export function useFnOutputLiteralString(props?: HookInput<'FnOutputLiteralString', { stream?: true }>): HookOutput<'FnOutputLiteralString', { stream: true }> +export function useFnOutputLiteralString( + props: HookInput<'FnOutputLiteralString', { stream?: boolean }> = {}, +): HookOutput<'FnOutputLiteralString', { stream: true }> | HookOutput<'FnOutputLiteralString', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnOutputLiteralString, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnOutputLiteralString, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnOutputStringList BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string[] + * - **Streaming Partial:** (string | null)[] + * - **Streaming Final:** string[] + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnOutputStringList({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnOutputStringList({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnOutputStringList(props: HookInput<'FnOutputStringList', { stream: false }>): HookOutput<'FnOutputStringList', { stream: false }> +export function useFnOutputStringList(props?: HookInput<'FnOutputStringList', { stream?: true }>): HookOutput<'FnOutputStringList', { stream: true }> +export function useFnOutputStringList( + props: HookInput<'FnOutputStringList', { stream?: boolean }> = {}, +): HookOutput<'FnOutputStringList', { stream: true }> | HookOutput<'FnOutputStringList', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnOutputStringList, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnOutputStringList, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnTestAliasedEnumOutput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** TestEnum + * - **Streaming Partial:** types.TestEnum + * - **Streaming Final:** TestEnum + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnTestAliasedEnumOutput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnTestAliasedEnumOutput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnTestAliasedEnumOutput(props: HookInput<'FnTestAliasedEnumOutput', { stream: false }>): HookOutput<'FnTestAliasedEnumOutput', { stream: false }> +export function useFnTestAliasedEnumOutput(props?: HookInput<'FnTestAliasedEnumOutput', { stream?: true }>): HookOutput<'FnTestAliasedEnumOutput', { stream: true }> +export function useFnTestAliasedEnumOutput( + props: HookInput<'FnTestAliasedEnumOutput', { stream?: boolean }> = {}, +): HookOutput<'FnTestAliasedEnumOutput', { stream: true }> | HookOutput<'FnTestAliasedEnumOutput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnTestAliasedEnumOutput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnTestAliasedEnumOutput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnTestClassAlias BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** TestClassAlias + * - **Streaming Partial:** partial_types.TestClassAlias + * - **Streaming Final:** TestClassAlias + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnTestClassAlias({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnTestClassAlias({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnTestClassAlias(props: HookInput<'FnTestClassAlias', { stream: false }>): HookOutput<'FnTestClassAlias', { stream: false }> +export function useFnTestClassAlias(props?: HookInput<'FnTestClassAlias', { stream?: true }>): HookOutput<'FnTestClassAlias', { stream: true }> +export function useFnTestClassAlias( + props: HookInput<'FnTestClassAlias', { stream?: boolean }> = {}, +): HookOutput<'FnTestClassAlias', { stream: true }> | HookOutput<'FnTestClassAlias', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnTestClassAlias, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnTestClassAlias, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the FnTestNamedArgsSingleEnum BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myArg: NamedArgsSingleEnum + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useFnTestNamedArgsSingleEnum({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useFnTestNamedArgsSingleEnum({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useFnTestNamedArgsSingleEnum(props: HookInput<'FnTestNamedArgsSingleEnum', { stream: false }>): HookOutput<'FnTestNamedArgsSingleEnum', { stream: false }> +export function useFnTestNamedArgsSingleEnum(props?: HookInput<'FnTestNamedArgsSingleEnum', { stream?: true }>): HookOutput<'FnTestNamedArgsSingleEnum', { stream: true }> +export function useFnTestNamedArgsSingleEnum( + props: HookInput<'FnTestNamedArgsSingleEnum', { stream?: boolean }> = {}, +): HookOutput<'FnTestNamedArgsSingleEnum', { stream: true }> | HookOutput<'FnTestNamedArgsSingleEnum', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.FnTestNamedArgsSingleEnum, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.FnTestNamedArgsSingleEnum, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the GetDataType BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - text: string + * + * + * **Return Type:** + * - **Non‑streaming:** RaysData + * - **Streaming Partial:** partial_types.RaysData + * - **Streaming Final:** RaysData + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useGetDataType({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useGetDataType({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useGetDataType(props: HookInput<'GetDataType', { stream: false }>): HookOutput<'GetDataType', { stream: false }> +export function useGetDataType(props?: HookInput<'GetDataType', { stream?: true }>): HookOutput<'GetDataType', { stream: true }> +export function useGetDataType( + props: HookInput<'GetDataType', { stream?: boolean }> = {}, +): HookOutput<'GetDataType', { stream: true }> | HookOutput<'GetDataType', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.GetDataType, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.GetDataType, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the GetOrderInfo BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - email: Email + * + * + * **Return Type:** + * - **Non‑streaming:** OrderInfo + * - **Streaming Partial:** partial_types.OrderInfo + * - **Streaming Final:** OrderInfo + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useGetOrderInfo({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useGetOrderInfo({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useGetOrderInfo(props: HookInput<'GetOrderInfo', { stream: false }>): HookOutput<'GetOrderInfo', { stream: false }> +export function useGetOrderInfo(props?: HookInput<'GetOrderInfo', { stream?: true }>): HookOutput<'GetOrderInfo', { stream: true }> +export function useGetOrderInfo( + props: HookInput<'GetOrderInfo', { stream?: boolean }> = {}, +): HookOutput<'GetOrderInfo', { stream: true }> | HookOutput<'GetOrderInfo', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.GetOrderInfo, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.GetOrderInfo, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the GetQuery BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - query: string + * + * + * **Return Type:** + * - **Non‑streaming:** SearchParams + * - **Streaming Partial:** partial_types.SearchParams + * - **Streaming Final:** SearchParams + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useGetQuery({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useGetQuery({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useGetQuery(props: HookInput<'GetQuery', { stream: false }>): HookOutput<'GetQuery', { stream: false }> +export function useGetQuery(props?: HookInput<'GetQuery', { stream?: true }>): HookOutput<'GetQuery', { stream: true }> +export function useGetQuery( + props: HookInput<'GetQuery', { stream?: boolean }> = {}, +): HookOutput<'GetQuery', { stream: true }> | HookOutput<'GetQuery', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.GetQuery, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.GetQuery, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the InOutEnumMapKey BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - i1: Partial> + * + * - i2: Partial> + * + * + * **Return Type:** + * - **Non‑streaming:** Partial> + * - **Streaming Partial:** (Record ) + * - **Streaming Final:** Partial> + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useInOutEnumMapKey({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useInOutEnumMapKey({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useInOutEnumMapKey(props: HookInput<'InOutEnumMapKey', { stream: false }>): HookOutput<'InOutEnumMapKey', { stream: false }> +export function useInOutEnumMapKey(props?: HookInput<'InOutEnumMapKey', { stream?: true }>): HookOutput<'InOutEnumMapKey', { stream: true }> +export function useInOutEnumMapKey( + props: HookInput<'InOutEnumMapKey', { stream?: boolean }> = {}, +): HookOutput<'InOutEnumMapKey', { stream: true }> | HookOutput<'InOutEnumMapKey', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.InOutEnumMapKey, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.InOutEnumMapKey, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the InOutLiteralStringUnionMapKey BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - i1: Partial> + * + * - i2: Partial> + * + * + * **Return Type:** + * - **Non‑streaming:** Partial> + * - **Streaming Partial:** (Record<"one" | "two" | "three" | "four", (string | null)> ) + * - **Streaming Final:** Partial> + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useInOutLiteralStringUnionMapKey({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useInOutLiteralStringUnionMapKey({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useInOutLiteralStringUnionMapKey(props: HookInput<'InOutLiteralStringUnionMapKey', { stream: false }>): HookOutput<'InOutLiteralStringUnionMapKey', { stream: false }> +export function useInOutLiteralStringUnionMapKey(props?: HookInput<'InOutLiteralStringUnionMapKey', { stream?: true }>): HookOutput<'InOutLiteralStringUnionMapKey', { stream: true }> +export function useInOutLiteralStringUnionMapKey( + props: HookInput<'InOutLiteralStringUnionMapKey', { stream?: boolean }> = {}, +): HookOutput<'InOutLiteralStringUnionMapKey', { stream: true }> | HookOutput<'InOutLiteralStringUnionMapKey', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.InOutLiteralStringUnionMapKey, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.InOutLiteralStringUnionMapKey, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the InOutSingleLiteralStringMapKey BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - m: Partial> + * + * + * **Return Type:** + * - **Non‑streaming:** Partial> + * - **Streaming Partial:** (Record<"key", (string | null)> ) + * - **Streaming Final:** Partial> + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useInOutSingleLiteralStringMapKey({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useInOutSingleLiteralStringMapKey({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useInOutSingleLiteralStringMapKey(props: HookInput<'InOutSingleLiteralStringMapKey', { stream: false }>): HookOutput<'InOutSingleLiteralStringMapKey', { stream: false }> +export function useInOutSingleLiteralStringMapKey(props?: HookInput<'InOutSingleLiteralStringMapKey', { stream?: true }>): HookOutput<'InOutSingleLiteralStringMapKey', { stream: true }> +export function useInOutSingleLiteralStringMapKey( + props: HookInput<'InOutSingleLiteralStringMapKey', { stream?: boolean }> = {}, +): HookOutput<'InOutSingleLiteralStringMapKey', { stream: true }> | HookOutput<'InOutSingleLiteralStringMapKey', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.InOutSingleLiteralStringMapKey, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.InOutSingleLiteralStringMapKey, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the JsonTypeAliasCycle BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: JsonValue + * + * + * **Return Type:** + * - **Non‑streaming:** JsonValue + * - **Streaming Partial:** JsonValue + * - **Streaming Final:** JsonValue + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useJsonTypeAliasCycle({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useJsonTypeAliasCycle({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useJsonTypeAliasCycle(props: HookInput<'JsonTypeAliasCycle', { stream: false }>): HookOutput<'JsonTypeAliasCycle', { stream: false }> +export function useJsonTypeAliasCycle(props?: HookInput<'JsonTypeAliasCycle', { stream?: true }>): HookOutput<'JsonTypeAliasCycle', { stream: true }> +export function useJsonTypeAliasCycle( + props: HookInput<'JsonTypeAliasCycle', { stream?: boolean }> = {}, +): HookOutput<'JsonTypeAliasCycle', { stream: true }> | HookOutput<'JsonTypeAliasCycle', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.JsonTypeAliasCycle, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.JsonTypeAliasCycle, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the LiteralUnionsTest BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** 1 | true | "string output" + * - **Streaming Partial:** (1 | true | "string output") + * - **Streaming Final:** 1 | true | "string output" + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useLiteralUnionsTest({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useLiteralUnionsTest({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useLiteralUnionsTest(props: HookInput<'LiteralUnionsTest', { stream: false }>): HookOutput<'LiteralUnionsTest', { stream: false }> +export function useLiteralUnionsTest(props?: HookInput<'LiteralUnionsTest', { stream?: true }>): HookOutput<'LiteralUnionsTest', { stream: true }> +export function useLiteralUnionsTest( + props: HookInput<'LiteralUnionsTest', { stream?: boolean }> = {}, +): HookOutput<'LiteralUnionsTest', { stream: true }> | HookOutput<'LiteralUnionsTest', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.LiteralUnionsTest, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.LiteralUnionsTest, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the MakeBlockConstraint BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** Checked + * - **Streaming Partial:** Checked + * - **Streaming Final:** Checked + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useMakeBlockConstraint({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useMakeBlockConstraint({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useMakeBlockConstraint(props: HookInput<'MakeBlockConstraint', { stream: false }>): HookOutput<'MakeBlockConstraint', { stream: false }> +export function useMakeBlockConstraint(props?: HookInput<'MakeBlockConstraint', { stream?: true }>): HookOutput<'MakeBlockConstraint', { stream: true }> +export function useMakeBlockConstraint( + props: HookInput<'MakeBlockConstraint', { stream?: boolean }> = {}, +): HookOutput<'MakeBlockConstraint', { stream: true }> | HookOutput<'MakeBlockConstraint', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.MakeBlockConstraint, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.MakeBlockConstraint, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the MakeNestedBlockConstraint BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** NestedBlockConstraint + * - **Streaming Partial:** partial_types.NestedBlockConstraint + * - **Streaming Final:** NestedBlockConstraint + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useMakeNestedBlockConstraint({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useMakeNestedBlockConstraint({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useMakeNestedBlockConstraint(props: HookInput<'MakeNestedBlockConstraint', { stream: false }>): HookOutput<'MakeNestedBlockConstraint', { stream: false }> +export function useMakeNestedBlockConstraint(props?: HookInput<'MakeNestedBlockConstraint', { stream?: true }>): HookOutput<'MakeNestedBlockConstraint', { stream: true }> +export function useMakeNestedBlockConstraint( + props: HookInput<'MakeNestedBlockConstraint', { stream?: boolean }> = {}, +): HookOutput<'MakeNestedBlockConstraint', { stream: true }> | HookOutput<'MakeNestedBlockConstraint', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.MakeNestedBlockConstraint, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.MakeNestedBlockConstraint, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the MakeSemanticContainer BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** SemanticContainer + * - **Streaming Partial:** partial_types.SemanticContainer + * - **Streaming Final:** SemanticContainer + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useMakeSemanticContainer({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useMakeSemanticContainer({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useMakeSemanticContainer(props: HookInput<'MakeSemanticContainer', { stream: false }>): HookOutput<'MakeSemanticContainer', { stream: false }> +export function useMakeSemanticContainer(props?: HookInput<'MakeSemanticContainer', { stream?: true }>): HookOutput<'MakeSemanticContainer', { stream: true }> +export function useMakeSemanticContainer( + props: HookInput<'MakeSemanticContainer', { stream?: boolean }> = {}, +): HookOutput<'MakeSemanticContainer', { stream: true }> | HookOutput<'MakeSemanticContainer', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.MakeSemanticContainer, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.MakeSemanticContainer, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the MapAlias BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - m: Record + * + * + * **Return Type:** + * - **Non‑streaming:** Record + * - **Streaming Partial:** (Record ) + * - **Streaming Final:** Record + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useMapAlias({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useMapAlias({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useMapAlias(props: HookInput<'MapAlias', { stream: false }>): HookOutput<'MapAlias', { stream: false }> +export function useMapAlias(props?: HookInput<'MapAlias', { stream?: true }>): HookOutput<'MapAlias', { stream: true }> +export function useMapAlias( + props: HookInput<'MapAlias', { stream?: boolean }> = {}, +): HookOutput<'MapAlias', { stream: true }> | HookOutput<'MapAlias', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.MapAlias, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.MapAlias, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the MergeAliasAttributes BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - money: number + * + * + * **Return Type:** + * - **Non‑streaming:** MergeAttrs + * - **Streaming Partial:** partial_types.MergeAttrs + * - **Streaming Final:** MergeAttrs + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useMergeAliasAttributes({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useMergeAliasAttributes({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useMergeAliasAttributes(props: HookInput<'MergeAliasAttributes', { stream: false }>): HookOutput<'MergeAliasAttributes', { stream: false }> +export function useMergeAliasAttributes(props?: HookInput<'MergeAliasAttributes', { stream?: true }>): HookOutput<'MergeAliasAttributes', { stream: true }> +export function useMergeAliasAttributes( + props: HookInput<'MergeAliasAttributes', { stream?: boolean }> = {}, +): HookOutput<'MergeAliasAttributes', { stream: true }> | HookOutput<'MergeAliasAttributes', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.MergeAliasAttributes, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.MergeAliasAttributes, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the MyFunc BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** DynamicOutput + * - **Streaming Partial:** partial_types.DynamicOutput + * - **Streaming Final:** DynamicOutput + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useMyFunc({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useMyFunc({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useMyFunc(props: HookInput<'MyFunc', { stream: false }>): HookOutput<'MyFunc', { stream: false }> +export function useMyFunc(props?: HookInput<'MyFunc', { stream?: true }>): HookOutput<'MyFunc', { stream: true }> +export function useMyFunc( + props: HookInput<'MyFunc', { stream?: boolean }> = {}, +): HookOutput<'MyFunc', { stream: true }> | HookOutput<'MyFunc', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.MyFunc, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.MyFunc, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the NestedAlias BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - c: number | string | boolean | number | string[] | Record + * + * + * **Return Type:** + * - **Non‑streaming:** number | string | boolean | number | string[] | Record + * - **Streaming Partial:** (((number | null) | (string | null) | (boolean | null) | (number | null) | null) | (string | null)[] | (Record | null)) + * - **Streaming Final:** number | string | boolean | number | string[] | Record + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useNestedAlias({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useNestedAlias({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useNestedAlias(props: HookInput<'NestedAlias', { stream: false }>): HookOutput<'NestedAlias', { stream: false }> +export function useNestedAlias(props?: HookInput<'NestedAlias', { stream?: true }>): HookOutput<'NestedAlias', { stream: true }> +export function useNestedAlias( + props: HookInput<'NestedAlias', { stream?: boolean }> = {}, +): HookOutput<'NestedAlias', { stream: true }> | HookOutput<'NestedAlias', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.NestedAlias, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.NestedAlias, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the NullLiteralClassHello BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - s: string + * + * + * **Return Type:** + * - **Non‑streaming:** ClassForNullLiteral + * - **Streaming Partial:** partial_types.ClassForNullLiteral + * - **Streaming Final:** ClassForNullLiteral + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useNullLiteralClassHello({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useNullLiteralClassHello({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useNullLiteralClassHello(props: HookInput<'NullLiteralClassHello', { stream: false }>): HookOutput<'NullLiteralClassHello', { stream: false }> +export function useNullLiteralClassHello(props?: HookInput<'NullLiteralClassHello', { stream?: true }>): HookOutput<'NullLiteralClassHello', { stream: true }> +export function useNullLiteralClassHello( + props: HookInput<'NullLiteralClassHello', { stream?: boolean }> = {}, +): HookOutput<'NullLiteralClassHello', { stream: true }> | HookOutput<'NullLiteralClassHello', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.NullLiteralClassHello, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.NullLiteralClassHello, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the OptionalTest_Function BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** (OptionalTest_ReturnType | null)[] + * - **Streaming Partial:** ((partial_types.OptionalTest_ReturnType | null) | null)[] + * - **Streaming Final:** (OptionalTest_ReturnType | null)[] + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useOptionalTest_Function({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useOptionalTest_Function({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useOptionalTest_Function(props: HookInput<'OptionalTest_Function', { stream: false }>): HookOutput<'OptionalTest_Function', { stream: false }> +export function useOptionalTest_Function(props?: HookInput<'OptionalTest_Function', { stream?: true }>): HookOutput<'OptionalTest_Function', { stream: true }> +export function useOptionalTest_Function( + props: HookInput<'OptionalTest_Function', { stream?: boolean }> = {}, +): HookOutput<'OptionalTest_Function', { stream: true }> | HookOutput<'OptionalTest_Function', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.OptionalTest_Function, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.OptionalTest_Function, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the PredictAge BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - name: string + * + * + * **Return Type:** + * - **Non‑streaming:** FooAny + * - **Streaming Partial:** partial_types.FooAny + * - **Streaming Final:** FooAny + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = usePredictAge({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = usePredictAge({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function usePredictAge(props: HookInput<'PredictAge', { stream: false }>): HookOutput<'PredictAge', { stream: false }> +export function usePredictAge(props?: HookInput<'PredictAge', { stream?: true }>): HookOutput<'PredictAge', { stream: true }> +export function usePredictAge( + props: HookInput<'PredictAge', { stream?: boolean }> = {}, +): HookOutput<'PredictAge', { stream: true }> | HookOutput<'PredictAge', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.PredictAge, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.PredictAge, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the PredictAgeBare BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - inp: string + * + * + * **Return Type:** + * - **Non‑streaming:** Checked + * - **Streaming Partial:** Checked + * - **Streaming Final:** Checked + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = usePredictAgeBare({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = usePredictAgeBare({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function usePredictAgeBare(props: HookInput<'PredictAgeBare', { stream: false }>): HookOutput<'PredictAgeBare', { stream: false }> +export function usePredictAgeBare(props?: HookInput<'PredictAgeBare', { stream?: true }>): HookOutput<'PredictAgeBare', { stream: true }> +export function usePredictAgeBare( + props: HookInput<'PredictAgeBare', { stream?: boolean }> = {}, +): HookOutput<'PredictAgeBare', { stream: true }> | HookOutput<'PredictAgeBare', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.PredictAgeBare, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.PredictAgeBare, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the PrimitiveAlias BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - p: number | string | boolean | number + * + * + * **Return Type:** + * - **Non‑streaming:** number | string | boolean | number + * - **Streaming Partial:** ((number | null) | (string | null) | (boolean | null) | (number | null)) + * - **Streaming Final:** number | string | boolean | number + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = usePrimitiveAlias({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = usePrimitiveAlias({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function usePrimitiveAlias(props: HookInput<'PrimitiveAlias', { stream: false }>): HookOutput<'PrimitiveAlias', { stream: false }> +export function usePrimitiveAlias(props?: HookInput<'PrimitiveAlias', { stream?: true }>): HookOutput<'PrimitiveAlias', { stream: true }> +export function usePrimitiveAlias( + props: HookInput<'PrimitiveAlias', { stream?: boolean }> = {}, +): HookOutput<'PrimitiveAlias', { stream: true }> | HookOutput<'PrimitiveAlias', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.PrimitiveAlias, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.PrimitiveAlias, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the PromptTestClaude BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = usePromptTestClaude({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = usePromptTestClaude({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function usePromptTestClaude(props: HookInput<'PromptTestClaude', { stream: false }>): HookOutput<'PromptTestClaude', { stream: false }> +export function usePromptTestClaude(props?: HookInput<'PromptTestClaude', { stream?: true }>): HookOutput<'PromptTestClaude', { stream: true }> +export function usePromptTestClaude( + props: HookInput<'PromptTestClaude', { stream?: boolean }> = {}, +): HookOutput<'PromptTestClaude', { stream: true }> | HookOutput<'PromptTestClaude', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.PromptTestClaude, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.PromptTestClaude, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the PromptTestClaudeChat BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = usePromptTestClaudeChat({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = usePromptTestClaudeChat({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function usePromptTestClaudeChat(props: HookInput<'PromptTestClaudeChat', { stream: false }>): HookOutput<'PromptTestClaudeChat', { stream: false }> +export function usePromptTestClaudeChat(props?: HookInput<'PromptTestClaudeChat', { stream?: true }>): HookOutput<'PromptTestClaudeChat', { stream: true }> +export function usePromptTestClaudeChat( + props: HookInput<'PromptTestClaudeChat', { stream?: boolean }> = {}, +): HookOutput<'PromptTestClaudeChat', { stream: true }> | HookOutput<'PromptTestClaudeChat', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.PromptTestClaudeChat, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.PromptTestClaudeChat, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the PromptTestClaudeChatNoSystem BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = usePromptTestClaudeChatNoSystem({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = usePromptTestClaudeChatNoSystem({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function usePromptTestClaudeChatNoSystem(props: HookInput<'PromptTestClaudeChatNoSystem', { stream: false }>): HookOutput<'PromptTestClaudeChatNoSystem', { stream: false }> +export function usePromptTestClaudeChatNoSystem(props?: HookInput<'PromptTestClaudeChatNoSystem', { stream?: true }>): HookOutput<'PromptTestClaudeChatNoSystem', { stream: true }> +export function usePromptTestClaudeChatNoSystem( + props: HookInput<'PromptTestClaudeChatNoSystem', { stream?: boolean }> = {}, +): HookOutput<'PromptTestClaudeChatNoSystem', { stream: true }> | HookOutput<'PromptTestClaudeChatNoSystem', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.PromptTestClaudeChatNoSystem, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.PromptTestClaudeChatNoSystem, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the PromptTestOpenAI BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = usePromptTestOpenAI({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = usePromptTestOpenAI({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function usePromptTestOpenAI(props: HookInput<'PromptTestOpenAI', { stream: false }>): HookOutput<'PromptTestOpenAI', { stream: false }> +export function usePromptTestOpenAI(props?: HookInput<'PromptTestOpenAI', { stream?: true }>): HookOutput<'PromptTestOpenAI', { stream: true }> +export function usePromptTestOpenAI( + props: HookInput<'PromptTestOpenAI', { stream?: boolean }> = {}, +): HookOutput<'PromptTestOpenAI', { stream: true }> | HookOutput<'PromptTestOpenAI', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.PromptTestOpenAI, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.PromptTestOpenAI, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the PromptTestOpenAIChat BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = usePromptTestOpenAIChat({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = usePromptTestOpenAIChat({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function usePromptTestOpenAIChat(props: HookInput<'PromptTestOpenAIChat', { stream: false }>): HookOutput<'PromptTestOpenAIChat', { stream: false }> +export function usePromptTestOpenAIChat(props?: HookInput<'PromptTestOpenAIChat', { stream?: true }>): HookOutput<'PromptTestOpenAIChat', { stream: true }> +export function usePromptTestOpenAIChat( + props: HookInput<'PromptTestOpenAIChat', { stream?: boolean }> = {}, +): HookOutput<'PromptTestOpenAIChat', { stream: true }> | HookOutput<'PromptTestOpenAIChat', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.PromptTestOpenAIChat, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.PromptTestOpenAIChat, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the PromptTestOpenAIChatNoSystem BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = usePromptTestOpenAIChatNoSystem({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = usePromptTestOpenAIChatNoSystem({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function usePromptTestOpenAIChatNoSystem(props: HookInput<'PromptTestOpenAIChatNoSystem', { stream: false }>): HookOutput<'PromptTestOpenAIChatNoSystem', { stream: false }> +export function usePromptTestOpenAIChatNoSystem(props?: HookInput<'PromptTestOpenAIChatNoSystem', { stream?: true }>): HookOutput<'PromptTestOpenAIChatNoSystem', { stream: true }> +export function usePromptTestOpenAIChatNoSystem( + props: HookInput<'PromptTestOpenAIChatNoSystem', { stream?: boolean }> = {}, +): HookOutput<'PromptTestOpenAIChatNoSystem', { stream: true }> | HookOutput<'PromptTestOpenAIChatNoSystem', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.PromptTestOpenAIChatNoSystem, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.PromptTestOpenAIChatNoSystem, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the PromptTestStreaming BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = usePromptTestStreaming({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = usePromptTestStreaming({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function usePromptTestStreaming(props: HookInput<'PromptTestStreaming', { stream: false }>): HookOutput<'PromptTestStreaming', { stream: false }> +export function usePromptTestStreaming(props?: HookInput<'PromptTestStreaming', { stream?: true }>): HookOutput<'PromptTestStreaming', { stream: true }> +export function usePromptTestStreaming( + props: HookInput<'PromptTestStreaming', { stream?: boolean }> = {}, +): HookOutput<'PromptTestStreaming', { stream: true }> | HookOutput<'PromptTestStreaming', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.PromptTestStreaming, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.PromptTestStreaming, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the RecursiveAliasCycle BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: RecAliasOne + * + * + * **Return Type:** + * - **Non‑streaming:** RecAliasOne + * - **Streaming Partial:** RecAliasOne + * - **Streaming Final:** RecAliasOne + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useRecursiveAliasCycle({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useRecursiveAliasCycle({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useRecursiveAliasCycle(props: HookInput<'RecursiveAliasCycle', { stream: false }>): HookOutput<'RecursiveAliasCycle', { stream: false }> +export function useRecursiveAliasCycle(props?: HookInput<'RecursiveAliasCycle', { stream?: true }>): HookOutput<'RecursiveAliasCycle', { stream: true }> +export function useRecursiveAliasCycle( + props: HookInput<'RecursiveAliasCycle', { stream?: boolean }> = {}, +): HookOutput<'RecursiveAliasCycle', { stream: true }> | HookOutput<'RecursiveAliasCycle', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.RecursiveAliasCycle, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.RecursiveAliasCycle, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the RecursiveClassWithAliasIndirection BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - cls: NodeWithAliasIndirection + * + * + * **Return Type:** + * - **Non‑streaming:** NodeWithAliasIndirection + * - **Streaming Partial:** partial_types.NodeWithAliasIndirection + * - **Streaming Final:** NodeWithAliasIndirection + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useRecursiveClassWithAliasIndirection({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useRecursiveClassWithAliasIndirection({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useRecursiveClassWithAliasIndirection(props: HookInput<'RecursiveClassWithAliasIndirection', { stream: false }>): HookOutput<'RecursiveClassWithAliasIndirection', { stream: false }> +export function useRecursiveClassWithAliasIndirection(props?: HookInput<'RecursiveClassWithAliasIndirection', { stream?: true }>): HookOutput<'RecursiveClassWithAliasIndirection', { stream: true }> +export function useRecursiveClassWithAliasIndirection( + props: HookInput<'RecursiveClassWithAliasIndirection', { stream?: boolean }> = {}, +): HookOutput<'RecursiveClassWithAliasIndirection', { stream: true }> | HookOutput<'RecursiveClassWithAliasIndirection', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.RecursiveClassWithAliasIndirection, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.RecursiveClassWithAliasIndirection, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ReturnAliasWithMergedAttributes BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - money: Checked + * + * + * **Return Type:** + * - **Non‑streaming:** Checked + * - **Streaming Partial:** Checked + * - **Streaming Final:** Checked + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useReturnAliasWithMergedAttributes({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useReturnAliasWithMergedAttributes({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useReturnAliasWithMergedAttributes(props: HookInput<'ReturnAliasWithMergedAttributes', { stream: false }>): HookOutput<'ReturnAliasWithMergedAttributes', { stream: false }> +export function useReturnAliasWithMergedAttributes(props?: HookInput<'ReturnAliasWithMergedAttributes', { stream?: true }>): HookOutput<'ReturnAliasWithMergedAttributes', { stream: true }> +export function useReturnAliasWithMergedAttributes( + props: HookInput<'ReturnAliasWithMergedAttributes', { stream?: boolean }> = {}, +): HookOutput<'ReturnAliasWithMergedAttributes', { stream: true }> | HookOutput<'ReturnAliasWithMergedAttributes', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ReturnAliasWithMergedAttributes, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ReturnAliasWithMergedAttributes, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ReturnFailingAssert BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - inp: number + * + * + * **Return Type:** + * - **Non‑streaming:** number + * - **Streaming Partial:** number + * - **Streaming Final:** number + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useReturnFailingAssert({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useReturnFailingAssert({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useReturnFailingAssert(props: HookInput<'ReturnFailingAssert', { stream: false }>): HookOutput<'ReturnFailingAssert', { stream: false }> +export function useReturnFailingAssert(props?: HookInput<'ReturnFailingAssert', { stream?: true }>): HookOutput<'ReturnFailingAssert', { stream: true }> +export function useReturnFailingAssert( + props: HookInput<'ReturnFailingAssert', { stream?: boolean }> = {}, +): HookOutput<'ReturnFailingAssert', { stream: true }> | HookOutput<'ReturnFailingAssert', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ReturnFailingAssert, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ReturnFailingAssert, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ReturnJsonEntry BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - s: string + * + * + * **Return Type:** + * - **Non‑streaming:** JsonTemplate + * - **Streaming Partial:** JsonTemplate + * - **Streaming Final:** JsonTemplate + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useReturnJsonEntry({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useReturnJsonEntry({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useReturnJsonEntry(props: HookInput<'ReturnJsonEntry', { stream: false }>): HookOutput<'ReturnJsonEntry', { stream: false }> +export function useReturnJsonEntry(props?: HookInput<'ReturnJsonEntry', { stream?: true }>): HookOutput<'ReturnJsonEntry', { stream: true }> +export function useReturnJsonEntry( + props: HookInput<'ReturnJsonEntry', { stream?: boolean }> = {}, +): HookOutput<'ReturnJsonEntry', { stream: true }> | HookOutput<'ReturnJsonEntry', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ReturnJsonEntry, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ReturnJsonEntry, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the ReturnMalformedConstraints BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - a: number + * + * + * **Return Type:** + * - **Non‑streaming:** MalformedConstraints + * - **Streaming Partial:** partial_types.MalformedConstraints + * - **Streaming Final:** MalformedConstraints + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useReturnMalformedConstraints({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useReturnMalformedConstraints({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useReturnMalformedConstraints(props: HookInput<'ReturnMalformedConstraints', { stream: false }>): HookOutput<'ReturnMalformedConstraints', { stream: false }> +export function useReturnMalformedConstraints(props?: HookInput<'ReturnMalformedConstraints', { stream?: true }>): HookOutput<'ReturnMalformedConstraints', { stream: true }> +export function useReturnMalformedConstraints( + props: HookInput<'ReturnMalformedConstraints', { stream?: boolean }> = {}, +): HookOutput<'ReturnMalformedConstraints', { stream: true }> | HookOutput<'ReturnMalformedConstraints', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.ReturnMalformedConstraints, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.ReturnMalformedConstraints, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the SchemaDescriptions BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** Schema + * - **Streaming Partial:** partial_types.Schema + * - **Streaming Final:** Schema + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useSchemaDescriptions({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useSchemaDescriptions({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useSchemaDescriptions(props: HookInput<'SchemaDescriptions', { stream: false }>): HookOutput<'SchemaDescriptions', { stream: false }> +export function useSchemaDescriptions(props?: HookInput<'SchemaDescriptions', { stream?: true }>): HookOutput<'SchemaDescriptions', { stream: true }> +export function useSchemaDescriptions( + props: HookInput<'SchemaDescriptions', { stream?: boolean }> = {}, +): HookOutput<'SchemaDescriptions', { stream: true }> | HookOutput<'SchemaDescriptions', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.SchemaDescriptions, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.SchemaDescriptions, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the SimpleRecursiveListAlias BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: RecursiveListAlias + * + * + * **Return Type:** + * - **Non‑streaming:** RecursiveListAlias + * - **Streaming Partial:** RecursiveListAlias + * - **Streaming Final:** RecursiveListAlias + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useSimpleRecursiveListAlias({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useSimpleRecursiveListAlias({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useSimpleRecursiveListAlias(props: HookInput<'SimpleRecursiveListAlias', { stream: false }>): HookOutput<'SimpleRecursiveListAlias', { stream: false }> +export function useSimpleRecursiveListAlias(props?: HookInput<'SimpleRecursiveListAlias', { stream?: true }>): HookOutput<'SimpleRecursiveListAlias', { stream: true }> +export function useSimpleRecursiveListAlias( + props: HookInput<'SimpleRecursiveListAlias', { stream?: boolean }> = {}, +): HookOutput<'SimpleRecursiveListAlias', { stream: true }> | HookOutput<'SimpleRecursiveListAlias', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.SimpleRecursiveListAlias, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.SimpleRecursiveListAlias, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the SimpleRecursiveMapAlias BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: RecursiveMapAlias + * + * + * **Return Type:** + * - **Non‑streaming:** RecursiveMapAlias + * - **Streaming Partial:** RecursiveMapAlias + * - **Streaming Final:** RecursiveMapAlias + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useSimpleRecursiveMapAlias({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useSimpleRecursiveMapAlias({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useSimpleRecursiveMapAlias(props: HookInput<'SimpleRecursiveMapAlias', { stream: false }>): HookOutput<'SimpleRecursiveMapAlias', { stream: false }> +export function useSimpleRecursiveMapAlias(props?: HookInput<'SimpleRecursiveMapAlias', { stream?: true }>): HookOutput<'SimpleRecursiveMapAlias', { stream: true }> +export function useSimpleRecursiveMapAlias( + props: HookInput<'SimpleRecursiveMapAlias', { stream?: boolean }> = {}, +): HookOutput<'SimpleRecursiveMapAlias', { stream: true }> | HookOutput<'SimpleRecursiveMapAlias', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.SimpleRecursiveMapAlias, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.SimpleRecursiveMapAlias, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the StreamBigNumbers BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - digits: number + * + * + * **Return Type:** + * - **Non‑streaming:** BigNumbers + * - **Streaming Partial:** partial_types.BigNumbers + * - **Streaming Final:** BigNumbers + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useStreamBigNumbers({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useStreamBigNumbers({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useStreamBigNumbers(props: HookInput<'StreamBigNumbers', { stream: false }>): HookOutput<'StreamBigNumbers', { stream: false }> +export function useStreamBigNumbers(props?: HookInput<'StreamBigNumbers', { stream?: true }>): HookOutput<'StreamBigNumbers', { stream: true }> +export function useStreamBigNumbers( + props: HookInput<'StreamBigNumbers', { stream?: boolean }> = {}, +): HookOutput<'StreamBigNumbers', { stream: true }> | HookOutput<'StreamBigNumbers', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.StreamBigNumbers, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.StreamBigNumbers, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the StreamFailingAssertion BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - theme: string + * + * - length: number + * + * + * **Return Type:** + * - **Non‑streaming:** TwoStoriesOneTitle + * - **Streaming Partial:** partial_types.TwoStoriesOneTitle + * - **Streaming Final:** TwoStoriesOneTitle + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useStreamFailingAssertion({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useStreamFailingAssertion({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useStreamFailingAssertion(props: HookInput<'StreamFailingAssertion', { stream: false }>): HookOutput<'StreamFailingAssertion', { stream: false }> +export function useStreamFailingAssertion(props?: HookInput<'StreamFailingAssertion', { stream?: true }>): HookOutput<'StreamFailingAssertion', { stream: true }> +export function useStreamFailingAssertion( + props: HookInput<'StreamFailingAssertion', { stream?: boolean }> = {}, +): HookOutput<'StreamFailingAssertion', { stream: true }> | HookOutput<'StreamFailingAssertion', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.StreamFailingAssertion, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.StreamFailingAssertion, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the StreamOneBigNumber BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - digits: number + * + * + * **Return Type:** + * - **Non‑streaming:** number + * - **Streaming Partial:** number + * - **Streaming Final:** number + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useStreamOneBigNumber({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useStreamOneBigNumber({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useStreamOneBigNumber(props: HookInput<'StreamOneBigNumber', { stream: false }>): HookOutput<'StreamOneBigNumber', { stream: false }> +export function useStreamOneBigNumber(props?: HookInput<'StreamOneBigNumber', { stream?: true }>): HookOutput<'StreamOneBigNumber', { stream: true }> +export function useStreamOneBigNumber( + props: HookInput<'StreamOneBigNumber', { stream?: boolean }> = {}, +): HookOutput<'StreamOneBigNumber', { stream: true }> | HookOutput<'StreamOneBigNumber', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.StreamOneBigNumber, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.StreamOneBigNumber, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the StreamUnionIntegers BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - digits: number + * + * + * **Return Type:** + * - **Non‑streaming:** (number | string)[] + * - **Streaming Partial:** ((number | null) | (string | null) | null)[] + * - **Streaming Final:** (number | string)[] + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useStreamUnionIntegers({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useStreamUnionIntegers({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useStreamUnionIntegers(props: HookInput<'StreamUnionIntegers', { stream: false }>): HookOutput<'StreamUnionIntegers', { stream: false }> +export function useStreamUnionIntegers(props?: HookInput<'StreamUnionIntegers', { stream?: true }>): HookOutput<'StreamUnionIntegers', { stream: true }> +export function useStreamUnionIntegers( + props: HookInput<'StreamUnionIntegers', { stream?: boolean }> = {}, +): HookOutput<'StreamUnionIntegers', { stream: true }> | HookOutput<'StreamUnionIntegers', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.StreamUnionIntegers, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.StreamUnionIntegers, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the StreamingCompoundNumbers BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - digits: number + * + * - yapping: boolean + * + * + * **Return Type:** + * - **Non‑streaming:** CompoundBigNumbers + * - **Streaming Partial:** partial_types.CompoundBigNumbers + * - **Streaming Final:** CompoundBigNumbers + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useStreamingCompoundNumbers({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useStreamingCompoundNumbers({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useStreamingCompoundNumbers(props: HookInput<'StreamingCompoundNumbers', { stream: false }>): HookOutput<'StreamingCompoundNumbers', { stream: false }> +export function useStreamingCompoundNumbers(props?: HookInput<'StreamingCompoundNumbers', { stream?: true }>): HookOutput<'StreamingCompoundNumbers', { stream: true }> +export function useStreamingCompoundNumbers( + props: HookInput<'StreamingCompoundNumbers', { stream?: boolean }> = {}, +): HookOutput<'StreamingCompoundNumbers', { stream: true }> | HookOutput<'StreamingCompoundNumbers', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.StreamingCompoundNumbers, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.StreamingCompoundNumbers, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TakeRecAliasDep BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: RecursiveAliasDependency + * + * + * **Return Type:** + * - **Non‑streaming:** RecursiveAliasDependency + * - **Streaming Partial:** partial_types.RecursiveAliasDependency + * - **Streaming Final:** RecursiveAliasDependency + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTakeRecAliasDep({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTakeRecAliasDep({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTakeRecAliasDep(props: HookInput<'TakeRecAliasDep', { stream: false }>): HookOutput<'TakeRecAliasDep', { stream: false }> +export function useTakeRecAliasDep(props?: HookInput<'TakeRecAliasDep', { stream?: true }>): HookOutput<'TakeRecAliasDep', { stream: true }> +export function useTakeRecAliasDep( + props: HookInput<'TakeRecAliasDep', { stream?: boolean }> = {}, +): HookOutput<'TakeRecAliasDep', { stream: true }> | HookOutput<'TakeRecAliasDep', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TakeRecAliasDep, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TakeRecAliasDep, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAnthropic BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAnthropic({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAnthropic({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAnthropic(props: HookInput<'TestAnthropic', { stream: false }>): HookOutput<'TestAnthropic', { stream: false }> +export function useTestAnthropic(props?: HookInput<'TestAnthropic', { stream?: true }>): HookOutput<'TestAnthropic', { stream: true }> +export function useTestAnthropic( + props: HookInput<'TestAnthropic', { stream?: boolean }> = {}, +): HookOutput<'TestAnthropic', { stream: true }> | HookOutput<'TestAnthropic', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAnthropic, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAnthropic, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAnthropicShorthand BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAnthropicShorthand({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAnthropicShorthand({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAnthropicShorthand(props: HookInput<'TestAnthropicShorthand', { stream: false }>): HookOutput<'TestAnthropicShorthand', { stream: false }> +export function useTestAnthropicShorthand(props?: HookInput<'TestAnthropicShorthand', { stream?: true }>): HookOutput<'TestAnthropicShorthand', { stream: true }> +export function useTestAnthropicShorthand( + props: HookInput<'TestAnthropicShorthand', { stream?: boolean }> = {}, +): HookOutput<'TestAnthropicShorthand', { stream: true }> | HookOutput<'TestAnthropicShorthand', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAnthropicShorthand, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAnthropicShorthand, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAws BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAws({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAws({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAws(props: HookInput<'TestAws', { stream: false }>): HookOutput<'TestAws', { stream: false }> +export function useTestAws(props?: HookInput<'TestAws', { stream?: true }>): HookOutput<'TestAws', { stream: true }> +export function useTestAws( + props: HookInput<'TestAws', { stream?: boolean }> = {}, +): HookOutput<'TestAws', { stream: true }> | HookOutput<'TestAws', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAws, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAws, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAwsInvalidAccessKey BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAwsInvalidAccessKey({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAwsInvalidAccessKey({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAwsInvalidAccessKey(props: HookInput<'TestAwsInvalidAccessKey', { stream: false }>): HookOutput<'TestAwsInvalidAccessKey', { stream: false }> +export function useTestAwsInvalidAccessKey(props?: HookInput<'TestAwsInvalidAccessKey', { stream?: true }>): HookOutput<'TestAwsInvalidAccessKey', { stream: true }> +export function useTestAwsInvalidAccessKey( + props: HookInput<'TestAwsInvalidAccessKey', { stream?: boolean }> = {}, +): HookOutput<'TestAwsInvalidAccessKey', { stream: true }> | HookOutput<'TestAwsInvalidAccessKey', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAwsInvalidAccessKey, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAwsInvalidAccessKey, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAwsInvalidProfile BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAwsInvalidProfile({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAwsInvalidProfile({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAwsInvalidProfile(props: HookInput<'TestAwsInvalidProfile', { stream: false }>): HookOutput<'TestAwsInvalidProfile', { stream: false }> +export function useTestAwsInvalidProfile(props?: HookInput<'TestAwsInvalidProfile', { stream?: true }>): HookOutput<'TestAwsInvalidProfile', { stream: true }> +export function useTestAwsInvalidProfile( + props: HookInput<'TestAwsInvalidProfile', { stream?: boolean }> = {}, +): HookOutput<'TestAwsInvalidProfile', { stream: true }> | HookOutput<'TestAwsInvalidProfile', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAwsInvalidProfile, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAwsInvalidProfile, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAwsInvalidRegion BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAwsInvalidRegion({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAwsInvalidRegion({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAwsInvalidRegion(props: HookInput<'TestAwsInvalidRegion', { stream: false }>): HookOutput<'TestAwsInvalidRegion', { stream: false }> +export function useTestAwsInvalidRegion(props?: HookInput<'TestAwsInvalidRegion', { stream?: true }>): HookOutput<'TestAwsInvalidRegion', { stream: true }> +export function useTestAwsInvalidRegion( + props: HookInput<'TestAwsInvalidRegion', { stream?: boolean }> = {}, +): HookOutput<'TestAwsInvalidRegion', { stream: true }> | HookOutput<'TestAwsInvalidRegion', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAwsInvalidRegion, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAwsInvalidRegion, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAwsInvalidSessionToken BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAwsInvalidSessionToken({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAwsInvalidSessionToken({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAwsInvalidSessionToken(props: HookInput<'TestAwsInvalidSessionToken', { stream: false }>): HookOutput<'TestAwsInvalidSessionToken', { stream: false }> +export function useTestAwsInvalidSessionToken(props?: HookInput<'TestAwsInvalidSessionToken', { stream?: true }>): HookOutput<'TestAwsInvalidSessionToken', { stream: true }> +export function useTestAwsInvalidSessionToken( + props: HookInput<'TestAwsInvalidSessionToken', { stream?: boolean }> = {}, +): HookOutput<'TestAwsInvalidSessionToken', { stream: true }> | HookOutput<'TestAwsInvalidSessionToken', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAwsInvalidSessionToken, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAwsInvalidSessionToken, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAzure BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAzure({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAzure({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAzure(props: HookInput<'TestAzure', { stream: false }>): HookOutput<'TestAzure', { stream: false }> +export function useTestAzure(props?: HookInput<'TestAzure', { stream?: true }>): HookOutput<'TestAzure', { stream: true }> +export function useTestAzure( + props: HookInput<'TestAzure', { stream?: boolean }> = {}, +): HookOutput<'TestAzure', { stream: true }> | HookOutput<'TestAzure', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAzure, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAzure, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAzureFailure BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAzureFailure({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAzureFailure({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAzureFailure(props: HookInput<'TestAzureFailure', { stream: false }>): HookOutput<'TestAzureFailure', { stream: false }> +export function useTestAzureFailure(props?: HookInput<'TestAzureFailure', { stream?: true }>): HookOutput<'TestAzureFailure', { stream: true }> +export function useTestAzureFailure( + props: HookInput<'TestAzureFailure', { stream?: boolean }> = {}, +): HookOutput<'TestAzureFailure', { stream: true }> | HookOutput<'TestAzureFailure', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAzureFailure, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAzureFailure, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAzureO1NoMaxTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAzureO1NoMaxTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAzureO1NoMaxTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAzureO1NoMaxTokens(props: HookInput<'TestAzureO1NoMaxTokens', { stream: false }>): HookOutput<'TestAzureO1NoMaxTokens', { stream: false }> +export function useTestAzureO1NoMaxTokens(props?: HookInput<'TestAzureO1NoMaxTokens', { stream?: true }>): HookOutput<'TestAzureO1NoMaxTokens', { stream: true }> +export function useTestAzureO1NoMaxTokens( + props: HookInput<'TestAzureO1NoMaxTokens', { stream?: boolean }> = {}, +): HookOutput<'TestAzureO1NoMaxTokens', { stream: true }> | HookOutput<'TestAzureO1NoMaxTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAzureO1NoMaxTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAzureO1NoMaxTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAzureO1WithMaxCompletionTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAzureO1WithMaxCompletionTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAzureO1WithMaxCompletionTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAzureO1WithMaxCompletionTokens(props: HookInput<'TestAzureO1WithMaxCompletionTokens', { stream: false }>): HookOutput<'TestAzureO1WithMaxCompletionTokens', { stream: false }> +export function useTestAzureO1WithMaxCompletionTokens(props?: HookInput<'TestAzureO1WithMaxCompletionTokens', { stream?: true }>): HookOutput<'TestAzureO1WithMaxCompletionTokens', { stream: true }> +export function useTestAzureO1WithMaxCompletionTokens( + props: HookInput<'TestAzureO1WithMaxCompletionTokens', { stream?: boolean }> = {}, +): HookOutput<'TestAzureO1WithMaxCompletionTokens', { stream: true }> | HookOutput<'TestAzureO1WithMaxCompletionTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAzureO1WithMaxCompletionTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAzureO1WithMaxCompletionTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAzureO1WithMaxTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAzureO1WithMaxTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAzureO1WithMaxTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAzureO1WithMaxTokens(props: HookInput<'TestAzureO1WithMaxTokens', { stream: false }>): HookOutput<'TestAzureO1WithMaxTokens', { stream: false }> +export function useTestAzureO1WithMaxTokens(props?: HookInput<'TestAzureO1WithMaxTokens', { stream?: true }>): HookOutput<'TestAzureO1WithMaxTokens', { stream: true }> +export function useTestAzureO1WithMaxTokens( + props: HookInput<'TestAzureO1WithMaxTokens', { stream?: boolean }> = {}, +): HookOutput<'TestAzureO1WithMaxTokens', { stream: true }> | HookOutput<'TestAzureO1WithMaxTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAzureO1WithMaxTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAzureO1WithMaxTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAzureO3NoMaxTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAzureO3NoMaxTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAzureO3NoMaxTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAzureO3NoMaxTokens(props: HookInput<'TestAzureO3NoMaxTokens', { stream: false }>): HookOutput<'TestAzureO3NoMaxTokens', { stream: false }> +export function useTestAzureO3NoMaxTokens(props?: HookInput<'TestAzureO3NoMaxTokens', { stream?: true }>): HookOutput<'TestAzureO3NoMaxTokens', { stream: true }> +export function useTestAzureO3NoMaxTokens( + props: HookInput<'TestAzureO3NoMaxTokens', { stream?: boolean }> = {}, +): HookOutput<'TestAzureO3NoMaxTokens', { stream: true }> | HookOutput<'TestAzureO3NoMaxTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAzureO3NoMaxTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAzureO3NoMaxTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAzureO3WithMaxCompletionTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAzureO3WithMaxCompletionTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAzureO3WithMaxCompletionTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAzureO3WithMaxCompletionTokens(props: HookInput<'TestAzureO3WithMaxCompletionTokens', { stream: false }>): HookOutput<'TestAzureO3WithMaxCompletionTokens', { stream: false }> +export function useTestAzureO3WithMaxCompletionTokens(props?: HookInput<'TestAzureO3WithMaxCompletionTokens', { stream?: true }>): HookOutput<'TestAzureO3WithMaxCompletionTokens', { stream: true }> +export function useTestAzureO3WithMaxCompletionTokens( + props: HookInput<'TestAzureO3WithMaxCompletionTokens', { stream?: boolean }> = {}, +): HookOutput<'TestAzureO3WithMaxCompletionTokens', { stream: true }> | HookOutput<'TestAzureO3WithMaxCompletionTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAzureO3WithMaxCompletionTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAzureO3WithMaxCompletionTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestAzureWithMaxTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestAzureWithMaxTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestAzureWithMaxTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestAzureWithMaxTokens(props: HookInput<'TestAzureWithMaxTokens', { stream: false }>): HookOutput<'TestAzureWithMaxTokens', { stream: false }> +export function useTestAzureWithMaxTokens(props?: HookInput<'TestAzureWithMaxTokens', { stream?: true }>): HookOutput<'TestAzureWithMaxTokens', { stream: true }> +export function useTestAzureWithMaxTokens( + props: HookInput<'TestAzureWithMaxTokens', { stream?: boolean }> = {}, +): HookOutput<'TestAzureWithMaxTokens', { stream: true }> | HookOutput<'TestAzureWithMaxTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestAzureWithMaxTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestAzureWithMaxTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestCaching BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * - not_cached: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestCaching({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestCaching({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestCaching(props: HookInput<'TestCaching', { stream: false }>): HookOutput<'TestCaching', { stream: false }> +export function useTestCaching(props?: HookInput<'TestCaching', { stream?: true }>): HookOutput<'TestCaching', { stream: true }> +export function useTestCaching( + props: HookInput<'TestCaching', { stream?: boolean }> = {}, +): HookOutput<'TestCaching', { stream: true }> | HookOutput<'TestCaching', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestCaching, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestCaching, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFallbackClient BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFallbackClient({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFallbackClient({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFallbackClient(props: HookInput<'TestFallbackClient', { stream: false }>): HookOutput<'TestFallbackClient', { stream: false }> +export function useTestFallbackClient(props?: HookInput<'TestFallbackClient', { stream?: true }>): HookOutput<'TestFallbackClient', { stream: true }> +export function useTestFallbackClient( + props: HookInput<'TestFallbackClient', { stream?: boolean }> = {}, +): HookOutput<'TestFallbackClient', { stream: true }> | HookOutput<'TestFallbackClient', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFallbackClient, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFallbackClient, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFallbackToShorthand BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFallbackToShorthand({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFallbackToShorthand({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFallbackToShorthand(props: HookInput<'TestFallbackToShorthand', { stream: false }>): HookOutput<'TestFallbackToShorthand', { stream: false }> +export function useTestFallbackToShorthand(props?: HookInput<'TestFallbackToShorthand', { stream?: true }>): HookOutput<'TestFallbackToShorthand', { stream: true }> +export function useTestFallbackToShorthand( + props: HookInput<'TestFallbackToShorthand', { stream?: boolean }> = {}, +): HookOutput<'TestFallbackToShorthand', { stream: true }> | HookOutput<'TestFallbackToShorthand', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFallbackToShorthand, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFallbackToShorthand, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleBool BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myBool: boolean + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleBool({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleBool({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleBool(props: HookInput<'TestFnNamedArgsSingleBool', { stream: false }>): HookOutput<'TestFnNamedArgsSingleBool', { stream: false }> +export function useTestFnNamedArgsSingleBool(props?: HookInput<'TestFnNamedArgsSingleBool', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleBool', { stream: true }> +export function useTestFnNamedArgsSingleBool( + props: HookInput<'TestFnNamedArgsSingleBool', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleBool', { stream: true }> | HookOutput<'TestFnNamedArgsSingleBool', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleBool, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleBool, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleClass BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myArg: NamedArgsSingleClass + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleClass({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleClass({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleClass(props: HookInput<'TestFnNamedArgsSingleClass', { stream: false }>): HookOutput<'TestFnNamedArgsSingleClass', { stream: false }> +export function useTestFnNamedArgsSingleClass(props?: HookInput<'TestFnNamedArgsSingleClass', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleClass', { stream: true }> +export function useTestFnNamedArgsSingleClass( + props: HookInput<'TestFnNamedArgsSingleClass', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleClass', { stream: true }> | HookOutput<'TestFnNamedArgsSingleClass', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleClass, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleClass, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleEnumList BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myArg: NamedArgsSingleEnumList[] + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleEnumList({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleEnumList({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleEnumList(props: HookInput<'TestFnNamedArgsSingleEnumList', { stream: false }>): HookOutput<'TestFnNamedArgsSingleEnumList', { stream: false }> +export function useTestFnNamedArgsSingleEnumList(props?: HookInput<'TestFnNamedArgsSingleEnumList', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleEnumList', { stream: true }> +export function useTestFnNamedArgsSingleEnumList( + props: HookInput<'TestFnNamedArgsSingleEnumList', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleEnumList', { stream: true }> | HookOutput<'TestFnNamedArgsSingleEnumList', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleEnumList, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleEnumList, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleFloat BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myFloat: number + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleFloat({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleFloat({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleFloat(props: HookInput<'TestFnNamedArgsSingleFloat', { stream: false }>): HookOutput<'TestFnNamedArgsSingleFloat', { stream: false }> +export function useTestFnNamedArgsSingleFloat(props?: HookInput<'TestFnNamedArgsSingleFloat', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleFloat', { stream: true }> +export function useTestFnNamedArgsSingleFloat( + props: HookInput<'TestFnNamedArgsSingleFloat', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleFloat', { stream: true }> | HookOutput<'TestFnNamedArgsSingleFloat', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleFloat, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleFloat, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleInt BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myInt: number + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleInt({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleInt({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleInt(props: HookInput<'TestFnNamedArgsSingleInt', { stream: false }>): HookOutput<'TestFnNamedArgsSingleInt', { stream: false }> +export function useTestFnNamedArgsSingleInt(props?: HookInput<'TestFnNamedArgsSingleInt', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleInt', { stream: true }> +export function useTestFnNamedArgsSingleInt( + props: HookInput<'TestFnNamedArgsSingleInt', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleInt', { stream: true }> | HookOutput<'TestFnNamedArgsSingleInt', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleInt, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleInt, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleMapStringToClass BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myMap: Record + * + * + * **Return Type:** + * - **Non‑streaming:** Record + * - **Streaming Partial:** (Record ) + * - **Streaming Final:** Record + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleMapStringToClass({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleMapStringToClass({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleMapStringToClass(props: HookInput<'TestFnNamedArgsSingleMapStringToClass', { stream: false }>): HookOutput<'TestFnNamedArgsSingleMapStringToClass', { stream: false }> +export function useTestFnNamedArgsSingleMapStringToClass(props?: HookInput<'TestFnNamedArgsSingleMapStringToClass', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleMapStringToClass', { stream: true }> +export function useTestFnNamedArgsSingleMapStringToClass( + props: HookInput<'TestFnNamedArgsSingleMapStringToClass', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleMapStringToClass', { stream: true }> | HookOutput<'TestFnNamedArgsSingleMapStringToClass', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleMapStringToClass, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleMapStringToClass, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleMapStringToMap BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myMap: Record> + * + * + * **Return Type:** + * - **Non‑streaming:** Record> + * - **Streaming Partial:** (Record | null)> ) + * - **Streaming Final:** Record> + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleMapStringToMap({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleMapStringToMap({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleMapStringToMap(props: HookInput<'TestFnNamedArgsSingleMapStringToMap', { stream: false }>): HookOutput<'TestFnNamedArgsSingleMapStringToMap', { stream: false }> +export function useTestFnNamedArgsSingleMapStringToMap(props?: HookInput<'TestFnNamedArgsSingleMapStringToMap', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleMapStringToMap', { stream: true }> +export function useTestFnNamedArgsSingleMapStringToMap( + props: HookInput<'TestFnNamedArgsSingleMapStringToMap', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleMapStringToMap', { stream: true }> | HookOutput<'TestFnNamedArgsSingleMapStringToMap', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleMapStringToMap, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleMapStringToMap, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleMapStringToString BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myMap: Record + * + * + * **Return Type:** + * - **Non‑streaming:** Record + * - **Streaming Partial:** (Record ) + * - **Streaming Final:** Record + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleMapStringToString({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleMapStringToString({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleMapStringToString(props: HookInput<'TestFnNamedArgsSingleMapStringToString', { stream: false }>): HookOutput<'TestFnNamedArgsSingleMapStringToString', { stream: false }> +export function useTestFnNamedArgsSingleMapStringToString(props?: HookInput<'TestFnNamedArgsSingleMapStringToString', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleMapStringToString', { stream: true }> +export function useTestFnNamedArgsSingleMapStringToString( + props: HookInput<'TestFnNamedArgsSingleMapStringToString', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleMapStringToString', { stream: true }> | HookOutput<'TestFnNamedArgsSingleMapStringToString', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleMapStringToString, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleMapStringToString, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleString BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myString: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleString({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleString({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleString(props: HookInput<'TestFnNamedArgsSingleString', { stream: false }>): HookOutput<'TestFnNamedArgsSingleString', { stream: false }> +export function useTestFnNamedArgsSingleString(props?: HookInput<'TestFnNamedArgsSingleString', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleString', { stream: true }> +export function useTestFnNamedArgsSingleString( + props: HookInput<'TestFnNamedArgsSingleString', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleString', { stream: true }> | HookOutput<'TestFnNamedArgsSingleString', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleString, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleString, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleStringArray BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myStringArray: string[] + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleStringArray({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleStringArray({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleStringArray(props: HookInput<'TestFnNamedArgsSingleStringArray', { stream: false }>): HookOutput<'TestFnNamedArgsSingleStringArray', { stream: false }> +export function useTestFnNamedArgsSingleStringArray(props?: HookInput<'TestFnNamedArgsSingleStringArray', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleStringArray', { stream: true }> +export function useTestFnNamedArgsSingleStringArray( + props: HookInput<'TestFnNamedArgsSingleStringArray', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleStringArray', { stream: true }> | HookOutput<'TestFnNamedArgsSingleStringArray', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleStringArray, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleStringArray, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestFnNamedArgsSingleStringList BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myArg: string[] + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestFnNamedArgsSingleStringList({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestFnNamedArgsSingleStringList({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestFnNamedArgsSingleStringList(props: HookInput<'TestFnNamedArgsSingleStringList', { stream: false }>): HookOutput<'TestFnNamedArgsSingleStringList', { stream: false }> +export function useTestFnNamedArgsSingleStringList(props?: HookInput<'TestFnNamedArgsSingleStringList', { stream?: true }>): HookOutput<'TestFnNamedArgsSingleStringList', { stream: true }> +export function useTestFnNamedArgsSingleStringList( + props: HookInput<'TestFnNamedArgsSingleStringList', { stream?: boolean }> = {}, +): HookOutput<'TestFnNamedArgsSingleStringList', { stream: true }> | HookOutput<'TestFnNamedArgsSingleStringList', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestFnNamedArgsSingleStringList, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestFnNamedArgsSingleStringList, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestGemini BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestGemini({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestGemini({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestGemini(props: HookInput<'TestGemini', { stream: false }>): HookOutput<'TestGemini', { stream: false }> +export function useTestGemini(props?: HookInput<'TestGemini', { stream?: true }>): HookOutput<'TestGemini', { stream: true }> +export function useTestGemini( + props: HookInput<'TestGemini', { stream?: boolean }> = {}, +): HookOutput<'TestGemini', { stream: true }> | HookOutput<'TestGemini', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestGemini, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestGemini, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestGeminiOpenAiGeneric BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestGeminiOpenAiGeneric({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestGeminiOpenAiGeneric({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestGeminiOpenAiGeneric(props: HookInput<'TestGeminiOpenAiGeneric', { stream: false }>): HookOutput<'TestGeminiOpenAiGeneric', { stream: false }> +export function useTestGeminiOpenAiGeneric(props?: HookInput<'TestGeminiOpenAiGeneric', { stream?: true }>): HookOutput<'TestGeminiOpenAiGeneric', { stream: true }> +export function useTestGeminiOpenAiGeneric( + props: HookInput<'TestGeminiOpenAiGeneric', { stream?: boolean }> = {}, +): HookOutput<'TestGeminiOpenAiGeneric', { stream: true }> | HookOutput<'TestGeminiOpenAiGeneric', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestGeminiOpenAiGeneric, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestGeminiOpenAiGeneric, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestGeminiSystem BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestGeminiSystem({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestGeminiSystem({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestGeminiSystem(props: HookInput<'TestGeminiSystem', { stream: false }>): HookOutput<'TestGeminiSystem', { stream: false }> +export function useTestGeminiSystem(props?: HookInput<'TestGeminiSystem', { stream?: true }>): HookOutput<'TestGeminiSystem', { stream: true }> +export function useTestGeminiSystem( + props: HookInput<'TestGeminiSystem', { stream?: boolean }> = {}, +): HookOutput<'TestGeminiSystem', { stream: true }> | HookOutput<'TestGeminiSystem', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestGeminiSystem, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestGeminiSystem, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestGeminiSystemAsChat BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestGeminiSystemAsChat({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestGeminiSystemAsChat({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestGeminiSystemAsChat(props: HookInput<'TestGeminiSystemAsChat', { stream: false }>): HookOutput<'TestGeminiSystemAsChat', { stream: false }> +export function useTestGeminiSystemAsChat(props?: HookInput<'TestGeminiSystemAsChat', { stream?: true }>): HookOutput<'TestGeminiSystemAsChat', { stream: true }> +export function useTestGeminiSystemAsChat( + props: HookInput<'TestGeminiSystemAsChat', { stream?: boolean }> = {}, +): HookOutput<'TestGeminiSystemAsChat', { stream: true }> | HookOutput<'TestGeminiSystemAsChat', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestGeminiSystemAsChat, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestGeminiSystemAsChat, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestImageInput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - img: Image + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestImageInput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestImageInput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestImageInput(props: HookInput<'TestImageInput', { stream: false }>): HookOutput<'TestImageInput', { stream: false }> +export function useTestImageInput(props?: HookInput<'TestImageInput', { stream?: true }>): HookOutput<'TestImageInput', { stream: true }> +export function useTestImageInput( + props: HookInput<'TestImageInput', { stream?: boolean }> = {}, +): HookOutput<'TestImageInput', { stream: true }> | HookOutput<'TestImageInput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestImageInput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestImageInput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestImageInputAnthropic BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - img: Image + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestImageInputAnthropic({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestImageInputAnthropic({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestImageInputAnthropic(props: HookInput<'TestImageInputAnthropic', { stream: false }>): HookOutput<'TestImageInputAnthropic', { stream: false }> +export function useTestImageInputAnthropic(props?: HookInput<'TestImageInputAnthropic', { stream?: true }>): HookOutput<'TestImageInputAnthropic', { stream: true }> +export function useTestImageInputAnthropic( + props: HookInput<'TestImageInputAnthropic', { stream?: boolean }> = {}, +): HookOutput<'TestImageInputAnthropic', { stream: true }> | HookOutput<'TestImageInputAnthropic', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestImageInputAnthropic, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestImageInputAnthropic, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestImageListInput BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - imgs: Image[] + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestImageListInput({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestImageListInput({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestImageListInput(props: HookInput<'TestImageListInput', { stream: false }>): HookOutput<'TestImageListInput', { stream: false }> +export function useTestImageListInput(props?: HookInput<'TestImageListInput', { stream?: true }>): HookOutput<'TestImageListInput', { stream: true }> +export function useTestImageListInput( + props: HookInput<'TestImageListInput', { stream?: boolean }> = {}, +): HookOutput<'TestImageListInput', { stream: true }> | HookOutput<'TestImageListInput', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestImageListInput, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestImageListInput, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestMemory BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** TestMemoryOutput + * - **Streaming Partial:** partial_types.TestMemoryOutput + * - **Streaming Final:** TestMemoryOutput + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestMemory({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestMemory({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestMemory(props: HookInput<'TestMemory', { stream: false }>): HookOutput<'TestMemory', { stream: false }> +export function useTestMemory(props?: HookInput<'TestMemory', { stream?: true }>): HookOutput<'TestMemory', { stream: true }> +export function useTestMemory( + props: HookInput<'TestMemory', { stream?: boolean }> = {}, +): HookOutput<'TestMemory', { stream: true }> | HookOutput<'TestMemory', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestMemory, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestMemory, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestMulticlassNamedArgs BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myArg: NamedArgsSingleClass + * + * - myArg2: NamedArgsSingleClass + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestMulticlassNamedArgs({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestMulticlassNamedArgs({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestMulticlassNamedArgs(props: HookInput<'TestMulticlassNamedArgs', { stream: false }>): HookOutput<'TestMulticlassNamedArgs', { stream: false }> +export function useTestMulticlassNamedArgs(props?: HookInput<'TestMulticlassNamedArgs', { stream?: true }>): HookOutput<'TestMulticlassNamedArgs', { stream: true }> +export function useTestMulticlassNamedArgs( + props: HookInput<'TestMulticlassNamedArgs', { stream?: boolean }> = {}, +): HookOutput<'TestMulticlassNamedArgs', { stream: true }> | HookOutput<'TestMulticlassNamedArgs', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestMulticlassNamedArgs, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestMulticlassNamedArgs, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestNamedArgsLiteralBool BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myBool: true + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestNamedArgsLiteralBool({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestNamedArgsLiteralBool({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestNamedArgsLiteralBool(props: HookInput<'TestNamedArgsLiteralBool', { stream: false }>): HookOutput<'TestNamedArgsLiteralBool', { stream: false }> +export function useTestNamedArgsLiteralBool(props?: HookInput<'TestNamedArgsLiteralBool', { stream?: true }>): HookOutput<'TestNamedArgsLiteralBool', { stream: true }> +export function useTestNamedArgsLiteralBool( + props: HookInput<'TestNamedArgsLiteralBool', { stream?: boolean }> = {}, +): HookOutput<'TestNamedArgsLiteralBool', { stream: true }> | HookOutput<'TestNamedArgsLiteralBool', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestNamedArgsLiteralBool, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestNamedArgsLiteralBool, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestNamedArgsLiteralInt BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myInt: 1 + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestNamedArgsLiteralInt({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestNamedArgsLiteralInt({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestNamedArgsLiteralInt(props: HookInput<'TestNamedArgsLiteralInt', { stream: false }>): HookOutput<'TestNamedArgsLiteralInt', { stream: false }> +export function useTestNamedArgsLiteralInt(props?: HookInput<'TestNamedArgsLiteralInt', { stream?: true }>): HookOutput<'TestNamedArgsLiteralInt', { stream: true }> +export function useTestNamedArgsLiteralInt( + props: HookInput<'TestNamedArgsLiteralInt', { stream?: boolean }> = {}, +): HookOutput<'TestNamedArgsLiteralInt', { stream: true }> | HookOutput<'TestNamedArgsLiteralInt', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestNamedArgsLiteralInt, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestNamedArgsLiteralInt, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestNamedArgsLiteralString BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - myString: "My String" + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestNamedArgsLiteralString({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestNamedArgsLiteralString({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestNamedArgsLiteralString(props: HookInput<'TestNamedArgsLiteralString', { stream: false }>): HookOutput<'TestNamedArgsLiteralString', { stream: false }> +export function useTestNamedArgsLiteralString(props?: HookInput<'TestNamedArgsLiteralString', { stream?: true }>): HookOutput<'TestNamedArgsLiteralString', { stream: true }> +export function useTestNamedArgsLiteralString( + props: HookInput<'TestNamedArgsLiteralString', { stream?: boolean }> = {}, +): HookOutput<'TestNamedArgsLiteralString', { stream: true }> | HookOutput<'TestNamedArgsLiteralString', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestNamedArgsLiteralString, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestNamedArgsLiteralString, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestOllama BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestOllama({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestOllama({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestOllama(props: HookInput<'TestOllama', { stream: false }>): HookOutput<'TestOllama', { stream: false }> +export function useTestOllama(props?: HookInput<'TestOllama', { stream?: true }>): HookOutput<'TestOllama', { stream: true }> +export function useTestOllama( + props: HookInput<'TestOllama', { stream?: boolean }> = {}, +): HookOutput<'TestOllama', { stream: true }> | HookOutput<'TestOllama', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestOllama, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestOllama, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestOpenAI BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestOpenAI({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestOpenAI({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestOpenAI(props: HookInput<'TestOpenAI', { stream: false }>): HookOutput<'TestOpenAI', { stream: false }> +export function useTestOpenAI(props?: HookInput<'TestOpenAI', { stream?: true }>): HookOutput<'TestOpenAI', { stream: true }> +export function useTestOpenAI( + props: HookInput<'TestOpenAI', { stream?: boolean }> = {}, +): HookOutput<'TestOpenAI', { stream: true }> | HookOutput<'TestOpenAI', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestOpenAI, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestOpenAI, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestOpenAILegacyProvider BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestOpenAILegacyProvider({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestOpenAILegacyProvider({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestOpenAILegacyProvider(props: HookInput<'TestOpenAILegacyProvider', { stream: false }>): HookOutput<'TestOpenAILegacyProvider', { stream: false }> +export function useTestOpenAILegacyProvider(props?: HookInput<'TestOpenAILegacyProvider', { stream?: true }>): HookOutput<'TestOpenAILegacyProvider', { stream: true }> +export function useTestOpenAILegacyProvider( + props: HookInput<'TestOpenAILegacyProvider', { stream?: boolean }> = {}, +): HookOutput<'TestOpenAILegacyProvider', { stream: true }> | HookOutput<'TestOpenAILegacyProvider', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestOpenAILegacyProvider, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestOpenAILegacyProvider, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestOpenAIO1NoMaxTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestOpenAIO1NoMaxTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestOpenAIO1NoMaxTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestOpenAIO1NoMaxTokens(props: HookInput<'TestOpenAIO1NoMaxTokens', { stream: false }>): HookOutput<'TestOpenAIO1NoMaxTokens', { stream: false }> +export function useTestOpenAIO1NoMaxTokens(props?: HookInput<'TestOpenAIO1NoMaxTokens', { stream?: true }>): HookOutput<'TestOpenAIO1NoMaxTokens', { stream: true }> +export function useTestOpenAIO1NoMaxTokens( + props: HookInput<'TestOpenAIO1NoMaxTokens', { stream?: boolean }> = {}, +): HookOutput<'TestOpenAIO1NoMaxTokens', { stream: true }> | HookOutput<'TestOpenAIO1NoMaxTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestOpenAIO1NoMaxTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestOpenAIO1NoMaxTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestOpenAIO1WithMaxCompletionTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestOpenAIO1WithMaxCompletionTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestOpenAIO1WithMaxCompletionTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestOpenAIO1WithMaxCompletionTokens(props: HookInput<'TestOpenAIO1WithMaxCompletionTokens', { stream: false }>): HookOutput<'TestOpenAIO1WithMaxCompletionTokens', { stream: false }> +export function useTestOpenAIO1WithMaxCompletionTokens(props?: HookInput<'TestOpenAIO1WithMaxCompletionTokens', { stream?: true }>): HookOutput<'TestOpenAIO1WithMaxCompletionTokens', { stream: true }> +export function useTestOpenAIO1WithMaxCompletionTokens( + props: HookInput<'TestOpenAIO1WithMaxCompletionTokens', { stream?: boolean }> = {}, +): HookOutput<'TestOpenAIO1WithMaxCompletionTokens', { stream: true }> | HookOutput<'TestOpenAIO1WithMaxCompletionTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestOpenAIO1WithMaxCompletionTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestOpenAIO1WithMaxCompletionTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestOpenAIO1WithMaxTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestOpenAIO1WithMaxTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestOpenAIO1WithMaxTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestOpenAIO1WithMaxTokens(props: HookInput<'TestOpenAIO1WithMaxTokens', { stream: false }>): HookOutput<'TestOpenAIO1WithMaxTokens', { stream: false }> +export function useTestOpenAIO1WithMaxTokens(props?: HookInput<'TestOpenAIO1WithMaxTokens', { stream?: true }>): HookOutput<'TestOpenAIO1WithMaxTokens', { stream: true }> +export function useTestOpenAIO1WithMaxTokens( + props: HookInput<'TestOpenAIO1WithMaxTokens', { stream?: boolean }> = {}, +): HookOutput<'TestOpenAIO1WithMaxTokens', { stream: true }> | HookOutput<'TestOpenAIO1WithMaxTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestOpenAIO1WithMaxTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestOpenAIO1WithMaxTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestOpenAIShorthand BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestOpenAIShorthand({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestOpenAIShorthand({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestOpenAIShorthand(props: HookInput<'TestOpenAIShorthand', { stream: false }>): HookOutput<'TestOpenAIShorthand', { stream: false }> +export function useTestOpenAIShorthand(props?: HookInput<'TestOpenAIShorthand', { stream?: true }>): HookOutput<'TestOpenAIShorthand', { stream: true }> +export function useTestOpenAIShorthand( + props: HookInput<'TestOpenAIShorthand', { stream?: boolean }> = {}, +): HookOutput<'TestOpenAIShorthand', { stream: true }> | HookOutput<'TestOpenAIShorthand', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestOpenAIShorthand, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestOpenAIShorthand, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestOpenAIWithMaxTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestOpenAIWithMaxTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestOpenAIWithMaxTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestOpenAIWithMaxTokens(props: HookInput<'TestOpenAIWithMaxTokens', { stream: false }>): HookOutput<'TestOpenAIWithMaxTokens', { stream: false }> +export function useTestOpenAIWithMaxTokens(props?: HookInput<'TestOpenAIWithMaxTokens', { stream?: true }>): HookOutput<'TestOpenAIWithMaxTokens', { stream: true }> +export function useTestOpenAIWithMaxTokens( + props: HookInput<'TestOpenAIWithMaxTokens', { stream?: boolean }> = {}, +): HookOutput<'TestOpenAIWithMaxTokens', { stream: true }> | HookOutput<'TestOpenAIWithMaxTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestOpenAIWithMaxTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestOpenAIWithMaxTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestOpenAIWithNullMaxTokens BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestOpenAIWithNullMaxTokens({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestOpenAIWithNullMaxTokens({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestOpenAIWithNullMaxTokens(props: HookInput<'TestOpenAIWithNullMaxTokens', { stream: false }>): HookOutput<'TestOpenAIWithNullMaxTokens', { stream: false }> +export function useTestOpenAIWithNullMaxTokens(props?: HookInput<'TestOpenAIWithNullMaxTokens', { stream?: true }>): HookOutput<'TestOpenAIWithNullMaxTokens', { stream: true }> +export function useTestOpenAIWithNullMaxTokens( + props: HookInput<'TestOpenAIWithNullMaxTokens', { stream?: boolean }> = {}, +): HookOutput<'TestOpenAIWithNullMaxTokens', { stream: true }> | HookOutput<'TestOpenAIWithNullMaxTokens', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestOpenAIWithNullMaxTokens, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestOpenAIWithNullMaxTokens, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestRetryConstant BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestRetryConstant({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestRetryConstant({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestRetryConstant(props: HookInput<'TestRetryConstant', { stream: false }>): HookOutput<'TestRetryConstant', { stream: false }> +export function useTestRetryConstant(props?: HookInput<'TestRetryConstant', { stream?: true }>): HookOutput<'TestRetryConstant', { stream: true }> +export function useTestRetryConstant( + props: HookInput<'TestRetryConstant', { stream?: boolean }> = {}, +): HookOutput<'TestRetryConstant', { stream: true }> | HookOutput<'TestRetryConstant', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestRetryConstant, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestRetryConstant, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestRetryExponential BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestRetryExponential({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestRetryExponential({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestRetryExponential(props: HookInput<'TestRetryExponential', { stream: false }>): HookOutput<'TestRetryExponential', { stream: false }> +export function useTestRetryExponential(props?: HookInput<'TestRetryExponential', { stream?: true }>): HookOutput<'TestRetryExponential', { stream: true }> +export function useTestRetryExponential( + props: HookInput<'TestRetryExponential', { stream?: boolean }> = {}, +): HookOutput<'TestRetryExponential', { stream: true }> | HookOutput<'TestRetryExponential', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestRetryExponential, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestRetryExponential, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestSingleFallbackClient BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestSingleFallbackClient({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestSingleFallbackClient({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestSingleFallbackClient(props: HookInput<'TestSingleFallbackClient', { stream: false }>): HookOutput<'TestSingleFallbackClient', { stream: false }> +export function useTestSingleFallbackClient(props?: HookInput<'TestSingleFallbackClient', { stream?: true }>): HookOutput<'TestSingleFallbackClient', { stream: true }> +export function useTestSingleFallbackClient( + props: HookInput<'TestSingleFallbackClient', { stream?: boolean }> = {}, +): HookOutput<'TestSingleFallbackClient', { stream: true }> | HookOutput<'TestSingleFallbackClient', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestSingleFallbackClient, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestSingleFallbackClient, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestUniverseQuestion BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - question: UniverseQuestionInput + * + * + * **Return Type:** + * - **Non‑streaming:** UniverseQuestion + * - **Streaming Partial:** partial_types.UniverseQuestion + * - **Streaming Final:** UniverseQuestion + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestUniverseQuestion({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestUniverseQuestion({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestUniverseQuestion(props: HookInput<'TestUniverseQuestion', { stream: false }>): HookOutput<'TestUniverseQuestion', { stream: false }> +export function useTestUniverseQuestion(props?: HookInput<'TestUniverseQuestion', { stream?: true }>): HookOutput<'TestUniverseQuestion', { stream: true }> +export function useTestUniverseQuestion( + props: HookInput<'TestUniverseQuestion', { stream?: boolean }> = {}, +): HookOutput<'TestUniverseQuestion', { stream: true }> | HookOutput<'TestUniverseQuestion', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestUniverseQuestion, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestUniverseQuestion, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestVertex BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestVertex({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestVertex({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestVertex(props: HookInput<'TestVertex', { stream: false }>): HookOutput<'TestVertex', { stream: false }> +export function useTestVertex(props?: HookInput<'TestVertex', { stream?: true }>): HookOutput<'TestVertex', { stream: true }> +export function useTestVertex( + props: HookInput<'TestVertex', { stream?: boolean }> = {}, +): HookOutput<'TestVertex', { stream: true }> | HookOutput<'TestVertex', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestVertex, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestVertex, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the TestVertexWithSystemInstructions BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * + * **Return Type:** + * - **Non‑streaming:** string + * - **Streaming Partial:** string + * - **Streaming Final:** string + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useTestVertexWithSystemInstructions({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useTestVertexWithSystemInstructions({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useTestVertexWithSystemInstructions(props: HookInput<'TestVertexWithSystemInstructions', { stream: false }>): HookOutput<'TestVertexWithSystemInstructions', { stream: false }> +export function useTestVertexWithSystemInstructions(props?: HookInput<'TestVertexWithSystemInstructions', { stream?: true }>): HookOutput<'TestVertexWithSystemInstructions', { stream: true }> +export function useTestVertexWithSystemInstructions( + props: HookInput<'TestVertexWithSystemInstructions', { stream?: boolean }> = {}, +): HookOutput<'TestVertexWithSystemInstructions', { stream: true }> | HookOutput<'TestVertexWithSystemInstructions', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.TestVertexWithSystemInstructions, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.TestVertexWithSystemInstructions, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the UnionTest_Function BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - input: string | boolean + * + * + * **Return Type:** + * - **Non‑streaming:** UnionTest_ReturnType + * - **Streaming Partial:** partial_types.UnionTest_ReturnType + * - **Streaming Final:** UnionTest_ReturnType + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useUnionTest_Function({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useUnionTest_Function({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useUnionTest_Function(props: HookInput<'UnionTest_Function', { stream: false }>): HookOutput<'UnionTest_Function', { stream: false }> +export function useUnionTest_Function(props?: HookInput<'UnionTest_Function', { stream?: true }>): HookOutput<'UnionTest_Function', { stream: true }> +export function useUnionTest_Function( + props: HookInput<'UnionTest_Function', { stream?: boolean }> = {}, +): HookOutput<'UnionTest_Function', { stream: true }> | HookOutput<'UnionTest_Function', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.UnionTest_Function, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.UnionTest_Function, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the UseBlockConstraint BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - inp: BlockConstraintForParam + * + * + * **Return Type:** + * - **Non‑streaming:** number + * - **Streaming Partial:** number + * - **Streaming Final:** number + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useUseBlockConstraint({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useUseBlockConstraint({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useUseBlockConstraint(props: HookInput<'UseBlockConstraint', { stream: false }>): HookOutput<'UseBlockConstraint', { stream: false }> +export function useUseBlockConstraint(props?: HookInput<'UseBlockConstraint', { stream?: true }>): HookOutput<'UseBlockConstraint', { stream: true }> +export function useUseBlockConstraint( + props: HookInput<'UseBlockConstraint', { stream?: boolean }> = {}, +): HookOutput<'UseBlockConstraint', { stream: true }> | HookOutput<'UseBlockConstraint', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.UseBlockConstraint, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.UseBlockConstraint, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the UseMalformedConstraints BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - a: MalformedConstraints2 + * + * + * **Return Type:** + * - **Non‑streaming:** number + * - **Streaming Partial:** number + * - **Streaming Final:** number + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useUseMalformedConstraints({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useUseMalformedConstraints({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useUseMalformedConstraints(props: HookInput<'UseMalformedConstraints', { stream: false }>): HookOutput<'UseMalformedConstraints', { stream: false }> +export function useUseMalformedConstraints(props?: HookInput<'UseMalformedConstraints', { stream?: true }>): HookOutput<'UseMalformedConstraints', { stream: true }> +export function useUseMalformedConstraints( + props: HookInput<'UseMalformedConstraints', { stream?: boolean }> = {}, +): HookOutput<'UseMalformedConstraints', { stream: true }> | HookOutput<'UseMalformedConstraints', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.UseMalformedConstraints, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.UseMalformedConstraints, props) + } + throw new Error('Invalid props') +} +/** + * A specialized hook for the UseNestedBlockConstraint BAML function that supports both streaming and non‑streaming responses. + * + * **Input Types:** + * + * - inp: NestedBlockConstraintForParam + * + * + * **Return Type:** + * - **Non‑streaming:** number + * - **Streaming Partial:** number + * - **Streaming Final:** number + * + * **Usage Patterns:** + * 1. **Non‑streaming (Default)** + * - Best for quick responses and simple UI updates. + * 2. **Streaming** + * - Ideal for long‑running operations or real‑time feedback. + * + * **Edge Cases:** + * - Ensure robust error handling via `onError`. + * - Handle cases where partial data may be incomplete or missing. + * + * @example + * ```tsx + * // Basic non‑streaming usage: + * const { data, error, isLoading, mutate } = useUseNestedBlockConstraint({ stream: false}); + * + * // Streaming usage: + * const { data, streamData, isLoading, error, mutate } = useUseNestedBlockConstraint({ + * stream: true | undefined, + * onStreamData: (partial) => console.log('Partial update:', partial), + * onFinalData: (final) => console.log('Final result:', final), + * onError: (err) => console.error('Error:', err), + * }); + * ``` + */ +export function useUseNestedBlockConstraint(props: HookInput<'UseNestedBlockConstraint', { stream: false }>): HookOutput<'UseNestedBlockConstraint', { stream: false }> +export function useUseNestedBlockConstraint(props?: HookInput<'UseNestedBlockConstraint', { stream?: true }>): HookOutput<'UseNestedBlockConstraint', { stream: true }> +export function useUseNestedBlockConstraint( + props: HookInput<'UseNestedBlockConstraint', { stream?: boolean }> = {}, +): HookOutput<'UseNestedBlockConstraint', { stream: true }> | HookOutput<'UseNestedBlockConstraint', { stream: false }> { + if (isNotStreamingProps(props)) { + return useBamlAction(Actions.UseNestedBlockConstraint, props) + } + if (isStreamingProps(props)) { + return useBamlAction(StreamingActions.UseNestedBlockConstraint, props) + } + throw new Error('Invalid props') +} \ No newline at end of file diff --git a/integ-tests/react/baml_client/react/server.ts b/integ-tests/react/baml_client/react/server.ts new file mode 100644 index 000000000..65e4482d5 --- /dev/null +++ b/integ-tests/react/baml_client/react/server.ts @@ -0,0 +1,2898 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +'use server' + +import { b } from '../index'; +import type { Check, Checked } from "../types"; +import type { Image, Audio } from "@boundaryml/baml"; + +import type { AliasedEnum, AnotherObject, BigNumbers, BinaryNode, Blah, BlockConstraint, BlockConstraintForParam, BookOrder, Category, Category2, Category3, ClassForNullLiteral, ClassOptionalOutput, ClassOptionalOutput2, ClassToRecAlias, ClassWithBlockDone, ClassWithImage, ClassWithoutDone, Color, ComplexMemoryObject, CompoundBigNumbers, ContactInfo, CustomTaskResult, DataType, DummyOutput, DynEnumOne, DynEnumTwo, DynInputOutput, DynamicClassOne, DynamicClassTwo, DynamicOutput, Earthling, Education, Email, EmailAddress, EnumInClass, EnumOutput, Event, FakeImage, FlightConfirmation, FooAny, Forest, FormatterTest0, FormatterTest1, FormatterTest2, FormatterTest3, GroceryReceipt, Hobby, InnerClass, InnerClass2, InputClass, InputClassNested, JsonArray, JsonEntry, JsonObject, JsonTemplate, JsonValue, LinkedList, LinkedListAliasNode, LiteralClassHello, LiteralClassOne, LiteralClassTwo, MalformedConstraints, MalformedConstraints2, MapKey, Martian, MemoryObject, MergeAttrs, NamedArgsSingleClass, NamedArgsSingleEnum, NamedArgsSingleEnumList, Nested, Nested2, NestedBlockConstraint, NestedBlockConstraintForParam, Node, NodeWithAliasIndirection, OptionalListAndMap, OptionalTest_CategoryType, OptionalTest_Prop1, OptionalTest_ReturnType, OrderInfo, OrderStatus, OriginalA, OriginalB, Person, PhoneNumber, Quantity, RaysData, RecAliasOne, RecAliasThree, RecAliasTwo, ReceiptInfo, ReceiptItem, Recipe, RecursiveAliasDependency, RecursiveListAlias, RecursiveMapAlias, Resume, Schema, SearchParams, SemanticContainer, SimpleTag, SmallThing, SomeClassNestedDynamic, StringToClassEntry, Tag, TestClassAlias, TestClassNested, TestClassWithEnum, TestEnum, TestMemoryOutput, TestOutputClass, Tree, TwoStoriesOneTitle, UnionTest_ReturnType, UniverseQuestion, UniverseQuestionInput, WithReasoning } from "../types" + +import type * as types from "../types" + +/** + * Regular BAML server actions that return direct responses. + */ + +/** + * Executes the "AaaSamOutputFormat" BAML action. + * + * This server action calls the underlying BAML function "AaaSamOutputFormat" + * with the specified parameters. + * + * @param { string } recipe - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const AaaSamOutputFormat = async ( + recipe: string, +): Promise => { + return b.AaaSamOutputFormat( + recipe, + ); +}; + +/** + * Executes the "AliasThatPointsToRecursiveType" BAML action. + * + * This server action calls the underlying BAML function "AliasThatPointsToRecursiveType" + * with the specified parameters. + * + * @param { LinkedListAliasNode } list - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const AliasThatPointsToRecursiveType = async ( + list: LinkedListAliasNode, +): Promise => { + return b.AliasThatPointsToRecursiveType( + list, + ); +}; + +/** + * Executes the "AliasWithMultipleAttrs" BAML action. + * + * This server action calls the underlying BAML function "AliasWithMultipleAttrs" + * with the specified parameters. + * + * @param { Checked } money - Input parameter. + * + * @returns {Promise>} A promise that resolves with the result of the action. + */ +export const AliasWithMultipleAttrs = async ( + money: Checked, +): Promise> => { + return b.AliasWithMultipleAttrs( + money, + ); +}; + +/** + * Executes the "AliasedInputClass" BAML action. + * + * This server action calls the underlying BAML function "AliasedInputClass" + * with the specified parameters. + * + * @param { InputClass } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const AliasedInputClass = async ( + input: InputClass, +): Promise => { + return b.AliasedInputClass( + input, + ); +}; + +/** + * Executes the "AliasedInputClass2" BAML action. + * + * This server action calls the underlying BAML function "AliasedInputClass2" + * with the specified parameters. + * + * @param { InputClass } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const AliasedInputClass2 = async ( + input: InputClass, +): Promise => { + return b.AliasedInputClass2( + input, + ); +}; + +/** + * Executes the "AliasedInputClassNested" BAML action. + * + * This server action calls the underlying BAML function "AliasedInputClassNested" + * with the specified parameters. + * + * @param { InputClassNested } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const AliasedInputClassNested = async ( + input: InputClassNested, +): Promise => { + return b.AliasedInputClassNested( + input, + ); +}; + +/** + * Executes the "AliasedInputEnum" BAML action. + * + * This server action calls the underlying BAML function "AliasedInputEnum" + * with the specified parameters. + * + * @param { AliasedEnum } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const AliasedInputEnum = async ( + input: AliasedEnum, +): Promise => { + return b.AliasedInputEnum( + input, + ); +}; + +/** + * Executes the "AliasedInputList" BAML action. + * + * This server action calls the underlying BAML function "AliasedInputList" + * with the specified parameters. + * + * @param { AliasedEnum[] } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const AliasedInputList = async ( + input: AliasedEnum[], +): Promise => { + return b.AliasedInputList( + input, + ); +}; + +/** + * Executes the "AllowedOptionals" BAML action. + * + * This server action calls the underlying BAML function "AllowedOptionals" + * with the specified parameters. + * + * @param { OptionalListAndMap } optionals - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const AllowedOptionals = async ( + optionals: OptionalListAndMap, +): Promise => { + return b.AllowedOptionals( + optionals, + ); +}; + +/** + * Executes the "AssertFn" BAML action. + * + * This server action calls the underlying BAML function "AssertFn" + * with the specified parameters. + * + * @param { number } a - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const AssertFn = async ( + a: number, +): Promise => { + return b.AssertFn( + a, + ); +}; + +/** + * Executes the "AudioInput" BAML action. + * + * This server action calls the underlying BAML function "AudioInput" + * with the specified parameters. + * + * @param { Audio } aud - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const AudioInput = async ( + aud: Audio, +): Promise => { + return b.AudioInput( + aud, + ); +}; + +/** + * Executes the "BuildLinkedList" BAML action. + * + * This server action calls the underlying BAML function "BuildLinkedList" + * with the specified parameters. + * + * @param { number[] } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const BuildLinkedList = async ( + input: number[], +): Promise => { + return b.BuildLinkedList( + input, + ); +}; + +/** + * Executes the "BuildTree" BAML action. + * + * This server action calls the underlying BAML function "BuildTree" + * with the specified parameters. + * + * @param { BinaryNode } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const BuildTree = async ( + input: BinaryNode, +): Promise => { + return b.BuildTree( + input, + ); +}; + +/** + * Executes the "ClassThatPointsToRecursiveClassThroughAlias" BAML action. + * + * This server action calls the underlying BAML function "ClassThatPointsToRecursiveClassThroughAlias" + * with the specified parameters. + * + * @param { ClassToRecAlias } cls - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ClassThatPointsToRecursiveClassThroughAlias = async ( + cls: ClassToRecAlias, +): Promise => { + return b.ClassThatPointsToRecursiveClassThroughAlias( + cls, + ); +}; + +/** + * Executes the "ClassifyDynEnumTwo" BAML action. + * + * This server action calls the underlying BAML function "ClassifyDynEnumTwo" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise<(string | DynEnumTwo)>} A promise that resolves with the result of the action. + */ +export const ClassifyDynEnumTwo = async ( + input: string, +): Promise<(string | DynEnumTwo)> => { + return b.ClassifyDynEnumTwo( + input, + ); +}; + +/** + * Executes the "ClassifyMessage" BAML action. + * + * This server action calls the underlying BAML function "ClassifyMessage" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ClassifyMessage = async ( + input: string, +): Promise => { + return b.ClassifyMessage( + input, + ); +}; + +/** + * Executes the "ClassifyMessage2" BAML action. + * + * This server action calls the underlying BAML function "ClassifyMessage2" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ClassifyMessage2 = async ( + input: string, +): Promise => { + return b.ClassifyMessage2( + input, + ); +}; + +/** + * Executes the "ClassifyMessage3" BAML action. + * + * This server action calls the underlying BAML function "ClassifyMessage3" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ClassifyMessage3 = async ( + input: string, +): Promise => { + return b.ClassifyMessage3( + input, + ); +}; + +/** + * Executes the "Completion" BAML action. + * + * This server action calls the underlying BAML function "Completion" + * with the specified parameters. + * + * @param { string } prefix - Input parameter. + * @param { string } suffix - Input parameter. + * @param { string } language - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const Completion = async ( + prefix: string, + suffix: string, + language: string, +): Promise => { + return b.Completion( + prefix, + suffix, + language, + ); +}; + +/** + * Executes the "CustomTask" BAML action. + * + * This server action calls the underlying BAML function "CustomTask" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const CustomTask = async ( + input: string, +): Promise => { + return b.CustomTask( + input, + ); +}; + +/** + * Executes the "DescribeImage" BAML action. + * + * This server action calls the underlying BAML function "DescribeImage" + * with the specified parameters. + * + * @param { Image } img - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const DescribeImage = async ( + img: Image, +): Promise => { + return b.DescribeImage( + img, + ); +}; + +/** + * Executes the "DescribeImage2" BAML action. + * + * This server action calls the underlying BAML function "DescribeImage2" + * with the specified parameters. + * + * @param { ClassWithImage } classWithImage - Input parameter. + * @param { Image } img2 - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const DescribeImage2 = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise => { + return b.DescribeImage2( + classWithImage, + img2, + ); +}; + +/** + * Executes the "DescribeImage3" BAML action. + * + * This server action calls the underlying BAML function "DescribeImage3" + * with the specified parameters. + * + * @param { ClassWithImage } classWithImage - Input parameter. + * @param { Image } img2 - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const DescribeImage3 = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise => { + return b.DescribeImage3( + classWithImage, + img2, + ); +}; + +/** + * Executes the "DescribeImage4" BAML action. + * + * This server action calls the underlying BAML function "DescribeImage4" + * with the specified parameters. + * + * @param { ClassWithImage } classWithImage - Input parameter. + * @param { Image } img2 - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const DescribeImage4 = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise => { + return b.DescribeImage4( + classWithImage, + img2, + ); +}; + +/** + * Executes the "DifferentiateUnions" BAML action. + * + * This server action calls the underlying BAML function "DifferentiateUnions" + * with the specified parameters. + * + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const DifferentiateUnions = async ( +): Promise => { + return b.DifferentiateUnions( + ); +}; + +/** + * Executes the "DummyOutputFunction" BAML action. + * + * This server action calls the underlying BAML function "DummyOutputFunction" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const DummyOutputFunction = async ( + input: string, +): Promise => { + return b.DummyOutputFunction( + input, + ); +}; + +/** + * Executes the "DynamicFunc" BAML action. + * + * This server action calls the underlying BAML function "DynamicFunc" + * with the specified parameters. + * + * @param { DynamicClassOne } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const DynamicFunc = async ( + input: DynamicClassOne, +): Promise => { + return b.DynamicFunc( + input, + ); +}; + +/** + * Executes the "DynamicInputOutput" BAML action. + * + * This server action calls the underlying BAML function "DynamicInputOutput" + * with the specified parameters. + * + * @param { DynInputOutput } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const DynamicInputOutput = async ( + input: DynInputOutput, +): Promise => { + return b.DynamicInputOutput( + input, + ); +}; + +/** + * Executes the "DynamicListInputOutput" BAML action. + * + * This server action calls the underlying BAML function "DynamicListInputOutput" + * with the specified parameters. + * + * @param { DynInputOutput[] } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const DynamicListInputOutput = async ( + input: DynInputOutput[], +): Promise => { + return b.DynamicListInputOutput( + input, + ); +}; + +/** + * Executes the "ExpectFailure" BAML action. + * + * This server action calls the underlying BAML function "ExpectFailure" + * with the specified parameters. + * + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ExpectFailure = async ( +): Promise => { + return b.ExpectFailure( + ); +}; + +/** + * Executes the "ExtractContactInfo" BAML action. + * + * This server action calls the underlying BAML function "ExtractContactInfo" + * with the specified parameters. + * + * @param { string } document - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ExtractContactInfo = async ( + document: string, +): Promise => { + return b.ExtractContactInfo( + document, + ); +}; + +/** + * Executes the "ExtractHobby" BAML action. + * + * This server action calls the underlying BAML function "ExtractHobby" + * with the specified parameters. + * + * @param { string } text - Input parameter. + * + * @returns {Promise<(string | Hobby)[]>} A promise that resolves with the result of the action. + */ +export const ExtractHobby = async ( + text: string, +): Promise<(string | Hobby)[]> => { + return b.ExtractHobby( + text, + ); +}; + +/** + * Executes the "ExtractNames" BAML action. + * + * This server action calls the underlying BAML function "ExtractNames" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ExtractNames = async ( + input: string, +): Promise => { + return b.ExtractNames( + input, + ); +}; + +/** + * Executes the "ExtractPeople" BAML action. + * + * This server action calls the underlying BAML function "ExtractPeople" + * with the specified parameters. + * + * @param { string } text - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ExtractPeople = async ( + text: string, +): Promise => { + return b.ExtractPeople( + text, + ); +}; + +/** + * Executes the "ExtractReceiptInfo" BAML action. + * + * This server action calls the underlying BAML function "ExtractReceiptInfo" + * with the specified parameters. + * + * @param { string } email - Input parameter. + * @param { "curiosity" | "personal_finance" } reason - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ExtractReceiptInfo = async ( + email: string, + reason: "curiosity" | "personal_finance", +): Promise => { + return b.ExtractReceiptInfo( + email, + reason, + ); +}; + +/** + * Executes the "ExtractResume" BAML action. + * + * This server action calls the underlying BAML function "ExtractResume" + * with the specified parameters. + * + * @param { string } resume - Input parameter. + * @param { Image | null } img (optional) - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ExtractResume = async ( + resume: string, + img?: Image | null, +): Promise => { + return b.ExtractResume( + resume, + img, + ); +}; + +/** + * Executes the "ExtractResume2" BAML action. + * + * This server action calls the underlying BAML function "ExtractResume2" + * with the specified parameters. + * + * @param { string } resume - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ExtractResume2 = async ( + resume: string, +): Promise => { + return b.ExtractResume2( + resume, + ); +}; + +/** + * Executes the "FnClassOptionalOutput" BAML action. + * + * This server action calls the underlying BAML function "FnClassOptionalOutput" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnClassOptionalOutput = async ( + input: string, +): Promise => { + return b.FnClassOptionalOutput( + input, + ); +}; + +/** + * Executes the "FnClassOptionalOutput2" BAML action. + * + * This server action calls the underlying BAML function "FnClassOptionalOutput2" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnClassOptionalOutput2 = async ( + input: string, +): Promise => { + return b.FnClassOptionalOutput2( + input, + ); +}; + +/** + * Executes the "FnEnumListOutput" BAML action. + * + * This server action calls the underlying BAML function "FnEnumListOutput" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnEnumListOutput = async ( + input: string, +): Promise => { + return b.FnEnumListOutput( + input, + ); +}; + +/** + * Executes the "FnEnumOutput" BAML action. + * + * This server action calls the underlying BAML function "FnEnumOutput" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnEnumOutput = async ( + input: string, +): Promise => { + return b.FnEnumOutput( + input, + ); +}; + +/** + * Executes the "FnLiteralClassInputOutput" BAML action. + * + * This server action calls the underlying BAML function "FnLiteralClassInputOutput" + * with the specified parameters. + * + * @param { LiteralClassHello } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnLiteralClassInputOutput = async ( + input: LiteralClassHello, +): Promise => { + return b.FnLiteralClassInputOutput( + input, + ); +}; + +/** + * Executes the "FnLiteralUnionClassInputOutput" BAML action. + * + * This server action calls the underlying BAML function "FnLiteralUnionClassInputOutput" + * with the specified parameters. + * + * @param { LiteralClassOne | LiteralClassTwo } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnLiteralUnionClassInputOutput = async ( + input: LiteralClassOne | LiteralClassTwo, +): Promise => { + return b.FnLiteralUnionClassInputOutput( + input, + ); +}; + +/** + * Executes the "FnNamedArgsSingleStringOptional" BAML action. + * + * This server action calls the underlying BAML function "FnNamedArgsSingleStringOptional" + * with the specified parameters. + * + * @param { string | null } myString (optional) - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnNamedArgsSingleStringOptional = async ( + myString?: string | null, +): Promise => { + return b.FnNamedArgsSingleStringOptional( + myString, + ); +}; + +/** + * Executes the "FnOutputBool" BAML action. + * + * This server action calls the underlying BAML function "FnOutputBool" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnOutputBool = async ( + input: string, +): Promise => { + return b.FnOutputBool( + input, + ); +}; + +/** + * Executes the "FnOutputClass" BAML action. + * + * This server action calls the underlying BAML function "FnOutputClass" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnOutputClass = async ( + input: string, +): Promise => { + return b.FnOutputClass( + input, + ); +}; + +/** + * Executes the "FnOutputClassList" BAML action. + * + * This server action calls the underlying BAML function "FnOutputClassList" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnOutputClassList = async ( + input: string, +): Promise => { + return b.FnOutputClassList( + input, + ); +}; + +/** + * Executes the "FnOutputClassNested" BAML action. + * + * This server action calls the underlying BAML function "FnOutputClassNested" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnOutputClassNested = async ( + input: string, +): Promise => { + return b.FnOutputClassNested( + input, + ); +}; + +/** + * Executes the "FnOutputClassWithEnum" BAML action. + * + * This server action calls the underlying BAML function "FnOutputClassWithEnum" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnOutputClassWithEnum = async ( + input: string, +): Promise => { + return b.FnOutputClassWithEnum( + input, + ); +}; + +/** + * Executes the "FnOutputInt" BAML action. + * + * This server action calls the underlying BAML function "FnOutputInt" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnOutputInt = async ( + input: string, +): Promise => { + return b.FnOutputInt( + input, + ); +}; + +/** + * Executes the "FnOutputLiteralBool" BAML action. + * + * This server action calls the underlying BAML function "FnOutputLiteralBool" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnOutputLiteralBool = async ( + input: string, +): Promise => { + return b.FnOutputLiteralBool( + input, + ); +}; + +/** + * Executes the "FnOutputLiteralInt" BAML action. + * + * This server action calls the underlying BAML function "FnOutputLiteralInt" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise<5>} A promise that resolves with the result of the action. + */ +export const FnOutputLiteralInt = async ( + input: string, +): Promise<5> => { + return b.FnOutputLiteralInt( + input, + ); +}; + +/** + * Executes the "FnOutputLiteralString" BAML action. + * + * This server action calls the underlying BAML function "FnOutputLiteralString" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise<"example output">} A promise that resolves with the result of the action. + */ +export const FnOutputLiteralString = async ( + input: string, +): Promise<"example output"> => { + return b.FnOutputLiteralString( + input, + ); +}; + +/** + * Executes the "FnOutputStringList" BAML action. + * + * This server action calls the underlying BAML function "FnOutputStringList" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnOutputStringList = async ( + input: string, +): Promise => { + return b.FnOutputStringList( + input, + ); +}; + +/** + * Executes the "FnTestAliasedEnumOutput" BAML action. + * + * This server action calls the underlying BAML function "FnTestAliasedEnumOutput" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnTestAliasedEnumOutput = async ( + input: string, +): Promise => { + return b.FnTestAliasedEnumOutput( + input, + ); +}; + +/** + * Executes the "FnTestClassAlias" BAML action. + * + * This server action calls the underlying BAML function "FnTestClassAlias" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnTestClassAlias = async ( + input: string, +): Promise => { + return b.FnTestClassAlias( + input, + ); +}; + +/** + * Executes the "FnTestNamedArgsSingleEnum" BAML action. + * + * This server action calls the underlying BAML function "FnTestNamedArgsSingleEnum" + * with the specified parameters. + * + * @param { NamedArgsSingleEnum } myArg - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const FnTestNamedArgsSingleEnum = async ( + myArg: NamedArgsSingleEnum, +): Promise => { + return b.FnTestNamedArgsSingleEnum( + myArg, + ); +}; + +/** + * Executes the "GetDataType" BAML action. + * + * This server action calls the underlying BAML function "GetDataType" + * with the specified parameters. + * + * @param { string } text - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const GetDataType = async ( + text: string, +): Promise => { + return b.GetDataType( + text, + ); +}; + +/** + * Executes the "GetOrderInfo" BAML action. + * + * This server action calls the underlying BAML function "GetOrderInfo" + * with the specified parameters. + * + * @param { Email } email - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const GetOrderInfo = async ( + email: Email, +): Promise => { + return b.GetOrderInfo( + email, + ); +}; + +/** + * Executes the "GetQuery" BAML action. + * + * This server action calls the underlying BAML function "GetQuery" + * with the specified parameters. + * + * @param { string } query - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const GetQuery = async ( + query: string, +): Promise => { + return b.GetQuery( + query, + ); +}; + +/** + * Executes the "InOutEnumMapKey" BAML action. + * + * This server action calls the underlying BAML function "InOutEnumMapKey" + * with the specified parameters. + * + * @param { Partial> } i1 - Input parameter. + * @param { Partial> } i2 - Input parameter. + * + * @returns {Promise>>} A promise that resolves with the result of the action. + */ +export const InOutEnumMapKey = async ( + i1: Partial>, + i2: Partial>, +): Promise>> => { + return b.InOutEnumMapKey( + i1, + i2, + ); +}; + +/** + * Executes the "InOutLiteralStringUnionMapKey" BAML action. + * + * This server action calls the underlying BAML function "InOutLiteralStringUnionMapKey" + * with the specified parameters. + * + * @param { Partial> } i1 - Input parameter. + * @param { Partial> } i2 - Input parameter. + * + * @returns {Promise>>} A promise that resolves with the result of the action. + */ +export const InOutLiteralStringUnionMapKey = async ( + i1: Partial>, + i2: Partial>, +): Promise>> => { + return b.InOutLiteralStringUnionMapKey( + i1, + i2, + ); +}; + +/** + * Executes the "InOutSingleLiteralStringMapKey" BAML action. + * + * This server action calls the underlying BAML function "InOutSingleLiteralStringMapKey" + * with the specified parameters. + * + * @param { Partial> } m - Input parameter. + * + * @returns {Promise>>} A promise that resolves with the result of the action. + */ +export const InOutSingleLiteralStringMapKey = async ( + m: Partial>, +): Promise>> => { + return b.InOutSingleLiteralStringMapKey( + m, + ); +}; + +/** + * Executes the "JsonTypeAliasCycle" BAML action. + * + * This server action calls the underlying BAML function "JsonTypeAliasCycle" + * with the specified parameters. + * + * @param { JsonValue } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const JsonTypeAliasCycle = async ( + input: JsonValue, +): Promise => { + return b.JsonTypeAliasCycle( + input, + ); +}; + +/** + * Executes the "LiteralUnionsTest" BAML action. + * + * This server action calls the underlying BAML function "LiteralUnionsTest" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise<1 | true | "string output">} A promise that resolves with the result of the action. + */ +export const LiteralUnionsTest = async ( + input: string, +): Promise<1 | true | "string output"> => { + return b.LiteralUnionsTest( + input, + ); +}; + +/** + * Executes the "MakeBlockConstraint" BAML action. + * + * This server action calls the underlying BAML function "MakeBlockConstraint" + * with the specified parameters. + * + * + * @returns {Promise>} A promise that resolves with the result of the action. + */ +export const MakeBlockConstraint = async ( +): Promise> => { + return b.MakeBlockConstraint( + ); +}; + +/** + * Executes the "MakeNestedBlockConstraint" BAML action. + * + * This server action calls the underlying BAML function "MakeNestedBlockConstraint" + * with the specified parameters. + * + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const MakeNestedBlockConstraint = async ( +): Promise => { + return b.MakeNestedBlockConstraint( + ); +}; + +/** + * Executes the "MakeSemanticContainer" BAML action. + * + * This server action calls the underlying BAML function "MakeSemanticContainer" + * with the specified parameters. + * + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const MakeSemanticContainer = async ( +): Promise => { + return b.MakeSemanticContainer( + ); +}; + +/** + * Executes the "MapAlias" BAML action. + * + * This server action calls the underlying BAML function "MapAlias" + * with the specified parameters. + * + * @param { Record } m - Input parameter. + * + * @returns {Promise>} A promise that resolves with the result of the action. + */ +export const MapAlias = async ( + m: Record, +): Promise> => { + return b.MapAlias( + m, + ); +}; + +/** + * Executes the "MergeAliasAttributes" BAML action. + * + * This server action calls the underlying BAML function "MergeAliasAttributes" + * with the specified parameters. + * + * @param { number } money - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const MergeAliasAttributes = async ( + money: number, +): Promise => { + return b.MergeAliasAttributes( + money, + ); +}; + +/** + * Executes the "MyFunc" BAML action. + * + * This server action calls the underlying BAML function "MyFunc" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const MyFunc = async ( + input: string, +): Promise => { + return b.MyFunc( + input, + ); +}; + +/** + * Executes the "NestedAlias" BAML action. + * + * This server action calls the underlying BAML function "NestedAlias" + * with the specified parameters. + * + * @param { number | string | boolean | number | string[] | Record } c - Input parameter. + * + * @returns {Promise>} A promise that resolves with the result of the action. + */ +export const NestedAlias = async ( + c: number | string | boolean | number | string[] | Record, +): Promise> => { + return b.NestedAlias( + c, + ); +}; + +/** + * Executes the "NullLiteralClassHello" BAML action. + * + * This server action calls the underlying BAML function "NullLiteralClassHello" + * with the specified parameters. + * + * @param { string } s - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const NullLiteralClassHello = async ( + s: string, +): Promise => { + return b.NullLiteralClassHello( + s, + ); +}; + +/** + * Executes the "OptionalTest_Function" BAML action. + * + * This server action calls the underlying BAML function "OptionalTest_Function" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise<(OptionalTest_ReturnType | null)[]>} A promise that resolves with the result of the action. + */ +export const OptionalTest_Function = async ( + input: string, +): Promise<(OptionalTest_ReturnType | null)[]> => { + return b.OptionalTest_Function( + input, + ); +}; + +/** + * Executes the "PredictAge" BAML action. + * + * This server action calls the underlying BAML function "PredictAge" + * with the specified parameters. + * + * @param { string } name - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const PredictAge = async ( + name: string, +): Promise => { + return b.PredictAge( + name, + ); +}; + +/** + * Executes the "PredictAgeBare" BAML action. + * + * This server action calls the underlying BAML function "PredictAgeBare" + * with the specified parameters. + * + * @param { string } inp - Input parameter. + * + * @returns {Promise>} A promise that resolves with the result of the action. + */ +export const PredictAgeBare = async ( + inp: string, +): Promise> => { + return b.PredictAgeBare( + inp, + ); +}; + +/** + * Executes the "PrimitiveAlias" BAML action. + * + * This server action calls the underlying BAML function "PrimitiveAlias" + * with the specified parameters. + * + * @param { number | string | boolean | number } p - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const PrimitiveAlias = async ( + p: number | string | boolean | number, +): Promise => { + return b.PrimitiveAlias( + p, + ); +}; + +/** + * Executes the "PromptTestClaude" BAML action. + * + * This server action calls the underlying BAML function "PromptTestClaude" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const PromptTestClaude = async ( + input: string, +): Promise => { + return b.PromptTestClaude( + input, + ); +}; + +/** + * Executes the "PromptTestClaudeChat" BAML action. + * + * This server action calls the underlying BAML function "PromptTestClaudeChat" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const PromptTestClaudeChat = async ( + input: string, +): Promise => { + return b.PromptTestClaudeChat( + input, + ); +}; + +/** + * Executes the "PromptTestClaudeChatNoSystem" BAML action. + * + * This server action calls the underlying BAML function "PromptTestClaudeChatNoSystem" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const PromptTestClaudeChatNoSystem = async ( + input: string, +): Promise => { + return b.PromptTestClaudeChatNoSystem( + input, + ); +}; + +/** + * Executes the "PromptTestOpenAI" BAML action. + * + * This server action calls the underlying BAML function "PromptTestOpenAI" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const PromptTestOpenAI = async ( + input: string, +): Promise => { + return b.PromptTestOpenAI( + input, + ); +}; + +/** + * Executes the "PromptTestOpenAIChat" BAML action. + * + * This server action calls the underlying BAML function "PromptTestOpenAIChat" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const PromptTestOpenAIChat = async ( + input: string, +): Promise => { + return b.PromptTestOpenAIChat( + input, + ); +}; + +/** + * Executes the "PromptTestOpenAIChatNoSystem" BAML action. + * + * This server action calls the underlying BAML function "PromptTestOpenAIChatNoSystem" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const PromptTestOpenAIChatNoSystem = async ( + input: string, +): Promise => { + return b.PromptTestOpenAIChatNoSystem( + input, + ); +}; + +/** + * Executes the "PromptTestStreaming" BAML action. + * + * This server action calls the underlying BAML function "PromptTestStreaming" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const PromptTestStreaming = async ( + input: string, +): Promise => { + return b.PromptTestStreaming( + input, + ); +}; + +/** + * Executes the "RecursiveAliasCycle" BAML action. + * + * This server action calls the underlying BAML function "RecursiveAliasCycle" + * with the specified parameters. + * + * @param { RecAliasOne } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const RecursiveAliasCycle = async ( + input: RecAliasOne, +): Promise => { + return b.RecursiveAliasCycle( + input, + ); +}; + +/** + * Executes the "RecursiveClassWithAliasIndirection" BAML action. + * + * This server action calls the underlying BAML function "RecursiveClassWithAliasIndirection" + * with the specified parameters. + * + * @param { NodeWithAliasIndirection } cls - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const RecursiveClassWithAliasIndirection = async ( + cls: NodeWithAliasIndirection, +): Promise => { + return b.RecursiveClassWithAliasIndirection( + cls, + ); +}; + +/** + * Executes the "ReturnAliasWithMergedAttributes" BAML action. + * + * This server action calls the underlying BAML function "ReturnAliasWithMergedAttributes" + * with the specified parameters. + * + * @param { Checked } money - Input parameter. + * + * @returns {Promise>} A promise that resolves with the result of the action. + */ +export const ReturnAliasWithMergedAttributes = async ( + money: Checked, +): Promise> => { + return b.ReturnAliasWithMergedAttributes( + money, + ); +}; + +/** + * Executes the "ReturnFailingAssert" BAML action. + * + * This server action calls the underlying BAML function "ReturnFailingAssert" + * with the specified parameters. + * + * @param { number } inp - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ReturnFailingAssert = async ( + inp: number, +): Promise => { + return b.ReturnFailingAssert( + inp, + ); +}; + +/** + * Executes the "ReturnJsonEntry" BAML action. + * + * This server action calls the underlying BAML function "ReturnJsonEntry" + * with the specified parameters. + * + * @param { string } s - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ReturnJsonEntry = async ( + s: string, +): Promise => { + return b.ReturnJsonEntry( + s, + ); +}; + +/** + * Executes the "ReturnMalformedConstraints" BAML action. + * + * This server action calls the underlying BAML function "ReturnMalformedConstraints" + * with the specified parameters. + * + * @param { number } a - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const ReturnMalformedConstraints = async ( + a: number, +): Promise => { + return b.ReturnMalformedConstraints( + a, + ); +}; + +/** + * Executes the "SchemaDescriptions" BAML action. + * + * This server action calls the underlying BAML function "SchemaDescriptions" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const SchemaDescriptions = async ( + input: string, +): Promise => { + return b.SchemaDescriptions( + input, + ); +}; + +/** + * Executes the "SimpleRecursiveListAlias" BAML action. + * + * This server action calls the underlying BAML function "SimpleRecursiveListAlias" + * with the specified parameters. + * + * @param { RecursiveListAlias } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const SimpleRecursiveListAlias = async ( + input: RecursiveListAlias, +): Promise => { + return b.SimpleRecursiveListAlias( + input, + ); +}; + +/** + * Executes the "SimpleRecursiveMapAlias" BAML action. + * + * This server action calls the underlying BAML function "SimpleRecursiveMapAlias" + * with the specified parameters. + * + * @param { RecursiveMapAlias } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const SimpleRecursiveMapAlias = async ( + input: RecursiveMapAlias, +): Promise => { + return b.SimpleRecursiveMapAlias( + input, + ); +}; + +/** + * Executes the "StreamBigNumbers" BAML action. + * + * This server action calls the underlying BAML function "StreamBigNumbers" + * with the specified parameters. + * + * @param { number } digits - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const StreamBigNumbers = async ( + digits: number, +): Promise => { + return b.StreamBigNumbers( + digits, + ); +}; + +/** + * Executes the "StreamFailingAssertion" BAML action. + * + * This server action calls the underlying BAML function "StreamFailingAssertion" + * with the specified parameters. + * + * @param { string } theme - Input parameter. + * @param { number } length - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const StreamFailingAssertion = async ( + theme: string, + length: number, +): Promise => { + return b.StreamFailingAssertion( + theme, + length, + ); +}; + +/** + * Executes the "StreamOneBigNumber" BAML action. + * + * This server action calls the underlying BAML function "StreamOneBigNumber" + * with the specified parameters. + * + * @param { number } digits - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const StreamOneBigNumber = async ( + digits: number, +): Promise => { + return b.StreamOneBigNumber( + digits, + ); +}; + +/** + * Executes the "StreamUnionIntegers" BAML action. + * + * This server action calls the underlying BAML function "StreamUnionIntegers" + * with the specified parameters. + * + * @param { number } digits - Input parameter. + * + * @returns {Promise<(number | string)[]>} A promise that resolves with the result of the action. + */ +export const StreamUnionIntegers = async ( + digits: number, +): Promise<(number | string)[]> => { + return b.StreamUnionIntegers( + digits, + ); +}; + +/** + * Executes the "StreamingCompoundNumbers" BAML action. + * + * This server action calls the underlying BAML function "StreamingCompoundNumbers" + * with the specified parameters. + * + * @param { number } digits - Input parameter. + * @param { boolean } yapping - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const StreamingCompoundNumbers = async ( + digits: number, + yapping: boolean, +): Promise => { + return b.StreamingCompoundNumbers( + digits, + yapping, + ); +}; + +/** + * Executes the "TakeRecAliasDep" BAML action. + * + * This server action calls the underlying BAML function "TakeRecAliasDep" + * with the specified parameters. + * + * @param { RecursiveAliasDependency } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TakeRecAliasDep = async ( + input: RecursiveAliasDependency, +): Promise => { + return b.TakeRecAliasDep( + input, + ); +}; + +/** + * Executes the "TestAnthropic" BAML action. + * + * This server action calls the underlying BAML function "TestAnthropic" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAnthropic = async ( + input: string, +): Promise => { + return b.TestAnthropic( + input, + ); +}; + +/** + * Executes the "TestAnthropicShorthand" BAML action. + * + * This server action calls the underlying BAML function "TestAnthropicShorthand" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAnthropicShorthand = async ( + input: string, +): Promise => { + return b.TestAnthropicShorthand( + input, + ); +}; + +/** + * Executes the "TestAws" BAML action. + * + * This server action calls the underlying BAML function "TestAws" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAws = async ( + input: string, +): Promise => { + return b.TestAws( + input, + ); +}; + +/** + * Executes the "TestAwsInvalidAccessKey" BAML action. + * + * This server action calls the underlying BAML function "TestAwsInvalidAccessKey" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAwsInvalidAccessKey = async ( + input: string, +): Promise => { + return b.TestAwsInvalidAccessKey( + input, + ); +}; + +/** + * Executes the "TestAwsInvalidProfile" BAML action. + * + * This server action calls the underlying BAML function "TestAwsInvalidProfile" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAwsInvalidProfile = async ( + input: string, +): Promise => { + return b.TestAwsInvalidProfile( + input, + ); +}; + +/** + * Executes the "TestAwsInvalidRegion" BAML action. + * + * This server action calls the underlying BAML function "TestAwsInvalidRegion" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAwsInvalidRegion = async ( + input: string, +): Promise => { + return b.TestAwsInvalidRegion( + input, + ); +}; + +/** + * Executes the "TestAwsInvalidSessionToken" BAML action. + * + * This server action calls the underlying BAML function "TestAwsInvalidSessionToken" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAwsInvalidSessionToken = async ( + input: string, +): Promise => { + return b.TestAwsInvalidSessionToken( + input, + ); +}; + +/** + * Executes the "TestAzure" BAML action. + * + * This server action calls the underlying BAML function "TestAzure" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAzure = async ( + input: string, +): Promise => { + return b.TestAzure( + input, + ); +}; + +/** + * Executes the "TestAzureFailure" BAML action. + * + * This server action calls the underlying BAML function "TestAzureFailure" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAzureFailure = async ( + input: string, +): Promise => { + return b.TestAzureFailure( + input, + ); +}; + +/** + * Executes the "TestAzureO1NoMaxTokens" BAML action. + * + * This server action calls the underlying BAML function "TestAzureO1NoMaxTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAzureO1NoMaxTokens = async ( + input: string, +): Promise => { + return b.TestAzureO1NoMaxTokens( + input, + ); +}; + +/** + * Executes the "TestAzureO1WithMaxCompletionTokens" BAML action. + * + * This server action calls the underlying BAML function "TestAzureO1WithMaxCompletionTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAzureO1WithMaxCompletionTokens = async ( + input: string, +): Promise => { + return b.TestAzureO1WithMaxCompletionTokens( + input, + ); +}; + +/** + * Executes the "TestAzureO1WithMaxTokens" BAML action. + * + * This server action calls the underlying BAML function "TestAzureO1WithMaxTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAzureO1WithMaxTokens = async ( + input: string, +): Promise => { + return b.TestAzureO1WithMaxTokens( + input, + ); +}; + +/** + * Executes the "TestAzureO3NoMaxTokens" BAML action. + * + * This server action calls the underlying BAML function "TestAzureO3NoMaxTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAzureO3NoMaxTokens = async ( + input: string, +): Promise => { + return b.TestAzureO3NoMaxTokens( + input, + ); +}; + +/** + * Executes the "TestAzureO3WithMaxCompletionTokens" BAML action. + * + * This server action calls the underlying BAML function "TestAzureO3WithMaxCompletionTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAzureO3WithMaxCompletionTokens = async ( + input: string, +): Promise => { + return b.TestAzureO3WithMaxCompletionTokens( + input, + ); +}; + +/** + * Executes the "TestAzureWithMaxTokens" BAML action. + * + * This server action calls the underlying BAML function "TestAzureWithMaxTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestAzureWithMaxTokens = async ( + input: string, +): Promise => { + return b.TestAzureWithMaxTokens( + input, + ); +}; + +/** + * Executes the "TestCaching" BAML action. + * + * This server action calls the underlying BAML function "TestCaching" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * @param { string } not_cached - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestCaching = async ( + input: string, + not_cached: string, +): Promise => { + return b.TestCaching( + input, + not_cached, + ); +}; + +/** + * Executes the "TestFallbackClient" BAML action. + * + * This server action calls the underlying BAML function "TestFallbackClient" + * with the specified parameters. + * + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestFallbackClient = async ( +): Promise => { + return b.TestFallbackClient( + ); +}; + +/** + * Executes the "TestFallbackToShorthand" BAML action. + * + * This server action calls the underlying BAML function "TestFallbackToShorthand" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestFallbackToShorthand = async ( + input: string, +): Promise => { + return b.TestFallbackToShorthand( + input, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleBool" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleBool" + * with the specified parameters. + * + * @param { boolean } myBool - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleBool = async ( + myBool: boolean, +): Promise => { + return b.TestFnNamedArgsSingleBool( + myBool, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleClass" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleClass" + * with the specified parameters. + * + * @param { NamedArgsSingleClass } myArg - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleClass = async ( + myArg: NamedArgsSingleClass, +): Promise => { + return b.TestFnNamedArgsSingleClass( + myArg, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleEnumList" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleEnumList" + * with the specified parameters. + * + * @param { NamedArgsSingleEnumList[] } myArg - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleEnumList = async ( + myArg: NamedArgsSingleEnumList[], +): Promise => { + return b.TestFnNamedArgsSingleEnumList( + myArg, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleFloat" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleFloat" + * with the specified parameters. + * + * @param { number } myFloat - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleFloat = async ( + myFloat: number, +): Promise => { + return b.TestFnNamedArgsSingleFloat( + myFloat, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleInt" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleInt" + * with the specified parameters. + * + * @param { number } myInt - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleInt = async ( + myInt: number, +): Promise => { + return b.TestFnNamedArgsSingleInt( + myInt, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleMapStringToClass" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleMapStringToClass" + * with the specified parameters. + * + * @param { Record } myMap - Input parameter. + * + * @returns {Promise>} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleMapStringToClass = async ( + myMap: Record, +): Promise> => { + return b.TestFnNamedArgsSingleMapStringToClass( + myMap, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleMapStringToMap" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleMapStringToMap" + * with the specified parameters. + * + * @param { Record> } myMap - Input parameter. + * + * @returns {Promise>>} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleMapStringToMap = async ( + myMap: Record>, +): Promise>> => { + return b.TestFnNamedArgsSingleMapStringToMap( + myMap, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleMapStringToString" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleMapStringToString" + * with the specified parameters. + * + * @param { Record } myMap - Input parameter. + * + * @returns {Promise>} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleMapStringToString = async ( + myMap: Record, +): Promise> => { + return b.TestFnNamedArgsSingleMapStringToString( + myMap, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleString" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleString" + * with the specified parameters. + * + * @param { string } myString - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleString = async ( + myString: string, +): Promise => { + return b.TestFnNamedArgsSingleString( + myString, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleStringArray" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleStringArray" + * with the specified parameters. + * + * @param { string[] } myStringArray - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleStringArray = async ( + myStringArray: string[], +): Promise => { + return b.TestFnNamedArgsSingleStringArray( + myStringArray, + ); +}; + +/** + * Executes the "TestFnNamedArgsSingleStringList" BAML action. + * + * This server action calls the underlying BAML function "TestFnNamedArgsSingleStringList" + * with the specified parameters. + * + * @param { string[] } myArg - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestFnNamedArgsSingleStringList = async ( + myArg: string[], +): Promise => { + return b.TestFnNamedArgsSingleStringList( + myArg, + ); +}; + +/** + * Executes the "TestGemini" BAML action. + * + * This server action calls the underlying BAML function "TestGemini" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestGemini = async ( + input: string, +): Promise => { + return b.TestGemini( + input, + ); +}; + +/** + * Executes the "TestGeminiOpenAiGeneric" BAML action. + * + * This server action calls the underlying BAML function "TestGeminiOpenAiGeneric" + * with the specified parameters. + * + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestGeminiOpenAiGeneric = async ( +): Promise => { + return b.TestGeminiOpenAiGeneric( + ); +}; + +/** + * Executes the "TestGeminiSystem" BAML action. + * + * This server action calls the underlying BAML function "TestGeminiSystem" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestGeminiSystem = async ( + input: string, +): Promise => { + return b.TestGeminiSystem( + input, + ); +}; + +/** + * Executes the "TestGeminiSystemAsChat" BAML action. + * + * This server action calls the underlying BAML function "TestGeminiSystemAsChat" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestGeminiSystemAsChat = async ( + input: string, +): Promise => { + return b.TestGeminiSystemAsChat( + input, + ); +}; + +/** + * Executes the "TestImageInput" BAML action. + * + * This server action calls the underlying BAML function "TestImageInput" + * with the specified parameters. + * + * @param { Image } img - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestImageInput = async ( + img: Image, +): Promise => { + return b.TestImageInput( + img, + ); +}; + +/** + * Executes the "TestImageInputAnthropic" BAML action. + * + * This server action calls the underlying BAML function "TestImageInputAnthropic" + * with the specified parameters. + * + * @param { Image } img - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestImageInputAnthropic = async ( + img: Image, +): Promise => { + return b.TestImageInputAnthropic( + img, + ); +}; + +/** + * Executes the "TestImageListInput" BAML action. + * + * This server action calls the underlying BAML function "TestImageListInput" + * with the specified parameters. + * + * @param { Image[] } imgs - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestImageListInput = async ( + imgs: Image[], +): Promise => { + return b.TestImageListInput( + imgs, + ); +}; + +/** + * Executes the "TestMemory" BAML action. + * + * This server action calls the underlying BAML function "TestMemory" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestMemory = async ( + input: string, +): Promise => { + return b.TestMemory( + input, + ); +}; + +/** + * Executes the "TestMulticlassNamedArgs" BAML action. + * + * This server action calls the underlying BAML function "TestMulticlassNamedArgs" + * with the specified parameters. + * + * @param { NamedArgsSingleClass } myArg - Input parameter. + * @param { NamedArgsSingleClass } myArg2 - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestMulticlassNamedArgs = async ( + myArg: NamedArgsSingleClass, + myArg2: NamedArgsSingleClass, +): Promise => { + return b.TestMulticlassNamedArgs( + myArg, + myArg2, + ); +}; + +/** + * Executes the "TestNamedArgsLiteralBool" BAML action. + * + * This server action calls the underlying BAML function "TestNamedArgsLiteralBool" + * with the specified parameters. + * + * @param { true } myBool - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestNamedArgsLiteralBool = async ( + myBool: true, +): Promise => { + return b.TestNamedArgsLiteralBool( + myBool, + ); +}; + +/** + * Executes the "TestNamedArgsLiteralInt" BAML action. + * + * This server action calls the underlying BAML function "TestNamedArgsLiteralInt" + * with the specified parameters. + * + * @param { 1 } myInt - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestNamedArgsLiteralInt = async ( + myInt: 1, +): Promise => { + return b.TestNamedArgsLiteralInt( + myInt, + ); +}; + +/** + * Executes the "TestNamedArgsLiteralString" BAML action. + * + * This server action calls the underlying BAML function "TestNamedArgsLiteralString" + * with the specified parameters. + * + * @param { "My String" } myString - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestNamedArgsLiteralString = async ( + myString: "My String", +): Promise => { + return b.TestNamedArgsLiteralString( + myString, + ); +}; + +/** + * Executes the "TestOllama" BAML action. + * + * This server action calls the underlying BAML function "TestOllama" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestOllama = async ( + input: string, +): Promise => { + return b.TestOllama( + input, + ); +}; + +/** + * Executes the "TestOpenAI" BAML action. + * + * This server action calls the underlying BAML function "TestOpenAI" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestOpenAI = async ( + input: string, +): Promise => { + return b.TestOpenAI( + input, + ); +}; + +/** + * Executes the "TestOpenAILegacyProvider" BAML action. + * + * This server action calls the underlying BAML function "TestOpenAILegacyProvider" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestOpenAILegacyProvider = async ( + input: string, +): Promise => { + return b.TestOpenAILegacyProvider( + input, + ); +}; + +/** + * Executes the "TestOpenAIO1NoMaxTokens" BAML action. + * + * This server action calls the underlying BAML function "TestOpenAIO1NoMaxTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestOpenAIO1NoMaxTokens = async ( + input: string, +): Promise => { + return b.TestOpenAIO1NoMaxTokens( + input, + ); +}; + +/** + * Executes the "TestOpenAIO1WithMaxCompletionTokens" BAML action. + * + * This server action calls the underlying BAML function "TestOpenAIO1WithMaxCompletionTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestOpenAIO1WithMaxCompletionTokens = async ( + input: string, +): Promise => { + return b.TestOpenAIO1WithMaxCompletionTokens( + input, + ); +}; + +/** + * Executes the "TestOpenAIO1WithMaxTokens" BAML action. + * + * This server action calls the underlying BAML function "TestOpenAIO1WithMaxTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestOpenAIO1WithMaxTokens = async ( + input: string, +): Promise => { + return b.TestOpenAIO1WithMaxTokens( + input, + ); +}; + +/** + * Executes the "TestOpenAIShorthand" BAML action. + * + * This server action calls the underlying BAML function "TestOpenAIShorthand" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestOpenAIShorthand = async ( + input: string, +): Promise => { + return b.TestOpenAIShorthand( + input, + ); +}; + +/** + * Executes the "TestOpenAIWithMaxTokens" BAML action. + * + * This server action calls the underlying BAML function "TestOpenAIWithMaxTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestOpenAIWithMaxTokens = async ( + input: string, +): Promise => { + return b.TestOpenAIWithMaxTokens( + input, + ); +}; + +/** + * Executes the "TestOpenAIWithNullMaxTokens" BAML action. + * + * This server action calls the underlying BAML function "TestOpenAIWithNullMaxTokens" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestOpenAIWithNullMaxTokens = async ( + input: string, +): Promise => { + return b.TestOpenAIWithNullMaxTokens( + input, + ); +}; + +/** + * Executes the "TestRetryConstant" BAML action. + * + * This server action calls the underlying BAML function "TestRetryConstant" + * with the specified parameters. + * + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestRetryConstant = async ( +): Promise => { + return b.TestRetryConstant( + ); +}; + +/** + * Executes the "TestRetryExponential" BAML action. + * + * This server action calls the underlying BAML function "TestRetryExponential" + * with the specified parameters. + * + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestRetryExponential = async ( +): Promise => { + return b.TestRetryExponential( + ); +}; + +/** + * Executes the "TestSingleFallbackClient" BAML action. + * + * This server action calls the underlying BAML function "TestSingleFallbackClient" + * with the specified parameters. + * + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestSingleFallbackClient = async ( +): Promise => { + return b.TestSingleFallbackClient( + ); +}; + +/** + * Executes the "TestUniverseQuestion" BAML action. + * + * This server action calls the underlying BAML function "TestUniverseQuestion" + * with the specified parameters. + * + * @param { UniverseQuestionInput } question - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestUniverseQuestion = async ( + question: UniverseQuestionInput, +): Promise => { + return b.TestUniverseQuestion( + question, + ); +}; + +/** + * Executes the "TestVertex" BAML action. + * + * This server action calls the underlying BAML function "TestVertex" + * with the specified parameters. + * + * @param { string } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestVertex = async ( + input: string, +): Promise => { + return b.TestVertex( + input, + ); +}; + +/** + * Executes the "TestVertexWithSystemInstructions" BAML action. + * + * This server action calls the underlying BAML function "TestVertexWithSystemInstructions" + * with the specified parameters. + * + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const TestVertexWithSystemInstructions = async ( +): Promise => { + return b.TestVertexWithSystemInstructions( + ); +}; + +/** + * Executes the "UnionTest_Function" BAML action. + * + * This server action calls the underlying BAML function "UnionTest_Function" + * with the specified parameters. + * + * @param { string | boolean } input - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const UnionTest_Function = async ( + input: string | boolean, +): Promise => { + return b.UnionTest_Function( + input, + ); +}; + +/** + * Executes the "UseBlockConstraint" BAML action. + * + * This server action calls the underlying BAML function "UseBlockConstraint" + * with the specified parameters. + * + * @param { BlockConstraintForParam } inp - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const UseBlockConstraint = async ( + inp: BlockConstraintForParam, +): Promise => { + return b.UseBlockConstraint( + inp, + ); +}; + +/** + * Executes the "UseMalformedConstraints" BAML action. + * + * This server action calls the underlying BAML function "UseMalformedConstraints" + * with the specified parameters. + * + * @param { MalformedConstraints2 } a - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const UseMalformedConstraints = async ( + a: MalformedConstraints2, +): Promise => { + return b.UseMalformedConstraints( + a, + ); +}; + +/** + * Executes the "UseNestedBlockConstraint" BAML action. + * + * This server action calls the underlying BAML function "UseNestedBlockConstraint" + * with the specified parameters. + * + * @param { NestedBlockConstraintForParam } inp - Input parameter. + * + * @returns {Promise} A promise that resolves with the result of the action. + */ +export const UseNestedBlockConstraint = async ( + inp: NestedBlockConstraintForParam, +): Promise => { + return b.UseNestedBlockConstraint( + inp, + ); +}; \ No newline at end of file diff --git a/integ-tests/react/baml_client/react/server_streaming.ts b/integ-tests/react/baml_client/react/server_streaming.ts new file mode 100644 index 000000000..2c729a6c9 --- /dev/null +++ b/integ-tests/react/baml_client/react/server_streaming.ts @@ -0,0 +1,3057 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +'use server' + +import { b } from '../index'; +import type { Check, Checked } from "../types"; +import type { Image, Audio } from "@boundaryml/baml"; + +import type { AliasedEnum, AnotherObject, BigNumbers, BinaryNode, Blah, BlockConstraint, BlockConstraintForParam, BookOrder, Category, Category2, Category3, ClassForNullLiteral, ClassOptionalOutput, ClassOptionalOutput2, ClassToRecAlias, ClassWithBlockDone, ClassWithImage, ClassWithoutDone, Color, ComplexMemoryObject, CompoundBigNumbers, ContactInfo, CustomTaskResult, DataType, DummyOutput, DynEnumOne, DynEnumTwo, DynInputOutput, DynamicClassOne, DynamicClassTwo, DynamicOutput, Earthling, Education, Email, EmailAddress, EnumInClass, EnumOutput, Event, FakeImage, FlightConfirmation, FooAny, Forest, FormatterTest0, FormatterTest1, FormatterTest2, FormatterTest3, GroceryReceipt, Hobby, InnerClass, InnerClass2, InputClass, InputClassNested, JsonArray, JsonEntry, JsonObject, JsonTemplate, JsonValue, LinkedList, LinkedListAliasNode, LiteralClassHello, LiteralClassOne, LiteralClassTwo, MalformedConstraints, MalformedConstraints2, MapKey, Martian, MemoryObject, MergeAttrs, NamedArgsSingleClass, NamedArgsSingleEnum, NamedArgsSingleEnumList, Nested, Nested2, NestedBlockConstraint, NestedBlockConstraintForParam, Node, NodeWithAliasIndirection, OptionalListAndMap, OptionalTest_CategoryType, OptionalTest_Prop1, OptionalTest_ReturnType, OrderInfo, OrderStatus, OriginalA, OriginalB, Person, PhoneNumber, Quantity, RaysData, RecAliasOne, RecAliasThree, RecAliasTwo, ReceiptInfo, ReceiptItem, Recipe, RecursiveAliasDependency, RecursiveListAlias, RecursiveMapAlias, Resume, Schema, SearchParams, SemanticContainer, SimpleTag, SmallThing, SomeClassNestedDynamic, StringToClassEntry, Tag, TestClassAlias, TestClassNested, TestClassWithEnum, TestEnum, TestMemoryOutput, TestOutputClass, Tree, TwoStoriesOneTitle, UnionTest_ReturnType, UniverseQuestion, UniverseQuestionInput, WithReasoning } from "../types" + +import type * as types from "../types" + +/** + * Streaming BAML server actions that return ReadableStreams. + */ + +/** + * Executes the streaming variant of the "AaaSamOutputFormat" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } recipe - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AaaSamOutputFormat = async ( + recipe: string, +): Promise> => { + const stream = b.stream.AaaSamOutputFormat( + recipe, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "AliasThatPointsToRecursiveType" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { LinkedListAliasNode } list - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AliasThatPointsToRecursiveType = async ( + list: LinkedListAliasNode, +): Promise> => { + const stream = b.stream.AliasThatPointsToRecursiveType( + list, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "AliasWithMultipleAttrs" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Checked } money - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AliasWithMultipleAttrs = async ( + money: Checked, +): Promise> => { + const stream = b.stream.AliasWithMultipleAttrs( + money, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "AliasedInputClass" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { InputClass } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AliasedInputClass = async ( + input: InputClass, +): Promise> => { + const stream = b.stream.AliasedInputClass( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "AliasedInputClass2" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { InputClass } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AliasedInputClass2 = async ( + input: InputClass, +): Promise> => { + const stream = b.stream.AliasedInputClass2( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "AliasedInputClassNested" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { InputClassNested } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AliasedInputClassNested = async ( + input: InputClassNested, +): Promise> => { + const stream = b.stream.AliasedInputClassNested( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "AliasedInputEnum" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { AliasedEnum } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AliasedInputEnum = async ( + input: AliasedEnum, +): Promise> => { + const stream = b.stream.AliasedInputEnum( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "AliasedInputList" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { AliasedEnum[] } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AliasedInputList = async ( + input: AliasedEnum[], +): Promise> => { + const stream = b.stream.AliasedInputList( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "AllowedOptionals" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { OptionalListAndMap } optionals - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AllowedOptionals = async ( + optionals: OptionalListAndMap, +): Promise> => { + const stream = b.stream.AllowedOptionals( + optionals, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "AssertFn" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number } a - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AssertFn = async ( + a: number, +): Promise> => { + const stream = b.stream.AssertFn( + a, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "AudioInput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Audio } aud - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const AudioInput = async ( + aud: Audio, +): Promise> => { + const stream = b.stream.AudioInput( + aud, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "BuildLinkedList" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number[] } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const BuildLinkedList = async ( + input: number[], +): Promise> => { + const stream = b.stream.BuildLinkedList( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "BuildTree" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { BinaryNode } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const BuildTree = async ( + input: BinaryNode, +): Promise> => { + const stream = b.stream.BuildTree( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ClassThatPointsToRecursiveClassThroughAlias" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { ClassToRecAlias } cls - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ClassThatPointsToRecursiveClassThroughAlias = async ( + cls: ClassToRecAlias, +): Promise> => { + const stream = b.stream.ClassThatPointsToRecursiveClassThroughAlias( + cls, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ClassifyDynEnumTwo" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ClassifyDynEnumTwo = async ( + input: string, +): Promise> => { + const stream = b.stream.ClassifyDynEnumTwo( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ClassifyMessage" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ClassifyMessage = async ( + input: string, +): Promise> => { + const stream = b.stream.ClassifyMessage( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ClassifyMessage2" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ClassifyMessage2 = async ( + input: string, +): Promise> => { + const stream = b.stream.ClassifyMessage2( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ClassifyMessage3" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ClassifyMessage3 = async ( + input: string, +): Promise> => { + const stream = b.stream.ClassifyMessage3( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "Completion" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } prefix - Input parameter. + * @param { string } suffix - Input parameter. + * @param { string } language - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const Completion = async ( + prefix: string, + suffix: string, + language: string, +): Promise> => { + const stream = b.stream.Completion( + prefix, + suffix, + language, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "CustomTask" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const CustomTask = async ( + input: string, +): Promise> => { + const stream = b.stream.CustomTask( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "DescribeImage" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Image } img - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const DescribeImage = async ( + img: Image, +): Promise> => { + const stream = b.stream.DescribeImage( + img, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "DescribeImage2" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { ClassWithImage } classWithImage - Input parameter. + * @param { Image } img2 - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const DescribeImage2 = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise> => { + const stream = b.stream.DescribeImage2( + classWithImage, + img2, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "DescribeImage3" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { ClassWithImage } classWithImage - Input parameter. + * @param { Image } img2 - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const DescribeImage3 = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise> => { + const stream = b.stream.DescribeImage3( + classWithImage, + img2, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "DescribeImage4" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { ClassWithImage } classWithImage - Input parameter. + * @param { Image } img2 - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const DescribeImage4 = async ( + classWithImage: ClassWithImage, + img2: Image, +): Promise> => { + const stream = b.stream.DescribeImage4( + classWithImage, + img2, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "DifferentiateUnions" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const DifferentiateUnions = async ( +): Promise> => { + const stream = b.stream.DifferentiateUnions( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "DummyOutputFunction" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const DummyOutputFunction = async ( + input: string, +): Promise> => { + const stream = b.stream.DummyOutputFunction( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "DynamicFunc" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { DynamicClassOne } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const DynamicFunc = async ( + input: DynamicClassOne, +): Promise> => { + const stream = b.stream.DynamicFunc( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "DynamicInputOutput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { DynInputOutput } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const DynamicInputOutput = async ( + input: DynInputOutput, +): Promise> => { + const stream = b.stream.DynamicInputOutput( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "DynamicListInputOutput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { DynInputOutput[] } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const DynamicListInputOutput = async ( + input: DynInputOutput[], +): Promise> => { + const stream = b.stream.DynamicListInputOutput( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ExpectFailure" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ExpectFailure = async ( +): Promise> => { + const stream = b.stream.ExpectFailure( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ExtractContactInfo" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } document - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ExtractContactInfo = async ( + document: string, +): Promise> => { + const stream = b.stream.ExtractContactInfo( + document, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ExtractHobby" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } text - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ExtractHobby = async ( + text: string, +): Promise> => { + const stream = b.stream.ExtractHobby( + text, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ExtractNames" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ExtractNames = async ( + input: string, +): Promise> => { + const stream = b.stream.ExtractNames( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ExtractPeople" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } text - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ExtractPeople = async ( + text: string, +): Promise> => { + const stream = b.stream.ExtractPeople( + text, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ExtractReceiptInfo" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } email - Input parameter. + * @param { "curiosity" | "personal_finance" } reason - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ExtractReceiptInfo = async ( + email: string, + reason: "curiosity" | "personal_finance", +): Promise> => { + const stream = b.stream.ExtractReceiptInfo( + email, + reason, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ExtractResume" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } resume - Input parameter. + * @param { Image | null } img (optional) - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ExtractResume = async ( + resume: string, + img?: Image | null, +): Promise> => { + const stream = b.stream.ExtractResume( + resume, + img, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ExtractResume2" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } resume - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ExtractResume2 = async ( + resume: string, +): Promise> => { + const stream = b.stream.ExtractResume2( + resume, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnClassOptionalOutput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnClassOptionalOutput = async ( + input: string, +): Promise> => { + const stream = b.stream.FnClassOptionalOutput( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnClassOptionalOutput2" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnClassOptionalOutput2 = async ( + input: string, +): Promise> => { + const stream = b.stream.FnClassOptionalOutput2( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnEnumListOutput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnEnumListOutput = async ( + input: string, +): Promise> => { + const stream = b.stream.FnEnumListOutput( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnEnumOutput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnEnumOutput = async ( + input: string, +): Promise> => { + const stream = b.stream.FnEnumOutput( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnLiteralClassInputOutput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { LiteralClassHello } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnLiteralClassInputOutput = async ( + input: LiteralClassHello, +): Promise> => { + const stream = b.stream.FnLiteralClassInputOutput( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnLiteralUnionClassInputOutput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { LiteralClassOne | LiteralClassTwo } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnLiteralUnionClassInputOutput = async ( + input: LiteralClassOne | LiteralClassTwo, +): Promise> => { + const stream = b.stream.FnLiteralUnionClassInputOutput( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnNamedArgsSingleStringOptional" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string | null } myString (optional) - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnNamedArgsSingleStringOptional = async ( + myString?: string | null, +): Promise> => { + const stream = b.stream.FnNamedArgsSingleStringOptional( + myString, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnOutputBool" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnOutputBool = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputBool( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnOutputClass" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnOutputClass = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputClass( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnOutputClassList" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnOutputClassList = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputClassList( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnOutputClassNested" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnOutputClassNested = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputClassNested( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnOutputClassWithEnum" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnOutputClassWithEnum = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputClassWithEnum( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnOutputInt" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnOutputInt = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputInt( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnOutputLiteralBool" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnOutputLiteralBool = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputLiteralBool( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnOutputLiteralInt" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnOutputLiteralInt = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputLiteralInt( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnOutputLiteralString" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnOutputLiteralString = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputLiteralString( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnOutputStringList" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnOutputStringList = async ( + input: string, +): Promise> => { + const stream = b.stream.FnOutputStringList( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnTestAliasedEnumOutput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnTestAliasedEnumOutput = async ( + input: string, +): Promise> => { + const stream = b.stream.FnTestAliasedEnumOutput( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnTestClassAlias" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnTestClassAlias = async ( + input: string, +): Promise> => { + const stream = b.stream.FnTestClassAlias( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "FnTestNamedArgsSingleEnum" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { NamedArgsSingleEnum } myArg - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const FnTestNamedArgsSingleEnum = async ( + myArg: NamedArgsSingleEnum, +): Promise> => { + const stream = b.stream.FnTestNamedArgsSingleEnum( + myArg, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "GetDataType" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } text - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const GetDataType = async ( + text: string, +): Promise> => { + const stream = b.stream.GetDataType( + text, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "GetOrderInfo" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Email } email - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const GetOrderInfo = async ( + email: Email, +): Promise> => { + const stream = b.stream.GetOrderInfo( + email, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "GetQuery" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } query - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const GetQuery = async ( + query: string, +): Promise> => { + const stream = b.stream.GetQuery( + query, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "InOutEnumMapKey" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Partial> } i1 - Input parameter. + * @param { Partial> } i2 - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const InOutEnumMapKey = async ( + i1: Partial>, + i2: Partial>, +): Promise> => { + const stream = b.stream.InOutEnumMapKey( + i1, + i2, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "InOutLiteralStringUnionMapKey" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Partial> } i1 - Input parameter. + * @param { Partial> } i2 - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const InOutLiteralStringUnionMapKey = async ( + i1: Partial>, + i2: Partial>, +): Promise> => { + const stream = b.stream.InOutLiteralStringUnionMapKey( + i1, + i2, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "InOutSingleLiteralStringMapKey" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Partial> } m - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const InOutSingleLiteralStringMapKey = async ( + m: Partial>, +): Promise> => { + const stream = b.stream.InOutSingleLiteralStringMapKey( + m, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "JsonTypeAliasCycle" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { JsonValue } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const JsonTypeAliasCycle = async ( + input: JsonValue, +): Promise> => { + const stream = b.stream.JsonTypeAliasCycle( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "LiteralUnionsTest" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const LiteralUnionsTest = async ( + input: string, +): Promise> => { + const stream = b.stream.LiteralUnionsTest( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "MakeBlockConstraint" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const MakeBlockConstraint = async ( +): Promise> => { + const stream = b.stream.MakeBlockConstraint( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "MakeNestedBlockConstraint" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const MakeNestedBlockConstraint = async ( +): Promise> => { + const stream = b.stream.MakeNestedBlockConstraint( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "MakeSemanticContainer" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const MakeSemanticContainer = async ( +): Promise> => { + const stream = b.stream.MakeSemanticContainer( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "MapAlias" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Record } m - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const MapAlias = async ( + m: Record, +): Promise> => { + const stream = b.stream.MapAlias( + m, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "MergeAliasAttributes" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number } money - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const MergeAliasAttributes = async ( + money: number, +): Promise> => { + const stream = b.stream.MergeAliasAttributes( + money, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "MyFunc" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const MyFunc = async ( + input: string, +): Promise> => { + const stream = b.stream.MyFunc( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "NestedAlias" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number | string | boolean | number | string[] | Record } c - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const NestedAlias = async ( + c: number | string | boolean | number | string[] | Record, +): Promise> => { + const stream = b.stream.NestedAlias( + c, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "NullLiteralClassHello" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } s - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const NullLiteralClassHello = async ( + s: string, +): Promise> => { + const stream = b.stream.NullLiteralClassHello( + s, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "OptionalTest_Function" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const OptionalTest_Function = async ( + input: string, +): Promise> => { + const stream = b.stream.OptionalTest_Function( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "PredictAge" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } name - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const PredictAge = async ( + name: string, +): Promise> => { + const stream = b.stream.PredictAge( + name, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "PredictAgeBare" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } inp - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const PredictAgeBare = async ( + inp: string, +): Promise> => { + const stream = b.stream.PredictAgeBare( + inp, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "PrimitiveAlias" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number | string | boolean | number } p - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const PrimitiveAlias = async ( + p: number | string | boolean | number, +): Promise> => { + const stream = b.stream.PrimitiveAlias( + p, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "PromptTestClaude" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const PromptTestClaude = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestClaude( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "PromptTestClaudeChat" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const PromptTestClaudeChat = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestClaudeChat( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "PromptTestClaudeChatNoSystem" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const PromptTestClaudeChatNoSystem = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestClaudeChatNoSystem( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "PromptTestOpenAI" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const PromptTestOpenAI = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestOpenAI( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "PromptTestOpenAIChat" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const PromptTestOpenAIChat = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestOpenAIChat( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "PromptTestOpenAIChatNoSystem" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const PromptTestOpenAIChatNoSystem = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestOpenAIChatNoSystem( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "PromptTestStreaming" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const PromptTestStreaming = async ( + input: string, +): Promise> => { + const stream = b.stream.PromptTestStreaming( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "RecursiveAliasCycle" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { RecAliasOne } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const RecursiveAliasCycle = async ( + input: RecAliasOne, +): Promise> => { + const stream = b.stream.RecursiveAliasCycle( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "RecursiveClassWithAliasIndirection" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { NodeWithAliasIndirection } cls - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const RecursiveClassWithAliasIndirection = async ( + cls: NodeWithAliasIndirection, +): Promise> => { + const stream = b.stream.RecursiveClassWithAliasIndirection( + cls, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ReturnAliasWithMergedAttributes" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Checked } money - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ReturnAliasWithMergedAttributes = async ( + money: Checked, +): Promise> => { + const stream = b.stream.ReturnAliasWithMergedAttributes( + money, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ReturnFailingAssert" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number } inp - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ReturnFailingAssert = async ( + inp: number, +): Promise> => { + const stream = b.stream.ReturnFailingAssert( + inp, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ReturnJsonEntry" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } s - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ReturnJsonEntry = async ( + s: string, +): Promise> => { + const stream = b.stream.ReturnJsonEntry( + s, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "ReturnMalformedConstraints" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number } a - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const ReturnMalformedConstraints = async ( + a: number, +): Promise> => { + const stream = b.stream.ReturnMalformedConstraints( + a, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "SchemaDescriptions" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const SchemaDescriptions = async ( + input: string, +): Promise> => { + const stream = b.stream.SchemaDescriptions( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "SimpleRecursiveListAlias" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { RecursiveListAlias } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const SimpleRecursiveListAlias = async ( + input: RecursiveListAlias, +): Promise> => { + const stream = b.stream.SimpleRecursiveListAlias( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "SimpleRecursiveMapAlias" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { RecursiveMapAlias } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const SimpleRecursiveMapAlias = async ( + input: RecursiveMapAlias, +): Promise> => { + const stream = b.stream.SimpleRecursiveMapAlias( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "StreamBigNumbers" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number } digits - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const StreamBigNumbers = async ( + digits: number, +): Promise> => { + const stream = b.stream.StreamBigNumbers( + digits, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "StreamFailingAssertion" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } theme - Input parameter. + * @param { number } length - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const StreamFailingAssertion = async ( + theme: string, + length: number, +): Promise> => { + const stream = b.stream.StreamFailingAssertion( + theme, + length, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "StreamOneBigNumber" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number } digits - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const StreamOneBigNumber = async ( + digits: number, +): Promise> => { + const stream = b.stream.StreamOneBigNumber( + digits, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "StreamUnionIntegers" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number } digits - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const StreamUnionIntegers = async ( + digits: number, +): Promise> => { + const stream = b.stream.StreamUnionIntegers( + digits, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "StreamingCompoundNumbers" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number } digits - Input parameter. + * @param { boolean } yapping - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const StreamingCompoundNumbers = async ( + digits: number, + yapping: boolean, +): Promise> => { + const stream = b.stream.StreamingCompoundNumbers( + digits, + yapping, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TakeRecAliasDep" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { RecursiveAliasDependency } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TakeRecAliasDep = async ( + input: RecursiveAliasDependency, +): Promise> => { + const stream = b.stream.TakeRecAliasDep( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAnthropic" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAnthropic = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAnthropic( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAnthropicShorthand" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAnthropicShorthand = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAnthropicShorthand( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAws" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAws = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAws( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAwsInvalidAccessKey" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAwsInvalidAccessKey = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAwsInvalidAccessKey( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAwsInvalidProfile" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAwsInvalidProfile = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAwsInvalidProfile( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAwsInvalidRegion" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAwsInvalidRegion = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAwsInvalidRegion( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAwsInvalidSessionToken" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAwsInvalidSessionToken = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAwsInvalidSessionToken( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAzure" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAzure = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAzure( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAzureFailure" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAzureFailure = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAzureFailure( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAzureO1NoMaxTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAzureO1NoMaxTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAzureO1NoMaxTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAzureO1WithMaxCompletionTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAzureO1WithMaxCompletionTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAzureO1WithMaxCompletionTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAzureO1WithMaxTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAzureO1WithMaxTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAzureO1WithMaxTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAzureO3NoMaxTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAzureO3NoMaxTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAzureO3NoMaxTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAzureO3WithMaxCompletionTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAzureO3WithMaxCompletionTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAzureO3WithMaxCompletionTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestAzureWithMaxTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestAzureWithMaxTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestAzureWithMaxTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestCaching" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * @param { string } not_cached - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestCaching = async ( + input: string, + not_cached: string, +): Promise> => { + const stream = b.stream.TestCaching( + input, + not_cached, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFallbackClient" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFallbackClient = async ( +): Promise> => { + const stream = b.stream.TestFallbackClient( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFallbackToShorthand" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFallbackToShorthand = async ( + input: string, +): Promise> => { + const stream = b.stream.TestFallbackToShorthand( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleBool" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { boolean } myBool - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleBool = async ( + myBool: boolean, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleBool( + myBool, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleClass" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { NamedArgsSingleClass } myArg - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleClass = async ( + myArg: NamedArgsSingleClass, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleClass( + myArg, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleEnumList" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { NamedArgsSingleEnumList[] } myArg - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleEnumList = async ( + myArg: NamedArgsSingleEnumList[], +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleEnumList( + myArg, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleFloat" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number } myFloat - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleFloat = async ( + myFloat: number, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleFloat( + myFloat, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleInt" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { number } myInt - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleInt = async ( + myInt: number, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleInt( + myInt, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleMapStringToClass" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Record } myMap - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleMapStringToClass = async ( + myMap: Record, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleMapStringToClass( + myMap, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleMapStringToMap" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Record> } myMap - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleMapStringToMap = async ( + myMap: Record>, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleMapStringToMap( + myMap, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleMapStringToString" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Record } myMap - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleMapStringToString = async ( + myMap: Record, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleMapStringToString( + myMap, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleString" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } myString - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleString = async ( + myString: string, +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleString( + myString, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleStringArray" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string[] } myStringArray - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleStringArray = async ( + myStringArray: string[], +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleStringArray( + myStringArray, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestFnNamedArgsSingleStringList" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string[] } myArg - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestFnNamedArgsSingleStringList = async ( + myArg: string[], +): Promise> => { + const stream = b.stream.TestFnNamedArgsSingleStringList( + myArg, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestGemini" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestGemini = async ( + input: string, +): Promise> => { + const stream = b.stream.TestGemini( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestGeminiOpenAiGeneric" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestGeminiOpenAiGeneric = async ( +): Promise> => { + const stream = b.stream.TestGeminiOpenAiGeneric( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestGeminiSystem" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestGeminiSystem = async ( + input: string, +): Promise> => { + const stream = b.stream.TestGeminiSystem( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestGeminiSystemAsChat" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestGeminiSystemAsChat = async ( + input: string, +): Promise> => { + const stream = b.stream.TestGeminiSystemAsChat( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestImageInput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Image } img - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestImageInput = async ( + img: Image, +): Promise> => { + const stream = b.stream.TestImageInput( + img, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestImageInputAnthropic" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Image } img - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestImageInputAnthropic = async ( + img: Image, +): Promise> => { + const stream = b.stream.TestImageInputAnthropic( + img, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestImageListInput" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { Image[] } imgs - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestImageListInput = async ( + imgs: Image[], +): Promise> => { + const stream = b.stream.TestImageListInput( + imgs, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestMemory" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestMemory = async ( + input: string, +): Promise> => { + const stream = b.stream.TestMemory( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestMulticlassNamedArgs" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { NamedArgsSingleClass } myArg - Input parameter. + * @param { NamedArgsSingleClass } myArg2 - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestMulticlassNamedArgs = async ( + myArg: NamedArgsSingleClass, + myArg2: NamedArgsSingleClass, +): Promise> => { + const stream = b.stream.TestMulticlassNamedArgs( + myArg, + myArg2, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestNamedArgsLiteralBool" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { true } myBool - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestNamedArgsLiteralBool = async ( + myBool: true, +): Promise> => { + const stream = b.stream.TestNamedArgsLiteralBool( + myBool, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestNamedArgsLiteralInt" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { 1 } myInt - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestNamedArgsLiteralInt = async ( + myInt: 1, +): Promise> => { + const stream = b.stream.TestNamedArgsLiteralInt( + myInt, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestNamedArgsLiteralString" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { "My String" } myString - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestNamedArgsLiteralString = async ( + myString: "My String", +): Promise> => { + const stream = b.stream.TestNamedArgsLiteralString( + myString, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestOllama" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestOllama = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOllama( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestOpenAI" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestOpenAI = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOpenAI( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestOpenAILegacyProvider" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestOpenAILegacyProvider = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOpenAILegacyProvider( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestOpenAIO1NoMaxTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestOpenAIO1NoMaxTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOpenAIO1NoMaxTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestOpenAIO1WithMaxCompletionTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestOpenAIO1WithMaxCompletionTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOpenAIO1WithMaxCompletionTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestOpenAIO1WithMaxTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestOpenAIO1WithMaxTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOpenAIO1WithMaxTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestOpenAIShorthand" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestOpenAIShorthand = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOpenAIShorthand( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestOpenAIWithMaxTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestOpenAIWithMaxTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOpenAIWithMaxTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestOpenAIWithNullMaxTokens" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestOpenAIWithNullMaxTokens = async ( + input: string, +): Promise> => { + const stream = b.stream.TestOpenAIWithNullMaxTokens( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestRetryConstant" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestRetryConstant = async ( +): Promise> => { + const stream = b.stream.TestRetryConstant( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestRetryExponential" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestRetryExponential = async ( +): Promise> => { + const stream = b.stream.TestRetryExponential( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestSingleFallbackClient" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestSingleFallbackClient = async ( +): Promise> => { + const stream = b.stream.TestSingleFallbackClient( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestUniverseQuestion" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { UniverseQuestionInput } question - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestUniverseQuestion = async ( + question: UniverseQuestionInput, +): Promise> => { + const stream = b.stream.TestUniverseQuestion( + question, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestVertex" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestVertex = async ( + input: string, +): Promise> => { + const stream = b.stream.TestVertex( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "TestVertexWithSystemInstructions" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const TestVertexWithSystemInstructions = async ( +): Promise> => { + const stream = b.stream.TestVertexWithSystemInstructions( + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "UnionTest_Function" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { string | boolean } input - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const UnionTest_Function = async ( + input: string | boolean, +): Promise> => { + const stream = b.stream.UnionTest_Function( + input, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "UseBlockConstraint" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { BlockConstraintForParam } inp - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const UseBlockConstraint = async ( + inp: BlockConstraintForParam, +): Promise> => { + const stream = b.stream.UseBlockConstraint( + inp, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "UseMalformedConstraints" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { MalformedConstraints2 } a - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const UseMalformedConstraints = async ( + a: MalformedConstraints2, +): Promise> => { + const stream = b.stream.UseMalformedConstraints( + a, + ); + return Promise.resolve(stream.toStreamable()); +}; + +/** + * Executes the streaming variant of the "UseNestedBlockConstraint" BAML action. + * + * This action initiates a streaming response by calling the corresponding + * BAML stream function. The returned stream yields incremental updates. + * + * @param { NestedBlockConstraintForParam } inp - Input parameter. + * + * @returns {ReadableStream} A stream that yields incremental updates from the action. + */ +export const UseNestedBlockConstraint = async ( + inp: NestedBlockConstraintForParam, +): Promise> => { + const stream = b.stream.UseNestedBlockConstraint( + inp, + ); + return Promise.resolve(stream.toStreamable()); +}; \ No newline at end of file diff --git a/integ-tests/react/baml_client/react/server_streaming_types.ts b/integ-tests/react/baml_client/react/server_streaming_types.ts new file mode 100644 index 000000000..b9bb33c65 --- /dev/null +++ b/integ-tests/react/baml_client/react/server_streaming_types.ts @@ -0,0 +1,186 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import type { Check, Checked } from "../types"; +import type { Image, Audio } from "@boundaryml/baml"; + +import type { AliasedEnum, AnotherObject, BigNumbers, BinaryNode, Blah, BlockConstraint, BlockConstraintForParam, BookOrder, Category, Category2, Category3, ClassForNullLiteral, ClassOptionalOutput, ClassOptionalOutput2, ClassToRecAlias, ClassWithBlockDone, ClassWithImage, ClassWithoutDone, Color, ComplexMemoryObject, CompoundBigNumbers, ContactInfo, CustomTaskResult, DataType, DummyOutput, DynEnumOne, DynEnumTwo, DynInputOutput, DynamicClassOne, DynamicClassTwo, DynamicOutput, Earthling, Education, Email, EmailAddress, EnumInClass, EnumOutput, Event, FakeImage, FlightConfirmation, FooAny, Forest, FormatterTest0, FormatterTest1, FormatterTest2, FormatterTest3, GroceryReceipt, Hobby, InnerClass, InnerClass2, InputClass, InputClassNested, JsonArray, JsonEntry, JsonObject, JsonTemplate, JsonValue, LinkedList, LinkedListAliasNode, LiteralClassHello, LiteralClassOne, LiteralClassTwo, MalformedConstraints, MalformedConstraints2, MapKey, Martian, MemoryObject, MergeAttrs, NamedArgsSingleClass, NamedArgsSingleEnum, NamedArgsSingleEnumList, Nested, Nested2, NestedBlockConstraint, NestedBlockConstraintForParam, Node, NodeWithAliasIndirection, OptionalListAndMap, OptionalTest_CategoryType, OptionalTest_Prop1, OptionalTest_ReturnType, OrderInfo, OrderStatus, OriginalA, OriginalB, Person, PhoneNumber, Quantity, RaysData, RecAliasOne, RecAliasThree, RecAliasTwo, ReceiptInfo, ReceiptItem, Recipe, RecursiveAliasDependency, RecursiveListAlias, RecursiveMapAlias, Resume, Schema, SearchParams, SemanticContainer, SimpleTag, SmallThing, SomeClassNestedDynamic, StringToClassEntry, Tag, TestClassAlias, TestClassNested, TestClassWithEnum, TestEnum, TestMemoryOutput, TestOutputClass, Tree, TwoStoriesOneTitle, UnionTest_ReturnType, UniverseQuestion, UniverseQuestionInput, WithReasoning } from "../types" + +import type * as types from "../types" +import type { partial_types }from "../partial_types"; + +export type StreamingServerTypes = { + AaaSamOutputFormat: partial_types.Recipe, + AliasThatPointsToRecursiveType: partial_types.LinkedListAliasNode, + AliasWithMultipleAttrs: Checked, + AliasedInputClass: string, + AliasedInputClass2: string, + AliasedInputClassNested: string, + AliasedInputEnum: string, + AliasedInputList: string, + AllowedOptionals: partial_types.OptionalListAndMap, + AssertFn: number, + AudioInput: string, + BuildLinkedList: partial_types.LinkedList, + BuildTree: partial_types.Tree, + ClassThatPointsToRecursiveClassThroughAlias: partial_types.ClassToRecAlias, + ClassifyDynEnumTwo: (string | DynEnumTwo), + ClassifyMessage: types.Category, + ClassifyMessage2: types.Category, + ClassifyMessage3: types.Category, + Completion: string, + CustomTask: ((partial_types.BookOrder | null) | (partial_types.FlightConfirmation | null) | (partial_types.GroceryReceipt | null)), + DescribeImage: string, + DescribeImage2: string, + DescribeImage3: string, + DescribeImage4: string, + DifferentiateUnions: ((partial_types.OriginalA | null) | (partial_types.OriginalB | null)), + DummyOutputFunction: partial_types.DummyOutput, + DynamicFunc: partial_types.DynamicClassTwo, + DynamicInputOutput: partial_types.DynInputOutput, + DynamicListInputOutput: (partial_types.DynInputOutput | null)[], + ExpectFailure: string, + ExtractContactInfo: partial_types.ContactInfo, + ExtractHobby: (string | Hobby | null)[], + ExtractNames: (string | null)[], + ExtractPeople: (partial_types.Person | null)[], + ExtractReceiptInfo: partial_types.ReceiptInfo, + ExtractResume: partial_types.Resume, + ExtractResume2: partial_types.Resume, + FnClassOptionalOutput: ((partial_types.ClassOptionalOutput | null) | null), + FnClassOptionalOutput2: ((partial_types.ClassOptionalOutput2 | null) | null), + FnEnumListOutput: (EnumOutput | null)[], + FnEnumOutput: types.EnumOutput, + FnLiteralClassInputOutput: partial_types.LiteralClassHello, + FnLiteralUnionClassInputOutput: ((partial_types.LiteralClassOne | null) | (partial_types.LiteralClassTwo | null)), + FnNamedArgsSingleStringOptional: string, + FnOutputBool: boolean, + FnOutputClass: partial_types.TestOutputClass, + FnOutputClassList: (partial_types.TestOutputClass | null)[], + FnOutputClassNested: partial_types.TestClassNested, + FnOutputClassWithEnum: partial_types.TestClassWithEnum, + FnOutputInt: number, + FnOutputLiteralBool: false, + FnOutputLiteralInt: 5, + FnOutputLiteralString: "example output", + FnOutputStringList: (string | null)[], + FnTestAliasedEnumOutput: types.TestEnum, + FnTestClassAlias: partial_types.TestClassAlias, + FnTestNamedArgsSingleEnum: string, + GetDataType: partial_types.RaysData, + GetOrderInfo: partial_types.OrderInfo, + GetQuery: partial_types.SearchParams, + InOutEnumMapKey: (Record ), + InOutLiteralStringUnionMapKey: (Record<"one" | "two" | "three" | "four", (string | null)> ), + InOutSingleLiteralStringMapKey: (Record<"key", (string | null)> ), + JsonTypeAliasCycle: JsonValue, + LiteralUnionsTest: (1 | true | "string output"), + MakeBlockConstraint: Checked, + MakeNestedBlockConstraint: partial_types.NestedBlockConstraint, + MakeSemanticContainer: partial_types.SemanticContainer, + MapAlias: (Record ), + MergeAliasAttributes: partial_types.MergeAttrs, + MyFunc: partial_types.DynamicOutput, + NestedAlias: (((number | null) | (string | null) | (boolean | null) | (number | null) | null) | (string | null)[] | (Record | null)), + NullLiteralClassHello: partial_types.ClassForNullLiteral, + OptionalTest_Function: ((partial_types.OptionalTest_ReturnType | null) | null)[], + PredictAge: partial_types.FooAny, + PredictAgeBare: Checked, + PrimitiveAlias: ((number | null) | (string | null) | (boolean | null) | (number | null)), + PromptTestClaude: string, + PromptTestClaudeChat: string, + PromptTestClaudeChatNoSystem: string, + PromptTestOpenAI: string, + PromptTestOpenAIChat: string, + PromptTestOpenAIChatNoSystem: string, + PromptTestStreaming: string, + RecursiveAliasCycle: RecAliasOne, + RecursiveClassWithAliasIndirection: partial_types.NodeWithAliasIndirection, + ReturnAliasWithMergedAttributes: Checked, + ReturnFailingAssert: number, + ReturnJsonEntry: JsonTemplate, + ReturnMalformedConstraints: partial_types.MalformedConstraints, + SchemaDescriptions: partial_types.Schema, + SimpleRecursiveListAlias: RecursiveListAlias, + SimpleRecursiveMapAlias: RecursiveMapAlias, + StreamBigNumbers: partial_types.BigNumbers, + StreamFailingAssertion: partial_types.TwoStoriesOneTitle, + StreamOneBigNumber: number, + StreamUnionIntegers: ((number | null) | (string | null) | null)[], + StreamingCompoundNumbers: partial_types.CompoundBigNumbers, + TakeRecAliasDep: partial_types.RecursiveAliasDependency, + TestAnthropic: string, + TestAnthropicShorthand: string, + TestAws: string, + TestAwsInvalidAccessKey: string, + TestAwsInvalidProfile: string, + TestAwsInvalidRegion: string, + TestAwsInvalidSessionToken: string, + TestAzure: string, + TestAzureFailure: string, + TestAzureO1NoMaxTokens: string, + TestAzureO1WithMaxCompletionTokens: string, + TestAzureO1WithMaxTokens: string, + TestAzureO3NoMaxTokens: string, + TestAzureO3WithMaxCompletionTokens: string, + TestAzureWithMaxTokens: string, + TestCaching: string, + TestFallbackClient: string, + TestFallbackToShorthand: string, + TestFnNamedArgsSingleBool: string, + TestFnNamedArgsSingleClass: string, + TestFnNamedArgsSingleEnumList: string, + TestFnNamedArgsSingleFloat: string, + TestFnNamedArgsSingleInt: string, + TestFnNamedArgsSingleMapStringToClass: (Record ), + TestFnNamedArgsSingleMapStringToMap: (Record | null)> ), + TestFnNamedArgsSingleMapStringToString: (Record ), + TestFnNamedArgsSingleString: string, + TestFnNamedArgsSingleStringArray: string, + TestFnNamedArgsSingleStringList: string, + TestGemini: string, + TestGeminiOpenAiGeneric: string, + TestGeminiSystem: string, + TestGeminiSystemAsChat: string, + TestImageInput: string, + TestImageInputAnthropic: string, + TestImageListInput: string, + TestMemory: partial_types.TestMemoryOutput, + TestMulticlassNamedArgs: string, + TestNamedArgsLiteralBool: string, + TestNamedArgsLiteralInt: string, + TestNamedArgsLiteralString: string, + TestOllama: string, + TestOpenAI: string, + TestOpenAILegacyProvider: string, + TestOpenAIO1NoMaxTokens: string, + TestOpenAIO1WithMaxCompletionTokens: string, + TestOpenAIO1WithMaxTokens: string, + TestOpenAIShorthand: string, + TestOpenAIWithMaxTokens: string, + TestOpenAIWithNullMaxTokens: string, + TestRetryConstant: string, + TestRetryExponential: string, + TestSingleFallbackClient: string, + TestUniverseQuestion: partial_types.UniverseQuestion, + TestVertex: string, + TestVertexWithSystemInstructions: string, + UnionTest_Function: partial_types.UnionTest_ReturnType, + UseBlockConstraint: number, + UseMalformedConstraints: number, + UseNestedBlockConstraint: number, +} \ No newline at end of file diff --git a/integ-tests/react/baml_client/sync_client.ts b/integ-tests/react/baml_client/sync_client.ts new file mode 100644 index 000000000..bf5e3b639 --- /dev/null +++ b/integ-tests/react/baml_client/sync_client.ts @@ -0,0 +1,3230 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import { BamlRuntime, FunctionResult, BamlCtxManager, Image, Audio, ClientRegistry, toBamlError } from "@boundaryml/baml" +import { Checked, Check, RecursivePartialNull as MovedRecursivePartialNull } from "./types" +import * as types from "./types" +import {AliasedEnum, AnotherObject, BigNumbers, BinaryNode, Blah, BlockConstraint, BlockConstraintForParam, BookOrder, Category, Category2, Category3, ClassForNullLiteral, ClassOptionalOutput, ClassOptionalOutput2, ClassToRecAlias, ClassWithBlockDone, ClassWithImage, ClassWithoutDone, Color, ComplexMemoryObject, CompoundBigNumbers, ContactInfo, CustomTaskResult, DataType, DummyOutput, DynEnumOne, DynEnumTwo, DynInputOutput, DynamicClassOne, DynamicClassTwo, DynamicOutput, Earthling, Education, Email, EmailAddress, EnumInClass, EnumOutput, Event, FakeImage, FlightConfirmation, FooAny, Forest, FormatterTest0, FormatterTest1, FormatterTest2, FormatterTest3, GroceryReceipt, Hobby, InnerClass, InnerClass2, InputClass, InputClassNested, JsonArray, JsonEntry, JsonObject, JsonTemplate, JsonValue, LinkedList, LinkedListAliasNode, LiteralClassHello, LiteralClassOne, LiteralClassTwo, MalformedConstraints, MalformedConstraints2, MapKey, Martian, MemoryObject, MergeAttrs, NamedArgsSingleClass, NamedArgsSingleEnum, NamedArgsSingleEnumList, Nested, Nested2, NestedBlockConstraint, NestedBlockConstraintForParam, Node, NodeWithAliasIndirection, OptionalListAndMap, OptionalTest_CategoryType, OptionalTest_Prop1, OptionalTest_ReturnType, OrderInfo, OrderStatus, OriginalA, OriginalB, Person, PhoneNumber, Quantity, RaysData, RecAliasOne, RecAliasThree, RecAliasTwo, ReceiptInfo, ReceiptItem, Recipe, RecursiveAliasDependency, RecursiveListAlias, RecursiveMapAlias, Resume, Schema, SearchParams, SemanticContainer, SimpleTag, SmallThing, SomeClassNestedDynamic, StringToClassEntry, Tag, TestClassAlias, TestClassNested, TestClassWithEnum, TestEnum, TestMemoryOutput, TestOutputClass, Tree, TwoStoriesOneTitle, UnionTest_ReturnType, UniverseQuestion, UniverseQuestionInput, WithReasoning} from "./types" +import type TypeBuilder from "./type_builder" +import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME } from "./globals" + +/** + * @deprecated Use RecursivePartialNull from 'baml_client/types' instead. + * Example: + * ```ts + * import { RecursivePartialNull } from './baml_client/types' + * ``` + */ +export type RecursivePartialNull = MovedRecursivePartialNull; + +export class BamlSyncClient { + + constructor(private runtime: BamlRuntime, private ctx_manager: BamlCtxManager) {} + + /* + * @deprecated NOT IMPLEMENTED as streaming must by async. We + * are not providing an async version as we want to reserve the + * right to provide a sync version in the future. + */ + get stream() { + throw new Error("stream is not available in BamlSyncClient. Use `import { b } from 'baml_client/async_client") + } + + + AaaSamOutputFormat( + recipe: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Recipe { + try { + const raw = this.runtime.callFunctionSync( + "AaaSamOutputFormat", + { + "recipe": recipe + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Recipe + } catch (error: any) { + throw toBamlError(error); + } + } + + AliasThatPointsToRecursiveType( + list: LinkedListAliasNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): LinkedListAliasNode { + try { + const raw = this.runtime.callFunctionSync( + "AliasThatPointsToRecursiveType", + { + "list": list + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LinkedListAliasNode + } catch (error: any) { + throw toBamlError(error); + } + } + + AliasWithMultipleAttrs( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Checked { + try { + const raw = this.runtime.callFunctionSync( + "AliasWithMultipleAttrs", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + throw toBamlError(error); + } + } + + AliasedInputClass( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AliasedInputClass", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + AliasedInputClass2( + input: InputClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AliasedInputClass2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + AliasedInputClassNested( + input: InputClassNested, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AliasedInputClassNested", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + AliasedInputEnum( + input: AliasedEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AliasedInputEnum", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + AliasedInputList( + input: AliasedEnum[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AliasedInputList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + AllowedOptionals( + optionals: OptionalListAndMap, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): OptionalListAndMap { + try { + const raw = this.runtime.callFunctionSync( + "AllowedOptionals", + { + "optionals": optionals + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OptionalListAndMap + } catch (error: any) { + throw toBamlError(error); + } + } + + AssertFn( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "AssertFn", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + AudioInput( + aud: Audio, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "AudioInput", + { + "aud": aud + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + BuildLinkedList( + input: number[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): LinkedList { + try { + const raw = this.runtime.callFunctionSync( + "BuildLinkedList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LinkedList + } catch (error: any) { + throw toBamlError(error); + } + } + + BuildTree( + input: BinaryNode, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Tree { + try { + const raw = this.runtime.callFunctionSync( + "BuildTree", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Tree + } catch (error: any) { + throw toBamlError(error); + } + } + + ClassThatPointsToRecursiveClassThroughAlias( + cls: ClassToRecAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ClassToRecAlias { + try { + const raw = this.runtime.callFunctionSync( + "ClassThatPointsToRecursiveClassThroughAlias", + { + "cls": cls + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassToRecAlias + } catch (error: any) { + throw toBamlError(error); + } + } + + ClassifyDynEnumTwo( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): (string | DynEnumTwo) { + try { + const raw = this.runtime.callFunctionSync( + "ClassifyDynEnumTwo", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (string | DynEnumTwo) + } catch (error: any) { + throw toBamlError(error); + } + } + + ClassifyMessage( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Category { + try { + const raw = this.runtime.callFunctionSync( + "ClassifyMessage", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + throw toBamlError(error); + } + } + + ClassifyMessage2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Category { + try { + const raw = this.runtime.callFunctionSync( + "ClassifyMessage2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + throw toBamlError(error); + } + } + + ClassifyMessage3( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Category { + try { + const raw = this.runtime.callFunctionSync( + "ClassifyMessage3", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Category + } catch (error: any) { + throw toBamlError(error); + } + } + + Completion( + prefix: string,suffix: string,language: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "Completion", + { + "prefix": prefix,"suffix": suffix,"language": language + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + CustomTask( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BookOrder | FlightConfirmation | GroceryReceipt { + try { + const raw = this.runtime.callFunctionSync( + "CustomTask", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as BookOrder | FlightConfirmation | GroceryReceipt + } catch (error: any) { + throw toBamlError(error); + } + } + + DescribeImage( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "DescribeImage", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + DescribeImage2( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "DescribeImage2", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + DescribeImage3( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "DescribeImage3", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + DescribeImage4( + classWithImage: ClassWithImage,img2: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "DescribeImage4", + { + "classWithImage": classWithImage,"img2": img2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + DifferentiateUnions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): OriginalA | OriginalB { + try { + const raw = this.runtime.callFunctionSync( + "DifferentiateUnions", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OriginalA | OriginalB + } catch (error: any) { + throw toBamlError(error); + } + } + + DummyOutputFunction( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): DummyOutput { + try { + const raw = this.runtime.callFunctionSync( + "DummyOutputFunction", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DummyOutput + } catch (error: any) { + throw toBamlError(error); + } + } + + DynamicFunc( + input: DynamicClassOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): DynamicClassTwo { + try { + const raw = this.runtime.callFunctionSync( + "DynamicFunc", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynamicClassTwo + } catch (error: any) { + throw toBamlError(error); + } + } + + DynamicInputOutput( + input: DynInputOutput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): DynInputOutput { + try { + const raw = this.runtime.callFunctionSync( + "DynamicInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynInputOutput + } catch (error: any) { + throw toBamlError(error); + } + } + + DynamicListInputOutput( + input: DynInputOutput[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): DynInputOutput[] { + try { + const raw = this.runtime.callFunctionSync( + "DynamicListInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynInputOutput[] + } catch (error: any) { + throw toBamlError(error); + } + } + + ExpectFailure( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "ExpectFailure", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + ExtractContactInfo( + document: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ContactInfo { + try { + const raw = this.runtime.callFunctionSync( + "ExtractContactInfo", + { + "document": document + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ContactInfo + } catch (error: any) { + throw toBamlError(error); + } + } + + ExtractHobby( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): (string | Hobby)[] { + try { + const raw = this.runtime.callFunctionSync( + "ExtractHobby", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (string | Hobby)[] + } catch (error: any) { + throw toBamlError(error); + } + } + + ExtractNames( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string[] { + try { + const raw = this.runtime.callFunctionSync( + "ExtractNames", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string[] + } catch (error: any) { + throw toBamlError(error); + } + } + + ExtractPeople( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Person[] { + try { + const raw = this.runtime.callFunctionSync( + "ExtractPeople", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Person[] + } catch (error: any) { + throw toBamlError(error); + } + } + + ExtractReceiptInfo( + email: string,reason: "curiosity" | "personal_finance", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ReceiptInfo { + try { + const raw = this.runtime.callFunctionSync( + "ExtractReceiptInfo", + { + "email": email,"reason": reason + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ReceiptInfo + } catch (error: any) { + throw toBamlError(error); + } + } + + ExtractResume( + resume: string,img?: Image | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Resume { + try { + const raw = this.runtime.callFunctionSync( + "ExtractResume", + { + "resume": resume,"img": img?? null + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Resume + } catch (error: any) { + throw toBamlError(error); + } + } + + ExtractResume2( + resume: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Resume { + try { + const raw = this.runtime.callFunctionSync( + "ExtractResume2", + { + "resume": resume + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Resume + } catch (error: any) { + throw toBamlError(error); + } + } + + FnClassOptionalOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ClassOptionalOutput | null { + try { + const raw = this.runtime.callFunctionSync( + "FnClassOptionalOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassOptionalOutput | null + } catch (error: any) { + throw toBamlError(error); + } + } + + FnClassOptionalOutput2( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ClassOptionalOutput2 | null { + try { + const raw = this.runtime.callFunctionSync( + "FnClassOptionalOutput2", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassOptionalOutput2 | null + } catch (error: any) { + throw toBamlError(error); + } + } + + FnEnumListOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): EnumOutput[] { + try { + const raw = this.runtime.callFunctionSync( + "FnEnumListOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as EnumOutput[] + } catch (error: any) { + throw toBamlError(error); + } + } + + FnEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): EnumOutput { + try { + const raw = this.runtime.callFunctionSync( + "FnEnumOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as EnumOutput + } catch (error: any) { + throw toBamlError(error); + } + } + + FnLiteralClassInputOutput( + input: LiteralClassHello, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): LiteralClassHello { + try { + const raw = this.runtime.callFunctionSync( + "FnLiteralClassInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LiteralClassHello + } catch (error: any) { + throw toBamlError(error); + } + } + + FnLiteralUnionClassInputOutput( + input: LiteralClassOne | LiteralClassTwo, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): LiteralClassOne | LiteralClassTwo { + try { + const raw = this.runtime.callFunctionSync( + "FnLiteralUnionClassInputOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as LiteralClassOne | LiteralClassTwo + } catch (error: any) { + throw toBamlError(error); + } + } + + FnNamedArgsSingleStringOptional( + myString?: string | null, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "FnNamedArgsSingleStringOptional", + { + "myString": myString?? null + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + FnOutputBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): boolean { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputBool", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as boolean + } catch (error: any) { + throw toBamlError(error); + } + } + + FnOutputClass( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestOutputClass { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputClass", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestOutputClass + } catch (error: any) { + throw toBamlError(error); + } + } + + FnOutputClassList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestOutputClass[] { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputClassList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestOutputClass[] + } catch (error: any) { + throw toBamlError(error); + } + } + + FnOutputClassNested( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestClassNested { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputClassNested", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassNested + } catch (error: any) { + throw toBamlError(error); + } + } + + FnOutputClassWithEnum( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestClassWithEnum { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputClassWithEnum", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassWithEnum + } catch (error: any) { + throw toBamlError(error); + } + } + + FnOutputInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputInt", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + FnOutputLiteralBool( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): false { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputLiteralBool", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as false + } catch (error: any) { + throw toBamlError(error); + } + } + + FnOutputLiteralInt( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): 5 { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputLiteralInt", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as 5 + } catch (error: any) { + throw toBamlError(error); + } + } + + FnOutputLiteralString( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): "example output" { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputLiteralString", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as "example output" + } catch (error: any) { + throw toBamlError(error); + } + } + + FnOutputStringList( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string[] { + try { + const raw = this.runtime.callFunctionSync( + "FnOutputStringList", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string[] + } catch (error: any) { + throw toBamlError(error); + } + } + + FnTestAliasedEnumOutput( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestEnum { + try { + const raw = this.runtime.callFunctionSync( + "FnTestAliasedEnumOutput", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestEnum + } catch (error: any) { + throw toBamlError(error); + } + } + + FnTestClassAlias( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestClassAlias { + try { + const raw = this.runtime.callFunctionSync( + "FnTestClassAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestClassAlias + } catch (error: any) { + throw toBamlError(error); + } + } + + FnTestNamedArgsSingleEnum( + myArg: NamedArgsSingleEnum, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "FnTestNamedArgsSingleEnum", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + GetDataType( + text: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): RaysData { + try { + const raw = this.runtime.callFunctionSync( + "GetDataType", + { + "text": text + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RaysData + } catch (error: any) { + throw toBamlError(error); + } + } + + GetOrderInfo( + email: Email, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): OrderInfo { + try { + const raw = this.runtime.callFunctionSync( + "GetOrderInfo", + { + "email": email + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as OrderInfo + } catch (error: any) { + throw toBamlError(error); + } + } + + GetQuery( + query: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): SearchParams { + try { + const raw = this.runtime.callFunctionSync( + "GetQuery", + { + "query": query + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as SearchParams + } catch (error: any) { + throw toBamlError(error); + } + } + + InOutEnumMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Partial> { + try { + const raw = this.runtime.callFunctionSync( + "InOutEnumMapKey", + { + "i1": i1,"i2": i2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + throw toBamlError(error); + } + } + + InOutLiteralStringUnionMapKey( + i1: Partial>,i2: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Partial> { + try { + const raw = this.runtime.callFunctionSync( + "InOutLiteralStringUnionMapKey", + { + "i1": i1,"i2": i2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + throw toBamlError(error); + } + } + + InOutSingleLiteralStringMapKey( + m: Partial>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Partial> { + try { + const raw = this.runtime.callFunctionSync( + "InOutSingleLiteralStringMapKey", + { + "m": m + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Partial> + } catch (error: any) { + throw toBamlError(error); + } + } + + JsonTypeAliasCycle( + input: JsonValue, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): JsonValue { + try { + const raw = this.runtime.callFunctionSync( + "JsonTypeAliasCycle", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as JsonValue + } catch (error: any) { + throw toBamlError(error); + } + } + + LiteralUnionsTest( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): 1 | true | "string output" { + try { + const raw = this.runtime.callFunctionSync( + "LiteralUnionsTest", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as 1 | true | "string output" + } catch (error: any) { + throw toBamlError(error); + } + } + + MakeBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Checked { + try { + const raw = this.runtime.callFunctionSync( + "MakeBlockConstraint", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + throw toBamlError(error); + } + } + + MakeNestedBlockConstraint( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): NestedBlockConstraint { + try { + const raw = this.runtime.callFunctionSync( + "MakeNestedBlockConstraint", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as NestedBlockConstraint + } catch (error: any) { + throw toBamlError(error); + } + } + + MakeSemanticContainer( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): SemanticContainer { + try { + const raw = this.runtime.callFunctionSync( + "MakeSemanticContainer", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as SemanticContainer + } catch (error: any) { + throw toBamlError(error); + } + } + + MapAlias( + m: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Record { + try { + const raw = this.runtime.callFunctionSync( + "MapAlias", + { + "m": m + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + throw toBamlError(error); + } + } + + MergeAliasAttributes( + money: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): MergeAttrs { + try { + const raw = this.runtime.callFunctionSync( + "MergeAliasAttributes", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as MergeAttrs + } catch (error: any) { + throw toBamlError(error); + } + } + + MyFunc( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): DynamicOutput { + try { + const raw = this.runtime.callFunctionSync( + "MyFunc", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as DynamicOutput + } catch (error: any) { + throw toBamlError(error); + } + } + + NestedAlias( + c: number | string | boolean | number | string[] | Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number | string | boolean | number | string[] | Record { + try { + const raw = this.runtime.callFunctionSync( + "NestedAlias", + { + "c": c + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number | string | boolean | number | string[] | Record + } catch (error: any) { + throw toBamlError(error); + } + } + + NullLiteralClassHello( + s: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): ClassForNullLiteral { + try { + const raw = this.runtime.callFunctionSync( + "NullLiteralClassHello", + { + "s": s + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as ClassForNullLiteral + } catch (error: any) { + throw toBamlError(error); + } + } + + OptionalTest_Function( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): (OptionalTest_ReturnType | null)[] { + try { + const raw = this.runtime.callFunctionSync( + "OptionalTest_Function", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (OptionalTest_ReturnType | null)[] + } catch (error: any) { + throw toBamlError(error); + } + } + + PredictAge( + name: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): FooAny { + try { + const raw = this.runtime.callFunctionSync( + "PredictAge", + { + "name": name + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as FooAny + } catch (error: any) { + throw toBamlError(error); + } + } + + PredictAgeBare( + inp: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Checked { + try { + const raw = this.runtime.callFunctionSync( + "PredictAgeBare", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + throw toBamlError(error); + } + } + + PrimitiveAlias( + p: number | string | boolean | number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number | string | boolean | number { + try { + const raw = this.runtime.callFunctionSync( + "PrimitiveAlias", + { + "p": p + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number | string | boolean | number + } catch (error: any) { + throw toBamlError(error); + } + } + + PromptTestClaude( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestClaude", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + PromptTestClaudeChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestClaudeChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + PromptTestClaudeChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestClaudeChatNoSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + PromptTestOpenAI( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestOpenAI", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + PromptTestOpenAIChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestOpenAIChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + PromptTestOpenAIChatNoSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestOpenAIChatNoSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + PromptTestStreaming( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "PromptTestStreaming", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + RecursiveAliasCycle( + input: RecAliasOne, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): RecAliasOne { + try { + const raw = this.runtime.callFunctionSync( + "RecursiveAliasCycle", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecAliasOne + } catch (error: any) { + throw toBamlError(error); + } + } + + RecursiveClassWithAliasIndirection( + cls: NodeWithAliasIndirection, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): NodeWithAliasIndirection { + try { + const raw = this.runtime.callFunctionSync( + "RecursiveClassWithAliasIndirection", + { + "cls": cls + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as NodeWithAliasIndirection + } catch (error: any) { + throw toBamlError(error); + } + } + + ReturnAliasWithMergedAttributes( + money: Checked, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Checked { + try { + const raw = this.runtime.callFunctionSync( + "ReturnAliasWithMergedAttributes", + { + "money": money + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Checked + } catch (error: any) { + throw toBamlError(error); + } + } + + ReturnFailingAssert( + inp: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "ReturnFailingAssert", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + ReturnJsonEntry( + s: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): JsonTemplate { + try { + const raw = this.runtime.callFunctionSync( + "ReturnJsonEntry", + { + "s": s + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as JsonTemplate + } catch (error: any) { + throw toBamlError(error); + } + } + + ReturnMalformedConstraints( + a: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): MalformedConstraints { + try { + const raw = this.runtime.callFunctionSync( + "ReturnMalformedConstraints", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as MalformedConstraints + } catch (error: any) { + throw toBamlError(error); + } + } + + SchemaDescriptions( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Schema { + try { + const raw = this.runtime.callFunctionSync( + "SchemaDescriptions", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Schema + } catch (error: any) { + throw toBamlError(error); + } + } + + SimpleRecursiveListAlias( + input: RecursiveListAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): RecursiveListAlias { + try { + const raw = this.runtime.callFunctionSync( + "SimpleRecursiveListAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecursiveListAlias + } catch (error: any) { + throw toBamlError(error); + } + } + + SimpleRecursiveMapAlias( + input: RecursiveMapAlias, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): RecursiveMapAlias { + try { + const raw = this.runtime.callFunctionSync( + "SimpleRecursiveMapAlias", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecursiveMapAlias + } catch (error: any) { + throw toBamlError(error); + } + } + + StreamBigNumbers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): BigNumbers { + try { + const raw = this.runtime.callFunctionSync( + "StreamBigNumbers", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as BigNumbers + } catch (error: any) { + throw toBamlError(error); + } + } + + StreamFailingAssertion( + theme: string,length: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TwoStoriesOneTitle { + try { + const raw = this.runtime.callFunctionSync( + "StreamFailingAssertion", + { + "theme": theme,"length": length + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TwoStoriesOneTitle + } catch (error: any) { + throw toBamlError(error); + } + } + + StreamOneBigNumber( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "StreamOneBigNumber", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + StreamUnionIntegers( + digits: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): (number | string)[] { + try { + const raw = this.runtime.callFunctionSync( + "StreamUnionIntegers", + { + "digits": digits + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as (number | string)[] + } catch (error: any) { + throw toBamlError(error); + } + } + + StreamingCompoundNumbers( + digits: number,yapping: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): CompoundBigNumbers { + try { + const raw = this.runtime.callFunctionSync( + "StreamingCompoundNumbers", + { + "digits": digits,"yapping": yapping + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as CompoundBigNumbers + } catch (error: any) { + throw toBamlError(error); + } + } + + TakeRecAliasDep( + input: RecursiveAliasDependency, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): RecursiveAliasDependency { + try { + const raw = this.runtime.callFunctionSync( + "TakeRecAliasDep", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as RecursiveAliasDependency + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAnthropic( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAnthropic", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAnthropicShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAnthropicShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAws( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAws", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAwsInvalidAccessKey( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAwsInvalidAccessKey", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAwsInvalidProfile( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAwsInvalidProfile", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAwsInvalidRegion( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAwsInvalidRegion", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAwsInvalidSessionToken( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAwsInvalidSessionToken", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAzure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAzure", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAzureFailure( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAzureFailure", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAzureO1NoMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAzureO1NoMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAzureO1WithMaxCompletionTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAzureO1WithMaxCompletionTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAzureO1WithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAzureO1WithMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAzureO3NoMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAzureO3NoMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAzureO3WithMaxCompletionTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAzureO3WithMaxCompletionTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestAzureWithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestAzureWithMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestCaching( + input: string,not_cached: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestCaching", + { + "input": input,"not_cached": not_cached + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFallbackClient", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFallbackToShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFallbackToShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleBool( + myBool: boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleBool", + { + "myBool": myBool + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleClass( + myArg: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleClass", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleEnumList( + myArg: NamedArgsSingleEnumList[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleEnumList", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleFloat( + myFloat: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleFloat", + { + "myFloat": myFloat + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleInt( + myInt: number, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleInt", + { + "myInt": myInt + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleMapStringToClass( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Record { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleMapStringToClass", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleMapStringToMap( + myMap: Record>, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Record> { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleMapStringToMap", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record> + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleMapStringToString( + myMap: Record, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): Record { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleMapStringToString", + { + "myMap": myMap + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as Record + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleString( + myString: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleString", + { + "myString": myString + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleStringArray( + myStringArray: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleStringArray", + { + "myStringArray": myStringArray + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestFnNamedArgsSingleStringList( + myArg: string[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestFnNamedArgsSingleStringList", + { + "myArg": myArg + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestGemini( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestGemini", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestGeminiOpenAiGeneric( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestGeminiOpenAiGeneric", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestGeminiSystem( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestGeminiSystem", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestGeminiSystemAsChat( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestGeminiSystemAsChat", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestImageInput( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestImageInput", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestImageInputAnthropic( + img: Image, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestImageInputAnthropic", + { + "img": img + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestImageListInput( + imgs: Image[], + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestImageListInput", + { + "imgs": imgs + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestMemory( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): TestMemoryOutput { + try { + const raw = this.runtime.callFunctionSync( + "TestMemory", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as TestMemoryOutput + } catch (error: any) { + throw toBamlError(error); + } + } + + TestMulticlassNamedArgs( + myArg: NamedArgsSingleClass,myArg2: NamedArgsSingleClass, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestMulticlassNamedArgs", + { + "myArg": myArg,"myArg2": myArg2 + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestNamedArgsLiteralBool( + myBool: true, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestNamedArgsLiteralBool", + { + "myBool": myBool + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestNamedArgsLiteralInt( + myInt: 1, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestNamedArgsLiteralInt", + { + "myInt": myInt + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestNamedArgsLiteralString( + myString: "My String", + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestNamedArgsLiteralString", + { + "myString": myString + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestOllama( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOllama", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestOpenAI( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOpenAI", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestOpenAILegacyProvider( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOpenAILegacyProvider", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestOpenAIO1NoMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOpenAIO1NoMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestOpenAIO1WithMaxCompletionTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOpenAIO1WithMaxCompletionTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestOpenAIO1WithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOpenAIO1WithMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestOpenAIShorthand( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOpenAIShorthand", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestOpenAIWithMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOpenAIWithMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestOpenAIWithNullMaxTokens( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestOpenAIWithNullMaxTokens", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestRetryConstant( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestRetryConstant", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestRetryExponential( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestRetryExponential", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestSingleFallbackClient( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestSingleFallbackClient", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestUniverseQuestion( + question: UniverseQuestionInput, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): UniverseQuestion { + try { + const raw = this.runtime.callFunctionSync( + "TestUniverseQuestion", + { + "question": question + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as UniverseQuestion + } catch (error: any) { + throw toBamlError(error); + } + } + + TestVertex( + input: string, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestVertex", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + TestVertexWithSystemInstructions( + + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): string { + try { + const raw = this.runtime.callFunctionSync( + "TestVertexWithSystemInstructions", + { + + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as string + } catch (error: any) { + throw toBamlError(error); + } + } + + UnionTest_Function( + input: string | boolean, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): UnionTest_ReturnType { + try { + const raw = this.runtime.callFunctionSync( + "UnionTest_Function", + { + "input": input + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as UnionTest_ReturnType + } catch (error: any) { + throw toBamlError(error); + } + } + + UseBlockConstraint( + inp: BlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "UseBlockConstraint", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + UseMalformedConstraints( + a: MalformedConstraints2, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "UseMalformedConstraints", + { + "a": a + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + + UseNestedBlockConstraint( + inp: NestedBlockConstraintForParam, + __baml_options__?: { tb?: TypeBuilder, clientRegistry?: ClientRegistry } + ): number { + try { + const raw = this.runtime.callFunctionSync( + "UseNestedBlockConstraint", + { + "inp": inp + }, + this.ctx_manager.cloneContext(), + __baml_options__?.tb?.__tb(), + __baml_options__?.clientRegistry, + ) + return raw.parsed(false) as number + } catch (error: any) { + throw toBamlError(error); + } + } + +} + +export const b = new BamlSyncClient(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_RUNTIME, DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX) \ No newline at end of file diff --git a/integ-tests/react/baml_client/tracing.ts b/integ-tests/react/baml_client/tracing.ts new file mode 100644 index 000000000..6f10a39f5 --- /dev/null +++ b/integ-tests/react/baml_client/tracing.ts @@ -0,0 +1,33 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import type { BamlLogEvent } from '@boundaryml/baml'; +import { DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX } from './globals'; + +const traceAsync = +DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.traceFnAsync.bind(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX) +const traceSync = +DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.traceFnSync.bind(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX) +const setTags = +DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.upsertTags.bind(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX) +const flush = () => { + DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.flush.bind(DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX)() +} +const onLogEvent = (callback: undefined | ((event: BamlLogEvent) => void)) => +DO_NOT_USE_DIRECTLY_UNLESS_YOU_KNOW_WHAT_YOURE_DOING_CTX.onLogEvent(callback) + +export { traceAsync, traceSync, setTags, flush, onLogEvent } \ No newline at end of file diff --git a/integ-tests/react/baml_client/type_builder.ts b/integ-tests/react/baml_client/type_builder.ts new file mode 100644 index 000000000..7f114f972 --- /dev/null +++ b/integ-tests/react/baml_client/type_builder.ts @@ -0,0 +1,167 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import type { FieldType } from '@boundaryml/baml/native' +import { TypeBuilder as _TypeBuilder } from '@boundaryml/baml/type_builder' +import type { EnumBuilder, ClassBuilder } from '@boundaryml/baml/type_builder' + +export default class TypeBuilder { + private tb: _TypeBuilder; + + DummyOutput: ClassBuilder<'DummyOutput', "nonce" | "nonce2">; + + DynInputOutput: ClassBuilder<'DynInputOutput', "testKey">; + + DynamicClassOne: ClassBuilder<'DynamicClassOne'>; + + DynamicClassTwo: ClassBuilder<'DynamicClassTwo', "hi" | "some_class" | "status">; + + DynamicOutput: ClassBuilder<'DynamicOutput'>; + + OriginalB: ClassBuilder<'OriginalB', "value">; + + Person: ClassBuilder<'Person', "name" | "hair_color">; + + SomeClassNestedDynamic: ClassBuilder<'SomeClassNestedDynamic', "hi">; + + + Color: EnumBuilder<'Color', "RED" | "BLUE" | "GREEN" | "YELLOW" | "BLACK" | "WHITE">; + + DynEnumOne: EnumBuilder<'DynEnumOne'>; + + DynEnumTwo: EnumBuilder<'DynEnumTwo'>; + + Hobby: EnumBuilder<'Hobby', "SPORTS" | "MUSIC" | "READING">; + + + constructor() { + this.tb = new _TypeBuilder({ + classes: new Set([ + "AnotherObject","BigNumbers","BinaryNode","Blah","BlockConstraint","BlockConstraintForParam","BookOrder","ClassForNullLiteral","ClassOptionalOutput","ClassOptionalOutput2","ClassToRecAlias","ClassWithBlockDone","ClassWithImage","ClassWithoutDone","ComplexMemoryObject","CompoundBigNumbers","ContactInfo","CustomTaskResult","DummyOutput","DynInputOutput","DynamicClassOne","DynamicClassTwo","DynamicOutput","Earthling","Education","Email","EmailAddress","Event","FakeImage","FlightConfirmation","FooAny","Forest","FormatterTest0","FormatterTest1","FormatterTest2","FormatterTest3","GroceryReceipt","InnerClass","InnerClass2","InputClass","InputClassNested","LinkedList","LinkedListAliasNode","LiteralClassHello","LiteralClassOne","LiteralClassTwo","MalformedConstraints","MalformedConstraints2","Martian","MemoryObject","MergeAttrs","NamedArgsSingleClass","Nested","Nested2","NestedBlockConstraint","NestedBlockConstraintForParam","Node","NodeWithAliasIndirection","OptionalListAndMap","OptionalTest_Prop1","OptionalTest_ReturnType","OrderInfo","OriginalA","OriginalB","Person","PhoneNumber","Quantity","RaysData","ReceiptInfo","ReceiptItem","Recipe","RecursiveAliasDependency","Resume","Schema","SearchParams","SemanticContainer","SimpleTag","SmallThing","SomeClassNestedDynamic","StringToClassEntry","TestClassAlias","TestClassNested","TestClassWithEnum","TestMemoryOutput","TestOutputClass","Tree","TwoStoriesOneTitle","UnionTest_ReturnType","UniverseQuestion","UniverseQuestionInput","WithReasoning", + ]), + enums: new Set([ + "AliasedEnum","Category","Category2","Category3","Color","DataType","DynEnumOne","DynEnumTwo","EnumInClass","EnumOutput","Hobby","MapKey","NamedArgsSingleEnum","NamedArgsSingleEnumList","OptionalTest_CategoryType","OrderStatus","Tag","TestEnum", + ]) + }); + + this.DummyOutput = this.tb.classBuilder("DummyOutput", [ + "nonce","nonce2", + ]); + + this.DynInputOutput = this.tb.classBuilder("DynInputOutput", [ + "testKey", + ]); + + this.DynamicClassOne = this.tb.classBuilder("DynamicClassOne", [ + + ]); + + this.DynamicClassTwo = this.tb.classBuilder("DynamicClassTwo", [ + "hi","some_class","status", + ]); + + this.DynamicOutput = this.tb.classBuilder("DynamicOutput", [ + + ]); + + this.OriginalB = this.tb.classBuilder("OriginalB", [ + "value", + ]); + + this.Person = this.tb.classBuilder("Person", [ + "name","hair_color", + ]); + + this.SomeClassNestedDynamic = this.tb.classBuilder("SomeClassNestedDynamic", [ + "hi", + ]); + + + this.Color = this.tb.enumBuilder("Color", [ + "RED","BLUE","GREEN","YELLOW","BLACK","WHITE", + ]); + + this.DynEnumOne = this.tb.enumBuilder("DynEnumOne", [ + + ]); + + this.DynEnumTwo = this.tb.enumBuilder("DynEnumTwo", [ + + ]); + + this.Hobby = this.tb.enumBuilder("Hobby", [ + "SPORTS","MUSIC","READING", + ]); + + } + + __tb() { + return this.tb._tb(); + } + + string(): FieldType { + return this.tb.string() + } + + literalString(value: string): FieldType { + return this.tb.literalString(value) + } + + literalInt(value: number): FieldType { + return this.tb.literalInt(value) + } + + literalBool(value: boolean): FieldType { + return this.tb.literalBool(value) + } + + int(): FieldType { + return this.tb.int() + } + + float(): FieldType { + return this.tb.float() + } + + bool(): FieldType { + return this.tb.bool() + } + + list(type: FieldType): FieldType { + return this.tb.list(type) + } + + null(): FieldType { + return this.tb.null() + } + + map(key: FieldType, value: FieldType): FieldType { + return this.tb.map(key, value) + } + + union(types: FieldType[]): FieldType { + return this.tb.union(types) + } + + addClass(name: Name): ClassBuilder { + return this.tb.addClass(name); + } + + addEnum(name: Name): EnumBuilder { + return this.tb.addEnum(name); + } +} \ No newline at end of file diff --git a/integ-tests/react/baml_client/types.ts b/integ-tests/react/baml_client/types.ts new file mode 100644 index 000000000..7365235e7 --- /dev/null +++ b/integ-tests/react/baml_client/types.ts @@ -0,0 +1,779 @@ +/************************************************************************************************* + +Welcome to Baml! To use this generated code, please run one of the following: + +$ npm install @boundaryml/baml +$ yarn add @boundaryml/baml +$ pnpm add @boundaryml/baml + +*************************************************************************************************/ + +// This file was generated by BAML: do not edit it. Instead, edit the BAML +// files and re-generate this code. +// +/* eslint-disable */ +// tslint:disable +// @ts-nocheck +// biome-ignore format: autogenerated code +import type { Image, Audio } from "@boundaryml/baml" + +/** + * Recursively partial type that can be null. + * + * @deprecated Use types from the `partial_types` namespace instead, which provides type-safe partial implementations + * @template T The type to make recursively partial. + */ +export type RecursivePartialNull = T extends object + ? { [P in keyof T]?: RecursivePartialNull } + : T | null; + +export interface Checked { + value: T, + checks: Record, +} + +export interface Check { + name: string, + expr: string + status: "succeeded" | "failed" +} + +export function all_succeeded(checks: Record): boolean { + return get_checks(checks).every(check => check.status === "succeeded") +} + +export function get_checks(checks: Record): Check[] { + return Object.values(checks) +} +export enum AliasedEnum { + KEY_ONE = "KEY_ONE", + KEY_TWO = "KEY_TWO", +} + +export enum Category { + Refund = "Refund", + CancelOrder = "CancelOrder", + TechnicalSupport = "TechnicalSupport", + AccountIssue = "AccountIssue", + Question = "Question", +} + +export enum Category2 { + Refund = "Refund", + CancelOrder = "CancelOrder", + TechnicalSupport = "TechnicalSupport", + AccountIssue = "AccountIssue", + Question = "Question", +} + +export enum Category3 { + Refund = "Refund", + CancelOrder = "CancelOrder", + TechnicalSupport = "TechnicalSupport", + AccountIssue = "AccountIssue", + Question = "Question", +} + +export enum Color { + RED = "RED", + BLUE = "BLUE", + GREEN = "GREEN", + YELLOW = "YELLOW", + BLACK = "BLACK", + WHITE = "WHITE", +} + +export enum DataType { + Resume = "Resume", + Event = "Event", +} + +export enum DynEnumOne { +} + +export enum DynEnumTwo { +} + +export enum EnumInClass { + ONE = "ONE", + TWO = "TWO", +} + +/** + * An enum with three values, + * ONE, TWO and THREE. + */ +export enum EnumOutput { + /** + * The first enum. + */ + ONE = "ONE", + /** + * The second enum. + */ + TWO = "TWO", + THREE = "THREE", +} + +export enum Hobby { + SPORTS = "SPORTS", + MUSIC = "MUSIC", + READING = "READING", +} + +export enum MapKey { + A = "A", + B = "B", + C = "C", +} + +export enum NamedArgsSingleEnum { + ONE = "ONE", + TWO = "TWO", +} + +export enum NamedArgsSingleEnumList { + ONE = "ONE", + TWO = "TWO", +} + +export enum OptionalTest_CategoryType { + Aleph = "Aleph", + Beta = "Beta", + Gamma = "Gamma", +} + +export enum OrderStatus { + ORDERED = "ORDERED", + SHIPPED = "SHIPPED", + DELIVERED = "DELIVERED", + CANCELLED = "CANCELLED", +} + +export enum Tag { + Security = "Security", + AI = "AI", + Blockchain = "Blockchain", +} + +export enum TestEnum { + A = "A", + B = "B", + C = "C", + D = "D", + E = "E", + F = "F", + G = "G", +} + +export interface AnotherObject { + id: string + thingy2: string + thingy3: string + +} + +export interface BigNumbers { + a: number + b: number + +} + +export interface BinaryNode { + data: number + left?: BinaryNode | null + right?: BinaryNode | null + +} + +export interface Blah { + prop4?: string | null + +} + +export interface BlockConstraint { + foo: number + bar: string + +} + +export interface BlockConstraintForParam { + bcfp: number + bcfp2: string + +} + +export interface BookOrder { + orderId: string + title: string + quantity: number + price: number + +} + +export interface ClassForNullLiteral { + a: "hi" + +} + +export interface ClassOptionalOutput { + prop1: string + prop2: string + +} + +export interface ClassOptionalOutput2 { + prop1?: string | null + prop2?: string | null + prop3?: Blah | null + +} + +export interface ClassToRecAlias { + list: LinkedListAliasNode + +} + +export interface ClassWithBlockDone { + i_16_digits: number + s_20_words: string + +} + +export interface ClassWithImage { + myImage: Image + param2: string + fake_image: FakeImage + +} + +export interface ClassWithoutDone { + i_16_digits: number + s_20_words: string + +} + +export interface ComplexMemoryObject { + id: string + name: string + description: string + metadata: (string | number | number)[] + +} + +export interface CompoundBigNumbers { + big: BigNumbers + big_nums: BigNumbers[] + another: BigNumbers + +} + +export interface ContactInfo { + primary: PhoneNumber | EmailAddress + secondary?: PhoneNumber | EmailAddress | null + +} + +export interface CustomTaskResult { + bookOrder?: BookOrder | null | null + flightConfirmation?: FlightConfirmation | null | null + groceryReceipt?: GroceryReceipt | null | null + +} + +export interface DummyOutput { + nonce: string + nonce2: string + + [key: string]: any; +} + +export interface DynInputOutput { + testKey: string + + [key: string]: any; +} + +export interface DynamicClassOne { + + [key: string]: any; +} + +export interface DynamicClassTwo { + hi: string + some_class: SomeClassNestedDynamic + status: (string | DynEnumOne) + + [key: string]: any; +} + +export interface DynamicOutput { + + [key: string]: any; +} + +export interface Earthling { + age: Checked + +} + +export interface Education { + institution: string + location: string + degree: string + major: string[] + graduation_date?: string | null + +} + +export interface Email { + subject: string + body: string + from_address: string + +} + +export interface EmailAddress { + value: string + +} + +export interface Event { + title: string + date: string + location: string + description: string + +} + +export interface FakeImage { + url: string + +} + +export interface FlightConfirmation { + confirmationNumber: string + flightNumber: string + departureTime: string + arrivalTime: string + seatNumber: string + +} + +export interface FooAny { + planetary_age: Martian | Earthling + certainty: Checked + species: Checked + +} + +export interface Forest { + trees: Tree[] + +} + +export interface FormatterTest0 { + lorem: string + ipsum: string + +} + +export interface FormatterTest1 { + lorem: string + ipsum: string + +} + +export interface FormatterTest2 { + lorem: string + ipsum: string + +} + +export interface FormatterTest3 { + lorem: string + ipsum: string + +} + +export interface GroceryReceipt { + receiptId: string + storeName: string + items: (string | number | number)[] + totalAmount: number + +} + +export interface InnerClass { + prop1: string + prop2: string + inner: InnerClass2 + +} + +export interface InnerClass2 { + prop2: number + prop3: number + +} + +export interface InputClass { + key: string + key2: string + +} + +export interface InputClassNested { + key: string + nested: InputClass + +} + +export interface LinkedList { + head?: Node | null + len: number + +} + +export interface LinkedListAliasNode { + value: number + next?: LinkedListAliasNode | null + +} + +export interface LiteralClassHello { + prop: "hello" + +} + +export interface LiteralClassOne { + prop: "one" + +} + +export interface LiteralClassTwo { + prop: "two" + +} + +export interface MalformedConstraints { + foo: Checked + +} + +export interface MalformedConstraints2 { + foo: number + +} + +/** + * A Martian organism with an age. + * Such a nice type. + */ +export interface Martian { + /** + * The age of the Martian in Mars years. + * So many Mars years. + */ + age: Checked + +} + +export interface MemoryObject { + id: string + name: string + description: string + +} + +export interface MergeAttrs { + amount: Checked + +} + +export interface NamedArgsSingleClass { + key: string + key_two: boolean + key_three: number + +} + +export interface Nested { + prop3?: string | null | null + prop4?: string | null | null + prop20: Nested2 + +} + +export interface Nested2 { + prop11?: string | null | null + prop12?: string | null | null + +} + +export interface NestedBlockConstraint { + nbc: Checked + +} + +export interface NestedBlockConstraintForParam { + nbcfp: BlockConstraintForParam + +} + +export interface Node { + data: number + next?: Node | null + +} + +export interface NodeWithAliasIndirection { + value: number + next?: NodeWithAliasIndirection | null + +} + +export interface OptionalListAndMap { + p?: string[] | null + q?: Record | null + +} + +export interface OptionalTest_Prop1 { + omega_a: string + omega_b: number + +} + +export interface OptionalTest_ReturnType { + omega_1?: OptionalTest_Prop1 | null + omega_2?: string | null + omega_3: (OptionalTest_CategoryType | null)[] + +} + +export interface OrderInfo { + order_status: OrderStatus + tracking_number?: string | null + estimated_arrival_date?: string | null + +} + +export interface OriginalA { + value: number + +} + +export interface OriginalB { + value: number + + [key: string]: any; +} + +export interface Person { + name?: string | null + hair_color?: (string | Color) | null + + [key: string]: any; +} + +export interface PhoneNumber { + value: string + +} + +export interface Quantity { + amount: number | number + unit?: string | null + +} + +export interface RaysData { + dataType: DataType + value: Resume | Event + +} + +export interface ReceiptInfo { + items: ReceiptItem[] + total_cost?: number | null + venue: "barisa" | "ox_burger" + +} + +export interface ReceiptItem { + name: string + description?: string | null + quantity: number + price: number + +} + +export interface Recipe { + ingredients: Record + recipe_type: "breakfast" | "dinner" + +} + +export interface RecursiveAliasDependency { + value: JsonValue + +} + +export interface Resume { + name: string + email: string + phone: string + experience: Education[] + education: string[] + skills: string[] + +} + +export interface Schema { + prop1?: string | null | null + prop2: Nested | string + prop5: (string | null | null)[] + prop6: string | Nested[] + nested_attrs: (string | null | null | Nested)[] + parens?: string | null | null + other_group: string | number | string + +} + +export interface SearchParams { + dateRange?: number | null + location: string[] + jobTitle?: WithReasoning | null + company?: WithReasoning | null + description: WithReasoning[] + tags: (Tag | string)[] + +} + +export interface SemanticContainer { + sixteen_digit_number: number + string_with_twenty_words: string + class_1: ClassWithoutDone + class_2: ClassWithBlockDone + class_done_needed: ClassWithBlockDone + class_needed: ClassWithoutDone + three_small_things: SmallThing[] + final_string: string + +} + +export interface SimpleTag { + field: string + +} + +export interface SmallThing { + i_16_digits: number + i_8_digits: number + +} + +export interface SomeClassNestedDynamic { + hi: string + + [key: string]: any; +} + +export interface StringToClassEntry { + word: string + +} + +export interface TestClassAlias { + key: string + key2: string + key3: string + key4: string + key5: string + +} + +export interface TestClassNested { + prop1: string + prop2: InnerClass + +} + +export interface TestClassWithEnum { + prop1: string + prop2: EnumInClass + +} + +export interface TestMemoryOutput { + items: (MemoryObject | ComplexMemoryObject | AnotherObject)[] + more_items: (MemoryObject | ComplexMemoryObject | AnotherObject)[] + +} + +export interface TestOutputClass { + prop1: string + prop2: number + +} + +export interface Tree { + data: number + children: Forest + +} + +export interface TwoStoriesOneTitle { + title: string + story_a: string + story_b: string + +} + +export interface UnionTest_ReturnType { + prop1: string | boolean + prop2: (number | boolean)[] + prop3: boolean[] | number[] + +} + +/** + * my docs + */ +export interface UniverseQuestion { + question: string + answer: string + +} + +export interface UniverseQuestionInput { + question: string + +} + +export interface WithReasoning { + value: string + reasoning: string + +} + +export type JsonArray = JsonValue[] + +export type JsonEntry = SimpleTag | JsonTemplate + +export type JsonObject = Record + +export type JsonTemplate = Record + +export type JsonValue = number | string | boolean | number | JsonObject | JsonArray + +export type RecAliasOne = RecAliasTwo + +export type RecAliasThree = RecAliasOne[] + +export type RecAliasTwo = RecAliasThree + +export type RecursiveListAlias = RecursiveListAlias[] + +export type RecursiveMapAlias = Record diff --git a/integ-tests/react/components.json b/integ-tests/react/components.json new file mode 100644 index 000000000..d710b4962 --- /dev/null +++ b/integ-tests/react/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/integ-tests/react/eslint.config.mjs b/integ-tests/react/eslint.config.mjs new file mode 100644 index 000000000..c85fb67c4 --- /dev/null +++ b/integ-tests/react/eslint.config.mjs @@ -0,0 +1,16 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), +]; + +export default eslintConfig; diff --git a/integ-tests/react/jest.config.js b/integ-tests/react/jest.config.js new file mode 100644 index 000000000..8290ed9e9 --- /dev/null +++ b/integ-tests/react/jest.config.js @@ -0,0 +1,12 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'jsdom', + roots: ['/tests'], + testMatch: ['**/*.test.ts', '**/*.test.tsx'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + setupFilesAfterEnv: ['/tests/test-setup.ts'], + testTimeout: 600000, + moduleNameMapper: { + '^@/(.*)$': '/$1', + }, +} diff --git a/integ-tests/react/next.config.ts b/integ-tests/react/next.config.ts new file mode 100644 index 000000000..2423e6e49 --- /dev/null +++ b/integ-tests/react/next.config.ts @@ -0,0 +1,6 @@ +import { withBaml } from '@boundaryml/baml-nextjs-plugin' +import type { NextConfig } from 'next' + +const nextConfig: NextConfig = {} + +export default withBaml()(nextConfig) diff --git a/integ-tests/react/package.json b/integ-tests/react/package.json new file mode 100644 index 000000000..8c0fc4efd --- /dev/null +++ b/integ-tests/react/package.json @@ -0,0 +1,73 @@ +{ + "name": "cli", + "version": "0.1.0", + "private": true, + "packageManager": "pnpm@9.12.0", + "scripts": { + "dev": "next dev", + "start": "next start", + "lint": "next lint", + "test": "jest", + "build:debug": "cd ../../engine/language_client_typescript && pnpm run build:debug && cd - && pnpm i", + "build": "cd ../../engine/language_client_typescript && npm run build && cd - && pnpm i", + "integ-tests:ci": "infisical run --env=test -- pnpm test -- --ci --silent false --testTimeout 30000 --verbose=false --reporters=jest-junit", + "integ-tests": "infisical run --env=test -- pnpm test -- --silent false --testTimeout 30000 --bail --reporters=default --reporters=jest-html-reporter --reporters=jest-summary-reporter", + "integ-tests:dotenv": "dotenv -e ../.env -- pnpm test -- --silent false --testTimeout 30000", + "generate": "baml-cli generate --from ../baml_src" + }, + "dependencies": { + "@boundaryml/baml": "workspace:*", + "@boundaryml/baml-darwin-arm64": "workspace:*", + "@boundaryml/baml-nextjs-plugin": "workspace:*", + "@radix-ui/react-dropdown-menu": "^2.1.4", + "@radix-ui/react-label": "^2.1.1", + "@radix-ui/react-progress": "^1.1.1", + "@radix-ui/react-separator": "^1.1.2", + "@radix-ui/react-slot": "^1.1.1", + "@radix-ui/react-switch": "^1.1.2", + "@radix-ui/react-select": "^2.1.6", + "@radix-ui/react-tabs": "^1.1.2", + "@radix-ui/react-toggle": "^1.1.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.471.1", + "next": "^15.1.4", + "next-themes": "^0.4.4", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "sonner": "^1.7.1", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7", + "zod": "3.24.1", + "zsa": "0.6.0", + "zsa-react": "0.2.3" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@swc/core": "^1.5.7", + "@swc/jest": "^0.2.36", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.2.0", + "@testing-library/react-hooks": "^8.0.1", + "@types/jest": "^29.5.12", + "@types/node": "^22.10.6", + "@types/react": "^19.0.6", + "@types/react-dom": "^19.0.3", + "dotenv": "^16.4.5", + "dotenv-cli": "^7.4.2", + "eslint": "^9", + "eslint-config-next": "^15.1.4", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-html-reporter": "^3.10.2", + "jest-junit": "^16.0.0", + "jest-summary-reporter": "^0.0.2", + "node-loader": "^2.1.0", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "ts-jest": "^29.1.2", + "ts-node": "^10.9.2", + "ts-node-dev": "^2.0.0", + "typescript": "^5" + } +} \ No newline at end of file diff --git a/integ-tests/react/pnpm-lock.yaml b/integ-tests/react/pnpm-lock.yaml new file mode 100644 index 000000000..c539240e7 --- /dev/null +++ b/integ-tests/react/pnpm-lock.yaml @@ -0,0 +1,9582 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@boundaryml/baml': + specifier: workspace:* + version: link:../../engine/language_client_typescript + '@boundaryml/baml-darwin-arm64': + specifier: workspace:* + version: link:../../engine/language_client_typescript/npm/darwin-arm64 + '@boundaryml/baml-nextjs-plugin': + specifier: workspace:* + version: link:../../typescript/nextjs-plugin + '@radix-ui/react-dropdown-menu': + specifier: ^2.1.4 + version: 2.1.6(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-label': + specifier: ^2.1.1 + version: 2.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-progress': + specifier: ^1.1.1 + version: 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-select': + specifier: ^2.1.6 + version: 2.1.6(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-separator': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': + specifier: ^1.1.1 + version: 1.1.2(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-switch': + specifier: ^1.1.2 + version: 1.1.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-tabs': + specifier: ^1.1.2 + version: 1.1.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-toggle': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + lucide-react: + specifier: ^0.471.1 + version: 0.471.2(react@19.0.0) + next: + specifier: ^15.1.4 + version: 15.1.6(@babel/core@7.26.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next-themes: + specifier: ^0.4.4 + version: 0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: + specifier: ^19.0.0 + version: 19.0.0 + react-dom: + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) + sonner: + specifier: ^1.7.1 + version: 1.7.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + tailwind-merge: + specifier: ^2.6.0 + version: 2.6.0 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3))) + zod: + specifier: 3.24.1 + version: 3.24.1 + zsa: + specifier: 0.6.0 + version: 0.6.0(zod@3.24.1) + zsa-react: + specifier: 0.2.3 + version: 0.2.3(react@19.0.0)(zod@3.24.1) + devDependencies: + '@eslint/eslintrc': + specifier: ^3 + version: 3.2.0 + '@swc/core': + specifier: ^1.5.7 + version: 1.10.14(@swc/helpers@0.5.15) + '@swc/jest': + specifier: ^0.2.36 + version: 0.2.37(@swc/core@1.10.14(@swc/helpers@0.5.15)) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.2.0 + version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@testing-library/react-hooks': + specifier: ^8.0.1 + version: 8.0.1(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@types/jest': + specifier: ^29.5.12 + version: 29.5.14 + '@types/node': + specifier: ^22.10.6 + version: 22.13.1 + '@types/react': + specifier: ^19.0.6 + version: 19.0.8 + '@types/react-dom': + specifier: ^19.0.3 + version: 19.0.3(@types/react@19.0.8) + dotenv: + specifier: ^16.4.5 + version: 16.4.7 + dotenv-cli: + specifier: ^7.4.2 + version: 7.4.4 + eslint: + specifier: ^9 + version: 9.19.0(jiti@1.21.7) + eslint-config-next: + specifier: ^15.1.4 + version: 15.1.6(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + jest-environment-jsdom: + specifier: ^29.7.0 + version: 29.7.0 + jest-html-reporter: + specifier: ^3.10.2 + version: 3.10.2(jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)))(typescript@5.7.3) + jest-junit: + specifier: ^16.0.0 + version: 16.0.0 + jest-summary-reporter: + specifier: ^0.0.2 + version: 0.0.2 + node-loader: + specifier: ^2.1.0 + version: 2.1.0(webpack@5.97.1(@swc/core@1.10.14(@swc/helpers@0.5.15))) + postcss: + specifier: ^8 + version: 8.5.1 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.17(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + ts-jest: + specifier: ^29.1.2 + version: 29.2.5(@babel/core@7.26.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.7))(jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)))(typescript@5.7.3) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3) + ts-node-dev: + specifier: ^2.0.0 + version: 2.0.0(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3) + typescript: + specifier: ^5 + version: 5.7.3 + + ../../engine/language_client_typescript: + dependencies: + '@scarf/scarf': + specifier: ^1.3.0 + version: 1.4.0 + devDependencies: + '@biomejs/biome': + specifier: ^1.7.3 + version: 1.9.4 + '@napi-rs/cli': + specifier: 3.0.0-alpha.62 + version: 3.0.0-alpha.62(@emnapi/runtime@1.3.1) + '@types/node': + specifier: ^20.12.11 + version: 20.17.17 + npm-run-all2: + specifier: ^6.1.2 + version: 6.2.6 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@20.17.17)(typescript@5.7.3) + typescript: + specifier: ^5.4.5 + version: 5.7.3 + + ../../engine/language_client_typescript/npm/darwin-arm64: {} + + ../../engine/language_client_typescript/npm/darwin-x64: {} + + ../../engine/language_client_typescript/npm/linux-arm64-musl: {} + + ../../engine/language_client_typescript/npm/linux-x64-gnu: {} + + ../../engine/language_client_typescript/npm/linux-x64-musl: {} + + ../../engine/language_client_typescript/npm/win32-x64-msvc: {} + + ../../typescript/nextjs-plugin: + dependencies: + react: + specifier: '*' + version: 19.0.0 + devDependencies: + '@biomejs/biome': + specifier: ^1.9.4 + version: 1.9.4 + '@types/jest': + specifier: ^29.5.14 + version: 29.5.14 + '@types/node': + specifier: ^22.10.6 + version: 22.13.1 + '@types/react': + specifier: ^19.0.6 + version: 19.0.8 + '@types/webpack': + specifier: ^5.28.5 + version: 5.28.5(@swc/core@1.10.14(@swc/helpers@0.5.15)) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + next: + specifier: ^15.1.4 + version: 15.1.6(@babel/core@7.26.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + typescript: + specifier: ^5.7.3 + version: 5.7.3 + webpack: + specifier: ^5.97.1 + version: 5.97.1(@swc/core@1.10.14(@swc/helpers@0.5.15)) + +packages: + + '@adobe/css-tools@4.4.1': + resolution: {integrity: sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==} + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.5': + resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.7': + resolution: {integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.5': + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.7': + resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.7': + resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.26.7': + resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.7': + resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.7': + resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@biomejs/biome@1.9.4': + resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.9.4': + resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.9.4': + resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.9.4': + resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.9.4': + resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.9.4': + resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.9.4': + resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.9.4': + resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.9.4': + resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@emnapi/core@1.3.1': + resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} + + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.19.0': + resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@inquirer/checkbox@2.5.0': + resolution: {integrity: sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==} + engines: {node: '>=18'} + + '@inquirer/confirm@3.2.0': + resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} + engines: {node: '>=18'} + + '@inquirer/core@9.2.1': + resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} + engines: {node: '>=18'} + + '@inquirer/editor@2.2.0': + resolution: {integrity: sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==} + engines: {node: '>=18'} + + '@inquirer/expand@2.3.0': + resolution: {integrity: sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==} + engines: {node: '>=18'} + + '@inquirer/figures@1.0.10': + resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} + engines: {node: '>=18'} + + '@inquirer/input@2.3.0': + resolution: {integrity: sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==} + engines: {node: '>=18'} + + '@inquirer/number@1.1.0': + resolution: {integrity: sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==} + engines: {node: '>=18'} + + '@inquirer/password@2.2.0': + resolution: {integrity: sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==} + engines: {node: '>=18'} + + '@inquirer/prompts@5.5.0': + resolution: {integrity: sha512-BHDeL0catgHdcHbSFFUddNzvx/imzJMft+tWDPwTm3hfu8/tApk1HrooNngB2Mb4qY+KaRWF+iZqoVUPeslEog==} + engines: {node: '>=18'} + + '@inquirer/rawlist@2.3.0': + resolution: {integrity: sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==} + engines: {node: '>=18'} + + '@inquirer/search@1.1.0': + resolution: {integrity: sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==} + engines: {node: '>=18'} + + '@inquirer/select@2.5.0': + resolution: {integrity: sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==} + engines: {node: '>=18'} + + '@inquirer/type@1.5.5': + resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} + engines: {node: '>=18'} + + '@inquirer/type@2.0.0': + resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} + engines: {node: '>=18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/create-cache-key-function@29.7.0': + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@napi-rs/cli@3.0.0-alpha.62': + resolution: {integrity: sha512-IDUwHAEJZ9ad/s5oyhznrz5ZDcU+SJ6GdP5nb++Wx5MkS4FD9MeS3HfNZdsxkf10pOUPnmvCVFuG4xnLBQYmjw==} + engines: {node: '>= 16'} + hasBin: true + peerDependencies: + '@emnapi/runtime': ^1.1.0 + emnapi: ^1.1.0 + peerDependenciesMeta: + '@emnapi/runtime': + optional: true + emnapi: + optional: true + + '@napi-rs/cross-toolchain@0.0.16': + resolution: {integrity: sha512-jwdjHT5L0m9MH0CmzDwPp0ckn/UO7afHCsPeo7NugHUvYgvlgS7SWhdMVgIgJW2HHqhcW/2nhaLLGpAU1c7QRQ==} + peerDependencies: + '@napi-rs/cross-toolchain-arm64-target-aarch64': ^0.0.16 + '@napi-rs/cross-toolchain-arm64-target-armv7': ^0.0.16 + '@napi-rs/cross-toolchain-arm64-target-x86_64': ^0.0.16 + '@napi-rs/cross-toolchain-x64-target-aarch64': ^0.0.16 + '@napi-rs/cross-toolchain-x64-target-armv7': ^0.0.16 + '@napi-rs/cross-toolchain-x64-target-x86_64': ^0.0.16 + peerDependenciesMeta: + '@napi-rs/cross-toolchain-arm64-target-aarch64': + optional: true + '@napi-rs/cross-toolchain-arm64-target-armv7': + optional: true + '@napi-rs/cross-toolchain-arm64-target-x86_64': + optional: true + '@napi-rs/cross-toolchain-x64-target-aarch64': + optional: true + '@napi-rs/cross-toolchain-x64-target-armv7': + optional: true + '@napi-rs/cross-toolchain-x64-target-x86_64': + optional: true + + '@napi-rs/lzma-android-arm-eabi@1.4.1': + resolution: {integrity: sha512-yenreSpZ9IrqppJOiWDqWMmja7XtSgio9LhtxYwgdILmy/OJTe/mlTYv+FhJBf7hIV9Razu5eBuEa3zKri81IA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/lzma-android-arm64@1.4.1': + resolution: {integrity: sha512-piutVBz5B1TNxXeEjub0n/IKI6dMaXPPRbVSXuc4gnZgzcihNDUh68vcLZgYd+IMiACZvBxvx2O3t5nthtph3A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/lzma-darwin-arm64@1.4.1': + resolution: {integrity: sha512-sDfOhQQFqV8lGbpgJN9DqNLBPR7QOfYjcWUv8FOGPaVP1LPJDnrc5uCpRWWEa2zIKmTiO8P9xzIl0TDzrYmghg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/lzma-darwin-x64@1.4.1': + resolution: {integrity: sha512-S5/RbC6EP4QkYy2xhxbfm48ZD9FkysfpWY4Slve0nj5RGGsHvcJBg2Pi69jrTPB/zLKz2SUa0i+RfUt9zvZNaw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/lzma-freebsd-x64@1.4.1': + resolution: {integrity: sha512-4AFnq6aZnclwameSBkDWu5Ftb8y4GwvVXeQXJKbN7hf7O5GG/8QpQB1R1NJw2QORUhpKwjAQUpbkTyhL2GFWWw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/lzma-linux-arm-gnueabihf@1.4.1': + resolution: {integrity: sha512-j5rL1YRIm6rWmmGAvN6DPX6QuRjvFGB93xJ7DTRB47GXW4zHekXae6ivowjJ95vT4Iz4hSWkZbuwAy95eFrWRA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/lzma-linux-arm64-gnu@1.4.1': + resolution: {integrity: sha512-1XdFGKyTS9m+VrRQYs9uz+ToHf4Jwm0ejHU48k9lT9MPl8jSqzKdVtFzZBPzronHteSynBfKmUq0+HeWmjrsOQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/lzma-linux-arm64-musl@1.4.1': + resolution: {integrity: sha512-9d09tYS0/rBwIk1QTcO2hMZEB/ZpsG2+uFW5am1RHElSWMclObirB1An7b6AMDJcRvcomkOg2GZ9COzrvHKwEA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/lzma-linux-ppc64-gnu@1.4.1': + resolution: {integrity: sha512-UzEkmsgoJ3IOGIRb6kBzNiw+ThUpiighop7dVYfSqlF5juGzwf7YewC57RGn4FoJCvadOCrSm5VikAcgrwVgAw==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + + '@napi-rs/lzma-linux-riscv64-gnu@1.4.1': + resolution: {integrity: sha512-9dUKlZ1PdwxTaFF+j3oc+xjlk9nqFwo1NWWOH30uwjl4Rm5Gkv+Fx0pHrzu4kR/iVA+oyQqa9/2uDYnGSTijBA==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@napi-rs/lzma-linux-s390x-gnu@1.4.1': + resolution: {integrity: sha512-MOVXUWJSLLCJDCCAlGa39sh7nv9XjvXzCf7QJus7rD8Ciz0mpXNXF9mg0ji7/MZ7pZlKPlXjXDnpVCfFdSEaFQ==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + + '@napi-rs/lzma-linux-x64-gnu@1.4.1': + resolution: {integrity: sha512-Sxu7aJxU1sDbUTqjqLVDV3DCOAlbsFKvmuCN/S5uXBJd1IF2wJ9jK3NbFzfqTAo5Hudx8Y7kOb6+3K+fYPI1KQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/lzma-linux-x64-musl@1.4.1': + resolution: {integrity: sha512-4I3BeKBQJSE5gF2/VTEv7wCLLjhapeutbCGpZPmDiLHZ74rm9edmNXAlKpdjADQ4YDLJ2GIBzttvwLXkJ9U+cw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/lzma-wasm32-wasi@1.4.1': + resolution: {integrity: sha512-s32HdKqQWbohf6DGWpG9YMODaBdbKJ++JpNr6Ii7821sKf4h/o+p8IRFTOaWdmdJdllEWlRirnd5crA29VivJQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@napi-rs/lzma-win32-arm64-msvc@1.4.1': + resolution: {integrity: sha512-ISz+v7ML5mKnjEZ7Kk4Z1BIn411r/fz3tDy9j5yDnwQI0MgTsUQFrIQElGUpULWYs2aYc6EZ9PhECbLBfSjh7A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/lzma-win32-ia32-msvc@1.4.1': + resolution: {integrity: sha512-3WKuCpZBrd7Jrw+h1jSu5XAsRWepMJu0sYuRoA4Y4Cwfu9gI7p5Z5Bc510nfjg7M7xvdpkI4UoW2WY7kBFRYrQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/lzma-win32-x64-msvc@1.4.1': + resolution: {integrity: sha512-0ixRo5z1zFXdh62hlrTV+QCTKHK0te5NHKaExOluhtcc6AdpMmpslvM9JhUxNHI+zM46w/DmmcvcOtqsaTmHgg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/lzma@1.4.1': + resolution: {integrity: sha512-5f8K9NHjwHjZKGm3SS+7CFxXQhz8rbg2umBm/9g0xQRXBdYEI31N5z1ACuk9bmBQOusXAq9CArGfs/ZQso2rUA==} + engines: {node: '>= 10'} + + '@napi-rs/tar-android-arm-eabi@0.1.4': + resolution: {integrity: sha512-LMSysWp5AmZj1NOCB2jshc9KCvp4gm7vm0Cra5U2crMvlj/fwGrvv6+EzSw49y8wCkNEcQ8QaGq5NBQKiLogSg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/tar-android-arm64@0.1.4': + resolution: {integrity: sha512-A/2rl8xr7F5yOtHVARROoSwjRRDNL1RlXCsg/K+RE5/V9iPBojsJsLpFPilp7InF6bi+z7aYn+yWCD6wSwfF4A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/tar-darwin-arm64@0.1.4': + resolution: {integrity: sha512-mnGBswBRtxDqUwXUZx+f9Uuy2uPssxuvcWFTYgUSZqlS2pg/XIWZdHZhbqWqKGpjpZrYcr+42roytbWlZ+epMA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/tar-darwin-x64@0.1.4': + resolution: {integrity: sha512-I81Fvl/cfnFVBET49xywNd57dXLJPO7jqrjD9Z2bKeXA0v0Zt1cwV1IOOTihFZXJv7kgu6EfNB7oumoLOTqq5A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/tar-freebsd-x64@0.1.4': + resolution: {integrity: sha512-p5OFr3MqidZHkt9bHV2FgeS6k06g+s0GR2kvj/wm2mIxr7u3/sj3+RTr7GHz5DQq08T7uH85HhsrGYWN3vxmSg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/tar-linux-arm-gnueabihf@0.1.4': + resolution: {integrity: sha512-POp2zb/Yuw6taEmrTlEoQI5S+2HmgfV1VtqGQZgRmCa85NlWLDsR6vbW9euu/6NbLj3ld15cCeJC2oJkv9k/xg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/tar-linux-arm64-gnu@0.1.4': + resolution: {integrity: sha512-TV+2AppSgJx5U9nk1C9bh1afWcBVnnANJ4SmtqUF6ediHcDS2rLebeI8BGljfnX9F149qbT9gOGN+R8tofpCsg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/tar-linux-arm64-musl@0.1.4': + resolution: {integrity: sha512-UFBvKpYmuQRbgmXuSSPb8mRjq4JRZLYJhqwrWWnlfQP13xK2WB7mL2GhewBgynSH4YKDm6biKhK6U5RrSWEDgw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/tar-linux-ppc64-gnu@0.1.4': + resolution: {integrity: sha512-HT+h6Wv51SKXqks8UBF+KVuNJ09fM1GyO+SvCnDB5MF66tGiI2C6/MSX69zf1ZeqjACds1K/UwKiZCmE76/j9A==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + + '@napi-rs/tar-linux-s390x-gnu@0.1.4': + resolution: {integrity: sha512-SJ+HSr281Y6cgJrQ4nkYbXaTHAmTLv/FZm5k9ZRA6Khml//ZoWi7CiT8dnPeD4QxYwCzAFA4aYMUOQJM/mk2/w==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + + '@napi-rs/tar-linux-x64-gnu@0.1.4': + resolution: {integrity: sha512-LrF0lRFiFOkO40jfgTdF8dRTvYOLV52fdZ/YnJuBodNcxqEl9rChO3v5Uag//sy0me85FjqtobQNRQP8Nd80dA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/tar-linux-x64-musl@0.1.4': + resolution: {integrity: sha512-etGUWbs+Tk1PtzgyWrVzXa2fQrHNKSc/whHm+4x1Num8Oz+wGdjCDTUktYxAVy33PKZhdblVxxE83QXxkgjneQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/tar-wasm32-wasi@0.1.4': + resolution: {integrity: sha512-mANkm93AKy+OspkOBAC5WI64SopXT0VawdTjpeGW1OgyUSJWdUB5rhs3I7B/HW1bi5tsUoZOZQe3rVgYdfzA6g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@napi-rs/tar-win32-arm64-msvc@0.1.4': + resolution: {integrity: sha512-/5/gp6WR9b36CysJDe8AdyjNeje+NqCniYJz/AZc+UvpKwG8MG9nS6TMpJ9IgrQacJXvc4lWXxYyn6uuPQVvaQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/tar-win32-ia32-msvc@0.1.4': + resolution: {integrity: sha512-HnQi0op9BqJqPekKXhEAI1TWkLtavxKDBDGXNhUSm2//jriMeRykahUcKoUUxr1UGrmtxpc5dx0cThBt13paEw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/tar-win32-x64-msvc@0.1.4': + resolution: {integrity: sha512-vy2ebEXerblni6XOgi3a27+CnI6PdQ9Phy/ru5HM4bVd/oulAJohmynAmBAB1AmXg1NLbAEWu43nATEDp5O2hA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/tar@0.1.4': + resolution: {integrity: sha512-hDsvmMZY8tl2CcLfjnTeE1o5W1eGTSL+ZIX8YEybtcJwA+Cc8SNHb7l6JqMnGcjOrWBZbHt8tzTN+W7qHS5Wmg==} + engines: {node: '>= 10'} + + '@napi-rs/wasm-runtime@0.2.6': + resolution: {integrity: sha512-z8YVS3XszxFTO73iwvFDNpQIzdMmSDTP/mB3E/ucR37V3Sx57hSExcXyMoNwaucWxnsWf4xfbZv0iZ30jr0M4Q==} + + '@napi-rs/wasm-tools-android-arm-eabi@0.0.2': + resolution: {integrity: sha512-/b+UU3suXjW4P0DzHRNdrnebQtFKcQf/YMeZJH+xUlKgvwli5kbmWjx8Wqqz0VETVkUTuPqJMBDIVLyc+14FGw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/wasm-tools-android-arm64@0.0.2': + resolution: {integrity: sha512-j57GbDflwJdZtT8pZj5fOV4JAP+LdKN+wzsUYs+QRUoBqpWbbUANudolqfw63bkS9sD4z7fbCuz8iwtJqzxTVA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/wasm-tools-darwin-arm64@0.0.2': + resolution: {integrity: sha512-P2ChgWgVuv9GwmbxN89R84KzIImoTqXINteEixUvmkdnhyFiR+I8deNs89Yed+5w8QLC6MEfrtRqLP9YI+NoQA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/wasm-tools-darwin-x64@0.0.2': + resolution: {integrity: sha512-T/kQQ0gt8+wau1Z821PKVAD76QhmwVoLs2CT7Z9tTBs2pJvwSCP0C/kQiQAHcJIMi7A2E9Ab/Mez0BERy50EFA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/wasm-tools-freebsd-x64@0.0.2': + resolution: {integrity: sha512-GnnHu+r5sfzuxC/1J5UMF/h3BOZnHb3NQZ5hmbCfZYCKzpzRxrAJhzRunlbRN+v0x8M/49dztVTYR3s7K4ooAw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/wasm-tools-linux-arm64-gnu@0.0.2': + resolution: {integrity: sha512-KnZdLT0OnKb1CG2kdt3/WvM43vr9i+FEwXCvSOVC/6Tsifz7ynhMg7LAVESILd03HubzQJfg9nbRsk0bQ+IOwg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/wasm-tools-linux-arm64-musl@0.0.2': + resolution: {integrity: sha512-HkpZOID2U8P6pWqK3mqZ8bxU5xcuT3iA2fO+jrxn78h006iYgfNmdc5JaVhHnHazMmk32xKhSV4iV0VUh8UWDg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/wasm-tools-linux-x64-gnu@0.0.2': + resolution: {integrity: sha512-YksJWBCyOalB9ogtP9+/dZKP+vR6+h7BmzMXaXMT71WW/GvIsifMVgv+DY/FRSNJQupp5Y+ugjqVAOUOc/G65g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/wasm-tools-linux-x64-musl@0.0.2': + resolution: {integrity: sha512-sPtRxPMdw05KdTcxgSPMmSXG2+PiK3vJ/l2+g9hvjnnKtvslJN2Hr7j8zgzuoKRAUFPaJVe6+D2xVh5cpdqhww==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/wasm-tools-wasm32-wasi@0.0.2': + resolution: {integrity: sha512-muRvZK7AIuo88G2AxYx3gA59rHMQgoN004saQkBvXnz3K/DVHKfTZ6TtUebss8zI3dURU6xExL8drxFWYxjEbQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@napi-rs/wasm-tools-win32-arm64-msvc@0.0.2': + resolution: {integrity: sha512-Cn13WQ+tpFqdVwx0DIWKbsI9auFyzVZV4F5UNOUeDt6GgOL+NndgJul0Pc9bSU6fi03AylMPfF/nTCaDWO2Wgw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/wasm-tools-win32-ia32-msvc@0.0.2': + resolution: {integrity: sha512-xsg5DkIQi82a8rcx6246Y3XC8TIqHamY+/C6sIlPLaZEuHctDkMECAw0AANwRf5vN//D2oo2oljOuoYtB1GOKw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/wasm-tools-win32-x64-msvc@0.0.2': + resolution: {integrity: sha512-yHigltEt33eq8bappvKsIliz4MxfMPn1M+NWbIFRWN+IS1Z57mhmc1osuk+IRXrSlq0Tom0R6MYN1jpkZKz81Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/wasm-tools@0.0.2': + resolution: {integrity: sha512-kBvDQCP5BLw2TxTENXLp3Of7vVEx0uyIye824JHE4dduzzOHVgSoOFVhVqAT3Fx/hLV445RVWfEqQbXMg4w/Mw==} + engines: {node: '>= 10'} + + '@next/env@15.1.6': + resolution: {integrity: sha512-d9AFQVPEYNr+aqokIiPLNK/MTyt3DWa/dpKveiAaVccUadFbhFEvY6FXYX2LJO2Hv7PHnLBu2oWwB4uBuHjr/w==} + + '@next/eslint-plugin-next@15.1.6': + resolution: {integrity: sha512-+slMxhTgILUntZDGNgsKEYHUvpn72WP1YTlkmEhS51vnVd7S9jEEy0n9YAMcI21vUG4akTw9voWH02lrClt/yw==} + + '@next/swc-darwin-arm64@15.1.6': + resolution: {integrity: sha512-u7lg4Mpl9qWpKgy6NzEkz/w0/keEHtOybmIl0ykgItBxEM5mYotS5PmqTpo+Rhg8FiOiWgwr8USxmKQkqLBCrw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.1.6': + resolution: {integrity: sha512-x1jGpbHbZoZ69nRuogGL2MYPLqohlhnT9OCU6E6QFewwup+z+M6r8oU47BTeJcWsF2sdBahp5cKiAcDbwwK/lg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.1.6': + resolution: {integrity: sha512-jar9sFw0XewXsBzPf9runGzoivajeWJUc/JkfbLTC4it9EhU8v7tCRLH7l5Y1ReTMN6zKJO0kKAGqDk8YSO2bg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@15.1.6': + resolution: {integrity: sha512-+n3u//bfsrIaZch4cgOJ3tXCTbSxz0s6brJtU3SzLOvkJlPQMJ+eHVRi6qM2kKKKLuMY+tcau8XD9CJ1OjeSQQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.1.6': + resolution: {integrity: sha512-SpuDEXixM3PycniL4iVCLyUyvcl6Lt0mtv3am08sucskpG0tYkW1KlRhTgj4LI5ehyxriVVcfdoxuuP8csi3kQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@15.1.6': + resolution: {integrity: sha512-L4druWmdFSZIIRhF+G60API5sFB7suTbDRhYWSjiw0RbE+15igQvE2g2+S973pMGvwN3guw7cJUjA/TmbPWTHQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@15.1.6': + resolution: {integrity: sha512-s8w6EeqNmi6gdvM19tqKKWbCyOBvXFbndkGHl+c9YrzsLARRdCHsD9S1fMj8gsXm9v8vhC8s3N8rjuC/XrtkEg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.1.6': + resolution: {integrity: sha512-6xomMuu54FAFxttYr5PJbEfu96godcxBTRk1OhAvJq0/EnmFU/Ybiax30Snis4vdWZ9LGpf7Roy5fSs7v/5ROQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@octokit/auth-token@5.1.2': + resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} + engines: {node: '>= 18'} + + '@octokit/core@6.1.3': + resolution: {integrity: sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==} + engines: {node: '>= 18'} + + '@octokit/endpoint@10.1.2': + resolution: {integrity: sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==} + engines: {node: '>= 18'} + + '@octokit/graphql@8.2.0': + resolution: {integrity: sha512-gejfDywEml/45SqbWTWrhfwvLBrcGYhOn50sPOjIeVvH6i7D16/9xcFA8dAJNp2HMcd+g4vru41g4E2RBiZvfQ==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@23.0.1': + resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} + + '@octokit/plugin-paginate-rest@11.4.0': + resolution: {integrity: sha512-ttpGck5AYWkwMkMazNCZMqxKqIq1fJBNxBfsFwwfyYKTf914jKkLF0POMS3YkPBwp5g1c2Y4L79gDz01GhSr1g==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-request-log@5.3.1': + resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-rest-endpoint-methods@13.3.0': + resolution: {integrity: sha512-LUm44shlmkp/6VC+qQgHl3W5vzUP99ZM54zH6BuqkJK4DqfFLhegANd+fM4YRLapTvPm4049iG7F3haANKMYvQ==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/request-error@6.1.6': + resolution: {integrity: sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==} + engines: {node: '>= 18'} + + '@octokit/request@9.2.0': + resolution: {integrity: sha512-kXLfcxhC4ozCnAXy2ff+cSxpcF0A1UqxjvYMqNuPIeOAzJbVWQ+dy5G2fTylofB/gTbObT8O6JORab+5XtA1Kw==} + engines: {node: '>= 18'} + + '@octokit/rest@21.1.0': + resolution: {integrity: sha512-93iLxcKDJboUpmnUyeJ6cRIi7z7cqTZT1K7kRK4LobGxwTwpsa+2tQQbRQNGy7IFDEAmrtkf4F4wBj3D5rVlJQ==} + engines: {node: '>= 18'} + + '@octokit/types@13.8.0': + resolution: {integrity: sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@radix-ui/number@1.1.0': + resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} + + '@radix-ui/primitive@1.1.1': + resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} + + '@radix-ui/react-arrow@1.1.2': + resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.2': + resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.1': + resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.1': + resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-direction@1.1.0': + resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.5': + resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.1.6': + resolution: {integrity: sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.1': + resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.2': + resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.0': + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-label@2.1.2': + resolution: {integrity: sha512-zo1uGMTaNlHehDyFQcDZXRJhUPDuukcnHz0/jnrup0JA6qL+AFpAnty+7VKa9esuU5xTblAZzTGYJKSKaBxBhw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-menu@2.1.6': + resolution: {integrity: sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.2': + resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.4': + resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.2': + resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.0.2': + resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-progress@1.1.2': + resolution: {integrity: sha512-u1IgJFQ4zNAUTjGdDL5dcl/U8ntOR6jsnhxKb5RKp5Ozwl88xKR9EqRZOe/Mk8tnx0x5tNUe2F+MzsyjqMg0MA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.2': + resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-select@2.1.6': + resolution: {integrity: sha512-T6ajELxRvTuAMWH0YmRJ1qez+x4/7Nq7QIx7zJ0VK3qaEWdnWpNbEDnmWldG1zBDwqrLy5aLMUWcoGirVj5kMg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-separator@1.1.2': + resolution: {integrity: sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.1.2': + resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-switch@1.1.3': + resolution: {integrity: sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tabs@1.1.3': + resolution: {integrity: sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle@1.1.2': + resolution: {integrity: sha512-lntKchNWx3aCHuWKiDY+8WudiegQvBpDRAYL8dKLRvKEH8VOpl0XX6SSU/bUBqIRJbcTy4+MW06Wv8vgp10rzQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.0': + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.1.0': + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.0': + resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.0': + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.0': + resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.0': + resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.0': + resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.1.2': + resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.0': + resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.10.5': + resolution: {integrity: sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==} + + '@scarf/scarf@1.4.0': + resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@swc/core-darwin-arm64@1.10.14': + resolution: {integrity: sha512-Dh4VyrhDDb05tdRmqJ/MucOPMTnrB4pRJol18HVyLlqu1HOT5EzonUniNTCdQbUXjgdv5UVJSTE1lYTzrp+myA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.10.14': + resolution: {integrity: sha512-KpzotL/I0O12RE3tF8NmQErINv0cQe/0mnN/Q50ESFzB5kU6bLgp2HMnnwDTm/XEZZRJCNe0oc9WJ5rKbAJFRQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.10.14': + resolution: {integrity: sha512-20yRXZjMJVz1wp1TcscKiGTVXistG+saIaxOmxSNQia1Qun3hSWLL+u6+5kXbfYGr7R2N6kqSwtZbIfJI25r9Q==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.10.14': + resolution: {integrity: sha512-Gy7cGrNkiMfPxQyLGxdgXPwyWzNzbHuWycJFcoKBihxZKZIW8hkPBttkGivuLC+0qOgsV2/U+S7tlvAju7FtmQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.10.14': + resolution: {integrity: sha512-+oYVqJvFw62InZ8PIy1rBACJPC2WTe4vbVb9kM1jJj2D7dKLm9acnnYIVIDsM5Wo7Uab8RvPHXVbs19IBurzuw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.10.14': + resolution: {integrity: sha512-OmEbVEKQFLQVHwo4EJl9osmlulURy46k232Opfpn/1ji0t2KcNCci3POsnfMuoZjLkGJv8vGNJdPQxX+CP+wSA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.10.14': + resolution: {integrity: sha512-OZW+Icm8DMPqHbhdxplkuG8qrNnPk5i7xJOZWYi1y5bTjgGFI4nEzrsmmeHKMdQTaWwsFrm3uK1rlyQ48MmXmg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.10.14': + resolution: {integrity: sha512-sTvc+xrDQXy3HXZFtTEClY35Efvuc3D+busYm0+rb1+Thau4HLRY9WP+sOKeGwH9/16rzfzYEqD7Ds8A9ykrHw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.10.14': + resolution: {integrity: sha512-j2iQ4y9GWTKtES5eMU0sDsFdYni7IxME7ejFej25Tv3Fq4B+U9tgtYWlJwh1858nIWDXelHiKcSh/UICAyVMdQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.10.14': + resolution: {integrity: sha512-TYtWkUSMkjs0jGPeWdtWbex4B+DlQZmN/ySVLiPI+EltYCLEXsFMkVFq6aWn48dqFHggFK0UYfvDrJUR2c3Qxg==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.10.14': + resolution: {integrity: sha512-WSrnE6JRnH20ZYjOOgSS4aOaPv9gxlkI2KRkN24kagbZnPZMnN8bZZyzw1rrLvwgpuRGv17Uz+hflosbR+SP6w==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@swc/jest@0.2.37': + resolution: {integrity: sha512-CR2BHhmXKGxTiFr21DYPRHQunLkX3mNIFGFkxBGji6r9uyIR5zftTOVYj1e0sFNMV2H7mf/+vpaglqaryBtqfQ==} + engines: {npm: '>= 7.0.0'} + peerDependencies: + '@swc/core': '*' + + '@swc/types@0.1.17': + resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} + + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.6.3': + resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/react-hooks@8.0.1': + resolution: {integrity: sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==} + engines: {node: '>=12'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 + react: ^16.9.0 || ^17.0.0 + react-dom: ^16.9.0 || ^17.0.0 + react-test-renderer: ^16.9.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-dom: + optional: true + react-test-renderer: + optional: true + + '@testing-library/react@16.2.0': + resolution: {integrity: sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + + '@types/jsdom@20.0.1': + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mute-stream@0.0.4': + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + + '@types/node@20.17.17': + resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} + + '@types/node@22.13.1': + resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + + '@types/react-dom@19.0.3': + resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react@19.0.8': + resolution: {integrity: sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/strip-bom@3.0.0': + resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==} + + '@types/strip-json-comments@0.0.30': + resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/webpack@5.28.5': + resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} + + '@types/wrap-ansi@3.0.0': + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@typescript-eslint/eslint-plugin@8.23.0': + resolution: {integrity: sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.23.0': + resolution: {integrity: sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/scope-manager@8.23.0': + resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.23.0': + resolution: {integrity: sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/types@8.23.0': + resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.23.0': + resolution: {integrity: sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.23.0': + resolution: {integrity: sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/visitor-keys@8.23.0': + resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + + acorn-globals@7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.2: + resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001697: + resolution: {integrity: sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clipanion@3.2.1: + resolution: {integrity: sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA==} + peerDependencies: + typanion: '*' + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + + cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-urls@3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + dateformat@3.0.2: + resolution: {integrity: sha512-EelsCzH0gMC2YmXuMeaZ3c6md1sUJQxyb1XXc4xaisi/K6qKukqZhKPrEQyRkdNIncgYyLoDTReq0nNyuKerTg==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.5.0: + resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + domexception@4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead + + dotenv-cli@7.4.4: + resolution: {integrity: sha512-XkBYCG0tPIes+YZr4SpfFv76SQrV/LeCE8CI7JSEMi3VR9MvTihCGTOtbIexD6i2mXF+6px7trb1imVCXSNMDw==} + hasBin: true + + dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + dynamic-dedupe@0.3.0: + resolution: {integrity: sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.94: + resolution: {integrity: sha512-v+oaMuy6AgwZ6Hi2u5UgcM3wxzeFscBTsZBQL2FoDTx/T6k1XEQKz++8fe1VlQ3zjXB6hcvy5JPb5ZSkmVtdIQ==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-next@15.1.6: + resolution: {integrity: sha512-Wd1uy6y7nBbXUSg9QAuQ+xYEKli5CgUhLjz1QHW11jLDis5vK5XB3PemL6jEmy7HrdhaRFDz+GTZ/3FoH+EUjg==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.7.0: + resolution: {integrity: sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-react-hooks@5.1.0: + resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.19.0: + resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + for-each@0.3.4: + resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@10.2.2: + resolution: {integrity: sha512-tyao/4Vo36XnUItZ7DnUXX4f1jVao2mSrleV/5IPtW/XAEA26hRVsbc68nuTEKWcr5vMP/1mVoT2O7u8H4v1Vg==} + engines: {node: '>=18'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-bun-module@1.3.0: + resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-jsdom@29.7.0: + resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-html-reporter@3.10.2: + resolution: {integrity: sha512-XRBa5ylHPUQoo8aJXEEdKsTruieTdlPbRktMx9WG9evMTxzJEKGFMaw5x+sQxJuClWdNR72GGwbOaz+6HIlksA==} + engines: {node: '>=4.8.3'} + peerDependencies: + jest: 19.x - 29.x + typescript: ^3.7.x || ^4.3.x || ^5.x + + jest-junit@16.0.0: + resolution: {integrity: sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==} + engines: {node: '>=10.12.0'} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-summary-reporter@0.0.2: + resolution: {integrity: sha512-rZ3ThO57l+ZJCxF74cXIGQU3cV9I7bSBe1ElBp0taE3x2JghgD69bNCKt0LvpVQX5azTRHG7LmcjIpwriVnTng==} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsdom@20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lucide-react@0.471.2: + resolution: {integrity: sha512-A8fDycQxGeaSOTaI7Bm4fg8LBXO7Qr9ORAX47bDRvugCsjLIliugQO0PkKFoeAD57LIQwlWKd3NIQ3J7hYp84g==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + next-themes@0.4.4: + resolution: {integrity: sha512-LDQ2qIOJF0VnuVrrMSMLrWGjRMkq+0mpgl6e0juCLqdJ+oo8Q84JRWT6Wh11VDQKkMMe+dVzDKLWs5n87T+PkQ==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@15.1.6: + resolution: {integrity: sha512-Hch4wzbaX0vKQtalpXvUiw5sYivBy4cm5rzUKrBnUB/y436LGrvOUqYvlSeNVCWFO/770gDlltR9gqZH62ct4Q==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-loader@2.1.0: + resolution: {integrity: sha512-OwjPkyh8+7jW8DMd/iq71uU1Sspufr/C2+c3t0p08J3CrM9ApZ4U53xuisNrDXOHyGi5OYHgtfmmh+aK9zJA6g==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^5.0.0 + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-run-all2@6.2.6: + resolution: {integrity: sha512-tkyb4pc0Zb0oOswCb5tORPk9MvVL6gcDq1cMItQHmsbVk1skk7YF6cH+UU2GxeNLHMuk6wFEOSmEmJ2cnAK1jg==} + engines: {node: ^14.18.0 || ^16.13.0 || >=18.0.0, npm: '>= 8'} + hasBin: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nwsapi@2.2.16: + resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.1: + resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} + peerDependencies: + react: ^19.0.0 + + react-error-boundary@3.1.4: + resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + react: '>=16.13.1' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.6.3: + resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + sonner@1.7.4: + resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.11: + resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.38.1: + resolution: {integrity: sha512-GWANVlPM/ZfYzuPHjq0nxT+EbOEDDN3Jwhwdg1D8TU8oSkktp8w64Uq4auuGLxFSoNTRDncTq2hQHX1Ld9KHkA==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-jest@29.2.5: + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-node-dev@2.0.0: + resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} + engines: {node: '>=0.8.0'} + hasBin: true + peerDependencies: + node-notifier: '*' + typescript: '*' + peerDependenciesMeta: + node-notifier: + optional: true + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tsconfig@7.0.0: + resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typanion@3.14.0: + resolution: {integrity: sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + universal-user-agent@7.0.2: + resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + w3c-xmlserializer@4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + wasm-sjlj@1.0.6: + resolution: {integrity: sha512-pjaKtLJejlWm6+okPV2X1A6nIsRDD4qeK97eCh8DP8KXi3Nzn/HY01vpHhZHlhDri12eZqipjm8HhdTVw+ATxw==} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.97.1: + resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + + xmlbuilder@15.0.0: + resolution: {integrity: sha512-KLu/G0DoWhkncQ9eHSI6s0/w+T4TM7rQaLhtCaL6tORv8jFlJPlnGumsgTcGfYeS1qZ/IHqrvDG7zJZ4d7e+nw==} + engines: {node: '>=8.0'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + + zsa-react@0.2.3: + resolution: {integrity: sha512-THCoIIhtEU3jXTrNBM/PBc0PyHCekizSGEc+fg0LGo1NM1J02LFQN7ICR948X25IjtkZdvxUZmT0+M73GG8eEw==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + zod: ^3.23.5 + + zsa@0.6.0: + resolution: {integrity: sha512-Pq3X4T0dna5s4dIevYOJiRdM3DUHRvEHS2q1AH/bvkPSh640u+9veVj5zmzmbL0A6cpXMYagwKsR4keGOc0jPQ==} + peerDependencies: + zod: ^3.23.5 + +snapshots: + + '@adobe/css-tools@4.4.1': {} + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.5': {} + + '@babel/core@7.26.7': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helpers': 7.26.7 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.5': + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.7': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + + '@babel/parser@7.26.7': + dependencies: + '@babel/types': 7.26.7 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/runtime@7.26.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + + '@babel/traverse@7.26.7': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.7': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@biomejs/biome@1.9.4': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.4 + '@biomejs/cli-darwin-x64': 1.9.4 + '@biomejs/cli-linux-arm64': 1.9.4 + '@biomejs/cli-linux-arm64-musl': 1.9.4 + '@biomejs/cli-linux-x64': 1.9.4 + '@biomejs/cli-linux-x64-musl': 1.9.4 + '@biomejs/cli-win32-arm64': 1.9.4 + '@biomejs/cli-win32-x64': 1.9.4 + + '@biomejs/cli-darwin-arm64@1.9.4': + optional: true + + '@biomejs/cli-darwin-x64@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64@1.9.4': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-x64@1.9.4': + optional: true + + '@biomejs/cli-win32-arm64@1.9.4': + optional: true + + '@biomejs/cli-win32-x64@1.9.4': + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@emnapi/core@1.3.1': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.19.0(jiti@1.21.7))': + dependencies: + eslint: 9.19.0(jiti@1.21.7) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.2': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.19.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.5': + dependencies: + '@eslint/core': 0.10.0 + levn: 0.4.1 + + '@floating-ui/core@1.6.9': + dependencies: + '@floating-ui/utils': 0.2.9 + + '@floating-ui/dom@1.6.13': + dependencies: + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@floating-ui/dom': 1.6.13 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@floating-ui/utils@0.2.9': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + + '@inquirer/checkbox@2.5.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/confirm@3.2.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + + '@inquirer/core@9.2.1': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 2.0.0 + '@types/mute-stream': 0.0.4 + '@types/node': 22.13.1 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/editor@2.2.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + external-editor: 3.1.0 + + '@inquirer/expand@2.3.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.10': {} + + '@inquirer/input@2.3.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + + '@inquirer/number@1.1.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + + '@inquirer/password@2.2.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + + '@inquirer/prompts@5.5.0': + dependencies: + '@inquirer/checkbox': 2.5.0 + '@inquirer/confirm': 3.2.0 + '@inquirer/editor': 2.2.0 + '@inquirer/expand': 2.3.0 + '@inquirer/input': 2.3.0 + '@inquirer/number': 1.1.0 + '@inquirer/password': 2.2.0 + '@inquirer/rawlist': 2.3.0 + '@inquirer/search': 1.1.0 + '@inquirer/select': 2.5.0 + + '@inquirer/rawlist@2.3.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/search@1.1.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/select@2.5.0': + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.10 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/type@1.5.5': + dependencies: + mute-stream: 1.0.0 + + '@inquirer/type@2.0.0': + dependencies: + mute-stream: 1.0.0 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.1 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/create-cache-key-function@29.7.0': + dependencies: + '@jest/types': 29.6.3 + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.1 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.13.1 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.13.1 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.26.7 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.13.1 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@napi-rs/cli@3.0.0-alpha.62(@emnapi/runtime@1.3.1)': + dependencies: + '@napi-rs/cross-toolchain': 0.0.16 + '@napi-rs/wasm-tools': 0.0.2 + '@octokit/rest': 21.1.0 + clipanion: 3.2.1(typanion@3.14.0) + colorette: 2.0.20 + debug: 4.4.0 + inquirer: 10.2.2 + js-yaml: 4.1.0 + lodash-es: 4.17.21 + semver: 7.7.1 + toml: 3.0.0 + typanion: 3.14.0 + wasm-sjlj: 1.0.6 + optionalDependencies: + '@emnapi/runtime': 1.3.1 + transitivePeerDependencies: + - '@napi-rs/cross-toolchain-arm64-target-aarch64' + - '@napi-rs/cross-toolchain-arm64-target-armv7' + - '@napi-rs/cross-toolchain-arm64-target-x86_64' + - '@napi-rs/cross-toolchain-x64-target-aarch64' + - '@napi-rs/cross-toolchain-x64-target-armv7' + - '@napi-rs/cross-toolchain-x64-target-x86_64' + - supports-color + + '@napi-rs/cross-toolchain@0.0.16': + dependencies: + '@napi-rs/lzma': 1.4.1 + '@napi-rs/tar': 0.1.4 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + '@napi-rs/lzma-android-arm-eabi@1.4.1': + optional: true + + '@napi-rs/lzma-android-arm64@1.4.1': + optional: true + + '@napi-rs/lzma-darwin-arm64@1.4.1': + optional: true + + '@napi-rs/lzma-darwin-x64@1.4.1': + optional: true + + '@napi-rs/lzma-freebsd-x64@1.4.1': + optional: true + + '@napi-rs/lzma-linux-arm-gnueabihf@1.4.1': + optional: true + + '@napi-rs/lzma-linux-arm64-gnu@1.4.1': + optional: true + + '@napi-rs/lzma-linux-arm64-musl@1.4.1': + optional: true + + '@napi-rs/lzma-linux-ppc64-gnu@1.4.1': + optional: true + + '@napi-rs/lzma-linux-riscv64-gnu@1.4.1': + optional: true + + '@napi-rs/lzma-linux-s390x-gnu@1.4.1': + optional: true + + '@napi-rs/lzma-linux-x64-gnu@1.4.1': + optional: true + + '@napi-rs/lzma-linux-x64-musl@1.4.1': + optional: true + + '@napi-rs/lzma-wasm32-wasi@1.4.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.6 + optional: true + + '@napi-rs/lzma-win32-arm64-msvc@1.4.1': + optional: true + + '@napi-rs/lzma-win32-ia32-msvc@1.4.1': + optional: true + + '@napi-rs/lzma-win32-x64-msvc@1.4.1': + optional: true + + '@napi-rs/lzma@1.4.1': + optionalDependencies: + '@napi-rs/lzma-android-arm-eabi': 1.4.1 + '@napi-rs/lzma-android-arm64': 1.4.1 + '@napi-rs/lzma-darwin-arm64': 1.4.1 + '@napi-rs/lzma-darwin-x64': 1.4.1 + '@napi-rs/lzma-freebsd-x64': 1.4.1 + '@napi-rs/lzma-linux-arm-gnueabihf': 1.4.1 + '@napi-rs/lzma-linux-arm64-gnu': 1.4.1 + '@napi-rs/lzma-linux-arm64-musl': 1.4.1 + '@napi-rs/lzma-linux-ppc64-gnu': 1.4.1 + '@napi-rs/lzma-linux-riscv64-gnu': 1.4.1 + '@napi-rs/lzma-linux-s390x-gnu': 1.4.1 + '@napi-rs/lzma-linux-x64-gnu': 1.4.1 + '@napi-rs/lzma-linux-x64-musl': 1.4.1 + '@napi-rs/lzma-wasm32-wasi': 1.4.1 + '@napi-rs/lzma-win32-arm64-msvc': 1.4.1 + '@napi-rs/lzma-win32-ia32-msvc': 1.4.1 + '@napi-rs/lzma-win32-x64-msvc': 1.4.1 + + '@napi-rs/tar-android-arm-eabi@0.1.4': + optional: true + + '@napi-rs/tar-android-arm64@0.1.4': + optional: true + + '@napi-rs/tar-darwin-arm64@0.1.4': + optional: true + + '@napi-rs/tar-darwin-x64@0.1.4': + optional: true + + '@napi-rs/tar-freebsd-x64@0.1.4': + optional: true + + '@napi-rs/tar-linux-arm-gnueabihf@0.1.4': + optional: true + + '@napi-rs/tar-linux-arm64-gnu@0.1.4': + optional: true + + '@napi-rs/tar-linux-arm64-musl@0.1.4': + optional: true + + '@napi-rs/tar-linux-ppc64-gnu@0.1.4': + optional: true + + '@napi-rs/tar-linux-s390x-gnu@0.1.4': + optional: true + + '@napi-rs/tar-linux-x64-gnu@0.1.4': + optional: true + + '@napi-rs/tar-linux-x64-musl@0.1.4': + optional: true + + '@napi-rs/tar-wasm32-wasi@0.1.4': + dependencies: + '@napi-rs/wasm-runtime': 0.2.6 + optional: true + + '@napi-rs/tar-win32-arm64-msvc@0.1.4': + optional: true + + '@napi-rs/tar-win32-ia32-msvc@0.1.4': + optional: true + + '@napi-rs/tar-win32-x64-msvc@0.1.4': + optional: true + + '@napi-rs/tar@0.1.4': + optionalDependencies: + '@napi-rs/tar-android-arm-eabi': 0.1.4 + '@napi-rs/tar-android-arm64': 0.1.4 + '@napi-rs/tar-darwin-arm64': 0.1.4 + '@napi-rs/tar-darwin-x64': 0.1.4 + '@napi-rs/tar-freebsd-x64': 0.1.4 + '@napi-rs/tar-linux-arm-gnueabihf': 0.1.4 + '@napi-rs/tar-linux-arm64-gnu': 0.1.4 + '@napi-rs/tar-linux-arm64-musl': 0.1.4 + '@napi-rs/tar-linux-ppc64-gnu': 0.1.4 + '@napi-rs/tar-linux-s390x-gnu': 0.1.4 + '@napi-rs/tar-linux-x64-gnu': 0.1.4 + '@napi-rs/tar-linux-x64-musl': 0.1.4 + '@napi-rs/tar-wasm32-wasi': 0.1.4 + '@napi-rs/tar-win32-arm64-msvc': 0.1.4 + '@napi-rs/tar-win32-ia32-msvc': 0.1.4 + '@napi-rs/tar-win32-x64-msvc': 0.1.4 + + '@napi-rs/wasm-runtime@0.2.6': + dependencies: + '@emnapi/core': 1.3.1 + '@emnapi/runtime': 1.3.1 + '@tybys/wasm-util': 0.9.0 + optional: true + + '@napi-rs/wasm-tools-android-arm-eabi@0.0.2': + optional: true + + '@napi-rs/wasm-tools-android-arm64@0.0.2': + optional: true + + '@napi-rs/wasm-tools-darwin-arm64@0.0.2': + optional: true + + '@napi-rs/wasm-tools-darwin-x64@0.0.2': + optional: true + + '@napi-rs/wasm-tools-freebsd-x64@0.0.2': + optional: true + + '@napi-rs/wasm-tools-linux-arm64-gnu@0.0.2': + optional: true + + '@napi-rs/wasm-tools-linux-arm64-musl@0.0.2': + optional: true + + '@napi-rs/wasm-tools-linux-x64-gnu@0.0.2': + optional: true + + '@napi-rs/wasm-tools-linux-x64-musl@0.0.2': + optional: true + + '@napi-rs/wasm-tools-wasm32-wasi@0.0.2': + dependencies: + '@napi-rs/wasm-runtime': 0.2.6 + optional: true + + '@napi-rs/wasm-tools-win32-arm64-msvc@0.0.2': + optional: true + + '@napi-rs/wasm-tools-win32-ia32-msvc@0.0.2': + optional: true + + '@napi-rs/wasm-tools-win32-x64-msvc@0.0.2': + optional: true + + '@napi-rs/wasm-tools@0.0.2': + optionalDependencies: + '@napi-rs/wasm-tools-android-arm-eabi': 0.0.2 + '@napi-rs/wasm-tools-android-arm64': 0.0.2 + '@napi-rs/wasm-tools-darwin-arm64': 0.0.2 + '@napi-rs/wasm-tools-darwin-x64': 0.0.2 + '@napi-rs/wasm-tools-freebsd-x64': 0.0.2 + '@napi-rs/wasm-tools-linux-arm64-gnu': 0.0.2 + '@napi-rs/wasm-tools-linux-arm64-musl': 0.0.2 + '@napi-rs/wasm-tools-linux-x64-gnu': 0.0.2 + '@napi-rs/wasm-tools-linux-x64-musl': 0.0.2 + '@napi-rs/wasm-tools-wasm32-wasi': 0.0.2 + '@napi-rs/wasm-tools-win32-arm64-msvc': 0.0.2 + '@napi-rs/wasm-tools-win32-ia32-msvc': 0.0.2 + '@napi-rs/wasm-tools-win32-x64-msvc': 0.0.2 + + '@next/env@15.1.6': {} + + '@next/eslint-plugin-next@15.1.6': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.1.6': + optional: true + + '@next/swc-darwin-x64@15.1.6': + optional: true + + '@next/swc-linux-arm64-gnu@15.1.6': + optional: true + + '@next/swc-linux-arm64-musl@15.1.6': + optional: true + + '@next/swc-linux-x64-gnu@15.1.6': + optional: true + + '@next/swc-linux-x64-musl@15.1.6': + optional: true + + '@next/swc-win32-arm64-msvc@15.1.6': + optional: true + + '@next/swc-win32-x64-msvc@15.1.6': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.0 + + '@nolyfill/is-core-module@1.0.39': {} + + '@octokit/auth-token@5.1.2': {} + + '@octokit/core@6.1.3': + dependencies: + '@octokit/auth-token': 5.1.2 + '@octokit/graphql': 8.2.0 + '@octokit/request': 9.2.0 + '@octokit/request-error': 6.1.6 + '@octokit/types': 13.8.0 + before-after-hook: 3.0.2 + universal-user-agent: 7.0.2 + + '@octokit/endpoint@10.1.2': + dependencies: + '@octokit/types': 13.8.0 + universal-user-agent: 7.0.2 + + '@octokit/graphql@8.2.0': + dependencies: + '@octokit/request': 9.2.0 + '@octokit/types': 13.8.0 + universal-user-agent: 7.0.2 + + '@octokit/openapi-types@23.0.1': {} + + '@octokit/plugin-paginate-rest@11.4.0(@octokit/core@6.1.3)': + dependencies: + '@octokit/core': 6.1.3 + '@octokit/types': 13.8.0 + + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.3)': + dependencies: + '@octokit/core': 6.1.3 + + '@octokit/plugin-rest-endpoint-methods@13.3.0(@octokit/core@6.1.3)': + dependencies: + '@octokit/core': 6.1.3 + '@octokit/types': 13.8.0 + + '@octokit/request-error@6.1.6': + dependencies: + '@octokit/types': 13.8.0 + + '@octokit/request@9.2.0': + dependencies: + '@octokit/endpoint': 10.1.2 + '@octokit/request-error': 6.1.6 + '@octokit/types': 13.8.0 + fast-content-type-parse: 2.0.1 + universal-user-agent: 7.0.2 + + '@octokit/rest@21.1.0': + dependencies: + '@octokit/core': 6.1.3 + '@octokit/plugin-paginate-rest': 11.4.0(@octokit/core@6.1.3) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.3) + '@octokit/plugin-rest-endpoint-methods': 13.3.0(@octokit/core@6.1.3) + + '@octokit/types@13.8.0': + dependencies: + '@octokit/openapi-types': 23.0.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@radix-ui/number@1.1.0': {} + + '@radix-ui/primitive@1.1.1': {} + + '@radix-ui/react-arrow@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-collection@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.2(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-context@1.1.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-direction@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-id@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-label@2.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-menu@2.1.6(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.2(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + aria-hidden: 1.2.4 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-remove-scroll: 2.6.3(@types/react@19.0.8)(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-popper@1.2.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/rect': 1.1.0 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-portal@1.1.4(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-primitive@2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-slot': 1.1.2(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-progress@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-select@2.1.6(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.2(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + aria-hidden: 1.2.4 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-remove-scroll: 2.6.3(@types/react@19.0.8)(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-separator@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-slot@1.1.2(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-switch@1.1.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-tabs@1.1.3(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-toggle@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-use-previous@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-use-rect@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@radix-ui/rect': 1.1.0 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-use-size@1.1.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@radix-ui/rect@1.1.0': {} + + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.10.5': {} + + '@scarf/scarf@1.4.0': {} + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@swc/core-darwin-arm64@1.10.14': + optional: true + + '@swc/core-darwin-x64@1.10.14': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.10.14': + optional: true + + '@swc/core-linux-arm64-gnu@1.10.14': + optional: true + + '@swc/core-linux-arm64-musl@1.10.14': + optional: true + + '@swc/core-linux-x64-gnu@1.10.14': + optional: true + + '@swc/core-linux-x64-musl@1.10.14': + optional: true + + '@swc/core-win32-arm64-msvc@1.10.14': + optional: true + + '@swc/core-win32-ia32-msvc@1.10.14': + optional: true + + '@swc/core-win32-x64-msvc@1.10.14': + optional: true + + '@swc/core@1.10.14(@swc/helpers@0.5.15)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.17 + optionalDependencies: + '@swc/core-darwin-arm64': 1.10.14 + '@swc/core-darwin-x64': 1.10.14 + '@swc/core-linux-arm-gnueabihf': 1.10.14 + '@swc/core-linux-arm64-gnu': 1.10.14 + '@swc/core-linux-arm64-musl': 1.10.14 + '@swc/core-linux-x64-gnu': 1.10.14 + '@swc/core-linux-x64-musl': 1.10.14 + '@swc/core-win32-arm64-msvc': 1.10.14 + '@swc/core-win32-ia32-msvc': 1.10.14 + '@swc/core-win32-x64-msvc': 1.10.14 + '@swc/helpers': 0.5.15 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@swc/jest@0.2.37(@swc/core@1.10.14(@swc/helpers@0.5.15))': + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@swc/core': 1.10.14(@swc/helpers@0.5.15) + '@swc/counter': 0.1.3 + jsonc-parser: 3.3.1 + + '@swc/types@0.1.17': + dependencies: + '@swc/counter': 0.1.3 + + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.6.3': + dependencies: + '@adobe/css-tools': 4.4.1 + aria-query: 5.3.2 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + + '@testing-library/react-hooks@8.0.1(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + react: 19.0.0 + react-error-boundary: 3.1.4(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + react-dom: 19.0.0(react@19.0.0) + + '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.7 + '@testing-library/dom': 10.4.0 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + + '@tootallnate/once@2.0.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/aria-query@5.0.4': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.7 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.7 + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.6': {} + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.13.1 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/jsdom@20.0.1': + dependencies: + '@types/node': 22.13.1 + '@types/tough-cookie': 4.0.5 + parse5: 7.2.1 + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/mute-stream@0.0.4': + dependencies: + '@types/node': 20.17.17 + + '@types/node@20.17.17': + dependencies: + undici-types: 6.19.8 + + '@types/node@22.13.1': + dependencies: + undici-types: 6.20.0 + + '@types/react-dom@19.0.3(@types/react@19.0.8)': + dependencies: + '@types/react': 19.0.8 + + '@types/react@19.0.8': + dependencies: + csstype: 3.1.3 + + '@types/stack-utils@2.0.3': {} + + '@types/strip-bom@3.0.0': {} + + '@types/strip-json-comments@0.0.30': {} + + '@types/tough-cookie@4.0.5': {} + + '@types/webpack@5.28.5(@swc/core@1.10.14(@swc/helpers@0.5.15))': + dependencies: + '@types/node': 22.13.1 + tapable: 2.2.1 + webpack: 5.97.1(@swc/core@1.10.14(@swc/helpers@0.5.15)) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + + '@types/wrap-ansi@3.0.0': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/type-utils': 8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.23.0 + eslint: 9.19.0(jiti@1.21.7) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.23.0 + debug: 4.4.0 + eslint: 9.19.0(jiti@1.21.7) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.23.0': + dependencies: + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/visitor-keys': 8.23.0 + + '@typescript-eslint/type-utils@8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.19.0(jiti@1.21.7) + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.23.0': {} + + '@typescript-eslint/typescript-estree@8.23.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/visitor-keys': 8.23.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + eslint: 9.19.0(jiti@1.21.7) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.23.0': + dependencies: + '@typescript-eslint/types': 8.23.0 + eslint-visitor-keys: 4.2.0 + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + abab@2.0.6: {} + + acorn-globals@7.0.1: + dependencies: + acorn: 8.14.0 + acorn-walk: 8.3.4 + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: {} + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-hidden@1.2.4: + dependencies: + tslib: 2.8.1 + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.3 + is-array-buffer: 3.0.5 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + is-string: 1.1.1 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.0.2 + + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + is-array-buffer: 3.0.5 + + ast-types-flow@0.0.8: {} + + async-function@1.0.0: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axe-core@4.10.2: {} + + axobject-query@4.1.0: {} + + babel-jest@29.7.0(@babel/core@7.26.7): + dependencies: + '@babel/core': 7.26.7 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.7) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.7): + dependencies: + '@babel/core': 7.26.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.7) + + babel-preset-jest@29.6.3(@babel/core@7.26.7): + dependencies: + '@babel/core': 7.26.7 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) + + balanced-match@1.0.2: {} + + before-after-hook@3.0.2: {} + + big.js@5.2.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001697 + electron-to-chromium: 1.5.94 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + call-bind-apply-helpers@1.0.1: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.7 + set-function-length: 1.2.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001697: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + char-regex@1.0.2: {} + + chardet@0.7.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chrome-trace-event@1.0.4: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.3: {} + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + cli-width@4.1.0: {} + + client-only@0.0.1: {} + + clipanion@3.2.1(typanion@3.14.0): + dependencies: + typanion: 3.14.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clsx@2.1.1: {} + + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + optional: true + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@2.20.3: {} + + commander@4.1.1: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + create-jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css.escape@1.5.1: {} + + cssesc@3.0.0: {} + + cssom@0.3.8: {} + + cssom@0.5.0: {} + + cssstyle@2.3.0: + dependencies: + cssom: 0.3.8 + + csstype@3.1.3: {} + + damerau-levenshtein@1.0.8: {} + + data-urls@3.0.2: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + dateformat@3.0.2: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decimal.js@10.5.0: {} + + dedent@1.5.3: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + dequal@2.0.3: {} + + detect-libc@2.0.3: + optional: true + + detect-newline@3.1.0: {} + + detect-node-es@1.1.0: {} + + didyoumean@1.2.2: {} + + diff-sequences@29.6.3: {} + + diff@4.0.2: {} + + dlv@1.1.3: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + + domexception@4.0.0: + dependencies: + webidl-conversions: 7.0.0 + + dotenv-cli@7.4.4: + dependencies: + cross-spawn: 7.0.6 + dotenv: 16.4.7 + dotenv-expand: 10.0.0 + minimist: 1.2.8 + + dotenv-expand@10.0.0: {} + + dotenv@16.4.7: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + dynamic-dedupe@0.3.0: + dependencies: + xtend: 4.0.2 + + eastasianwidth@0.2.0: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.94: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + emojis-list@3.0.0: {} + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + entities@4.5.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.7 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + + es-module-lexer@1.6.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-config-next@15.1.6(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3): + dependencies: + '@next/eslint-plugin-next': 15.1.6 + '@rushstack/eslint-patch': 1.10.5 + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3) + eslint: 9.19.0(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.7)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.19.0(jiti@1.21.7)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.19.0(jiti@1.21.7)) + eslint-plugin-react: 7.37.4(eslint@9.19.0(jiti@1.21.7)) + eslint-plugin-react-hooks: 5.1.0(eslint@9.19.0(jiti@1.21.7)) + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.7)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.0 + enhanced-resolve: 5.18.1 + eslint: 9.19.0(jiti@1.21.7) + fast-glob: 3.3.3 + get-tsconfig: 4.10.0 + is-bun-module: 1.3.0 + is-glob: 4.0.3 + stable-hash: 0.0.4 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.19.0(jiti@1.21.7)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.19.0(jiti@1.21.7)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3) + eslint: 9.19.0(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.7)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.19.0(jiti@1.21.7)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.19.0(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.19.0(jiti@1.21.7)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@9.19.0(jiti@1.21.7)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.2 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.19.0(jiti@1.21.7) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-react-hooks@5.1.0(eslint@9.19.0(jiti@1.21.7)): + dependencies: + eslint: 9.19.0(jiti@1.21.7) + + eslint-plugin-react@7.37.4(eslint@9.19.0(jiti@1.21.7)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.19.0(jiti@1.21.7) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.19.0(jiti@1.21.7): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.19.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + events@3.3.0: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-content-type-parse@2.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.6: {} + + fastq@1.19.0: + dependencies: + reusify: 1.0.4 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + + flatted@3.3.2: {} + + for-each@0.3.4: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.2.7: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-nonce@1.0.1: {} + + get-package-type@0.1.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@6.0.1: {} + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + + get-tsconfig@4.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-bigints@1.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + html-encoding-sniffer@3.0.0: + dependencies: + whatwg-encoding: 2.0.0 + + html-escaper@2.0.2: {} + + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + inquirer@10.2.2: + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/prompts': 5.5.0 + '@inquirer/type': 1.5.5 + '@types/mute-stream': 0.0.4 + ansi-escapes: 4.3.2 + mute-stream: 1.0.0 + run-async: 3.0.0 + rxjs: 7.8.1 + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: + optional: true + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-bun-module@1.3.0: + dependencies: + semver: 7.7.1 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.3 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-potential-custom-element-name@1.0.1: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.3 + + is-stream@2.0.1: {} + + is-string@1.1.1: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.3 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.18 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.3 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.26.7 + '@babel/parser': 7.26.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.26.7 + '@babel/parser': 7.26.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.1 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)): + dependencies: + '@babel/core': 7.26.7 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.7) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.13.1 + ts-node: 10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-jsdom@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/jsdom': 20.0.1 + '@types/node': 22.13.1 + jest-mock: 29.7.0 + jest-util: 29.7.0 + jsdom: 20.0.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.1 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.13.1 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-html-reporter@3.10.2(jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)))(typescript@5.7.3): + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + dateformat: 3.0.2 + jest: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + mkdirp: 1.0.4 + strip-ansi: 6.0.1 + typescript: 5.7.3 + xmlbuilder: 15.0.0 + + jest-junit@16.0.0: + dependencies: + mkdirp: 1.0.4 + strip-ansi: 6.0.1 + uuid: 8.3.2 + xml: 1.0.1 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.1 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.1 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.1 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.26.7 + '@babel/generator': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) + '@babel/types': 7.26.7 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + jest-summary-reporter@0.0.2: + dependencies: + chalk: 2.4.2 + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.1 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 22.13.1 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.13.1 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jiti@1.21.7: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsdom@20.0.3: + dependencies: + abab: 2.0.6 + acorn: 8.14.0 + acorn-globals: 7.0.1 + cssom: 0.5.0 + cssstyle: 2.3.0 + data-urls: 3.0.2 + decimal.js: 10.5.0 + domexception: 4.0.0 + escodegen: 2.1.0 + form-data: 4.0.1 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.16 + parse5: 7.2.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 4.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + ws: 8.18.0 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-parse-even-better-errors@3.0.2: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonc-parser@3.3.1: {} + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + loader-runner@4.3.0: {} + + loader-utils@2.0.4: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lucide-react@0.471.2(react@19.0.0): + dependencies: + react: 19.0.0 + + lz-string@1.5.0: {} + + make-dir@4.0.0: + dependencies: + semver: 7.7.1 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + math-intrinsics@1.1.0: {} + + memorystream@0.3.1: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + min-indent@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mkdirp@1.0.4: {} + + ms@2.1.3: {} + + mute-stream@1.0.0: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.8: {} + + natural-compare@1.4.0: {} + + neo-async@2.6.2: {} + + next-themes@0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + next@15.1.6(@babel/core@7.26.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + '@next/env': 15.1.6 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001697 + postcss: 8.4.31 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + styled-jsx: 5.1.6(@babel/core@7.26.7)(react@19.0.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.1.6 + '@next/swc-darwin-x64': 15.1.6 + '@next/swc-linux-arm64-gnu': 15.1.6 + '@next/swc-linux-arm64-musl': 15.1.6 + '@next/swc-linux-x64-gnu': 15.1.6 + '@next/swc-linux-x64-musl': 15.1.6 + '@next/swc-win32-arm64-msvc': 15.1.6 + '@next/swc-win32-x64-msvc': 15.1.6 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-int64@0.4.0: {} + + node-loader@2.1.0(webpack@5.97.1(@swc/core@1.10.14(@swc/helpers@0.5.15))): + dependencies: + loader-utils: 2.0.4 + webpack: 5.97.1(@swc/core@1.10.14(@swc/helpers@0.5.15)) + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + npm-normalize-package-bin@3.0.1: {} + + npm-run-all2@6.2.6: + dependencies: + ansi-styles: 6.2.1 + cross-spawn: 7.0.6 + memorystream: 0.3.1 + minimatch: 9.0.5 + pidtree: 0.6.0 + read-package-json-fast: 3.0.2 + shell-quote: 1.8.2 + which: 3.0.1 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + nwsapi@2.2.16: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + os-tmpdir@1.0.2: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.2.7 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pidtree@0.6.0: {} + + pify@2.3.0: {} + + pirates@4.0.6: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + possible-typed-array-names@1.0.0: {} + + postcss-import@15.1.0(postcss@8.5.1): + dependencies: + postcss: 8.5.1 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.1): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.1 + + postcss-load-config@4.0.2(postcss@8.5.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.5.1 + ts-node: 10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3) + + postcss-nested@6.2.0(postcss@8.5.1): + dependencies: + postcss: 8.5.1 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.1: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + psl@1.15.0: + dependencies: + punycode: 2.3.1 + + punycode@2.3.1: {} + + pure-rand@6.1.0: {} + + querystringify@2.2.0: {} + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + react-dom@19.0.0(react@19.0.0): + dependencies: + react: 19.0.0 + scheduler: 0.25.0 + + react-error-boundary@3.1.4(react@19.0.0): + dependencies: + '@babel/runtime': 7.26.7 + react: 19.0.0 + + react-is@16.13.1: {} + + react-is@17.0.2: {} + + react-is@18.3.1: {} + + react-remove-scroll-bar@2.3.8(@types/react@19.0.8)(react@19.0.0): + dependencies: + react: 19.0.0 + react-style-singleton: 2.2.3(@types/react@19.0.8)(react@19.0.0) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.8 + + react-remove-scroll@2.6.3(@types/react@19.0.8)(react@19.0.0): + dependencies: + react: 19.0.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.0.8)(react@19.0.0) + react-style-singleton: 2.2.3(@types/react@19.0.8)(react@19.0.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.0.8)(react@19.0.0) + use-sidecar: 1.1.3(@types/react@19.0.8)(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.8 + + react-style-singleton@2.2.3(@types/react@19.0.8)(react@19.0.0): + dependencies: + get-nonce: 1.0.1 + react: 19.0.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.8 + + react@19.0.0: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + read-package-json-fast@3.0.2: + dependencies: + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regenerator-runtime@0.14.1: {} + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + requires-port@1.0.0: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve.exports@2.0.3: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rimraf@2.7.1: + dependencies: + glob: 7.2.3 + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safer-buffer@2.1.2: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + scheduler@0.25.0: {} + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@4.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + semver@6.3.1: {} + + semver@7.7.1: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.7 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.7.1 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.8.2: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + sonner@1.7.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + source-map-js@1.2.1: {} + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + sprintf-js@1.0.3: {} + + stable-hash@0.0.4: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + streamsearch@1.1.0: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + styled-jsx@5.1.6(@babel/core@7.26.7)(react@19.0.0): + dependencies: + client-only: 0.0.1 + react: 19.0.0 + optionalDependencies: + '@babel/core': 7.26.7 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + symbol-tree@3.2.4: {} + + tailwind-merge@2.6.0: {} + + tailwindcss-animate@1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3))): + dependencies: + tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + + tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + postcss-nested: 6.2.0(postcss@8.5.1) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tapable@2.2.1: {} + + terser-webpack-plugin@5.3.11(@swc/core@1.10.14(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.14(@swc/helpers@0.5.15))): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 4.3.0 + serialize-javascript: 6.0.2 + terser: 5.38.1 + webpack: 5.97.1(@swc/core@1.10.14(@swc/helpers@0.5.15)) + optionalDependencies: + '@swc/core': 1.10.14(@swc/helpers@0.5.15) + + terser@5.38.1: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmpl@1.0.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toml@3.0.0: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tr46@3.0.0: + dependencies: + punycode: 2.3.1 + + tree-kill@1.2.2: {} + + ts-api-utils@2.0.1(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + ts-interface-checker@0.1.13: {} + + ts-jest@29.2.5(@babel/core@7.26.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.7))(jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)))(typescript@5.7.3): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.1 + typescript: 5.7.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.7 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.7) + + ts-node-dev@2.0.0(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3): + dependencies: + chokidar: 3.6.0 + dynamic-dedupe: 0.3.0 + minimist: 1.2.8 + mkdirp: 1.0.4 + resolve: 1.22.10 + rimraf: 2.7.1 + source-map-support: 0.5.21 + tree-kill: 1.2.2 + ts-node: 10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3) + tsconfig: 7.0.0 + typescript: 5.7.3 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + + ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@20.17.17)(typescript@5.7.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.17.17 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.10.14(@swc/helpers@0.5.15) + + ts-node@10.9.2(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.7.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.13.1 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.10.14(@swc/helpers@0.5.15) + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tsconfig@7.0.0: + dependencies: + '@types/strip-bom': 3.0.0 + '@types/strip-json-comments': 0.0.30 + strip-bom: 3.0.0 + strip-json-comments: 2.0.1 + + tslib@2.8.1: {} + + typanion@3.14.0: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.21.3: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.0.0 + reflect.getprototypeof: 1.0.10 + + typescript@5.7.3: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.3 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@6.19.8: {} + + undici-types@6.20.0: {} + + universal-user-agent@7.0.2: {} + + universalify@0.2.0: {} + + update-browserslist-db@1.1.2(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + use-callback-ref@1.3.3(@types/react@19.0.8)(react@19.0.0): + dependencies: + react: 19.0.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.8 + + use-sidecar@1.1.3(@types/react@19.0.8)(react@19.0.0): + dependencies: + detect-node-es: 1.1.0 + react: 19.0.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.0.8 + + util-deprecate@1.0.2: {} + + uuid@8.3.2: {} + + v8-compile-cache-lib@3.0.1: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + w3c-xmlserializer@4.0.0: + dependencies: + xml-name-validator: 4.0.0 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + wasm-sjlj@1.0.6: {} + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + webidl-conversions@7.0.0: {} + + webpack-sources@3.2.3: {} + + webpack@5.97.1(@swc/core@1.10.14(@swc/helpers@0.5.15)): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.4 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.6.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.11(@swc/core@1.10.14(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.14(@swc/helpers@0.5.15))) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + whatwg-encoding@2.0.0: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@3.0.0: {} + + whatwg-url@11.0.0: + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.3 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.18 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.18: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + for-each: 0.3.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + which@3.0.1: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + ws@8.18.0: {} + + xml-name-validator@4.0.0: {} + + xml@1.0.1: {} + + xmlbuilder@15.0.0: {} + + xmlchars@2.2.0: {} + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yaml@2.7.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} + + yoctocolors-cjs@2.1.2: {} + + zod@3.24.1: {} + + zsa-react@0.2.3(react@19.0.0)(zod@3.24.1): + dependencies: + react: 19.0.0 + zod: 3.24.1 + zsa: 0.6.0(zod@3.24.1) + + zsa@0.6.0(zod@3.24.1): + dependencies: + zod: 3.24.1 diff --git a/integ-tests/react/pnpm-workspace.yaml b/integ-tests/react/pnpm-workspace.yaml new file mode 100644 index 000000000..b1915c5d0 --- /dev/null +++ b/integ-tests/react/pnpm-workspace.yaml @@ -0,0 +1,10 @@ +packages: + - '../../engine/language_client_typescript' + - '../../engine/language_client_typescript/npm/darwin-arm64' + - '../../engine/language_client_typescript/npm/darwin-x64' + - '../../engine/language_client_typescript/npm/linux-arm64-gmu' + - '../../engine/language_client_typescript/npm/linux-arm64-musl' + - '../../engine/language_client_typescript/npm/linux-x64-gnu' + - '../../engine/language_client_typescript/npm/linux-x64-musl' + - '../../engine/language_client_typescript/npm/win32-x64-msvc' + - '../../typescript/nextjs-plugin' diff --git a/integ-tests/react/postcss.config.mjs b/integ-tests/react/postcss.config.mjs new file mode 100644 index 000000000..1a69fd2a4 --- /dev/null +++ b/integ-tests/react/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/integ-tests/react/public/file.svg b/integ-tests/react/public/file.svg new file mode 100644 index 000000000..004145cdd --- /dev/null +++ b/integ-tests/react/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integ-tests/react/public/globe.svg b/integ-tests/react/public/globe.svg new file mode 100644 index 000000000..567f17b0d --- /dev/null +++ b/integ-tests/react/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integ-tests/react/public/next.svg b/integ-tests/react/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/integ-tests/react/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integ-tests/react/public/vercel.svg b/integ-tests/react/public/vercel.svg new file mode 100644 index 000000000..770539603 --- /dev/null +++ b/integ-tests/react/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integ-tests/react/public/window.svg b/integ-tests/react/public/window.svg new file mode 100644 index 000000000..b2b2a44f6 --- /dev/null +++ b/integ-tests/react/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integ-tests/react/src/app/actions.ts b/integ-tests/react/src/app/actions.ts new file mode 100644 index 000000000..46f73e211 --- /dev/null +++ b/integ-tests/react/src/app/actions.ts @@ -0,0 +1,9 @@ +'use server' +import { b } from '../../baml_client' + +export async function testAWS(input: string) { + // auth + // db + + return b.stream.TestAws(input).toStreamable() +} diff --git a/integ-tests/react/src/app/favicon.ico b/integ-tests/react/src/app/favicon.ico new file mode 100644 index 000000000..718d6fea4 Binary files /dev/null and b/integ-tests/react/src/app/favicon.ico differ diff --git a/integ-tests/react/src/app/globals.css b/integ-tests/react/src/app/globals.css new file mode 100644 index 000000000..9e332aa3f --- /dev/null +++ b/integ-tests/react/src/app/globals.css @@ -0,0 +1,68 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + --ring: 0 0% 3.9%; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + --radius: 0.5rem; + } + .dark { + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 0 0% 9%; + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + --ring: 0 0% 83.1%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/integ-tests/react/src/app/layout.tsx b/integ-tests/react/src/app/layout.tsx new file mode 100644 index 000000000..4623d80b2 --- /dev/null +++ b/integ-tests/react/src/app/layout.tsx @@ -0,0 +1,49 @@ +import type { Metadata } from "next"; +import { Geist, Geist_Mono } from "next/font/google"; +import "./globals.css"; +import { Toaster } from "sonner"; +import { ThemeProvider } from "@/components/theme-provider"; +import { cn } from "@/lib/utils"; + +const geistSans = Geist({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = Geist_Mono({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: "BAML Next.js Demo", + description: "BAML + Next.js Integration Demo", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + + {children} + + + + + ); +} diff --git a/integ-tests/react/src/app/page.tsx b/integ-tests/react/src/app/page.tsx new file mode 100644 index 000000000..4d2ed8cc3 --- /dev/null +++ b/integ-tests/react/src/app/page.tsx @@ -0,0 +1,87 @@ +import { ModeToggle } from '@/components/theme-toggle' +import { Button } from '@/components/ui/button' +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' +import { GithubIcon } from 'lucide-react' +import Image from 'next/image' +import TestClient from '../components/hook-example' + +export default function Home() { + return ( +
+
+
+
+ Next.js logo + + + BAML +
+ +
+ +
+
+

BAML + Next.js Integration

+

Select an example below to get started.

+
+ +
+
+ +
+ +
+
+ + +
+
+ ) +} diff --git a/integ-tests/react/src/components/hook-example/index.tsx b/integ-tests/react/src/components/hook-example/index.tsx new file mode 100644 index 000000000..7dcefabee --- /dev/null +++ b/integ-tests/react/src/components/hook-example/index.tsx @@ -0,0 +1,251 @@ +'use client' + +import { NetworkTimeline } from '@/components/network-timeline' +import { Alert, AlertDescription } from '@/components/ui/alert' +import { Badge } from '@/components/ui/badge' +import { Button } from '@/components/ui/button' +import { Input } from '@/components/ui/input' +import { Label } from '@/components/ui/label' +import { Switch } from '@/components/ui/switch' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { Loader2 } from 'lucide-react' +import * as React from 'react' +import { useTestAws } from '../../../baml_client/react/hooks' +import type { HookOutput } from '../../../baml_client/react/hooks' + +type ResponseCardProps = { + hookResult: HookOutput<'TestAws'> + hasStarted: boolean +} + +function formatError(error: any): { title: string; message: string; status_code?: number } { + if (!error) return { title: 'No error', message: 'No error available' } + + try { + // If error is a string, return it directly + if (typeof error === 'string') { + return { title: 'Error', message: error } + } + + // Parse error if it's a string representation of JSON + const errorObj = typeof error === 'string' ? JSON.parse(error) : error + + // Extract the most relevant information + const title = errorObj.name || 'Error' + let message = errorObj.message || '' + + // If the message contains a nested error structure, try to extract the actual message + if (message.includes('BamlError:')) { + // Extract the actual error message from nested structure + const matches = message.match(/message: Some\(\s*"([^"]+)"\s*\)/) + if (matches && matches[1]) { + message = matches[1] + } + } + + // Add client name if available + if (errorObj.client_name) { + message = `${message}\nClient: ${errorObj.client_name}` + } + + return { + title, + message, + status_code: errorObj.status_code, + } + } catch (e) { + // Fallback for any parsing errors + return { + title: 'Error', + message: String(error), + } + } +} + +function ResponseCard({ hookResult, hasStarted }: ResponseCardProps) { + const { isLoading, error, isError, data, streamData, isPending, isStreaming, isSuccess, finalData } = hookResult + + const dataRef = React.useRef(null) + const streamDataRef = React.useRef(null) + const finalDataRef = React.useRef(null) + const errorRef = React.useRef(null) + // Auto-scroll effect for data tab + React.useEffect(() => { + if (dataRef.current) { + dataRef.current.scrollTop = dataRef.current.scrollHeight + } + }, [data]) + + // Auto-scroll effect for stream data tab + React.useEffect(() => { + if (streamDataRef.current) { + streamDataRef.current.scrollTop = streamDataRef.current.scrollHeight + } + }, [streamData]) + + // Auto-scroll effect for final data tab + React.useEffect(() => { + if (finalDataRef.current) { + finalDataRef.current.scrollTop = finalDataRef.current.scrollHeight + } + }, [finalData]) + + return ( +
+ + +
+ + + Data + Stream Data + Final Data + Error + + +
+              {data ? (typeof data === 'string' ? data : JSON.stringify(data, null, 2)) : 'No data available'}
+            
+
+ +
+              {streamData
+                ? typeof streamData === 'string'
+                  ? streamData
+                  : JSON.stringify(streamData, null, 2)
+                : 'No streaming data available'}
+            
+
+ +
+              {finalData
+                ? typeof finalData === 'string'
+                  ? finalData
+                  : JSON.stringify(finalData, null, 2)
+                : 'No final data available'}
+            
+
+ + {error ? ( +
+ + + {(() => { + const { title, message, status_code } = formatError(error) + return ( +
+
+
{title}
+ {status_code && {status_code}} +
+
{message}
+
+ ) + })()} +
+
+
+ ) : ( +
+                No error available
+              
+ )} +
+
+
+
+ ) +} + +export default function TestClient() { + const [isStreamingEnabled, setIsStreamingEnabled] = React.useState(true) + + const hookResult = useTestAws({ + stream: isStreamingEnabled as true, + onStreamData: (response) => {}, + }) + + const { isLoading, error, isError, isSuccess, mutate, status, data, streamData } = hookResult + const [prompt, setPrompt] = React.useState('') + const [hasStarted, setHasStarted] = React.useState(false) + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + if (!prompt.trim()) return + + setHasStarted(true) + await mutate(prompt) + } + + // Reset hasStarted when the request is complete or reset + React.useEffect(() => { + if (!isLoading && !streamData && !data && !error) { + setHasStarted(false) + } + }, [isLoading, streamData, data, error]) + + return ( +
+
+
+
+ +
+ + +
+
+
+ ) => setPrompt(e.target.value)} + placeholder='A cat in a hat...' + disabled={isLoading} + /> +
+ {!isSuccess && !isError && ( + + )} + {(isSuccess || isError) && ( + + )} +
+
+
+
+ + +
+ ) +} diff --git a/integ-tests/react/src/components/network-timeline/index.tsx b/integ-tests/react/src/components/network-timeline/index.tsx new file mode 100644 index 000000000..737ce440a --- /dev/null +++ b/integ-tests/react/src/components/network-timeline/index.tsx @@ -0,0 +1,413 @@ +import { Badge } from '@/components/ui/badge' +import { Separator } from '@/components/ui/separator' +import { cn } from '@/lib/utils' +import { Check, X } from 'lucide-react' +import * as React from 'react' +import type { HookOutput } from '../../../baml_client/react/hooks' + +type NetworkState = 'idle' | 'loading' | 'pending' | 'streaming' | 'success' | 'error' + +type StateEntry = { + startTime: number + endTime?: number +} + +type TimelineState = { + [K in NetworkState]?: StateEntry +} + +type TimelineAction = + | { type: 'STATE_START'; state: NetworkState; timestamp: number } + | { type: 'STATE_END'; state: NetworkState; timestamp: number } + | { type: 'RESET' } + +function timelineReducer(state: TimelineState, action: TimelineAction): TimelineState { + switch (action.type) { + case 'STATE_START': { + // Only start if not already started + if (state[action.state]?.startTime && !state[action.state]?.endTime) { + return state + } + return { + ...state, + [action.state]: { startTime: action.timestamp }, + } + } + case 'STATE_END': { + const currentEntry = state[action.state] + if (!currentEntry || currentEntry.endTime) { + return state + } + return { + ...state, + [action.state]: { ...currentEntry, endTime: action.timestamp }, + } + } + case 'RESET': { + return {} + } + default: + return state + } +} + +// Individual timeline row component +function TimelineRow({ + label, + state, + totalDuration, + timelineStart, + colorClass, + isComplete, + currentTime, +}: { + label: string + state: StateEntry | undefined + totalDuration: number + timelineStart: number + colorClass: string + isComplete: boolean + currentTime: number +}) { + if (!state) { + return ( +
+
{label}
+
+
...
+
+ ) + } + + const endTime = state.endTime || currentTime + const duration = (Math.round((endTime - state.startTime) / 100) / 10).toFixed(1) + + // Calculate width based on the state's duration + const stateDuration = endTime - state.startTime + const width = Math.min((stateDuration / totalDuration) * 100, 100) + + // Calculate right position based on how far we are in the timeline + const timeFromEnd = currentTime - state.startTime + const rightPosition = Math.min(100, Math.max(0, 100 - (timeFromEnd / totalDuration) * 100)) + + return ( +
+
{label}
+
+
+
+
+ {duration}s +
+
+ ) +} + +// Duration display component +function DurationDisplay({ + timeline, + isComplete, + currentTime, +}: { + timeline: TimelineState + isComplete: boolean + currentTime: number +}) { + const startTime = Object.values(timeline).reduce( + (earliest, entry) => (entry?.startTime && (!earliest || entry.startTime < earliest) ? entry.startTime : earliest), + currentTime, + ) + + if (!startTime) return null + + const totalDuration = + startTime === currentTime ? '...' : (Math.round((currentTime - startTime) / 100) / 10).toFixed(1) + const timeToFirstToken = timeline.error?.startTime + ? '...' + : timeline.streaming?.startTime + ? (Math.round((timeline.streaming.startTime - startTime) / 100) / 10).toFixed(1) + : timeline.success?.startTime + ? (Math.round((timeline.success.startTime - startTime) / 100) / 10).toFixed(1) + : startTime === currentTime + ? '...' + : totalDuration + + return ( +
+ + Total Duration: {totalDuration === '...' ? '...' : {totalDuration}} + {totalDuration !== '...' && 's'} + + + Time to First Parse:{' '} + {timeToFirstToken === '...' ? '...' : {timeToFirstToken}} + {timeToFirstToken !== '...' && 's'} + +
+ ) +} + +function StatusBadge({ status }: { status: HookOutput<'TestAws', { stream: true }>['status'] }) { + const getVariant = () => { + if (status === 'idle') return 'ghost' as const + return 'default' as const + } + + return ( +
+ + {status.charAt(0).toUpperCase() + status.slice(1)} + +
+ ) +} + +function BooleanBadge({ label, value }: { label: string; value: boolean }) { + const getVariant = () => { + if (!value) return 'ghost' as const + return 'default' as const + } + + return ( +
+ + {label} + +
+ ) +} + +export function NetworkTimeline({ + hookResult, + className, + hasStarted, +}: { + hookResult: HookOutput<'TestAws'> + className?: string + hasStarted: boolean +}) { + const [timeline, dispatch] = React.useReducer(timelineReducer, {}) + const [isComplete, setIsComplete] = React.useState(false) + const hasStartedRef = React.useRef(false) + const [currentTime, setCurrentTime] = React.useState(Date.now()) + const animationFrameRef = React.useRef(null) + + // Use requestAnimationFrame for smoother updates + React.useEffect(() => { + if (isComplete) { + if (animationFrameRef.current) { + cancelAnimationFrame(animationFrameRef.current) + } + return + } + + function updateTime() { + setCurrentTime(Date.now()) + animationFrameRef.current = requestAnimationFrame(updateTime) + } + + animationFrameRef.current = requestAnimationFrame(updateTime) + + return () => { + if (animationFrameRef.current) { + cancelAnimationFrame(animationFrameRef.current) + } + } + }, [isComplete]) + + // Handle initial idle state when hasStarted changes + React.useEffect(() => { + if (hasStarted && !hasStartedRef.current) { + hasStartedRef.current = true + const timestamp = Date.now() + dispatch({ type: 'STATE_START', state: 'idle', timestamp }) + + // If we're already in a loading/pending state when hasStarted becomes true, + // we should immediately end the idle state + if (hookResult.isLoading || hookResult.isPending) { + dispatch({ type: 'STATE_END', state: 'idle', timestamp }) + } + } else if (!hasStarted) { + hasStartedRef.current = false + } + }, [hasStarted, hookResult.isLoading, hookResult.isPending]) + + // Track state changes + React.useEffect(() => { + const timestamp = Date.now() + + // Check if the request is complete + if (hookResult.isSuccess || hookResult.isError) { + setIsComplete(true) + } + + // Handle loading state + if (hookResult.isLoading) { + dispatch({ type: 'STATE_START', state: 'loading', timestamp }) + } else if (timeline.loading && !timeline.loading.endTime && !hookResult.isPending && !hookResult.isStreaming) { + dispatch({ type: 'STATE_END', state: 'loading', timestamp }) + } + + // Handle pending state + if (hookResult.isPending) { + dispatch({ type: 'STATE_START', state: 'pending', timestamp }) + } else if (timeline.pending && !timeline.pending.endTime && !hookResult.isStreaming) { + dispatch({ type: 'STATE_END', state: 'pending', timestamp }) + } + + // Handle streaming state + if (hookResult.isStreaming) { + // End pending state if it exists + if (timeline.pending && !timeline.pending.endTime) { + dispatch({ type: 'STATE_END', state: 'pending', timestamp }) + } + dispatch({ type: 'STATE_START', state: 'streaming', timestamp }) + } else if (timeline.streaming && !timeline.streaming.endTime && !hookResult.isSuccess) { + dispatch({ type: 'STATE_END', state: 'streaming', timestamp }) + } + + if (hookResult.isSuccess) { + dispatch({ type: 'STATE_START', state: 'success', timestamp }) + // End all other states when success occurs + Object.keys(timeline).forEach((state) => { + if (state !== 'success' && timeline[state as NetworkState] && !timeline[state as NetworkState]!.endTime) { + dispatch({ type: 'STATE_END', state: state as NetworkState, timestamp }) + } + }) + } + + if (hookResult.isError) { + dispatch({ type: 'STATE_START', state: 'error', timestamp }) + // End all other states when error occurs + Object.keys(timeline).forEach((state) => { + if (state !== 'error' && timeline[state as NetworkState] && !timeline[state as NetworkState]!.endTime) { + dispatch({ type: 'STATE_END', state: state as NetworkState, timestamp }) + } + }) + } + }, [hookResult.isLoading, hookResult.isPending, hookResult.isStreaming, hookResult.isSuccess, hookResult.isError]) + + // Reset timeline when all states are inactive + React.useEffect(() => { + if ( + !hookResult.isLoading && + !hookResult.isPending && + !hookResult.isStreaming && + !hookResult.isSuccess && + !hookResult.isError + ) { + dispatch({ type: 'RESET' }) + setIsComplete(false) + } + }, [hookResult]) + + const startTime = Object.values(timeline).reduce( + (earliest, entry) => (entry?.startTime && (!earliest || entry.startTime < earliest) ? entry.startTime : earliest), + currentTime, + ) + + const totalDuration = Math.max(currentTime - startTime, 100) // Ensure we always have at least 100ms duration + + return ( +
+
+
+

LLM Timeline

+ +
+ +
+ +
+ + + + + + +
+ +
+ + + + + +
+
+ ) +} diff --git a/integ-tests/react/src/components/theme-provider.tsx b/integ-tests/react/src/components/theme-provider.tsx new file mode 100644 index 000000000..22379ddf2 --- /dev/null +++ b/integ-tests/react/src/components/theme-provider.tsx @@ -0,0 +1,9 @@ +"use client" + +import * as React from "react" +import { ThemeProvider as NextThemesProvider } from "next-themes" +import { type ThemeProviderProps } from "next-themes" + +export function ThemeProvider({ children, ...props }: ThemeProviderProps) { + return {children} +} \ No newline at end of file diff --git a/integ-tests/react/src/components/theme-toggle.tsx b/integ-tests/react/src/components/theme-toggle.tsx new file mode 100644 index 000000000..bf1470451 --- /dev/null +++ b/integ-tests/react/src/components/theme-toggle.tsx @@ -0,0 +1,40 @@ +"use client" + +import * as React from "react" +import { MoonIcon, SunIcon } from "lucide-react" +import { useTheme } from "next-themes" + +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" + +export function ModeToggle() { + const { setTheme } = useTheme() + + return ( + + + + + + setTheme("light")}> + Light + + setTheme("dark")}> + Dark + + setTheme("system")}> + System + + + + ) +} \ No newline at end of file diff --git a/integ-tests/react/src/components/typecheck-client.tsx b/integ-tests/react/src/components/typecheck-client.tsx new file mode 100644 index 000000000..4c16ce29b --- /dev/null +++ b/integ-tests/react/src/components/typecheck-client.tsx @@ -0,0 +1,378 @@ +// NOTE: Uncomment this to verify that the types are working +// @ts-nocheck +'use client' + +import { NetworkTimeline } from '@/components/network-timeline' +import { Alert, AlertDescription } from '@/components/ui/alert' +import { Badge } from '@/components/ui/badge' +import { Button } from '@/components/ui/button' +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' +import { Input } from '@/components/ui/input' +import { Label } from '@/components/ui/label' +import { Switch } from '@/components/ui/switch' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { cn } from '@/lib/utils' +import { Loader2 } from 'lucide-react' +import * as React from 'react' +import { useTestAws } from '../../baml_client/react/hooks' +import type { HookOutput } from '../../baml_client/react/hooks' + +type ResponseCardProps = { + streamingHookResult: HookOutput<'TestAws'> + nonStreamingHookResult: HookOutput<'TestAws', { stream: false }> + status: HookOutput<'TestAws', { stream: true }>['status'] + hasStarted: boolean +} + +function formatError(error: any): { title: string; message: string; status_code?: number } { + if (!error) return { title: 'No error', message: 'No error available' } + + try { + // If error is a string, return it directly + if (typeof error === 'string') { + return { title: 'Error', message: error } + } + + // Parse error if it's a string representation of JSON + const errorObj = typeof error === 'string' ? JSON.parse(error) : error + + // Extract the most relevant information + const title = errorObj.name || 'Error' + let message = errorObj.message || '' + + // If the message contains a nested error structure, try to extract the actual message + if (message.includes('BamlError:')) { + // Extract the actual error message from nested structure + const matches = message.match(/message: Some\(\s*"([^"]+)"\s*\)/) + if (matches && matches[1]) { + message = matches[1] + } + } + + // Add client name if available + if (errorObj.client_name) { + message = `${message}\nClient: ${errorObj.client_name}` + } + + return { + title, + message, + status_code: errorObj.status_code, + } + } catch (e) { + // Fallback for any parsing errors + return { + title: 'Error', + message: String(error), + } + } +} + +function ResponseCard({ streamingHookResult, nonStreamingHookResult, status, hasStarted }: ResponseCardProps) { + const { isLoading, error, isError, data, streamData, isPending, isStreaming, isSuccess, finalData } = + streamingHookResult + + const dataRef = React.useRef(null) + const streamDataRef = React.useRef(null) + const finalDataRef = React.useRef(null) + const errorRef = React.useRef(null) + // Auto-scroll effect for data tab + React.useEffect(() => { + if (dataRef.current) { + dataRef.current.scrollTop = dataRef.current.scrollHeight + } + }, [data]) + + // Auto-scroll effect for stream data tab + React.useEffect(() => { + if (streamDataRef.current) { + streamDataRef.current.scrollTop = streamDataRef.current.scrollHeight + } + }, [streamData]) + + // Auto-scroll effect for final data tab + React.useEffect(() => { + if (finalDataRef.current) { + finalDataRef.current.scrollTop = finalDataRef.current.scrollHeight + } + }, [finalData]) + + return ( +
+ + +
+ + + Data + Stream Data + Final Data + Error + + +
+              {data ? (typeof data === 'string' ? data : JSON.stringify(data, null, 2)) : 'No data available'}
+            
+
+ +
+              {streamData
+                ? typeof streamData === 'string'
+                  ? streamData
+                  : JSON.stringify(streamData, null, 2)
+                : 'No streaming data available'}
+            
+
+ +
+              {finalData
+                ? typeof finalData === 'string'
+                  ? finalData
+                  : JSON.stringify(finalData, null, 2)
+                : 'No final data available'}
+            
+
+ + {error ? ( +
+ + + {(() => { + const { title, message, status_code } = formatError(error) + return ( +
+
+
{title}
+ {status_code && {status_code}} +
+
{message}
+
+ ) + })()} +
+
+
+ ) : ( +
+                No error available
+              
+ )} +
+
+
+
+ ) +} + +export default function TestClient() { + const [isStreamingEnabled, setIsStreamingEnabled] = React.useState(true) + + const streamingDirectAction = useTestAws({ + stream: isStreamingEnabled, + onStreamData: (response) => { + // console.log('Got partial response') + }, + onFinalData: (response) => { + // console.log('Got final response') + }, + onData: (response) => { + // console.log('Got data') + }, + onError: (error) => { + console.error('Got error', error) + }, + // timeout: 1000, + }) + + // streamingDirectAction.cancel() + + // // Streaming should not have errors + streamingDirectAction satisfies HookOutput<'TestAws', { stream: true }> + streamingDirectAction.data satisfies string | undefined + streamingDirectAction.streamData satisfies string | undefined + streamingDirectAction.mutate satisfies (input: string) => Promise> + + // // Non-Streaming should have errors + streamingDirectAction satisfies HookOutput<'TestAws'> + streamingDirectAction.data satisfies never + streamingDirectAction.streamData satisfies never + streamingDirectAction.mutate satisfies (input: string) => Promise + + const explicitNonStreamingDirectAction = useTestAws({ + stream: false, + onFinalData: (response) => { + console.log('Got final response', response) + }, + onError: (error) => { + console.error('Got error', error) + }, + }) + + // Streaming should have errors + explicitNonStreamingDirectAction satisfies HookOutput<'TestAws', { stream: true }> + explicitNonStreamingDirectAction.data satisfies never + explicitNonStreamingDirectAction.streamData satisfies never + explicitNonStreamingDirectAction.mutate satisfies (input: string) => Promise> + + // Non-Streaming should not have errors + explicitNonStreamingDirectAction satisfies HookOutput<'TestAws', { stream: false }> + explicitNonStreamingDirectAction.data satisfies string | undefined + explicitNonStreamingDirectAction.streamData satisfies undefined + explicitNonStreamingDirectAction.mutate satisfies (input: string) => Promise + + const nonExplicitNonStreamingDirectAction = useTestAws() + + // Streaming should have errors + nonExplicitNonStreamingDirectAction satisfies HookOutput<'TestAws', { stream: true }> + nonExplicitNonStreamingDirectAction.data satisfies string | undefined + nonExplicitNonStreamingDirectAction.streamData satisfies string | undefined + nonExplicitNonStreamingDirectAction.mutate satisfies (input: string) => Promise> + + // Non-Streaming should not have errors + nonExplicitNonStreamingDirectAction satisfies HookOutput<'TestAws', { stream: false }> + nonExplicitNonStreamingDirectAction.data satisfies never + nonExplicitNonStreamingDirectAction.streamData satisfies never + nonExplicitNonStreamingDirectAction.mutate satisfies (input: string) => Promise + + // const streamingIndirectAction = useBamlAction(TestAws, { + // stream: true, + // onPartial: (response) => { + // console.log('Got partial response', response) + // }, + // onFinal: (response) => { + // console.log('Got final response', response) + // }, + // onError: (error) => { + // console.error('Got error', error) + // }, + // }) + + // // Streaming should not have errors + // streamingIndirectAction satisfies StreamingHookResult<'TestAws'> + // streamingIndirectAction.data satisfies string | undefined + // streamingIndirectAction.streamingData satisfies string | null | undefined + // streamingIndirectAction.mutate satisfies (input: string) => Promise> + + // // Non-Streaming should have errors + // streamingIndirectAction satisfies NonStreamingHookResult<'TestAws'> + // streamingIndirectAction.data satisfies never + // streamingIndirectAction.streamingData satisfies never | undefined + // streamingIndirectAction.mutate satisfies (input: string) => Promise + + // const nonStreamingIndirectAction = useBamlAction(TestAws, { + // onFinal: (response) => { + // console.log('Got final response', response) + // }, + // onError: (error) => { + // console.error('Got error', error) + // }, + // }) + + // // Streaming should have errors + // nonStreamingIndirectAction satisfies StreamingHookResult<'TestAws'> + // nonStreamingIndirectAction.data satisfies never + // nonStreamingIndirectAction.streamingData satisfies never + // nonStreamingIndirectAction.mutate satisfies (input: string) => Promise> + + // // Non-Streaming should not have errors + // nonStreamingIndirectAction satisfies NonStreamingHookResult<'TestAws'> + // nonStreamingIndirectAction.data satisfies string | undefined + // nonStreamingIndirectAction.streamingData satisfies never | undefined + // nonStreamingIndirectAction.mutate satisfies (input: string) => Promise + + const { isLoading, error, isError, isSuccess, mutate, status, data, streamData } = streamingDirectAction + const [prompt, setPrompt] = React.useState('') + const [hasStarted, setHasStarted] = React.useState(false) + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + if (!prompt.trim()) return + + setHasStarted(true) + await mutate(prompt) + } + + // Reset hasStarted when the request is complete or reset + React.useEffect(() => { + if (!isLoading && !streamData && !data && !error) { + setHasStarted(false) + } + }, [isLoading, streamData, data, error]) + + return ( + // + // + // BAML Test + // Test the BAML integration by entering some text below. + // + +
+
+
+
+ +
+ + +
+
+
+ ) => setPrompt(e.target.value)} + placeholder='A cat in a hat...' + disabled={isLoading} + /> +
+ {!isSuccess && !isError && ( + + )} + {(isSuccess || isError) && ( + + )} +
+
+
+
+ + +
+ //
+ ) +} diff --git a/integ-tests/react/src/components/ui/alert.tsx b/integ-tests/react/src/components/ui/alert.tsx new file mode 100644 index 000000000..41fa7e056 --- /dev/null +++ b/integ-tests/react/src/components/ui/alert.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const alertVariants = cva( + "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground", + { + variants: { + variant: { + default: "bg-background text-foreground", + destructive: + "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +const Alert = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes & VariantProps +>(({ className, variant, ...props }, ref) => ( +
+)) +Alert.displayName = "Alert" + +const AlertTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertTitle.displayName = "AlertTitle" + +const AlertDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertDescription.displayName = "AlertDescription" + +export { Alert, AlertTitle, AlertDescription } diff --git a/integ-tests/react/src/components/ui/badge.tsx b/integ-tests/react/src/components/ui/badge.tsx new file mode 100644 index 000000000..46bb0c9cf --- /dev/null +++ b/integ-tests/react/src/components/ui/badge.tsx @@ -0,0 +1,30 @@ +import { type VariantProps, cva } from 'class-variance-authority' +import * as React from 'react' + +import { cn } from '@/lib/utils' + +const badgeVariants = cva( + 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', + { + variants: { + variant: { + default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80', + secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80', + destructive: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80', + outline: 'text-foreground', + ghost: 'border-transparent bg-transparent', + }, + }, + defaultVariants: { + variant: 'default', + }, + }, +) + +export interface BadgeProps extends React.HTMLAttributes, VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return
+} + +export { Badge, badgeVariants } diff --git a/integ-tests/react/src/components/ui/button.tsx b/integ-tests/react/src/components/ui/button.tsx new file mode 100644 index 000000000..36496a287 --- /dev/null +++ b/integ-tests/react/src/components/ui/button.tsx @@ -0,0 +1,56 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/integ-tests/react/src/components/ui/card.tsx b/integ-tests/react/src/components/ui/card.tsx new file mode 100644 index 000000000..f62edea57 --- /dev/null +++ b/integ-tests/react/src/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/integ-tests/react/src/components/ui/dropdown-menu.tsx b/integ-tests/react/src/components/ui/dropdown-menu.tsx new file mode 100644 index 000000000..0fc4c0e07 --- /dev/null +++ b/integ-tests/react/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,200 @@ +"use client" + +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" + +import { cn } from "@/lib/utils" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} diff --git a/integ-tests/react/src/components/ui/input.tsx b/integ-tests/react/src/components/ui/input.tsx new file mode 100644 index 000000000..68551b927 --- /dev/null +++ b/integ-tests/react/src/components/ui/input.tsx @@ -0,0 +1,22 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Input = React.forwardRef>( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/integ-tests/react/src/components/ui/label.tsx b/integ-tests/react/src/components/ui/label.tsx new file mode 100644 index 000000000..534182176 --- /dev/null +++ b/integ-tests/react/src/components/ui/label.tsx @@ -0,0 +1,26 @@ +"use client" + +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const labelVariants = cva( + "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" +) + +const Label = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, ...props }, ref) => ( + +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } diff --git a/integ-tests/react/src/components/ui/progress.tsx b/integ-tests/react/src/components/ui/progress.tsx new file mode 100644 index 000000000..5c87ea486 --- /dev/null +++ b/integ-tests/react/src/components/ui/progress.tsx @@ -0,0 +1,28 @@ +"use client" + +import * as React from "react" +import * as ProgressPrimitive from "@radix-ui/react-progress" + +import { cn } from "@/lib/utils" + +const Progress = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, value, ...props }, ref) => ( + + + +)) +Progress.displayName = ProgressPrimitive.Root.displayName + +export { Progress } diff --git a/integ-tests/react/src/components/ui/select.tsx b/integ-tests/react/src/components/ui/select.tsx new file mode 100644 index 000000000..112931f18 --- /dev/null +++ b/integ-tests/react/src/components/ui/select.tsx @@ -0,0 +1,144 @@ +'use client' + +import * as SelectPrimitive from '@radix-ui/react-select' +import { Check, ChevronDown, ChevronUp } from 'lucide-react' +import * as React from 'react' + +import { cn } from '@/lib/utils' + +const Select = SelectPrimitive.Root + +const SelectGroup = SelectPrimitive.Group + +const SelectValue = SelectPrimitive.Value + +const SelectTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + span]:line-clamp-1', + className, + )} + {...props} + > + {children} + + + + +)) +SelectTrigger.displayName = SelectPrimitive.Trigger.displayName + +const SelectScrollUpButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName + +const SelectScrollDownButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName + +const SelectContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, position = 'popper', ...props }, ref) => ( + + + + + {children} + + + + +)) +SelectContent.displayName = SelectPrimitive.Content.displayName + +const SelectLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SelectLabel.displayName = SelectPrimitive.Label.displayName + +const SelectItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +SelectItem.displayName = SelectPrimitive.Item.displayName + +const SelectSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SelectSeparator.displayName = SelectPrimitive.Separator.displayName + +export { + Select, + SelectGroup, + SelectValue, + SelectTrigger, + SelectContent, + SelectLabel, + SelectItem, + SelectSeparator, + SelectScrollUpButton, + SelectScrollDownButton, +} diff --git a/integ-tests/react/src/components/ui/separator.tsx b/integ-tests/react/src/components/ui/separator.tsx new file mode 100644 index 000000000..30df1aea4 --- /dev/null +++ b/integ-tests/react/src/components/ui/separator.tsx @@ -0,0 +1,22 @@ +'use client' + +import * as React from 'react' +import * as SeparatorPrimitive from '@radix-ui/react-separator' + +import { cn } from '@/lib/utils' + +const Separator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => ( + +)) +Separator.displayName = SeparatorPrimitive.Root.displayName + +export { Separator } diff --git a/integ-tests/react/src/components/ui/skeleton.tsx b/integ-tests/react/src/components/ui/skeleton.tsx new file mode 100644 index 000000000..01b8b6d4f --- /dev/null +++ b/integ-tests/react/src/components/ui/skeleton.tsx @@ -0,0 +1,15 @@ +import { cn } from "@/lib/utils" + +function Skeleton({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
+ ) +} + +export { Skeleton } diff --git a/integ-tests/react/src/components/ui/sonner.tsx b/integ-tests/react/src/components/ui/sonner.tsx new file mode 100644 index 000000000..452f4d9f0 --- /dev/null +++ b/integ-tests/react/src/components/ui/sonner.tsx @@ -0,0 +1,31 @@ +"use client" + +import { useTheme } from "next-themes" +import { Toaster as Sonner } from "sonner" + +type ToasterProps = React.ComponentProps + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme() + + return ( + + ) +} + +export { Toaster } diff --git a/integ-tests/react/src/components/ui/switch.tsx b/integ-tests/react/src/components/ui/switch.tsx new file mode 100644 index 000000000..6ee7887e4 --- /dev/null +++ b/integ-tests/react/src/components/ui/switch.tsx @@ -0,0 +1,29 @@ +'use client' + +import * as SwitchPrimitives from '@radix-ui/react-switch' +import * as React from 'react' + +import { cn } from '@/lib/utils' + +const Switch = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +Switch.displayName = SwitchPrimitives.Root.displayName + +export { Switch } diff --git a/integ-tests/react/src/components/ui/table.tsx b/integ-tests/react/src/components/ui/table.tsx new file mode 100644 index 000000000..7f3502f8b --- /dev/null +++ b/integ-tests/react/src/components/ui/table.tsx @@ -0,0 +1,117 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Table = React.forwardRef< + HTMLTableElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+ + +)) +Table.displayName = "Table" + +const TableHeader = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableHeader.displayName = "TableHeader" + +const TableBody = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableBody.displayName = "TableBody" + +const TableFooter = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + tr]:last:border-b-0", + className + )} + {...props} + /> +)) +TableFooter.displayName = "TableFooter" + +const TableRow = React.forwardRef< + HTMLTableRowElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableRow.displayName = "TableRow" + +const TableHead = React.forwardRef< + HTMLTableCellElement, + React.ThHTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableHead.displayName = "TableHead" + +const TableCell = React.forwardRef< + HTMLTableCellElement, + React.TdHTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableCell.displayName = "TableCell" + +const TableCaption = React.forwardRef< + HTMLTableCaptionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableCaption.displayName = "TableCaption" + +export { + Table, + TableHeader, + TableBody, + TableFooter, + TableHead, + TableRow, + TableCell, + TableCaption, +} diff --git a/integ-tests/react/src/components/ui/tabs.tsx b/integ-tests/react/src/components/ui/tabs.tsx new file mode 100644 index 000000000..26eb10912 --- /dev/null +++ b/integ-tests/react/src/components/ui/tabs.tsx @@ -0,0 +1,55 @@ +"use client" + +import * as React from "react" +import * as TabsPrimitive from "@radix-ui/react-tabs" + +import { cn } from "@/lib/utils" + +const Tabs = TabsPrimitive.Root + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsList.displayName = TabsPrimitive.List.displayName + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsContent.displayName = TabsPrimitive.Content.displayName + +export { Tabs, TabsList, TabsTrigger, TabsContent } diff --git a/integ-tests/react/src/components/ui/textarea.tsx b/integ-tests/react/src/components/ui/textarea.tsx new file mode 100644 index 000000000..4d858bb6b --- /dev/null +++ b/integ-tests/react/src/components/ui/textarea.tsx @@ -0,0 +1,22 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Textarea = React.forwardRef< + HTMLTextAreaElement, + React.ComponentProps<"textarea"> +>(({ className, ...props }, ref) => { + return ( +