diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..87c4859 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +nodejs 20.15.0 diff --git a/package-lock.json b/package-lock.json index bd37c99..ea8a652 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,24 +5,310 @@ "packages": { "": { "dependencies": { - "@google-labs/breadboard": "0.11.2", - "@google-labs/core-kit": "0.4.0", - "@xenova/transformers": "^2.15.1" + "@breadboard-ai/build": "^0.6.0", + "@google-labs/breadboard": "0.20.0", + "@google-labs/core-kit": "^0.9.0", + "@xenova/transformers": "^2.17.2" }, "devDependencies": { - "@types/node": "^20.11.20", - "tsx": "^4.7.1", - "typescript": "^5.3.3" + "@types/node": "^20.14.8", + "tsx": "^4.15.7", + "typescript": "^5.5.2" + }, + "engines": { + "node": ">=20.14.0 <=21" + } + }, + "node_modules/@breadboard-ai/build": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@breadboard-ai/build/-/build-0.6.0.tgz", + "integrity": "sha512-F7Jl19XVV9qNmZxF2vSXAcqKcIgM2brVsclBLtXY4CKGfBBAzgPI6Do+dmnD0tcjqQgM1M+0fE50hf61LkN0ZA==", + "dependencies": { + "@google-labs/breadboard": "^0.20.0", + "@types/json-schema": "^7.0.15" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -31,14 +317,100 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -48,33 +420,36 @@ } }, "node_modules/@google-labs/breadboard": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/@google-labs/breadboard/-/breadboard-0.11.2.tgz", - "integrity": "sha512-kNDZda2AHezNj+KX5zeImwBhTKJPQbWYGEBSNEa/f88DhSsjXhW6tjyUNN8IQFThPAEdux/d8DH/gHRHf1n5tQ==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@google-labs/breadboard/-/breadboard-0.20.0.tgz", + "integrity": "sha512-dhUe6iZj6vZsmwZIFuDyELHMclTP17bdRl69pFScXsSzOMDSG07THGjY4XJJsneoDskJ2b/6bwgmuLljUlqPaw==", + "license": "Apache-2.0", "dependencies": { - "@google-labs/breadboard-schema": "^1.3.0" + "@google-labs/breadboard-schema": "^1.4.1" }, "engines": { "node": ">=19.0.0" } }, "node_modules/@google-labs/breadboard-schema": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@google-labs/breadboard-schema/-/breadboard-schema-1.3.0.tgz", - "integrity": "sha512-zQCjftqxGej4OfYHGoh5jNDwhYYjglPUkC+TL6f5lzhzSKNDBgDuXYy3f5B8g3dzFvqzx1cPnxOi/Ubd536rwg==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@google-labs/breadboard-schema/-/breadboard-schema-1.4.1.tgz", + "integrity": "sha512-MdovsBImCDMvZvcNnZnNKFzamwOOzCIFYHWKM41O5kskXHL71UgyiYvmgNMPBuKqW473svotuhZEVFlr5Tykyw==" }, "node_modules/@google-labs/core-kit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@google-labs/core-kit/-/core-kit-0.4.0.tgz", - "integrity": "sha512-8ihkKjmUeWRCeK9Z9VvwwYoVkZ80ctclnbxXQ4OCp4I/vR8+EGoFV2BehqTq97vOA/H9xjbh3tWlXuOjGrDt9A==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@google-labs/core-kit/-/core-kit-0.9.0.tgz", + "integrity": "sha512-sx4hSGjgN4LyFt/ao8c6vIdPfva0e2rxUPMeNQety3gLsw4qEiddXJlCqvwIExSmIWfQg2eSyhCFhQ+VXNpdkg==", "dependencies": { - "@google-labs/breadboard": "^0.11.2" + "@breadboard-ai/build": "^0.6.0", + "@google-labs/breadboard": "^0.20.0" } }, "node_modules/@huggingface/jinja": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.1.3.tgz", - "integrity": "sha512-9KsiorsdIK8+7VmlamAT7Uh90zxAhC/SeKaKc80v58JhtPYuwaJpmR/ST7XAUxrHAFqHTCoTH5aJnJDwSL6xIQ==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.2.2.tgz", + "integrity": "sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==", + "license": "MIT", "engines": { "node": ">=18" } @@ -133,25 +508,32 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, "node_modules/@types/long": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/node": { - "version": "20.11.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", - "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", + "version": "20.14.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz", + "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==", + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@xenova/transformers": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/@xenova/transformers/-/transformers-2.15.1.tgz", - "integrity": "sha512-HX3kUZbr9v90PS/D2SyffGiFYQ6wQMbzwC1uLuCOA6nRSFOdr0TDnOTxfjS0RB6Phn6ThCTE1vX4n+NUsuobQg==", + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/@xenova/transformers/-/transformers-2.17.2.tgz", + "integrity": "sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==", + "license": "Apache-2.0", "dependencies": { - "@huggingface/jinja": "^0.1.3", + "@huggingface/jinja": "^0.2.2", "onnxruntime-web": "1.14.0", "sharp": "^0.32.0" }, @@ -330,11 +712,12 @@ } }, "node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -342,29 +725,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/expand-template": { @@ -390,11 +773,27 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", "dev": true, + "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -682,6 +1081,7 @@ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -844,13 +1244,14 @@ } }, "node_modules/tsx": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.1.tgz", - "integrity": "sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==", + "version": "4.15.7", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.7.tgz", + "integrity": "sha512-u3H0iSFDZM3za+VxkZ1kywdCeHCn+8/qHQS1MNoO2sONDgD95HlWtt8aB23OzeTmFP9IU4/8bZUdg58Uu5J4cg==", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "~0.19.10", - "get-tsconfig": "^4.7.2" + "esbuild": "~0.21.4", + "get-tsconfig": "^4.7.5" }, "bin": { "tsx": "dist/cli.mjs" @@ -874,10 +1275,11 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index 2e9edca..335b6c4 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,19 @@ { "dependencies": { - "@google-labs/breadboard": "0.11.2", - "@google-labs/core-kit": "0.4.0", - "@xenova/transformers": "^2.15.1" + "@breadboard-ai/build": "^0.6.0", + "@google-labs/breadboard": "0.20.0", + "@google-labs/core-kit": "^0.9.0", + "@xenova/transformers": "^2.17.2" }, "devDependencies": { - "@types/node": "^20.11.20", - "tsx": "^4.7.1", - "typescript": "^5.3.3" + "@types/node": "^20.14.8", + "tsx": "^4.15.7", + "typescript": "^5.5.2" }, + "engines": { + "node": ">=20.14.0 <=21" + }, + "engineStrict": true, "scripts": { "code-node": "tsx src/examples/code-node/index.ts", "code-node-dynamic": "tsx src/examples/code-node-dynamic/index.ts", diff --git a/src/examples/hello-world-new-syntax-harness/index.ts b/src/examples/hello-world-new-syntax-harness/index.ts new file mode 100644 index 0000000..99152aa --- /dev/null +++ b/src/examples/hello-world-new-syntax-harness/index.ts @@ -0,0 +1,77 @@ +import { board, input, output, serialize } from "@breadboard-ai/build"; +import { + BoardRunner, + GraphDescriptor, + Kit, + OutputValues, + asRuntimeKit, +} from "@google-labs/breadboard"; +import { RunConfig, run } from "@google-labs/breadboard/harness"; +import { InputResolveRequest } from "@google-labs/breadboard/remote"; +import Core, { code } from "@google-labs/core-kit"; + +const text = input({ + type: "string", + title: "Text", + description: "The text to output", + examples: ["Hello World"], + default: "Hello World", +}); + +const message = code( + { + $id: "text", + $metadata: { + title: "text", + description: "my message to return", + }, + text, + }, + { + message: "string", + }, + ({ text }) => { + return { message: text }; + } +); + +const boardInstance = board({ + title: "Hello World board using harness", + inputs: { text }, + outputs: { + message: output(message.outputs.message, { + title: "Hello World Output", + description: "Board Output", + }), + }, +}); + +const serialisedBoard: GraphDescriptor = serialize(boardInstance); + +const runner: BoardRunner = await BoardRunner.fromGraphDescriptor( + serialisedBoard +); + +const runTimeKits: Kit[] = [asRuntimeKit(Core)]; + +const runConfig: RunConfig = { + url: ".", + kits: runTimeKits, + remote: undefined, + proxy: undefined, + diagnostics: true, + runner: runner, +}; + +for await (const runResult of run(runConfig)) { + if (runResult.type === "input") { + await runResult.reply({ + inputs: { + text: "Hello World", + }, + } satisfies InputResolveRequest); + } else if (runResult.type === "output") { + const resultOutputs: OutputValues = runResult.data.outputs; + console.log("output with Kit", JSON.stringify(resultOutputs, null, 2)); + } +} diff --git a/src/examples/hello-world-new-syntax-no-harness/index.ts b/src/examples/hello-world-new-syntax-no-harness/index.ts new file mode 100644 index 0000000..5cf094d --- /dev/null +++ b/src/examples/hello-world-new-syntax-no-harness/index.ts @@ -0,0 +1,53 @@ +import { board, input, output, serialize } from "@breadboard-ai/build"; +import { + BoardRunner, + GraphDescriptor, + asRuntimeKit, +} from "@google-labs/breadboard"; + +import Core, { code } from "@google-labs/core-kit"; + +const text = input({ + type: "string", + title: "Text", + description: "The text to output", + examples: ["Hello World"], + default: "Hello World", +}); + +const message = code( + { + $id: "text", + $metadata: { + title: "text", + description: "my message to return", + }, + text, + }, + { + message: "string", + }, + ({ text }) => { + return { message: text }; + } +); + +const boardInstance = board({ + title: "Hello World Board without harness", + inputs: { text }, + outputs: { + message: output(message.outputs.message, { + title: "Hello World Output", + description: "Board Output", + }), + }, +}); + +const serialisedBoard: GraphDescriptor = serialize(boardInstance); + +const runner: BoardRunner = await BoardRunner.fromGraphDescriptor( + serialisedBoard +); + +console.log(JSON.stringify(await runner.runOnce( + {text: "Hello World"}, { kits: [asRuntimeKit(Core)] }), null, 2)) \ No newline at end of file diff --git a/src/examples/kits-new-syntax/README.md b/src/examples/kits-new-syntax/README.md new file mode 100644 index 0000000..494aefb --- /dev/null +++ b/src/examples/kits-new-syntax/README.md @@ -0,0 +1,76 @@ +## Mermaid +```mermaid +%%{init: 'themeVariables': { 'fontFamily': 'Fira Code, monospace' }}%% +graph TD; +input0[/"input
id='input-0'"/]:::input -- "inputMessage->message" --> myPassthrough0["myPassthrough
id='myPassthrough-0'"] +myPassthrough0["myPassthrough
id='myPassthrough-0'"] -- "pOut->message" --> output0{{"output
id='output-0'"}}:::output +classDef default stroke:#ffab40,fill:#fff2ccff,color:#000 +classDef input stroke:#3c78d8,fill:#c9daf8ff,color:#000 +classDef output stroke:#38761d,fill:#b6d7a8ff,color:#000 +classDef passthrough stroke:#a64d79,fill:#ead1dcff,color:#000 +classDef slot stroke:#a64d79,fill:#ead1dcff,color:#000 +classDef config stroke:#a64d79,fill:#ead1dcff,color:#000 +classDef secrets stroke:#db4437,fill:#f4cccc,color:#000 +classDef slotted stroke:#a64d79 +``` + +## JSON +```json +{ + "edges": [ + { + "from": "input-0", + "to": "myPassthrough-0", + "out": "inputMessage", + "in": "message" + }, + { + "from": "myPassthrough-0", + "to": "output-0", + "out": "pOut", + "in": "message" + } + ], + "nodes": [ + { + "id": "input-0", + "type": "input", + "configuration": { + "schema": { + "type": "object", + "properties": { + "inputMessage": { + "type": "string" + } + }, + "required": [ + "inputMessage" + ] + } + } + }, + { + "id": "output-0", + "type": "output", + "configuration": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ] + } + } + }, + { + "id": "myPassthrough-0", + "type": "myPassthrough", + "configuration": {} + } + ] +} +``` \ No newline at end of file diff --git a/src/examples/kits-new-syntax/graph.json b/src/examples/kits-new-syntax/graph.json new file mode 100644 index 0000000..767dc6b --- /dev/null +++ b/src/examples/kits-new-syntax/graph.json @@ -0,0 +1,57 @@ +{ + "edges": [ + { + "from": "input-0", + "to": "myPassthrough-0", + "out": "inputMessage", + "in": "message" + }, + { + "from": "myPassthrough-0", + "to": "output-0", + "out": "pOut", + "in": "message" + } + ], + "nodes": [ + { + "id": "input-0", + "type": "input", + "configuration": { + "schema": { + "type": "object", + "properties": { + "inputMessage": { + "type": "string" + } + }, + "required": [ + "inputMessage" + ] + } + } + }, + { + "id": "output-0", + "type": "output", + "configuration": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ] + } + } + }, + { + "id": "myPassthrough-0", + "type": "myPassthrough", + "configuration": {} + } + ] +} \ No newline at end of file diff --git a/src/examples/kits-new-syntax/index.ts b/src/examples/kits-new-syntax/index.ts new file mode 100644 index 0000000..94076b4 --- /dev/null +++ b/src/examples/kits-new-syntax/index.ts @@ -0,0 +1,77 @@ +import { + board, + defineNodeType, + input, + output, + serialize, +} from "@breadboard-ai/build"; +import { + BoardRunner, + GraphDescriptor, + Kit, + asRuntimeKit, +} from "@google-labs/breadboard"; +import { RunConfig } from "@google-labs/breadboard/harness"; +import { KitBuilder } from "@google-labs/breadboard/kits"; + +import { Core } from "@google-labs/core-kit"; +import { makeFiles } from "../../util/merMake.js"; + + +const myPassthrough = defineNodeType({ + name: "myPassthrough", + inputs: { + message: { type: "string" }, + }, + outputs: { + pOut: { type: "string" }, + }, + invoke: (inputs) => { return { pOut: inputs.message } }, +}); + +const inputMessage = input({ type: "string" }); + +const passthroughInstance = myPassthrough({ message: inputMessage }); +const boardInstance = board({ + inputs: { inputMessage }, + + outputs: { message: output(passthroughInstance.outputs.pOut) }, +}); + +const serialisedBoard: GraphDescriptor = serialize(boardInstance); +await makeFiles({ graph: serialisedBoard }); + +const runner: BoardRunner = await BoardRunner.fromGraphDescriptor( + serialisedBoard +); + +const runTimeKits: Kit[] = [ + asRuntimeKit(Core), + asRuntimeKit( + new KitBuilder({ + url: ".", + }).build({ myPassthrough: myPassthrough }) + ), +]; + +const runConfig: RunConfig = { + url: ".", + kits: runTimeKits, + remote: undefined, + proxy: undefined, + diagnostics: true, + runner: runner, +}; + +// for await +for await (const runResult of runner.run(runConfig)) { + console.log("RUNNER.RUN"); + console.log("=".repeat(80)); + if (runResult.type === "input") { + runResult.inputs = { + inputMessage: "What is the square root of pi?", + }; + } else if (runResult.type === "output") { + console.log("output with Kit", JSON.stringify(runResult.outputs, null, 2)); + } +} diff --git a/src/examples/node-types-kit/README.md b/src/examples/node-types-kit/README.md new file mode 100644 index 0000000..494aefb --- /dev/null +++ b/src/examples/node-types-kit/README.md @@ -0,0 +1,76 @@ +## Mermaid +```mermaid +%%{init: 'themeVariables': { 'fontFamily': 'Fira Code, monospace' }}%% +graph TD; +input0[/"input
id='input-0'"/]:::input -- "inputMessage->message" --> myPassthrough0["myPassthrough
id='myPassthrough-0'"] +myPassthrough0["myPassthrough
id='myPassthrough-0'"] -- "pOut->message" --> output0{{"output
id='output-0'"}}:::output +classDef default stroke:#ffab40,fill:#fff2ccff,color:#000 +classDef input stroke:#3c78d8,fill:#c9daf8ff,color:#000 +classDef output stroke:#38761d,fill:#b6d7a8ff,color:#000 +classDef passthrough stroke:#a64d79,fill:#ead1dcff,color:#000 +classDef slot stroke:#a64d79,fill:#ead1dcff,color:#000 +classDef config stroke:#a64d79,fill:#ead1dcff,color:#000 +classDef secrets stroke:#db4437,fill:#f4cccc,color:#000 +classDef slotted stroke:#a64d79 +``` + +## JSON +```json +{ + "edges": [ + { + "from": "input-0", + "to": "myPassthrough-0", + "out": "inputMessage", + "in": "message" + }, + { + "from": "myPassthrough-0", + "to": "output-0", + "out": "pOut", + "in": "message" + } + ], + "nodes": [ + { + "id": "input-0", + "type": "input", + "configuration": { + "schema": { + "type": "object", + "properties": { + "inputMessage": { + "type": "string" + } + }, + "required": [ + "inputMessage" + ] + } + } + }, + { + "id": "output-0", + "type": "output", + "configuration": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ] + } + } + }, + { + "id": "myPassthrough-0", + "type": "myPassthrough", + "configuration": {} + } + ] +} +``` \ No newline at end of file diff --git a/src/examples/node-types-kit/graph.json b/src/examples/node-types-kit/graph.json new file mode 100644 index 0000000..767dc6b --- /dev/null +++ b/src/examples/node-types-kit/graph.json @@ -0,0 +1,57 @@ +{ + "edges": [ + { + "from": "input-0", + "to": "myPassthrough-0", + "out": "inputMessage", + "in": "message" + }, + { + "from": "myPassthrough-0", + "to": "output-0", + "out": "pOut", + "in": "message" + } + ], + "nodes": [ + { + "id": "input-0", + "type": "input", + "configuration": { + "schema": { + "type": "object", + "properties": { + "inputMessage": { + "type": "string" + } + }, + "required": [ + "inputMessage" + ] + } + } + }, + { + "id": "output-0", + "type": "output", + "configuration": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ] + } + } + }, + { + "id": "myPassthrough-0", + "type": "myPassthrough", + "configuration": {} + } + ] +} \ No newline at end of file diff --git a/src/examples/node-types-kit/index.ts b/src/examples/node-types-kit/index.ts new file mode 100644 index 0000000..11eac42 --- /dev/null +++ b/src/examples/node-types-kit/index.ts @@ -0,0 +1,81 @@ +import { + board, + defineNodeType, + input, + output, + serialize, +} from "@breadboard-ai/build"; +import { + BoardRunner, + GraphDescriptor, + Kit, + OutputValues, + asRuntimeKit, +} from "@google-labs/breadboard"; +import { RunConfig, run } from "@google-labs/breadboard/harness"; +import { KitBuilder } from "@google-labs/breadboard/kits"; + +import { Core } from "@google-labs/core-kit"; +import { makeFiles } from "../../util/merMake.js"; +import { InputResolveRequest } from "@google-labs/breadboard/remote"; + + +const myPassthrough = defineNodeType({ + name: "myPassthrough", + inputs: { + message: { type: "string" }, + }, + outputs: { + pOut: { type: "string" }, + }, + invoke: (inputs) => { return { pOut: inputs.message } }, +}); + +const inputMessage = input({ type: "string" }); + +const passthroughInstance = myPassthrough({ message: inputMessage }); +const boardInstance = board({ + inputs: { inputMessage }, + + outputs: { message: output(passthroughInstance.outputs.pOut) }, +}); + +const serialisedBoard: GraphDescriptor = serialize(boardInstance); + +const runner: BoardRunner = await BoardRunner.fromGraphDescriptor( + serialisedBoard +); + +const runTimeKits: Kit[] = [ + asRuntimeKit(Core), + asRuntimeKit( + new KitBuilder({ + url: ".", + }).build({ myPassthrough: myPassthrough }) + ), +]; + +const runConfig: RunConfig = { + url: ".", + kits: runTimeKits, + remote: undefined, + proxy: undefined, + diagnostics: true, + runner: runner, +}; + + +for await (const runResult of run(runConfig)) { + if (runResult.type === "input") { + await runResult.reply({ + inputs: { + inputMessage: "What is the square root of pi?", + }, + } satisfies InputResolveRequest); + } else if (runResult.type === "output") { + const resultOutputs: OutputValues = runResult.data.outputs; + console.log("output with Kit", JSON.stringify(resultOutputs, null, 2)); + } +} + +await makeFiles({ graph: serialisedBoard }); \ No newline at end of file