Luisda
11/07/2025, 1:36 AM// ===== Shared Enums =====
enum IntegrationType {
Automatic
OneClick
API
Webhook
ViaThirdParty @alias("Via third-party")
Manual
}
enum EntityStatus {
Confirmed @alias("confirmed")
Hypothetical @alias("hypothetical")
}
// ===== Helper Classes =====
class Position {
x float @description("X coordinate (0-2000)")
y float @description("Y coordinate (0-1500)")
}
class Dimensions {
width float @description("Width in pixels")
height float @description("Height in pixels")
}
// ===== UPSERT Operations =====
class UpsertNodeOperation {
type "upsert_node"
product_id string @description("UUID of the product from catalog")
label string? @description("Optional custom label for the node")
position Position @description("2D coordinates on canvas (0-2000 x, 0-1500 y)")
parent_environment_id string? @description("ID of parent environment container (if any)")
status EntityStatus @description("confirmed = user owns, hypothetical = recommendation")
product_name string @description("Human-readable product name")
tagline string? @description("Product tagline from catalog")
}
class UpsertEdgeOperation {
type "upsert_edge"
// DO NOT include edge_id - generated server-side
source_product_id string @description("UUID of source node")
target_product_id string @description("UUID of target node")
label string @description("Edge label: '{integration_type}: {data_type}' (e.g., 'API: Customer data')")
description string @description("ONE sentence describing data flow from source to target")
bidirectional bool @description("true if data flows both ways")
integration_type IntegrationType @description("How the integration works")
status EntityStatus @description("confirmed or hypothetical")
}
I'm attaching the raw output from the LLM.
It is parseable JSON, yet BAML is returning operations with only one element (the 8th element). I'm having this with many examples
https://cdn.discordapp.com/attachments/1436167435878273207/1436167436008161393/message.txt?ex=6913e4a7&is=69129327&hm=5d93eedb4ec5d33759d709e89fd0e2767b55242f9f38539fb3961f7985014b7e&Luisda
11/07/2025, 1:38 AMjson
[
{
"type": "upsert_node",
"product_id": "d2c7b88a-3b6b-4b1b-8f1a-9e2b0a1b2c3d",
"product_name": "Google Meet",
"status": "confirmed",
"position": {
"x": 300,
"y": 500
}
},
{
"type": "upsert_node",
"product_id": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"product_name": "Granola",
"status": "confirmed",
"position": {
"x": 600,
"y": 500
}
},
{
"type": "upsert_node",
"product_id": "f1e2d3c4-b5a6-7d8c-9b0a-1c2d3e4f5a6b",
"product_name": "Notion",
"status": "confirmed",
"position": {
"x": 900,
"y": 500
}
},
{
"type": "upsert_edge",
"source_product_id": "d2c7b88a-3b6b-4b1b-8f1a-9e2b0a1b2c3d",
"target_product_id": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"label": "API: Audio stream",
"description": "Google Meet provides the audio stream for Granola to record.",
"integration_type": "API",
"status": "confirmed",
"bidirectional": false
},
{
"type": "upsert_edge",
"source_product_id": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"target_product_id": "f1e2d3c4-b5a6-7d8c-9b0a-1c2d3e4f5a6b",
"label": "Automatic: Meeting notes",
"description": "Granola saves transcribed meeting notes into Notion.",
"integration_type": "Automatic",
"status": "confirmed",
"bidirectional": false
}
]
The parser output is
{
"operations": [
{
"type": "upsert_edge",
"source_product_id": "d2c7b88a-3b6b-4b1b-8f1a-9e2b0a1b2c3d",
"target_product_id": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"label": "API: Audio stream",
"description": "Google Meet provides the audio stream for Granola to record.",
"bidirectional": false,
"integration_type": "API",
"status": "Confirmed"
}
]
}aaronv (BAML)
11/07/2025, 1:38 AMaaronv (BAML)
11/07/2025, 1:38 AMLuisda
11/07/2025, 1:39 AMclass DiagramCompositionResult {
operations (UpsertNodeOperation | UpsertEdgeOperation | UpsertEnvironmentOperation | DeleteNodeOperation | DeleteEdgeOperation | DeleteEnvironmentOperation)[] @description("List of operations to apply")
}
function ComposeDiagram(
request: DiagramCompositionRequest
) -> DiagramCompositionResult {aaronv (BAML)
11/07/2025, 1:41 AMposition from your schema and rerun it?Luisda
11/07/2025, 1:41 AMaaronv (BAML)
11/07/2025, 1:42 AMaaronv (BAML)
11/07/2025, 1:47 AMaaronv (BAML)
11/07/2025, 1:48 AMLuisda
11/07/2025, 1:51 AMposition and it works. Why?
Version 0.202.1aaronv (BAML)
11/07/2025, 1:51 AMaaronv (BAML)
11/07/2025, 1:52 AMLuisda
11/07/2025, 1:53 AMLuisda
11/07/2025, 1:59 AMaaronv (BAML)
11/07/2025, 1:59 AMaaronv (BAML)
11/07/2025, 2:00 AMbaml-cli version it also says 0.213.0?Luisda
11/07/2025, 2:00 AMoperationsLuisda
11/07/2025, 2:01 AMbaml-cli 0.213.0aaronv (BAML)
11/07/2025, 2:01 AMLuisda
11/07/2025, 2:02 AMaaronv (BAML)
11/07/2025, 2:02 AMaaronv (BAML)
11/07/2025, 2:02 AMaaronv (BAML)
11/07/2025, 2:03 AMLuisda
11/07/2025, 2:06 AMaaronv (BAML)
11/07/2025, 2:34 AMbroken💎shaders
11/08/2025, 9:06 PMbroken💎shaders
11/08/2025, 9:07 PM