diff --git a/package-lock.json b/package-lock.json index ecad4413fa..6cdad0f1ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,28 +17,28 @@ } }, "node_modules/@emnapi/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", - "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.4.tgz", + "integrity": "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==", "dev": true, "dependencies": { - "@emnapi/wasi-threads": "1.0.1", + "@emnapi/wasi-threads": "1.0.3", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz", + "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==", "dev": true, "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", - "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.3.tgz", + "integrity": "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==", "dev": true, "dependencies": { "tslib": "^2.4.0" @@ -73,10 +73,29 @@ "@tybys/wasm-util": "^0.9.0" } }, + "node_modules/@nx/devkit": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.8.2.tgz", + "integrity": "sha512-rr9p2/tZDQivIpuBUpZaFBK6bZ+b5SAjZk75V4tbCUqGW3+5OPuVvBPm+X+7PYwUF6rwSpewxkjWNeGskfCe+Q==", + "dev": true, + "dependencies": { + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "nx": ">= 19 <= 21" + } + }, "node_modules/@nx/nx-darwin-arm64": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.8.1.tgz", - "integrity": "sha512-Gat4Io66cV70Oa1CjrMJPsEx5ICpAGayv9hejOtBUEDb6XjR12L2e4wV+4EHliF0UbEcuZAr8/lTROEPk0RGWQ==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.8.2.tgz", + "integrity": "sha512-t+bmCn6sRPNGU6hnSyWNvbQYA/KgsxGZKYlaCLRwkNhI2akModcBUqtktJzCKd1XHDqs6EkEFBWjFr8/kBEkSg==", "cpu": [ "arm64" ], @@ -90,9 +109,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.8.1.tgz", - "integrity": "sha512-TB9mZk7neGFKgBr2wSBgY6c4kFF9vvChNSp3TrEeXR3FppFcYG5eK4AaKfzWCpYb0wMtseAm7NMX1Lu74utClQ==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.8.2.tgz", + "integrity": "sha512-pt/wmDLM31Es8/EzazlyT5U+ou2l60rfMNFGCLqleHEQ0JUTc0KWnOciBLbHIQFiPsCQZJFEKyfV5V/ncePmmw==", "cpu": [ "x64" ], @@ -106,9 +125,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.8.1.tgz", - "integrity": "sha512-7UQu0/Afna5Af2GagEQ6rbKfUh75NfUn+g66wsoQoUGBvDW0U7B8P3Ph5Bk4Urub0BSfMVcNg2X7CgfypLFN/g==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.8.2.tgz", + "integrity": "sha512-joZxFbgJfkHkB9uMIJr73Gpnm9pnpvr0XKGbWC409/d2x7q1qK77tKdyhGm+A3+kaZFwstNVPmCUtUwJYyU6LA==", "cpu": [ "x64" ], @@ -122,9 +141,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.8.1.tgz", - "integrity": "sha512-Tjh8JkTP+x1jSrzx+ofx1pKpkhIbXd7bi0bPdpYt6NI1lZz2HB/dv8vtdzP80jXEDztHf0AeGnEJVgJKsgI6yg==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.8.2.tgz", + "integrity": "sha512-98O/qsxn4vIMPY/FyzvmVrl7C5yFhCUVk0/4PF+PA2SvtQ051L1eMRY6bq/lb69qfN6szJPZ41PG5mPx0NeLZw==", "cpu": [ "arm" ], @@ -138,9 +157,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.8.1.tgz", - "integrity": "sha512-2+qPIwav2vrytH6pe7fukBe8+yN5JGbEDCnDO8wKQsHeeZMLAQJiZ7EJH/+vynRkI7oWf87mihIKNQME19+w6A==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.8.2.tgz", + "integrity": "sha512-h6a+HxwfSpxsi4KpxGgPh9GDBmD2E+XqGCdfYpobabxqEBvlnIlJyuDhlRR06cTWpuNXHpRdrVogmV6m/YbtDg==", "cpu": [ "arm64" ], @@ -154,9 +173,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.8.1.tgz", - "integrity": "sha512-DsKc+DiMsuHqpBWchUUUg6zv4OaexRqpFXys6auZlrpFpn80kSqLQ3S4zZ5AUu+26wxZqEVJs+uxHGwFbhEssQ==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.8.2.tgz", + "integrity": "sha512-4Ev+jM0VAxDHV/dFgMXjQTCXS4I8W4oMe7FSkXpG8RUn6JK659DC8ExIDPoGIh+Cyqq6r6mw1CSia+ciQWICWQ==", "cpu": [ "arm64" ], @@ -170,9 +189,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.1.tgz", - "integrity": "sha512-Kzru44beVKAmSG84ShuMIIfyu2Uu5r8gsHdtiQPBIOGkZa0Z/e6YtUxcN3w1UZ7yvvzoQ4pQLvqU6UZRSWZtEg==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.2.tgz", + "integrity": "sha512-nR0ev+wxu+nQYRd7bhqggOxK7UfkV6h+Ko1mumUFyrM5GvPpz/ELhjJFSnMcOkOMcvH0b6G5uTBJvN1XWCkbmg==", "cpu": [ "x64" ], @@ -186,9 +205,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.8.1.tgz", - "integrity": "sha512-cSVVb7DVMhrxCaj/n55okBZS6lZoP5a5vynOBGIV4z3/OJLev+xI9A+3imn/aXnBl8iS69HogYyrW0YTXv4Xaw==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.8.2.tgz", + "integrity": "sha512-ost41l5yc2aq2Gc9bMMpaPi/jkXqbXEMEPHrxWKuKmaek3K2zbVDQzvBBNcQKxf/mlCsrqN4QO0mKYSRRqag5A==", "cpu": [ "x64" ], @@ -202,9 +221,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.8.1.tgz", - "integrity": "sha512-gte5HcvI24CN6b9I6IYTXh/A0CtRfnlAFaJomPpfT8Wcq637aOZzS0arAEZVoU8QZty1350hj6sfu+wSIjoP7A==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.8.2.tgz", + "integrity": "sha512-0SEOqT/daBG5WtM9vOGilrYaAuf1tiALdrFavY62+/arXYxXemUKmRI5qoKDTnvoLMBGkJs6kxhMO5b7aUXIvQ==", "cpu": [ "arm64" ], @@ -218,9 +237,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.8.1.tgz", - "integrity": "sha512-6c2fVEPdPwJdnRbckBatRDF/g6JAp6p3Mfl90DpuaEF2DZC5pmCXKOsXE0aSIZ+gODom2JIchM++2KmDZPJUoA==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.8.2.tgz", + "integrity": "sha512-iIsY+tVqes/NOqTbJmggL9Juie/iaDYlWgXA9IUv88FE9thqWKhVj4/tCcPjsOwzD+1SVna3YISEEFsx5UV4ew==", "cpu": [ "x64" ], @@ -234,9 +253,9 @@ } }, "node_modules/@nxlv/python": { - "version": "20.14.0", - "resolved": "https://registry.npmjs.org/@nxlv/python/-/python-20.14.0.tgz", - "integrity": "sha512-x47avwg8OHteAq8t45cBqcKWrPU0dd1CpNmdTSzO5bvL/RD1uO+AkLnbGGjDqamuPZfKhmr/9MJ79qiFZ+NJHg==", + "version": "20.15.1", + "resolved": "https://registry.npmjs.org/@nxlv/python/-/python-20.15.1.tgz", + "integrity": "sha512-Yw2NHmLfHdZJDrAZv8svBjAJd/AePSD5KSu5wJwtKhnqE7ZkM0xJ+O35s5dQPw+ei545xCtZf80M9APoyL7mbA==", "dev": true, "dependencies": { "@iarna/toml": "^2.2.5", @@ -253,49 +272,6 @@ "uuid": "^9.0.0" } }, - "node_modules/@nxlv/python/node_modules/@nx/devkit": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.3.0.tgz", - "integrity": "sha512-u9oRd2F33DLNWPbzpYGW7xuMEYUAOwO9DLP9nGYpxbZXy6Z4AdoKeqhN+KBTyg8+DyQGuKUSEXcWriDyLLgcHw==", - "dev": true, - "dependencies": { - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "minimatch": "9.0.3", - "semver": "^7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" - }, - "peerDependencies": { - "nx": ">= 19 <= 21" - } - }, - "node_modules/@nxlv/python/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@nxlv/python/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -394,9 +370,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", - "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", "dev": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -442,13 +418,12 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/buffer": { @@ -475,6 +450,19 @@ "ieee754": "^1.1.13" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -660,6 +648,20 @@ "url": "https://dotenvx.com" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -682,9 +684,9 @@ "dev": true }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "dependencies": { "once": "^1.4.0" @@ -702,10 +704,55 @@ "node": ">=8.6" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "engines": { "node": ">=6" @@ -766,15 +813,6 @@ "minimatch": "^5.0.1" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -797,9 +835,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true, "funding": [ { @@ -817,13 +855,15 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -846,9 +886,9 @@ "dev": true }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -859,11 +899,14 @@ "node": ">=14.14" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-caller-file": { "version": "2.0.5", @@ -874,24 +917,53 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "call-bind-apply-helpers": "^1.0.2", + "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" }, "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { @@ -909,6 +981,45 @@ "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -930,24 +1041,14 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -1035,6 +1136,28 @@ "node": ">=10" } }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", @@ -1142,16 +1265,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, "node_modules/mime-db": { @@ -1185,15 +1305,18 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -1224,9 +1347,9 @@ } }, "node_modules/nx": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/nx/-/nx-20.8.1.tgz", - "integrity": "sha512-73Uw8YXpsjeLqHSl7NMCmGdCs+8ynPzoNJFWAqVanPETEY9zPd5wevVQmeyzYtNNQU35uj6Os4iUzYunmwnFaA==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-20.8.2.tgz", + "integrity": "sha512-mDKpbH3vEpUFDx0rrLh+tTqLq1PYU8KiD/R7OVZGd1FxQxghx2HOl32MiqNsfPcw6AvKlXhslbwIESV+N55FLQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -1270,16 +1393,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "20.8.1", - "@nx/nx-darwin-x64": "20.8.1", - "@nx/nx-freebsd-x64": "20.8.1", - "@nx/nx-linux-arm-gnueabihf": "20.8.1", - "@nx/nx-linux-arm64-gnu": "20.8.1", - "@nx/nx-linux-arm64-musl": "20.8.1", - "@nx/nx-linux-x64-gnu": "20.8.1", - "@nx/nx-linux-x64-musl": "20.8.1", - "@nx/nx-win32-arm64-msvc": "20.8.1", - "@nx/nx-win32-x64-msvc": "20.8.1" + "@nx/nx-darwin-arm64": "20.8.2", + "@nx/nx-darwin-x64": "20.8.2", + "@nx/nx-freebsd-x64": "20.8.2", + "@nx/nx-linux-arm-gnueabihf": "20.8.2", + "@nx/nx-linux-arm64-gnu": "20.8.2", + "@nx/nx-linux-arm64-musl": "20.8.2", + "@nx/nx-linux-x64-gnu": "20.8.2", + "@nx/nx-linux-x64-musl": "20.8.2", + "@nx/nx-win32-arm64-msvc": "20.8.2", + "@nx/nx-win32-x64-msvc": "20.8.2" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -1294,30 +1417,6 @@ } } }, - "node_modules/nx/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/nx/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1381,15 +1480,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -1432,9 +1522,9 @@ "dev": true }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, "node_modules/readable-stream": { @@ -1482,21 +1572,6 @@ "node": ">=8" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1518,13 +1593,10 @@ ] }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -1638,15 +1710,12 @@ } }, "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/tsconfig-paths": { @@ -1664,15 +1733,15 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -1685,10 +1754,14 @@ "dev": true }, "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -1749,22 +1822,16 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", "dev": true, "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yargs": { diff --git a/packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py b/packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py index 2628368d73..ccde48ada9 100644 --- a/packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py +++ b/packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py @@ -1,11 +1,14 @@ """OpenTelemetry OpenAI Agents instrumentation""" + import os import time import json +import threading from typing import Collection from wrapt import wrap_function_wrapper -from opentelemetry.trace import SpanKind, get_tracer, Tracer +from opentelemetry.trace import SpanKind, get_tracer, Tracer, set_span_in_context from opentelemetry.trace.status import Status, StatusCode +from opentelemetry import context from opentelemetry.metrics import Histogram, Meter, get_meter from opentelemetry.instrumentation.utils import unwrap from opentelemetry.instrumentation.instrumentor import BaseInstrumentor @@ -18,12 +21,15 @@ from opentelemetry.semconv._incubating.attributes.gen_ai_attributes import ( GEN_AI_COMPLETION, ) -from .utils import set_span_attribute +from .utils import set_span_attribute, JSONEncoder from agents import FunctionTool, WebSearchTool, FileSearchTool, ComputerTool _instruments = ("openai-agents >= 0.0.19",) +_root_span_storage = {} +_instrumented_tools = set() + class OpenAIAgentsInstrumentor(BaseInstrumentor): """An instrumentor for OpenAI Agents SDK.""" @@ -57,11 +63,22 @@ def _instrument(self, **kwargs): duration_histogram, token_histogram, ), - + ) + wrap_function_wrapper( + "agents.run", + "AgentRunner._run_single_turn_streamed", + _wrap_agent_run_streamed( + tracer, + duration_histogram, + token_histogram, + ), ) def _uninstrument(self, **kwargs): unwrap("agents.run.AgentRunner", "_get_new_response") + unwrap("agents.run.AgentRunner", "_run_single_turn_streamed") + _instrumented_tools.clear() + _root_span_storage.clear() def with_tracer_wrapper(func): @@ -75,7 +92,7 @@ async def wrapper(wrapped, instance, args, kwargs): wrapped, instance, args, - kwargs + kwargs, ) return wrapper @@ -83,6 +100,108 @@ async def wrapper(wrapped, instance, args, kwargs): return _with_tracer +@with_tracer_wrapper +async def _wrap_agent_run_streamed( + tracer: Tracer, + duration_histogram: Histogram, + token_histogram: Histogram, + wrapped, + instance, + args, + kwargs, +): + """Wrapper for _run_single_turn_streamed to handle streaming execution.""" + agent = args[1] if len(args) > 1 else None + run_config = args[4] if len(args) > 4 else None + + if not agent: + return await wrapped(*args, **kwargs) + + agent_name = getattr(agent, "name", "agent") + thread_id = threading.get_ident() + + root_span = _root_span_storage.get(thread_id) + + if root_span: + ctx = set_span_in_context(root_span, context.get_current()) + else: + ctx = context.get_current() + + with tracer.start_as_current_span( + f"{agent_name}.agent", + kind=SpanKind.CLIENT, + attributes={ + SpanAttributes.TRACELOOP_SPAN_KIND: (TraceloopSpanKindValues.AGENT.value), + }, + context=ctx, + ) as span: + try: + if not root_span: + _root_span_storage[thread_id] = span + + extract_agent_details(agent, span) + set_model_settings_span_attributes(agent, span) + extract_run_config_details(run_config, span) + + try: + json_args = [] + for arg in args: + try: + json_args.append(json.loads(json.dumps(arg, cls=JSONEncoder))) + except (TypeError, ValueError): + json_args.append(str(arg)) + + json_kwargs = {} + for key, value in kwargs.items(): + try: + json_kwargs[key] = json.loads( + json.dumps(value, cls=JSONEncoder) + ) + except (TypeError, ValueError): + json_kwargs[key] = str(value) + + input_data = {"args": json_args, "kwargs": json_kwargs} + input_str = json.dumps(input_data) + span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_INPUT, input_str) + except Exception: + fallback_data = { + "args": [str(arg) for arg in args], + "kwargs": {k: str(v) for k, v in kwargs.items()}, + } + span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_INPUT, json.dumps(fallback_data)) + + tools = getattr(agent, "tools", []) + if tools: + extract_tool_details(tracer, tools) + + start_time = time.time() + result = await wrapped(*args, **kwargs) + end_time = time.time() + + try: + output_str = json.dumps(result, cls=JSONEncoder) + span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_OUTPUT, output_str) + except Exception: + span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_OUTPUT, json.dumps(str(result))) + + span.set_status(Status(StatusCode.OK)) + + if duration_histogram: + duration = end_time - start_time + duration_histogram.record( + duration, + attributes={ + "gen_ai.agent.name": agent_name, + }, + ) + + return result + + except Exception as e: + span.set_status(Status(StatusCode.ERROR, str(e))) + raise + + @with_tracer_wrapper async def _wrap_agent_run( tracer: Tracer, @@ -98,40 +217,72 @@ async def _wrap_agent_run( prompt_list = args[2] if len(args) > 2 else None agent_name = getattr(agent, "name", "agent") model_name = get_model_name(agent) + thread_id = threading.get_ident() + root_span = _root_span_storage.get(thread_id) + + if root_span: + ctx = set_span_in_context(root_span, context.get_current()) + else: + ctx = context.get_current() with tracer.start_as_current_span( f"{agent_name}.agent", kind=SpanKind.CLIENT, attributes={ - SpanAttributes.LLM_SYSTEM: "openai", - SpanAttributes.LLM_REQUEST_MODEL: model_name, - SpanAttributes.TRACELOOP_SPAN_KIND: ( - TraceloopSpanKindValues.AGENT.value - ) + SpanAttributes.TRACELOOP_SPAN_KIND: (TraceloopSpanKindValues.AGENT.value), }, + context=ctx, ) as span: try: + if not root_span: + _root_span_storage[thread_id] = span extract_agent_details(agent, span) set_model_settings_span_attributes(agent, span) extract_run_config_details(run_config, span) - tools = ( - args[4] - if len(args) > 4 and isinstance(args[4], list) - else [] - ) + + try: + json_args = [] + for arg in args: + try: + json_args.append(json.loads(json.dumps(arg, cls=JSONEncoder))) + except (TypeError, ValueError): + json_args.append(str(arg)) + + json_kwargs = {} + for key, value in kwargs.items(): + try: + json_kwargs[key] = json.loads( + json.dumps(value, cls=JSONEncoder) + ) + except (TypeError, ValueError): + json_kwargs[key] = str(value) + + input_data = {"args": json_args, "kwargs": json_kwargs} + input_str = json.dumps(input_data) + span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_INPUT, input_str) + except Exception: + fallback_data = { + "args": [str(arg) for arg in args], + "kwargs": {k: str(v) for k, v in kwargs.items()}, + } + span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_INPUT, json.dumps(fallback_data)) + + tools = args[4] if len(args) > 4 and isinstance(args[4], list) else [] if tools: extract_tool_details(tracer, tools) + start_time = time.time() response = await wrapped(*args, **kwargs) + + try: + output_str = json.dumps(response, cls=JSONEncoder) + span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_OUTPUT, output_str) + except Exception: + span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_OUTPUT, json.dumps(str(response))) if duration_histogram: duration_histogram.record( time.time() - start_time, - attributes={ - SpanAttributes.LLM_SYSTEM: "openai", - SpanAttributes.LLM_RESPONSE_MODEL: model_name, - - }, ) if isinstance(prompt_list, list): set_prompt_attributes(span, prompt_list) @@ -149,9 +300,7 @@ async def _wrap_agent_run( def get_model_name(agent): - model_attr = getattr( - getattr(agent, "model", None), "model", "unknown_model" - ) + model_attr = getattr(getattr(agent, "model", None), "model", "unknown_model") if model_attr == "unknown_model": model_attr = getattr(agent, "model", None) return model_attr @@ -174,9 +323,7 @@ def extract_agent_details(test_agent, span): if name: set_span_attribute(span, "gen_ai.agent.name", name) if instructions: - set_span_attribute( - span, "gen_ai.agent.description", instructions - ) + set_span_attribute(span, "gen_ai.agent.description", instructions) if handoff_description: set_span_attribute( span, "gen_ai.agent.handoff_description", handoff_description @@ -185,7 +332,7 @@ def extract_agent_details(test_agent, span): for idx, h in enumerate(handoffs): handoff_info = { "name": getattr(h, "name", None), - "instructions": getattr(h, "instructions", None) + "instructions": getattr(h, "instructions", None), } handoff_json = json.dumps(handoff_info) span.set_attribute(f"openai.agent.handoff{idx}", handoff_json) @@ -243,84 +390,118 @@ def extract_run_config_details(run_config, span): def extract_tool_details(tracer: Tracer, tools): + """Create spans for hosted tools and wrap FunctionTool execution.""" + thread_id = threading.get_ident() + root_span = _root_span_storage.get(thread_id) + for tool in tools: if isinstance(tool, FunctionTool): - tool_name = getattr(tool, "name", "tool") - elif isinstance(tool, FileSearchTool): - tool_name = "FileSearchTool" - elif isinstance(tool, WebSearchTool): - tool_name = "WebSearchTool" - elif isinstance(tool, ComputerTool): - tool_name = "ComputerTool" - else: - tool_name = getattr(tool, "name", "unknown_tool") - with tracer.start_as_current_span( - f"{tool_name}.tool", - kind=SpanKind.INTERNAL, - attributes={ - SpanAttributes.TRACELOOP_SPAN_KIND: ( - TraceloopSpanKindValues.TOOL.value - ) - }, - ) as span: - try: - if tool_name: - if isinstance(tool, FunctionTool): - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.name", tool_name - ) - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.type", "FunctionTool" - ) - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.description", - tool.description - ) - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.strict_json_schema", - tool.strict_json_schema - ) - elif isinstance(tool, FileSearchTool): - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.type", "FileSearchTool" - ) - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.vector_store_ids", - str(tool.vector_store_ids) - ) - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.max_num_results", - tool.max_num_results - ) - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.include_search_results", - tool.include_search_results - ) - elif isinstance(tool, WebSearchTool): - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.type", "WebSearchTool" - ) - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.search_context_size", - tool.search_context_size - ) - if tool.user_location: + tool_id = id(tool) + if tool_id in _instrumented_tools: + continue + + _instrumented_tools.add(tool_id) + + original_on_invoke_tool = tool.on_invoke_tool + + def create_wrapped_tool(original_tool, original_func): + async def wrapped_on_invoke_tool(tool_context, args_json): + tool_name = getattr(original_tool, "name", "tool") + if root_span: + ctx = set_span_in_context(root_span, context.get_current()) + else: + ctx = context.get_current() + + with tracer.start_as_current_span( + f"{tool_name}.tool", + kind=SpanKind.INTERNAL, + attributes={ + SpanAttributes.TRACELOOP_SPAN_KIND: ( + TraceloopSpanKindValues.TOOL.value + ) + }, + context=ctx, + ) as span: + try: span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.user_location", - str(tool.user_location) + f"{GEN_AI_COMPLETION}.tool.name", tool_name ) - elif isinstance(tool, ComputerTool): - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.type", "ComputerTool" - ) - span.set_attribute( - f"{GEN_AI_COMPLETION}.tool.computer", - str(tool.computer) - ) - span.set_status(Status(StatusCode.OK)) - except Exception as e: - span.set_status(Status(StatusCode.ERROR, str(e))) - raise + span.set_attribute( + f"{GEN_AI_COMPLETION}.tool.type", "FunctionTool" + ) + span.set_attribute( + f"{GEN_AI_COMPLETION}.tool.description", + original_tool.description, + ) + span.set_attribute( + f"{GEN_AI_COMPLETION}.tool.strict_json_schema", + original_tool.strict_json_schema, + ) + span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_INPUT, args_json) + result = await original_func(tool_context, args_json) + span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_OUTPUT, str(result)) + span.set_status(Status(StatusCode.OK)) + return result + except Exception as e: + span.set_status(Status(StatusCode.ERROR, str(e))) + raise + + return wrapped_on_invoke_tool + + tool.on_invoke_tool = create_wrapped_tool(tool, original_on_invoke_tool) + + elif isinstance(tool, (WebSearchTool, FileSearchTool, ComputerTool)): + tool_name = type(tool).__name__ + if root_span: + ctx = set_span_in_context(root_span, context.get_current()) + else: + ctx = context.get_current() + + span = tracer.start_span( + f"{tool_name}.tool", + kind=SpanKind.INTERNAL, + attributes={ + SpanAttributes.TRACELOOP_SPAN_KIND: ( + TraceloopSpanKindValues.TOOL.value + ) + }, + context=ctx, + ) + + if isinstance(tool, WebSearchTool): + span.set_attribute(f"{GEN_AI_COMPLETION}.tool.type", "WebSearchTool") + span.set_attribute( + f"{GEN_AI_COMPLETION}.tool.search_context_size", + tool.search_context_size, + ) + if tool.user_location: + span.set_attribute( + f"{GEN_AI_COMPLETION}.tool.user_location", + str(tool.user_location), + ) + elif isinstance(tool, FileSearchTool): + span.set_attribute(f"{GEN_AI_COMPLETION}.tool.type", "FileSearchTool") + span.set_attribute( + f"{GEN_AI_COMPLETION}.tool.vector_store_ids", + str(tool.vector_store_ids), + ) + if tool.max_num_results: + span.set_attribute( + f"{GEN_AI_COMPLETION}.tool.max_num_results", + tool.max_num_results, + ) + span.set_attribute( + f"{GEN_AI_COMPLETION}.tool.include_search_results", + tool.include_search_results, + ) + elif isinstance(tool, ComputerTool): + span.set_attribute(f"{GEN_AI_COMPLETION}.tool.type", "ComputerTool") + span.set_attribute( + f"{GEN_AI_COMPLETION}.tool.computer", str(tool.computer) + ) + + span.set_status(Status(StatusCode.OK)) + span.end() def set_prompt_attributes(span, message_history): @@ -358,8 +539,9 @@ def set_response_content_span_attribute(response, span): if msg_type: types.append(msg_type) - if hasattr(output_message, "content") and \ - isinstance(output_message.content, list): + if hasattr(output_message, "content") and isinstance( + output_message.content, list + ): for content_item in output_message.content: if hasattr(content_item, "text"): contents.append(content_item.text) diff --git a/packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/utils.py b/packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/utils.py index c527ed2827..f6e0513931 100644 --- a/packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/utils.py +++ b/packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/utils.py @@ -1,3 +1,5 @@ +import dataclasses +import json import os from opentelemetry import context as context_api @@ -17,3 +19,20 @@ def should_send_prompts(): env_setting = os.getenv("TRACELOOP_TRACE_CONTENT", "true") override = context_api.get_value("override_enable_content_tracing") return _is_truthy(env_setting) or bool(override) + + +class JSONEncoder(json.JSONEncoder): + def default(self, o): + if dataclasses.is_dataclass(o): + return dataclasses.asdict(o) + + if hasattr(o, "to_json"): + return o.to_json() + + if hasattr(o, "json"): + return o.json() + + if hasattr(o, "__class__"): + return o.__class__.__name__ + + return super().default(o) diff --git a/packages/opentelemetry-instrumentation-openai-agents/tests/cassettes/test_openai_agents/test_recipe_workflow_agent_handoffs_with_function_tools.yaml b/packages/opentelemetry-instrumentation-openai-agents/tests/cassettes/test_openai_agents/test_recipe_workflow_agent_handoffs_with_function_tools.yaml new file mode 100644 index 0000000000..1a03d2270f --- /dev/null +++ b/packages/opentelemetry-instrumentation-openai-agents/tests/cassettes/test_openai_agents/test_recipe_workflow_agent_handoffs_with_function_tools.yaml @@ -0,0 +1,1271 @@ +interactions: +- request: + body: '{"include":[],"input":[{"role":"user","content":"Can you edit the carbonara + recipe to be vegetarian?"}],"instructions":"You handle general conversation + and route recipe tasks to the recipe editor agent.","model":"gpt-4o","stream":true,"tools":[{"name":"transfer_to_recipe_editor_agent","parameters":{"additionalProperties":false,"type":"object","properties":{},"required":[]},"strict":true,"type":"function","description":"Handoff + to the Recipe Editor Agent agent to handle the request. "}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '491' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - Agents/Python 0.0.19 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.93.0 + x-stainless-read-timeout: + - '600' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.13.3 + method: POST + uri: https://api.openai.com/v1/responses + response: + body: + string: 'event: response.created + + data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_687797d265bc8198b902e6c2a65afa7e0d6b8b45457ab3f6","object":"response","created_at":1752668114,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"You + handle general conversation and route recipe tasks to the recipe editor agent.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"function","description":"Handoff + to the Recipe Editor Agent agent to handle the request. ","name":"transfer_to_recipe_editor_agent","parameters":{"additionalProperties":false,"type":"object","properties":{},"required":[]},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}} + + + event: response.in_progress + + data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_687797d265bc8198b902e6c2a65afa7e0d6b8b45457ab3f6","object":"response","created_at":1752668114,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"You + handle general conversation and route recipe tasks to the recipe editor agent.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"function","description":"Handoff + to the Recipe Editor Agent agent to handle the request. ","name":"transfer_to_recipe_editor_agent","parameters":{"additionalProperties":false,"type":"object","properties":{},"required":[]},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}} + + + event: response.output_item.added + + data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"fc_687797d3585c8198a10da0bb0675654f0d6b8b45457ab3f6","type":"function_call","status":"in_progress","arguments":"","call_id":"call_G4Z2qWrolF0Tnex4twCoZ2Pd","name":"transfer_to_recipe_editor_agent"}} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":3,"item_id":"fc_687797d3585c8198a10da0bb0675654f0d6b8b45457ab3f6","output_index":0,"delta":"{}"} + + + event: response.function_call_arguments.done + + data: {"type":"response.function_call_arguments.done","sequence_number":4,"item_id":"fc_687797d3585c8198a10da0bb0675654f0d6b8b45457ab3f6","output_index":0,"arguments":"{}"} + + + event: response.output_item.done + + data: {"type":"response.output_item.done","sequence_number":5,"output_index":0,"item":{"id":"fc_687797d3585c8198a10da0bb0675654f0d6b8b45457ab3f6","type":"function_call","status":"completed","arguments":"{}","call_id":"call_G4Z2qWrolF0Tnex4twCoZ2Pd","name":"transfer_to_recipe_editor_agent"}} + + + event: response.completed + + data: {"type":"response.completed","sequence_number":6,"response":{"id":"resp_687797d265bc8198b902e6c2a65afa7e0d6b8b45457ab3f6","object":"response","created_at":1752668114,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":"You + handle general conversation and route recipe tasks to the recipe editor agent.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[{"id":"fc_687797d3585c8198a10da0bb0675654f0d6b8b45457ab3f6","type":"function_call","status":"completed","arguments":"{}","call_id":"call_G4Z2qWrolF0Tnex4twCoZ2Pd","name":"transfer_to_recipe_editor_agent"}],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"default","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"function","description":"Handoff + to the Recipe Editor Agent agent to handle the request. ","name":"transfer_to_recipe_editor_agent","parameters":{"additionalProperties":false,"type":"object","properties":{},"required":[]},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":70,"input_tokens_details":{"cached_tokens":0},"output_tokens":14,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":84},"user":null,"metadata":{}}} + + + ' + headers: + CF-RAY: + - 96016c7ff9bac222-TLV + Connection: + - keep-alive + Content-Type: + - text/event-stream; charset=utf-8 + Date: + - Wed, 16 Jul 2025 12:15:14 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=BDNYhYWhMslFbspQl6lhHUsBIGKcLEFTBIVwmfjNuNM-1752668114-1.0.1.1-WUG9GstDVYKBm3gJp1ZN8ejxRZm5ZNkNkdH0iaCRZVFqJoxqB7f.LM216mjxwbPtgelxtKRRHEcW0Z65kDy1JS8ARbOd4StrdV4axOIKH9A; + path=/; expires=Wed, 16-Jul-25 12:45:14 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=nLqaLjPFLgA4PLuLsxvDcKYzoJHnWiQ02JCxicciv0Q-1752668114638-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - traceloop + openai-processing-ms: + - '155' + openai-project: + - proj_tzz1TbPPOXaf6j9tEkVUBIAa + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-request-id: + - req_77273a7aa52d3acc5a453e7440682437 + status: + code: 200 + message: OK +- request: + body: '{"include":[],"input":[{"role":"user","content":"Can you edit the carbonara + recipe to be vegetarian?"},{"arguments":"{}","call_id":"call_G4Z2qWrolF0Tnex4twCoZ2Pd","name":"transfer_to_recipe_editor_agent","type":"function_call","id":"fc_687797d3585c8198a10da0bb0675654f0d6b8b45457ab3f6","status":"completed"},{"call_id":"call_G4Z2qWrolF0Tnex4twCoZ2Pd","output":"{\"assistant\": + \"Recipe Editor Agent\"}","type":"function_call_output"}],"instructions":"You + are a recipe editor specialist. Help users search and modify recipes using your + tools.","model":"gpt-4o","stream":true,"tools":[{"name":"search_recipes","parameters":{"properties":{"query":{"default":"","title":"Query","type":"string"}},"title":"search_recipes_args","type":"object","additionalProperties":false,"required":["query"]},"strict":true,"type":"function","description":"Search + and browse recipes in the database."},{"name":"plan_and_apply_recipe_modifications","parameters":{"$defs":{"Recipe":{"properties":{"id":{"title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"ingredients":{"items":{"type":"string"},"title":"Ingredients","type":"array"},"instructions":{"items":{"type":"string"},"title":"Instructions","type":"array"},"prep_time":{"title":"Prep + Time","type":"string"},"cook_time":{"title":"Cook Time","type":"string"},"servings":{"title":"Servings","type":"integer"}},"required":["id","name","ingredients","instructions","prep_time","cook_time","servings"],"title":"Recipe","type":"object","additionalProperties":false}},"properties":{"recipe":{"$ref":"#/$defs/Recipe"},"modification_request":{"title":"Modification + Request","type":"string"}},"required":["recipe","modification_request"],"title":"plan_and_apply_recipe_modifications_args","type":"object","additionalProperties":false},"strict":true,"type":"function","description":"Plan + modifications to a recipe based on user request and apply them."}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '1896' + content-type: + - application/json + cookie: + - __cf_bm=BDNYhYWhMslFbspQl6lhHUsBIGKcLEFTBIVwmfjNuNM-1752668114-1.0.1.1-WUG9GstDVYKBm3gJp1ZN8ejxRZm5ZNkNkdH0iaCRZVFqJoxqB7f.LM216mjxwbPtgelxtKRRHEcW0Z65kDy1JS8ARbOd4StrdV4axOIKH9A; + _cfuvid=nLqaLjPFLgA4PLuLsxvDcKYzoJHnWiQ02JCxicciv0Q-1752668114638-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - Agents/Python 0.0.19 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.93.0 + x-stainless-read-timeout: + - '600' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.13.3 + method: POST + uri: https://api.openai.com/v1/responses + response: + body: + string: 'event: response.created + + data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_687797d3d7d48198b89feda1256f219c0d6b8b45457ab3f6","object":"response","created_at":1752668115,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"You + are a recipe editor specialist. Help users search and modify recipes using + your tools.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"function","description":"Search + and browse recipes in the database.","name":"search_recipes","parameters":{"properties":{"query":{"default":"","title":"Query","type":"string"}},"title":"search_recipes_args","type":"object","additionalProperties":false,"required":["query"]},"strict":true},{"type":"function","description":"Plan + modifications to a recipe based on user request and apply them.","name":"plan_and_apply_recipe_modifications","parameters":{"$defs":{"Recipe":{"properties":{"id":{"title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"ingredients":{"items":{"type":"string"},"title":"Ingredients","type":"array"},"instructions":{"items":{"type":"string"},"title":"Instructions","type":"array"},"prep_time":{"title":"Prep + Time","type":"string"},"cook_time":{"title":"Cook Time","type":"string"},"servings":{"title":"Servings","type":"integer"}},"required":["id","name","ingredients","instructions","prep_time","cook_time","servings"],"title":"Recipe","type":"object","additionalProperties":false}},"properties":{"recipe":{"$ref":"#/$defs/Recipe"},"modification_request":{"title":"Modification + Request","type":"string"}},"required":["recipe","modification_request"],"title":"plan_and_apply_recipe_modifications_args","type":"object","additionalProperties":false},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}} + + + event: response.in_progress + + data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_687797d3d7d48198b89feda1256f219c0d6b8b45457ab3f6","object":"response","created_at":1752668115,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"You + are a recipe editor specialist. Help users search and modify recipes using + your tools.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"function","description":"Search + and browse recipes in the database.","name":"search_recipes","parameters":{"properties":{"query":{"default":"","title":"Query","type":"string"}},"title":"search_recipes_args","type":"object","additionalProperties":false,"required":["query"]},"strict":true},{"type":"function","description":"Plan + modifications to a recipe based on user request and apply them.","name":"plan_and_apply_recipe_modifications","parameters":{"$defs":{"Recipe":{"properties":{"id":{"title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"ingredients":{"items":{"type":"string"},"title":"Ingredients","type":"array"},"instructions":{"items":{"type":"string"},"title":"Instructions","type":"array"},"prep_time":{"title":"Prep + Time","type":"string"},"cook_time":{"title":"Cook Time","type":"string"},"servings":{"title":"Servings","type":"integer"}},"required":["id","name","ingredients","instructions","prep_time","cook_time","servings"],"title":"Recipe","type":"object","additionalProperties":false}},"properties":{"recipe":{"$ref":"#/$defs/Recipe"},"modification_request":{"title":"Modification + Request","type":"string"}},"required":["recipe","modification_request"],"title":"plan_and_apply_recipe_modifications_args","type":"object","additionalProperties":false},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}} + + + event: response.output_item.added + + data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","type":"function_call","status":"in_progress","arguments":"","call_id":"call_IccAUFvC8epJdvCZTzyak8pY","name":"search_recipes"}} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":3,"item_id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","output_index":0,"delta":"{\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":4,"item_id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","output_index":0,"delta":"query"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":5,"item_id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","output_index":0,"delta":"\":\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":6,"item_id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","output_index":0,"delta":"carbon"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":7,"item_id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","output_index":0,"delta":"ara"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":8,"item_id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","output_index":0,"delta":"\"}"} + + + event: response.function_call_arguments.done + + data: {"type":"response.function_call_arguments.done","sequence_number":9,"item_id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","output_index":0,"arguments":"{\"query\":\"carbonara\"}"} + + + event: response.output_item.done + + data: {"type":"response.output_item.done","sequence_number":10,"output_index":0,"item":{"id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","type":"function_call","status":"completed","arguments":"{\"query\":\"carbonara\"}","call_id":"call_IccAUFvC8epJdvCZTzyak8pY","name":"search_recipes"}} + + + event: response.completed + + data: {"type":"response.completed","sequence_number":11,"response":{"id":"resp_687797d3d7d48198b89feda1256f219c0d6b8b45457ab3f6","object":"response","created_at":1752668115,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":"You + are a recipe editor specialist. Help users search and modify recipes using + your tools.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[{"id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","type":"function_call","status":"completed","arguments":"{\"query\":\"carbonara\"}","call_id":"call_IccAUFvC8epJdvCZTzyak8pY","name":"search_recipes"}],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"default","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"function","description":"Search + and browse recipes in the database.","name":"search_recipes","parameters":{"properties":{"query":{"default":"","title":"Query","type":"string"}},"title":"search_recipes_args","type":"object","additionalProperties":false,"required":["query"]},"strict":true},{"type":"function","description":"Plan + modifications to a recipe based on user request and apply them.","name":"plan_and_apply_recipe_modifications","parameters":{"$defs":{"Recipe":{"properties":{"id":{"title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"ingredients":{"items":{"type":"string"},"title":"Ingredients","type":"array"},"instructions":{"items":{"type":"string"},"title":"Instructions","type":"array"},"prep_time":{"title":"Prep + Time","type":"string"},"cook_time":{"title":"Cook Time","type":"string"},"servings":{"title":"Servings","type":"integer"}},"required":["id","name","ingredients","instructions","prep_time","cook_time","servings"],"title":"Recipe","type":"object","additionalProperties":false}},"properties":{"recipe":{"$ref":"#/$defs/Recipe"},"modification_request":{"title":"Modification + Request","type":"string"}},"required":["recipe","modification_request"],"title":"plan_and_apply_recipe_modifications_args","type":"object","additionalProperties":false},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":221,"input_tokens_details":{"cached_tokens":0},"output_tokens":17,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":238},"user":null,"metadata":{}}} + + + ' + headers: + CF-RAY: + - 96016c8b0d14c222-TLV + Connection: + - keep-alive + Content-Type: + - text/event-stream; charset=utf-8 + Date: + - Wed, 16 Jul 2025 12:15:15 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - traceloop + openai-processing-ms: + - '91' + openai-project: + - proj_tzz1TbPPOXaf6j9tEkVUBIAa + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-request-id: + - req_ada4d5980cdcda82bd46538077212de6 + status: + code: 200 + message: OK +- request: + body: '{"data":[{"object":"trace","id":"trace_e92c4e79b2da4e8d952f880c6a11f539","workflow_name":"Agent + workflow","group_id":null,"metadata":null},{"object":"trace.span","id":"span_f18a1434cb864435bc3a6f04","trace_id":"trace_e92c4e79b2da4e8d952f880c6a11f539","parent_id":"span_77522f1e83774230bbca2853","started_at":"2025-07-16T12:15:13.517989+00:00","ended_at":"2025-07-16T12:15:15.548726+00:00","span_data":{"type":"response","response_id":"resp_687797d265bc8198b902e6c2a65afa7e0d6b8b45457ab3f6"},"error":null},{"object":"trace.span","id":"span_512c18098cb843458e1c0862","trace_id":"trace_e92c4e79b2da4e8d952f880c6a11f539","parent_id":"span_77522f1e83774230bbca2853","started_at":"2025-07-16T12:15:15.589720+00:00","ended_at":"2025-07-16T12:15:15.589809+00:00","span_data":{"type":"handoff","from_agent":"Main + Chat Agent","to_agent":"Recipe Editor Agent"},"error":null},{"object":"trace.span","id":"span_77522f1e83774230bbca2853","trace_id":"trace_e92c4e79b2da4e8d952f880c6a11f539","parent_id":null,"started_at":"2025-07-16T12:15:13.511328+00:00","ended_at":"2025-07-16T12:15:15.590005+00:00","span_data":{"type":"agent","name":"Main + Chat Agent","handoffs":["Recipe Editor Agent"],"tools":[],"output_type":"str"},"error":null},{"object":"trace.span","id":"span_e83a5cc692a14a43b68d6342","trace_id":"trace_e92c4e79b2da4e8d952f880c6a11f539","parent_id":"span_80772018d5d84d75ab92db15","started_at":"2025-07-16T12:15:15.590893+00:00","ended_at":"2025-07-16T12:15:16.788504+00:00","span_data":{"type":"response","response_id":"resp_687797d3d7d48198b89feda1256f219c0d6b8b45457ab3f6"},"error":null},{"object":"trace.span","id":"span_80dda4789df3410f9dfc9f8d","trace_id":"trace_e92c4e79b2da4e8d952f880c6a11f539","parent_id":"span_80772018d5d84d75ab92db15","started_at":"2025-07-16T12:15:16.788976+00:00","ended_at":"2025-07-16T12:15:16.789479+00:00","span_data":{"type":"function","name":"search_recipes","input":"{\"query\":\"carbonara\"}","output":"status=''success'' + message=''Found 1 recipes matching \"carbonara\"'' recipes={''spaghetti_carbonara'': + Recipe(id=''spaghetti_carbonara'', name=''Spaghetti Carbonara'', ingredients=[''400g + spaghetti'', ''200g pancetta'', ''4 large eggs'', ''100g Pecorino Romano cheese''], + instructions=[''Cook spaghetti'', ''Dice pancetta'', ''Whisk eggs with cheese''], + prep_time=''10 minutes'', cook_time=''15 minutes'', servings=4)} recipe_count=1 + query=''carbonara''","mcp_data":null},"error":null}]}' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '2396' + content-type: + - application/json + host: + - api.openai.com + openai-beta: + - traces=v1 + user-agent: + - python-httpx/0.28.1 + method: POST + uri: https://api.openai.com/v1/traces/ingest + response: + body: + string: '' + headers: + CF-RAY: + - 96016c9cfd8e9d70-TLV + Connection: + - keep-alive + Date: + - Wed, 16 Jul 2025 12:15:19 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=NWcBrnY6wsKh4x6ZG8RrLxmbyJH8qV5BRJCoVqwRhNM-1752668119-1.0.1.1-WFjhaN5ncm6tJWd1.GXlWoyaj0.UIDuj5Vr8odfmF4VIq1ReBxLzWBZq.naYozkDui0ykKNTuIobj0531umxLlshkRyMUv9oERhku3zNifE; + path=/; expires=Wed, 16-Jul-25 12:45:19 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=PNZkbwdWAj2t3eo7ygakr2BVQbssjQfqwHpc.mJ.sQE-1752668119118-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + X-Content-Type-Options: + - nosniff + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - traceloop + openai-processing-ms: + - '85' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-request-id: + - req_35d9c6c508b536e8c6df2e18ae20f9b9 + status: + code: 204 + message: No Content +- request: + body: '{"include":[],"input":[{"role":"user","content":"Can you edit the carbonara + recipe to be vegetarian?"},{"arguments":"{}","call_id":"call_G4Z2qWrolF0Tnex4twCoZ2Pd","name":"transfer_to_recipe_editor_agent","type":"function_call","id":"fc_687797d3585c8198a10da0bb0675654f0d6b8b45457ab3f6","status":"completed"},{"call_id":"call_G4Z2qWrolF0Tnex4twCoZ2Pd","output":"{\"assistant\": + \"Recipe Editor Agent\"}","type":"function_call_output"},{"arguments":"{\"query\":\"carbonara\"}","call_id":"call_IccAUFvC8epJdvCZTzyak8pY","name":"search_recipes","type":"function_call","id":"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6","status":"completed"},{"call_id":"call_IccAUFvC8epJdvCZTzyak8pY","output":"status=''success'' + message=''Found 1 recipes matching \"carbonara\"'' recipes={''spaghetti_carbonara'': + Recipe(id=''spaghetti_carbonara'', name=''Spaghetti Carbonara'', ingredients=[''400g + spaghetti'', ''200g pancetta'', ''4 large eggs'', ''100g Pecorino Romano cheese''], + instructions=[''Cook spaghetti'', ''Dice pancetta'', ''Whisk eggs with cheese''], + prep_time=''10 minutes'', cook_time=''15 minutes'', servings=4)} recipe_count=1 + query=''carbonara''","type":"function_call_output"}],"instructions":"You are + a recipe editor specialist. Help users search and modify recipes using your + tools.","model":"gpt-4o","stream":true,"tools":[{"name":"search_recipes","parameters":{"properties":{"query":{"default":"","title":"Query","type":"string"}},"title":"search_recipes_args","type":"object","additionalProperties":false,"required":["query"]},"strict":true,"type":"function","description":"Search + and browse recipes in the database."},{"name":"plan_and_apply_recipe_modifications","parameters":{"$defs":{"Recipe":{"properties":{"id":{"title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"ingredients":{"items":{"type":"string"},"title":"Ingredients","type":"array"},"instructions":{"items":{"type":"string"},"title":"Instructions","type":"array"},"prep_time":{"title":"Prep + Time","type":"string"},"cook_time":{"title":"Cook Time","type":"string"},"servings":{"title":"Servings","type":"integer"}},"required":["id","name","ingredients","instructions","prep_time","cook_time","servings"],"title":"Recipe","type":"object","additionalProperties":false}},"properties":{"recipe":{"$ref":"#/$defs/Recipe"},"modification_request":{"title":"Modification + Request","type":"string"}},"required":["recipe","modification_request"],"title":"plan_and_apply_recipe_modifications_args","type":"object","additionalProperties":false},"strict":true,"type":"function","description":"Plan + modifications to a recipe based on user request and apply them."}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '2617' + content-type: + - application/json + cookie: + - __cf_bm=BDNYhYWhMslFbspQl6lhHUsBIGKcLEFTBIVwmfjNuNM-1752668114-1.0.1.1-WUG9GstDVYKBm3gJp1ZN8ejxRZm5ZNkNkdH0iaCRZVFqJoxqB7f.LM216mjxwbPtgelxtKRRHEcW0Z65kDy1JS8ARbOd4StrdV4axOIKH9A; + _cfuvid=nLqaLjPFLgA4PLuLsxvDcKYzoJHnWiQ02JCxicciv0Q-1752668114638-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - Agents/Python 0.0.19 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.93.0 + x-stainless-read-timeout: + - '600' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.13.3 + method: POST + uri: https://api.openai.com/v1/responses + response: + body: + string: 'event: response.created + + data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_687797d56d888198a17a73f8084f9a400d6b8b45457ab3f6","object":"response","created_at":1752668117,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"You + are a recipe editor specialist. Help users search and modify recipes using + your tools.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"function","description":"Search + and browse recipes in the database.","name":"search_recipes","parameters":{"properties":{"query":{"default":"","title":"Query","type":"string"}},"title":"search_recipes_args","type":"object","additionalProperties":false,"required":["query"]},"strict":true},{"type":"function","description":"Plan + modifications to a recipe based on user request and apply them.","name":"plan_and_apply_recipe_modifications","parameters":{"$defs":{"Recipe":{"properties":{"id":{"title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"ingredients":{"items":{"type":"string"},"title":"Ingredients","type":"array"},"instructions":{"items":{"type":"string"},"title":"Instructions","type":"array"},"prep_time":{"title":"Prep + Time","type":"string"},"cook_time":{"title":"Cook Time","type":"string"},"servings":{"title":"Servings","type":"integer"}},"required":["id","name","ingredients","instructions","prep_time","cook_time","servings"],"title":"Recipe","type":"object","additionalProperties":false}},"properties":{"recipe":{"$ref":"#/$defs/Recipe"},"modification_request":{"title":"Modification + Request","type":"string"}},"required":["recipe","modification_request"],"title":"plan_and_apply_recipe_modifications_args","type":"object","additionalProperties":false},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}} + + + event: response.in_progress + + data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_687797d56d888198a17a73f8084f9a400d6b8b45457ab3f6","object":"response","created_at":1752668117,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":"You + are a recipe editor specialist. Help users search and modify recipes using + your tools.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"function","description":"Search + and browse recipes in the database.","name":"search_recipes","parameters":{"properties":{"query":{"default":"","title":"Query","type":"string"}},"title":"search_recipes_args","type":"object","additionalProperties":false,"required":["query"]},"strict":true},{"type":"function","description":"Plan + modifications to a recipe based on user request and apply them.","name":"plan_and_apply_recipe_modifications","parameters":{"$defs":{"Recipe":{"properties":{"id":{"title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"ingredients":{"items":{"type":"string"},"title":"Ingredients","type":"array"},"instructions":{"items":{"type":"string"},"title":"Instructions","type":"array"},"prep_time":{"title":"Prep + Time","type":"string"},"cook_time":{"title":"Cook Time","type":"string"},"servings":{"title":"Servings","type":"integer"}},"required":["id","name","ingredients","instructions","prep_time","cook_time","servings"],"title":"Recipe","type":"object","additionalProperties":false}},"properties":{"recipe":{"$ref":"#/$defs/Recipe"},"modification_request":{"title":"Modification + Request","type":"string"}},"required":["recipe","modification_request"],"title":"plan_and_apply_recipe_modifications_args","type":"object","additionalProperties":false},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}} + + + event: response.output_item.added + + data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","type":"function_call","status":"in_progress","arguments":"","call_id":"call_bfYNnt8KPBuP3X37lpy5Kynj","name":"plan_and_apply_recipe_modifications"}} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":3,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"{\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":4,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"recipe"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":5,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\":{\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":6,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"id"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":7,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\":\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":8,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"sp"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":9,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"aghetti"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":10,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"_car"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":11,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"bon"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":12,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"ara"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":13,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\",\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":14,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"name"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":15,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\":\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":16,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"Sp"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":17,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"aghetti"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":18,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + Carbon"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":19,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"ara"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":20,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\",\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":21,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"ingredients"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":22,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\":[\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":23,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"400"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":24,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"g"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":25,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + spaghetti"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":26,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\",\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":27,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"200"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":28,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"g"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":29,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + panc"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":30,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"etta"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":31,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\",\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":32,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"4"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":33,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + large"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":34,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + eggs"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":35,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\",\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":36,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"100"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":37,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"g"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":38,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + Pec"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":39,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"or"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":40,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"ino"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":41,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + Romano"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":42,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + cheese"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":43,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\"],"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":44,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":45,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"instructions"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":46,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\":[\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":47,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"Cook"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":48,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + spaghetti"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":49,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\",\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":50,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"Dice"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":51,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + panc"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":52,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"etta"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":53,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\",\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":54,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"Wh"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":55,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"isk"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":56,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + eggs"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":57,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + with"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":58,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + cheese"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":59,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\"],"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":60,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":61,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"prep"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":62,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"_time"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":63,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\":\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":64,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"10"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":65,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + minutes"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":66,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\",\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":67,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"cook"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":68,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"_time"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":69,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\":\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":70,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"15"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":71,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + minutes"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":72,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\",\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":73,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"serv"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":74,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"ings"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":75,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\":"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":76,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"4"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":77,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"},\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":78,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"mod"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":79,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"ification"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":80,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"_request"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":81,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"\":\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":82,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"Make"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":83,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + the"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":84,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + recipe"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":85,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + vegetarian"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":86,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + by"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":87,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + replacing"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":88,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + the"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":89,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + panc"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":90,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"etta"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":91,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + with"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":92,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + a"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":93,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + vegetarian"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":94,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":" + option"} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":95,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":".\""} + + + event: response.function_call_arguments.delta + + data: {"type":"response.function_call_arguments.delta","sequence_number":96,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"delta":"}"} + + + event: response.function_call_arguments.done + + data: {"type":"response.function_call_arguments.done","sequence_number":97,"item_id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","output_index":0,"arguments":"{\"recipe\":{\"id\":\"spaghetti_carbonara\",\"name\":\"Spaghetti + Carbonara\",\"ingredients\":[\"400g spaghetti\",\"200g pancetta\",\"4 large + eggs\",\"100g Pecorino Romano cheese\"],\"instructions\":[\"Cook spaghetti\",\"Dice + pancetta\",\"Whisk eggs with cheese\"],\"prep_time\":\"10 minutes\",\"cook_time\":\"15 + minutes\",\"servings\":4},\"modification_request\":\"Make the recipe vegetarian + by replacing the pancetta with a vegetarian option.\"}"} + + + event: response.output_item.done + + data: {"type":"response.output_item.done","sequence_number":98,"output_index":0,"item":{"id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","type":"function_call","status":"completed","arguments":"{\"recipe\":{\"id\":\"spaghetti_carbonara\",\"name\":\"Spaghetti + Carbonara\",\"ingredients\":[\"400g spaghetti\",\"200g pancetta\",\"4 large + eggs\",\"100g Pecorino Romano cheese\"],\"instructions\":[\"Cook spaghetti\",\"Dice + pancetta\",\"Whisk eggs with cheese\"],\"prep_time\":\"10 minutes\",\"cook_time\":\"15 + minutes\",\"servings\":4},\"modification_request\":\"Make the recipe vegetarian + by replacing the pancetta with a vegetarian option.\"}","call_id":"call_bfYNnt8KPBuP3X37lpy5Kynj","name":"plan_and_apply_recipe_modifications"}} + + + event: response.completed + + data: {"type":"response.completed","sequence_number":99,"response":{"id":"resp_687797d56d888198a17a73f8084f9a400d6b8b45457ab3f6","object":"response","created_at":1752668117,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":"You + are a recipe editor specialist. Help users search and modify recipes using + your tools.","max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[{"id":"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6","type":"function_call","status":"completed","arguments":"{\"recipe\":{\"id\":\"spaghetti_carbonara\",\"name\":\"Spaghetti + Carbonara\",\"ingredients\":[\"400g spaghetti\",\"200g pancetta\",\"4 large + eggs\",\"100g Pecorino Romano cheese\"],\"instructions\":[\"Cook spaghetti\",\"Dice + pancetta\",\"Whisk eggs with cheese\"],\"prep_time\":\"10 minutes\",\"cook_time\":\"15 + minutes\",\"servings\":4},\"modification_request\":\"Make the recipe vegetarian + by replacing the pancetta with a vegetarian option.\"}","call_id":"call_bfYNnt8KPBuP3X37lpy5Kynj","name":"plan_and_apply_recipe_modifications"}],"parallel_tool_calls":true,"previous_response_id":null,"reasoning":{"effort":null,"summary":null},"service_tier":"default","store":true,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[{"type":"function","description":"Search + and browse recipes in the database.","name":"search_recipes","parameters":{"properties":{"query":{"default":"","title":"Query","type":"string"}},"title":"search_recipes_args","type":"object","additionalProperties":false,"required":["query"]},"strict":true},{"type":"function","description":"Plan + modifications to a recipe based on user request and apply them.","name":"plan_and_apply_recipe_modifications","parameters":{"$defs":{"Recipe":{"properties":{"id":{"title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"ingredients":{"items":{"type":"string"},"title":"Ingredients","type":"array"},"instructions":{"items":{"type":"string"},"title":"Instructions","type":"array"},"prep_time":{"title":"Prep + Time","type":"string"},"cook_time":{"title":"Cook Time","type":"string"},"servings":{"title":"Servings","type":"integer"}},"required":["id","name","ingredients","instructions","prep_time","cook_time","servings"],"title":"Recipe","type":"object","additionalProperties":false}},"properties":{"recipe":{"$ref":"#/$defs/Recipe"},"modification_request":{"title":"Modification + Request","type":"string"}},"required":["recipe","modification_request"],"title":"plan_and_apply_recipe_modifications_args","type":"object","additionalProperties":false},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":354,"input_tokens_details":{"cached_tokens":0},"output_tokens":108,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":462},"user":null,"metadata":{}}} + + + ' + headers: + CF-RAY: + - 96016c928ce6c222-TLV + Connection: + - keep-alive + Content-Type: + - text/event-stream; charset=utf-8 + Date: + - Wed, 16 Jul 2025 12:15:17 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - traceloop + openai-processing-ms: + - '119' + openai-project: + - proj_tzz1TbPPOXaf6j9tEkVUBIAa + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-request-id: + - req_996b0a7810a441db8a5efac81a3e8a6b + status: + code: 200 + message: OK +- request: + body: "{\"include\":[],\"input\":[{\"role\":\"user\",\"content\":\"Can you edit + the carbonara recipe to be vegetarian?\"},{\"arguments\":\"{}\",\"call_id\":\"call_G4Z2qWrolF0Tnex4twCoZ2Pd\",\"name\":\"transfer_to_recipe_editor_agent\",\"type\":\"function_call\",\"id\":\"fc_687797d3585c8198a10da0bb0675654f0d6b8b45457ab3f6\",\"status\":\"completed\"},{\"call_id\":\"call_G4Z2qWrolF0Tnex4twCoZ2Pd\",\"output\":\"{\\\"assistant\\\": + \\\"Recipe Editor Agent\\\"}\",\"type\":\"function_call_output\"},{\"arguments\":\"{\\\"query\\\":\\\"carbonara\\\"}\",\"call_id\":\"call_IccAUFvC8epJdvCZTzyak8pY\",\"name\":\"search_recipes\",\"type\":\"function_call\",\"id\":\"fc_687797d48af48198b1ab7f54decf5c1b0d6b8b45457ab3f6\",\"status\":\"completed\"},{\"call_id\":\"call_IccAUFvC8epJdvCZTzyak8pY\",\"output\":\"status='success' + message='Found 1 recipes matching \\\"carbonara\\\"' recipes={'spaghetti_carbonara': + Recipe(id='spaghetti_carbonara', name='Spaghetti Carbonara', ingredients=['400g + spaghetti', '200g pancetta', '4 large eggs', '100g Pecorino Romano cheese'], + instructions=['Cook spaghetti', 'Dice pancetta', 'Whisk eggs with cheese'], + prep_time='10 minutes', cook_time='15 minutes', servings=4)} recipe_count=1 + query='carbonara'\",\"type\":\"function_call_output\"},{\"arguments\":\"{\\\"recipe\\\":{\\\"id\\\":\\\"spaghetti_carbonara\\\",\\\"name\\\":\\\"Spaghetti + Carbonara\\\",\\\"ingredients\\\":[\\\"400g spaghetti\\\",\\\"200g pancetta\\\",\\\"4 + large eggs\\\",\\\"100g Pecorino Romano cheese\\\"],\\\"instructions\\\":[\\\"Cook + spaghetti\\\",\\\"Dice pancetta\\\",\\\"Whisk eggs with cheese\\\"],\\\"prep_time\\\":\\\"10 + minutes\\\",\\\"cook_time\\\":\\\"15 minutes\\\",\\\"servings\\\":4},\\\"modification_request\\\":\\\"Make + the recipe vegetarian by replacing the pancetta with a vegetarian option.\\\"}\",\"call_id\":\"call_bfYNnt8KPBuP3X37lpy5Kynj\",\"name\":\"plan_and_apply_recipe_modifications\",\"type\":\"function_call\",\"id\":\"fc_687797d65530819897a58547242b69480d6b8b45457ab3f6\",\"status\":\"completed\"},{\"call_id\":\"call_bfYNnt8KPBuP3X37lpy5Kynj\",\"output\":\"status='success' + message='Successfully modified Spaghetti Carbonara to be vegetarian' modified_recipe=Recipe(id='spaghetti_carbonara', + name='Vegetarian Carbonara', ingredients=['400g spaghetti', '200g mushrooms', + '4 large eggs', '100g Pecorino Romano cheese'], instructions=['Cook spaghetti', + 'Saut\xE9 mushrooms', 'Whisk eggs with cheese'], prep_time='10 minutes', cook_time='15 + minutes', servings=4) changes_made=['Replaced pancetta with mushrooms'] original_recipe=Recipe(id='spaghetti_carbonara', + name='Spaghetti Carbonara', ingredients=['400g spaghetti', '200g pancetta', + '4 large eggs', '100g Pecorino Romano cheese'], instructions=['Cook spaghetti', + 'Dice pancetta', 'Whisk eggs with cheese'], prep_time='10 minutes', cook_time='15 + minutes', servings=4)\",\"type\":\"function_call_output\"}],\"instructions\":\"You + are a recipe editor specialist. Help users search and modify recipes using your + tools.\",\"model\":\"gpt-4o\",\"stream\":true,\"tools\":[{\"name\":\"search_recipes\",\"parameters\":{\"properties\":{\"query\":{\"default\":\"\",\"title\":\"Query\",\"type\":\"string\"}},\"title\":\"search_recipes_args\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"query\"]},\"strict\":true,\"type\":\"function\",\"description\":\"Search + and browse recipes in the database.\"},{\"name\":\"plan_and_apply_recipe_modifications\",\"parameters\":{\"$defs\":{\"Recipe\":{\"properties\":{\"id\":{\"title\":\"Id\",\"type\":\"string\"},\"name\":{\"title\":\"Name\",\"type\":\"string\"},\"ingredients\":{\"items\":{\"type\":\"string\"},\"title\":\"Ingredients\",\"type\":\"array\"},\"instructions\":{\"items\":{\"type\":\"string\"},\"title\":\"Instructions\",\"type\":\"array\"},\"prep_time\":{\"title\":\"Prep + Time\",\"type\":\"string\"},\"cook_time\":{\"title\":\"Cook Time\",\"type\":\"string\"},\"servings\":{\"title\":\"Servings\",\"type\":\"integer\"}},\"required\":[\"id\",\"name\",\"ingredients\",\"instructions\",\"prep_time\",\"cook_time\",\"servings\"],\"title\":\"Recipe\",\"type\":\"object\",\"additionalProperties\":false}},\"properties\":{\"recipe\":{\"$ref\":\"#/$defs/Recipe\"},\"modification_request\":{\"title\":\"Modification + Request\",\"type\":\"string\"}},\"required\":[\"recipe\",\"modification_request\"],\"title\":\"plan_and_apply_recipe_modifications_args\",\"type\":\"object\",\"additionalProperties\":false},\"strict\":true,\"type\":\"function\",\"description\":\"Plan + modifications to a recipe based on user request and apply them.\"}]}" + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '4114' + content-type: + - application/json + cookie: + - __cf_bm=BDNYhYWhMslFbspQl6lhHUsBIGKcLEFTBIVwmfjNuNM-1752668114-1.0.1.1-WUG9GstDVYKBm3gJp1ZN8ejxRZm5ZNkNkdH0iaCRZVFqJoxqB7f.LM216mjxwbPtgelxtKRRHEcW0Z65kDy1JS8ARbOd4StrdV4axOIKH9A; + _cfuvid=nLqaLjPFLgA4PLuLsxvDcKYzoJHnWiQ02JCxicciv0Q-1752668114638-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - Agents/Python 0.0.19 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.93.0 + x-stainless-read-timeout: + - '600' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.13.3 + method: POST + uri: https://api.openai.com/v1/responses + response: + body: + string: "event: response.created\ndata: {\"type\":\"response.created\",\"sequence_number\":0,\"response\":{\"id\":\"resp_687797d9b9308198b257f4e95ec5201a0d6b8b45457ab3f6\",\"object\":\"response\",\"created_at\":1752668121,\"status\":\"in_progress\",\"background\":false,\"error\":null,\"incomplete_details\":null,\"instructions\":\"You + are a recipe editor specialist. Help users search and modify recipes using + your tools.\",\"max_output_tokens\":null,\"max_tool_calls\":null,\"model\":\"gpt-4o-2024-08-06\",\"output\":[],\"parallel_tool_calls\":true,\"previous_response_id\":null,\"reasoning\":{\"effort\":null,\"summary\":null},\"service_tier\":\"auto\",\"store\":true,\"temperature\":1.0,\"text\":{\"format\":{\"type\":\"text\"}},\"tool_choice\":\"auto\",\"tools\":[{\"type\":\"function\",\"description\":\"Search + and browse recipes in the database.\",\"name\":\"search_recipes\",\"parameters\":{\"properties\":{\"query\":{\"default\":\"\",\"title\":\"Query\",\"type\":\"string\"}},\"title\":\"search_recipes_args\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"query\"]},\"strict\":true},{\"type\":\"function\",\"description\":\"Plan + modifications to a recipe based on user request and apply them.\",\"name\":\"plan_and_apply_recipe_modifications\",\"parameters\":{\"$defs\":{\"Recipe\":{\"properties\":{\"id\":{\"title\":\"Id\",\"type\":\"string\"},\"name\":{\"title\":\"Name\",\"type\":\"string\"},\"ingredients\":{\"items\":{\"type\":\"string\"},\"title\":\"Ingredients\",\"type\":\"array\"},\"instructions\":{\"items\":{\"type\":\"string\"},\"title\":\"Instructions\",\"type\":\"array\"},\"prep_time\":{\"title\":\"Prep + Time\",\"type\":\"string\"},\"cook_time\":{\"title\":\"Cook Time\",\"type\":\"string\"},\"servings\":{\"title\":\"Servings\",\"type\":\"integer\"}},\"required\":[\"id\",\"name\",\"ingredients\",\"instructions\",\"prep_time\",\"cook_time\",\"servings\"],\"title\":\"Recipe\",\"type\":\"object\",\"additionalProperties\":false}},\"properties\":{\"recipe\":{\"$ref\":\"#/$defs/Recipe\"},\"modification_request\":{\"title\":\"Modification + Request\",\"type\":\"string\"}},\"required\":[\"recipe\",\"modification_request\"],\"title\":\"plan_and_apply_recipe_modifications_args\",\"type\":\"object\",\"additionalProperties\":false},\"strict\":true}],\"top_logprobs\":0,\"top_p\":1.0,\"truncation\":\"disabled\",\"usage\":null,\"user\":null,\"metadata\":{}}}\n\nevent: + response.in_progress\ndata: {\"type\":\"response.in_progress\",\"sequence_number\":1,\"response\":{\"id\":\"resp_687797d9b9308198b257f4e95ec5201a0d6b8b45457ab3f6\",\"object\":\"response\",\"created_at\":1752668121,\"status\":\"in_progress\",\"background\":false,\"error\":null,\"incomplete_details\":null,\"instructions\":\"You + are a recipe editor specialist. Help users search and modify recipes using + your tools.\",\"max_output_tokens\":null,\"max_tool_calls\":null,\"model\":\"gpt-4o-2024-08-06\",\"output\":[],\"parallel_tool_calls\":true,\"previous_response_id\":null,\"reasoning\":{\"effort\":null,\"summary\":null},\"service_tier\":\"auto\",\"store\":true,\"temperature\":1.0,\"text\":{\"format\":{\"type\":\"text\"}},\"tool_choice\":\"auto\",\"tools\":[{\"type\":\"function\",\"description\":\"Search + and browse recipes in the database.\",\"name\":\"search_recipes\",\"parameters\":{\"properties\":{\"query\":{\"default\":\"\",\"title\":\"Query\",\"type\":\"string\"}},\"title\":\"search_recipes_args\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"query\"]},\"strict\":true},{\"type\":\"function\",\"description\":\"Plan + modifications to a recipe based on user request and apply them.\",\"name\":\"plan_and_apply_recipe_modifications\",\"parameters\":{\"$defs\":{\"Recipe\":{\"properties\":{\"id\":{\"title\":\"Id\",\"type\":\"string\"},\"name\":{\"title\":\"Name\",\"type\":\"string\"},\"ingredients\":{\"items\":{\"type\":\"string\"},\"title\":\"Ingredients\",\"type\":\"array\"},\"instructions\":{\"items\":{\"type\":\"string\"},\"title\":\"Instructions\",\"type\":\"array\"},\"prep_time\":{\"title\":\"Prep + Time\",\"type\":\"string\"},\"cook_time\":{\"title\":\"Cook Time\",\"type\":\"string\"},\"servings\":{\"title\":\"Servings\",\"type\":\"integer\"}},\"required\":[\"id\",\"name\",\"ingredients\",\"instructions\",\"prep_time\",\"cook_time\",\"servings\"],\"title\":\"Recipe\",\"type\":\"object\",\"additionalProperties\":false}},\"properties\":{\"recipe\":{\"$ref\":\"#/$defs/Recipe\"},\"modification_request\":{\"title\":\"Modification + Request\",\"type\":\"string\"}},\"required\":[\"recipe\",\"modification_request\"],\"title\":\"plan_and_apply_recipe_modifications_args\",\"type\":\"object\",\"additionalProperties\":false},\"strict\":true}],\"top_logprobs\":0,\"top_p\":1.0,\"truncation\":\"disabled\",\"usage\":null,\"user\":null,\"metadata\":{}}}\n\nevent: + response.output_item.added\ndata: {\"type\":\"response.output_item.added\",\"sequence_number\":2,\"output_index\":0,\"item\":{\"id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"type\":\"message\",\"status\":\"in_progress\",\"content\":[],\"role\":\"assistant\"}}\n\nevent: + response.content_part.added\ndata: {\"type\":\"response.content_part.added\",\"sequence_number\":3,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"part\":{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"\"}}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":4,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"I've\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":5,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + modified\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":6,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + the\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":7,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + carbon\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":8,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"ara\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":9,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + recipe\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":10,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + to\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":11,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + make\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":12,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + it\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":13,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + vegetarian\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: + {\"type\":\"response.output_text.delta\",\"sequence_number\":14,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\".\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":15,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Here's\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":16,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + the\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":17,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + new\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":18,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + version\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":19,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\":\\n\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":20,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"###\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":21,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Vegetarian\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: + {\"type\":\"response.output_text.delta\",\"sequence_number\":22,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Carbon\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":23,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"ara\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":24,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":25,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"####\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":26,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Ingredients\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: + {\"type\":\"response.output_text.delta\",\"sequence_number\":27,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":28,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"-\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":29,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + \",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":30,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"400\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":31,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"g\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":32,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + spaghetti\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":33,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":34,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"-\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":35,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + \",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":36,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"200\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":37,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"g\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":38,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + mushrooms\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":39,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":40,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"-\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":41,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + \",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":42,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"4\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":43,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + large\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":44,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + eggs\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":45,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":46,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"-\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":47,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + \",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":48,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"100\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":49,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"g\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":50,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Pec\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":51,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"or\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":52,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"ino\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":53,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Romano\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":54,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + cheese\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":55,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":56,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"####\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":57,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Instructions\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: + {\"type\":\"response.output_text.delta\",\"sequence_number\":58,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":59,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"1\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":60,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\".\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":61,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Cook\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":62,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + spaghetti\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":63,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\".\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":64,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"2\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":65,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\".\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":66,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + S\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":67,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"aut\xE9\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":68,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + mushrooms\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":69,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\".\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":70,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"3\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":71,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\".\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":72,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Wh\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":73,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"isk\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":74,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + eggs\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":75,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + with\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":76,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + cheese\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":77,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\".\\n\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":78,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"####\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":79,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Prep\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":80,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Time\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":81,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":82,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"-\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":83,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + \",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":84,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"10\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":85,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + minutes\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":86,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":87,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"####\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":88,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Cook\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":89,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Time\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":90,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":91,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"-\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":92,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + \",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":93,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"15\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":94,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + minutes\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":95,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":96,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"####\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":97,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + Serv\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":98,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"ings\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":99,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":100,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"-\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":101,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + \",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":102,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"4\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":103,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"\\n\\n\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":104,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"Enjoy\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":105,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + your\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":106,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + vegetarian\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: + {\"type\":\"response.output_text.delta\",\"sequence_number\":107,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\" + carbon\",\"logprobs\":[]}\n\nevent: response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":108,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"ara\",\"logprobs\":[]}\n\nevent: + response.output_text.delta\ndata: {\"type\":\"response.output_text.delta\",\"sequence_number\":109,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"delta\":\"!\",\"logprobs\":[]}\n\nevent: + response.output_text.done\ndata: {\"type\":\"response.output_text.done\",\"sequence_number\":110,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"text\":\"I've + modified the carbonara recipe to make it vegetarian. Here's the new version:\\n\\n### + Vegetarian Carbonara\\n\\n#### Ingredients\\n- 400g spaghetti\\n- 200g mushrooms\\n- + 4 large eggs\\n- 100g Pecorino Romano cheese\\n\\n#### Instructions\\n1. Cook + spaghetti.\\n2. Saut\xE9 mushrooms.\\n3. Whisk eggs with cheese.\\n\\n#### + Prep Time\\n- 10 minutes\\n\\n#### Cook Time\\n- 15 minutes\\n\\n#### Servings\\n- + 4\\n\\nEnjoy your vegetarian carbonara!\",\"logprobs\":[]}\n\nevent: response.content_part.done\ndata: + {\"type\":\"response.content_part.done\",\"sequence_number\":111,\"item_id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"output_index\":0,\"content_index\":0,\"part\":{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"I've + modified the carbonara recipe to make it vegetarian. Here's the new version:\\n\\n### + Vegetarian Carbonara\\n\\n#### Ingredients\\n- 400g spaghetti\\n- 200g mushrooms\\n- + 4 large eggs\\n- 100g Pecorino Romano cheese\\n\\n#### Instructions\\n1. Cook + spaghetti.\\n2. Saut\xE9 mushrooms.\\n3. Whisk eggs with cheese.\\n\\n#### + Prep Time\\n- 10 minutes\\n\\n#### Cook Time\\n- 15 minutes\\n\\n#### Servings\\n- + 4\\n\\nEnjoy your vegetarian carbonara!\"}}\n\nevent: response.output_item.done\ndata: + {\"type\":\"response.output_item.done\",\"sequence_number\":112,\"output_index\":0,\"item\":{\"id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"type\":\"message\",\"status\":\"completed\",\"content\":[{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"I've + modified the carbonara recipe to make it vegetarian. Here's the new version:\\n\\n### + Vegetarian Carbonara\\n\\n#### Ingredients\\n- 400g spaghetti\\n- 200g mushrooms\\n- + 4 large eggs\\n- 100g Pecorino Romano cheese\\n\\n#### Instructions\\n1. Cook + spaghetti.\\n2. Saut\xE9 mushrooms.\\n3. Whisk eggs with cheese.\\n\\n#### + Prep Time\\n- 10 minutes\\n\\n#### Cook Time\\n- 15 minutes\\n\\n#### Servings\\n- + 4\\n\\nEnjoy your vegetarian carbonara!\"}],\"role\":\"assistant\"}}\n\nevent: + response.completed\ndata: {\"type\":\"response.completed\",\"sequence_number\":113,\"response\":{\"id\":\"resp_687797d9b9308198b257f4e95ec5201a0d6b8b45457ab3f6\",\"object\":\"response\",\"created_at\":1752668121,\"status\":\"completed\",\"background\":false,\"error\":null,\"incomplete_details\":null,\"instructions\":\"You + are a recipe editor specialist. Help users search and modify recipes using + your tools.\",\"max_output_tokens\":null,\"max_tool_calls\":null,\"model\":\"gpt-4o-2024-08-06\",\"output\":[{\"id\":\"msg_687797da7cbc8198b1e44129accf4bf60d6b8b45457ab3f6\",\"type\":\"message\",\"status\":\"completed\",\"content\":[{\"type\":\"output_text\",\"annotations\":[],\"logprobs\":[],\"text\":\"I've + modified the carbonara recipe to make it vegetarian. Here's the new version:\\n\\n### + Vegetarian Carbonara\\n\\n#### Ingredients\\n- 400g spaghetti\\n- 200g mushrooms\\n- + 4 large eggs\\n- 100g Pecorino Romano cheese\\n\\n#### Instructions\\n1. Cook + spaghetti.\\n2. Saut\xE9 mushrooms.\\n3. Whisk eggs with cheese.\\n\\n#### + Prep Time\\n- 10 minutes\\n\\n#### Cook Time\\n- 15 minutes\\n\\n#### Servings\\n- + 4\\n\\nEnjoy your vegetarian carbonara!\"}],\"role\":\"assistant\"}],\"parallel_tool_calls\":true,\"previous_response_id\":null,\"reasoning\":{\"effort\":null,\"summary\":null},\"service_tier\":\"default\",\"store\":true,\"temperature\":1.0,\"text\":{\"format\":{\"type\":\"text\"}},\"tool_choice\":\"auto\",\"tools\":[{\"type\":\"function\",\"description\":\"Search + and browse recipes in the database.\",\"name\":\"search_recipes\",\"parameters\":{\"properties\":{\"query\":{\"default\":\"\",\"title\":\"Query\",\"type\":\"string\"}},\"title\":\"search_recipes_args\",\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"query\"]},\"strict\":true},{\"type\":\"function\",\"description\":\"Plan + modifications to a recipe based on user request and apply them.\",\"name\":\"plan_and_apply_recipe_modifications\",\"parameters\":{\"$defs\":{\"Recipe\":{\"properties\":{\"id\":{\"title\":\"Id\",\"type\":\"string\"},\"name\":{\"title\":\"Name\",\"type\":\"string\"},\"ingredients\":{\"items\":{\"type\":\"string\"},\"title\":\"Ingredients\",\"type\":\"array\"},\"instructions\":{\"items\":{\"type\":\"string\"},\"title\":\"Instructions\",\"type\":\"array\"},\"prep_time\":{\"title\":\"Prep + Time\",\"type\":\"string\"},\"cook_time\":{\"title\":\"Cook Time\",\"type\":\"string\"},\"servings\":{\"title\":\"Servings\",\"type\":\"integer\"}},\"required\":[\"id\",\"name\",\"ingredients\",\"instructions\",\"prep_time\",\"cook_time\",\"servings\"],\"title\":\"Recipe\",\"type\":\"object\",\"additionalProperties\":false}},\"properties\":{\"recipe\":{\"$ref\":\"#/$defs/Recipe\"},\"modification_request\":{\"title\":\"Modification + Request\",\"type\":\"string\"}},\"required\":[\"recipe\",\"modification_request\"],\"title\":\"plan_and_apply_recipe_modifications_args\",\"type\":\"object\",\"additionalProperties\":false},\"strict\":true}],\"top_logprobs\":0,\"top_p\":1.0,\"truncation\":\"disabled\",\"usage\":{\"input_tokens\":656,\"input_tokens_details\":{\"cached_tokens\":0},\"output_tokens\":108,\"output_tokens_details\":{\"reasoning_tokens\":0},\"total_tokens\":764},\"user\":null,\"metadata\":{}}}\n\n" + headers: + CF-RAY: + - 96016cafbc04c222-TLV + Connection: + - keep-alive + Content-Type: + - text/event-stream; charset=utf-8 + Date: + - Wed, 16 Jul 2025 12:15:21 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - traceloop + openai-processing-ms: + - '174' + openai-project: + - proj_tzz1TbPPOXaf6j9tEkVUBIAa + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-request-id: + - req_46ce3d9afe966178b9a876e5655638de + status: + code: 200 + message: OK +version: 1 diff --git a/packages/opentelemetry-instrumentation-openai-agents/tests/conftest.py b/packages/opentelemetry-instrumentation-openai-agents/tests/conftest.py index acdd99e560..d7ab93384e 100644 --- a/packages/opentelemetry-instrumentation-openai-agents/tests/conftest.py +++ b/packages/opentelemetry-instrumentation-openai-agents/tests/conftest.py @@ -18,6 +18,7 @@ from agents import Agent, function_tool, ModelSettings, WebSearchTool from pydantic import BaseModel +from typing import List, Dict, Union pytest_plugins = [] @@ -45,6 +46,13 @@ def environment(): @pytest.fixture(autouse=True) def clear_exporter(exporter): exporter.clear() + from opentelemetry.instrumentation.openai_agents import ( + _root_span_storage, + _instrumented_tools, + ) + + _root_span_storage.clear() + _instrumented_tools.clear() @pytest.fixture(scope="session") @@ -88,9 +96,7 @@ async def get_weather(city: str) -> str: return Agent( name="WeatherAgent", - instructions=( - "You get the weather for a city using the get_weather tool." - ), + instructions=("You get the weather for a city using the get_weather tool."), model="gpt-4.1", tools=[get_weather], ) @@ -109,10 +115,12 @@ def web_search_tool_agent(): @pytest.fixture(scope="session") def handoff_agent(): - agent_a = Agent(name="AgentA", instructions="Agent A does something.", - model="gpt-4.1") - agent_b = Agent(name="AgentB", instructions="Agent B does something else.", - model="gpt-4.1") + agent_a = Agent( + name="AgentA", instructions="Agent A does something.", model="gpt-4.1" + ) + agent_b = Agent( + name="AgentB", instructions="Agent B does something else.", model="gpt-4.1" + ) class HandoffExample(BaseModel): message: str @@ -131,11 +139,136 @@ class HandoffExample(BaseModel): instructions="You decide which agent to handoff to.", model="gpt-4.1", handoffs=[agent_a, agent_b], - tools=[handoff_tool_a, handoff_tool_b] + tools=[handoff_tool_a, handoff_tool_b], ) return triage_agent +@pytest.fixture(scope="session") +def recipe_workflow_agents(): + """Create Main Chat Agent and Recipe Editor Agent with function tools for recipe management.""" + + class Recipe(BaseModel): + id: str + name: str + ingredients: List[str] + instructions: List[str] + prep_time: str + cook_time: str + servings: int + + class SearchResponse(BaseModel): + status: str + message: str + recipes: Union[Dict[str, Recipe], None] = None + recipe_count: Union[int, None] = None + query: Union[str, None] = None + + class EditResponse(BaseModel): + status: str + message: str + modified_recipe: Union[Recipe, None] = None + changes_made: Union[List[str], None] = None + original_recipe: Union[Recipe, None] = None + + # Mock recipe database + MOCK_RECIPES = { + "spaghetti_carbonara": { + "id": "spaghetti_carbonara", + "name": "Spaghetti Carbonara", + "ingredients": [ + "400g spaghetti", + "200g pancetta", + "4 large eggs", + "100g Pecorino Romano cheese", + ], + "instructions": [ + "Cook spaghetti", + "Dice pancetta", + "Whisk eggs with cheese", + ], + "prep_time": "10 minutes", + "cook_time": "15 minutes", + "servings": 4, + } + } + + @function_tool + async def search_recipes(query: str = "") -> SearchResponse: + """Search and browse recipes in the database.""" + if "carbonara" in query.lower(): + recipe_data = MOCK_RECIPES["spaghetti_carbonara"] + recipes_dict = {"spaghetti_carbonara": Recipe(**recipe_data)} + return SearchResponse( + status="success", + message=f'Found 1 recipes matching "{query}"', + recipes=recipes_dict, + recipe_count=1, + query=query, + ) + return SearchResponse( + status="success", + message="No recipes found", + recipes={}, + recipe_count=0, + query=query, + ) + + @function_tool + async def plan_and_apply_recipe_modifications( + recipe: Recipe, modification_request: str + ) -> EditResponse: + """Plan modifications to a recipe based on user request and apply them.""" + + if ( + "vegetarian" in modification_request.lower() + and "carbonara" in recipe.name.lower() + ): + modified_recipe = Recipe( + id=recipe.id, + name="Vegetarian Carbonara", + ingredients=[ + "400g spaghetti", + "200g mushrooms", + "4 large eggs", + "100g Pecorino Romano cheese", + ], + instructions=[ + "Cook spaghetti", + "Sauté mushrooms", + "Whisk eggs with cheese", + ], + prep_time=recipe.prep_time, + cook_time=recipe.cook_time, + servings=recipe.servings, + ) + return EditResponse( + status="success", + message="Successfully modified Spaghetti Carbonara to be vegetarian", + modified_recipe=modified_recipe, + changes_made=["Replaced pancetta with mushrooms"], + original_recipe=recipe, + ) + + return EditResponse(status="error", message="Could not modify recipe") + + recipe_editor_agent = Agent( + name="Recipe Editor Agent", + instructions="You are a recipe editor specialist. Help users search and modify recipes using your tools.", + model="gpt-4o", + tools=[search_recipes, plan_and_apply_recipe_modifications], + ) + + main_chat_agent = Agent( + name="Main Chat Agent", + instructions="You handle general conversation and route recipe tasks to the recipe editor agent.", + model="gpt-4o", + handoffs=[recipe_editor_agent], + ) + + return main_chat_agent, recipe_editor_agent + + @pytest.fixture(scope="module") def vcr_config(): return {"filter_headers": ["authorization", "api-key"]} diff --git a/packages/opentelemetry-instrumentation-openai-agents/tests/test_openai_agents.py b/packages/opentelemetry-instrumentation-openai-agents/tests/test_openai_agents.py index 08fcab2bb0..47e9e5b8de 100644 --- a/packages/opentelemetry-instrumentation-openai-agents/tests/test_openai_agents.py +++ b/packages/opentelemetry-instrumentation-openai-agents/tests/test_openai_agents.py @@ -37,8 +37,6 @@ def test_agent_spans(exporter, test_agent): assert span.name == "testAgent.agent" assert span.kind == span.kind.CLIENT - assert span.attributes[SpanAttributes.LLM_SYSTEM] == "openai" - assert span.attributes[SpanAttributes.LLM_REQUEST_MODEL] == "gpt-4.1" assert ( span.attributes[SpanAttributes.TRACELOOP_SPAN_KIND] == TraceloopSpanKindValues.AGENT.value @@ -54,37 +52,18 @@ def test_agent_spans(exporter, test_agent): ) assert span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"] == "user" - assert ( - span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] - == "What is AI?") + assert span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] == "What is AI?" assert span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] is not None - assert ( - span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - is not None) + assert span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] is not None assert span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] is not None - assert ( - span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.contents"] - is not None - ) - assert ( - len(span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.contents"]) > 0 - ) - assert ( - span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.roles"] - is not None - ) - assert ( - len(span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.roles"]) > 0 - ) - assert ( - span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.types"] - is not None - ) - assert ( - len(span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.types"]) > 0 - ) + assert span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.contents"] is not None + assert len(span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.contents"]) > 0 + assert span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.roles"] is not None + assert len(span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.roles"]) > 0 + assert span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.types"] is not None + assert len(span.attributes[f"{SpanAttributes.LLM_COMPLETIONS}.types"]) > 0 assert span.status.status_code == StatusCode.OK @@ -98,7 +77,7 @@ def test_agent_with_function_tool_spans(exporter, function_tool_agent): ) spans = exporter.get_finished_spans() - assert len(spans) == 4 + assert len(spans) == 3 agent_span = next(s for s in spans if s.name == "WeatherAgent.agent") tool_span = next(s for s in spans if s.name == "get_weather.tool") @@ -113,23 +92,14 @@ def test_agent_with_function_tool_spans(exporter, function_tool_agent): ) assert tool_span.kind == tool_span.kind.INTERNAL - assert ( - tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.name"] - == "get_weather" - ) - assert ( - tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.type"] - == "FunctionTool" - ) + assert tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.name"] == "get_weather" + assert tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.type"] == "FunctionTool" assert ( tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.description"] == "Gets the current weather for a specified city." ) - assert ( - tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.strict_json_schema"] - is True - ) + assert tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.strict_json_schema"] is True assert agent_span.status.status_code == StatusCode.OK assert tool_span.status.status_code == StatusCode.OK @@ -159,18 +129,12 @@ def test_agent_with_web_search_tool_spans(exporter, web_search_tool_agent): ) assert tool_span.kind == tool_span.kind.INTERNAL - assert ( - tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.type"] - == "WebSearchTool" - ) + assert tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.type"] == "WebSearchTool" assert ( tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.search_context_size"] is not None ) - assert ( - f"{GEN_AI_COMPLETION}.tool.user_location" - not in tool_span.attributes - ) + assert f"{GEN_AI_COMPLETION}.tool.user_location" not in tool_span.attributes assert agent_span.status.status_code == StatusCode.OK assert tool_span.status.status_code == StatusCode.OK @@ -190,16 +154,12 @@ def test_agent_with_handoff_spans(exporter, handoff_agent): triage_agent_span = next(s for s in spans if s.name == "TriageAgent.agent") assert triage_agent_span.attributes["openai.agent.handoff0"] is not None - handoff0_info = json.loads( - triage_agent_span.attributes["openai.agent.handoff0"] - ) + handoff0_info = json.loads(triage_agent_span.attributes["openai.agent.handoff0"]) assert handoff0_info["name"] == "AgentA" assert handoff0_info["instructions"] == "Agent A does something." assert triage_agent_span.attributes["openai.agent.handoff1"] is not None - handoff1_info = json.loads( - triage_agent_span.attributes["openai.agent.handoff1"] - ) + handoff1_info = json.loads(triage_agent_span.attributes["openai.agent.handoff1"]) assert handoff1_info["name"] == "AgentB" assert handoff1_info["instructions"] == "Agent B does something else." @@ -231,42 +191,175 @@ def test_generate_metrics(metrics_test_context, test_agent): if metric.name == Meters.LLM_TOKEN_USAGE: found_token_metric = True for data_point in metric.data.data_points: - assert ( - ( - data_point.attributes[ - SpanAttributes.LLM_TOKEN_TYPE - ] - in [ - "output", - "input", - ] - ) - ) + assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ + "output", + "input", + ] assert data_point.count > 0 assert data_point.sum > 0 if metric.name == Meters.LLM_OPERATION_DURATION: found_duration_metric = True assert any( - data_point.count > 0 - for data_point in metric.data.data_points + data_point.count > 0 for data_point in metric.data.data_points ) assert any( - data_point.sum > 0 - for data_point in metric.data.data_points + data_point.sum > 0 for data_point in metric.data.data_points ) - assert ( - metric.data.data_points[0].attributes[ - SpanAttributes.LLM_SYSTEM - ] - == "openai" - ) - assert ( - metric.data.data_points[0].attributes[ - SpanAttributes.LLM_RESPONSE_MODEL - ] - == "gpt-4.1" - ) assert found_token_metric is True assert found_duration_metric is True + + +@pytest.mark.vcr +@pytest.mark.asyncio +async def test_recipe_workflow_agent_handoffs_with_function_tools( + exporter, recipe_workflow_agents +): + """Test agent handoffs with function tools matching the recipe management example.""" + + main_chat_agent, recipe_editor_agent = recipe_workflow_agents + + query = "Can you edit the carbonara recipe to be vegetarian?" + + messages = [{"role": "user", "content": query}] + main_runner = Runner().run_streamed(starting_agent=main_chat_agent, input=messages) + + handoff_info = None + async for event in main_runner.stream_events(): + if event.type == "run_item_stream_event" and event.name == "handoff_occurred": + handoff_info = event.item.raw_item + + if handoff_info and "recipe" in str(handoff_info).lower(): + recipe_messages = [{"role": "user", "content": query}] + recipe_runner = Runner().run_streamed( + starting_agent=recipe_editor_agent, input=recipe_messages + ) + async for _ in recipe_runner.stream_events(): + pass + + spans = exporter.get_finished_spans() + non_rest_spans = [span for span in spans if not span.name.endswith("v1/responses")] + span_names = [span.name for span in non_rest_spans] + + assert span_names.count("Main Chat Agent.agent") == 1 + assert span_names.count("Recipe Editor Agent.agent") == 3 + assert span_names.count("search_recipes.tool") == 1 + assert span_names.count("plan_and_apply_recipe_modifications.tool") == 1 + + assert "Main Chat Agent.agent" in span_names + assert "Recipe Editor Agent.agent" in span_names + + assert "search_recipes.tool" in span_names + assert "plan_and_apply_recipe_modifications.tool" in span_names + + main_chat_span = next( + s for s in non_rest_spans if s.name == "Main Chat Agent.agent" + ) + recipe_editor_spans = [ + s for s in non_rest_spans if s.name == "Recipe Editor Agent.agent" + ] + search_tool_span = next( + s for s in non_rest_spans if s.name == "search_recipes.tool" + ) + modify_tool_span = next( + s + for s in non_rest_spans + if s.name == "plan_and_apply_recipe_modifications.tool" + ) + + assert main_chat_span.attributes["gen_ai.agent.name"] == "Main Chat Agent" + assert ( + main_chat_span.attributes[SpanAttributes.TRACELOOP_SPAN_KIND] + == TraceloopSpanKindValues.AGENT.value + ) + + assert "traceloop.entity.input" in main_chat_span.attributes + assert "traceloop.entity.output" in main_chat_span.attributes + + # Validate that input and output are valid JSON + main_chat_input = json.loads(main_chat_span.attributes["traceloop.entity.input"]) + main_chat_output = json.loads(main_chat_span.attributes["traceloop.entity.output"]) + assert isinstance(main_chat_input, dict) + assert isinstance(main_chat_output, dict) + + assert "openai.agent.handoff0" in main_chat_span.attributes + handoff_info = json.loads(main_chat_span.attributes["openai.agent.handoff0"]) + assert handoff_info["name"] == "Recipe Editor Agent" + + recipe_editor_span = recipe_editor_spans[0] + assert recipe_editor_span.attributes["gen_ai.agent.name"] == "Recipe Editor Agent" + assert ( + recipe_editor_span.attributes[SpanAttributes.TRACELOOP_SPAN_KIND] + == TraceloopSpanKindValues.AGENT.value + ) + + assert "traceloop.entity.input" in recipe_editor_span.attributes + assert "traceloop.entity.output" in recipe_editor_span.attributes + + # Validate that input and output are valid JSON + recipe_editor_input = json.loads( + recipe_editor_span.attributes["traceloop.entity.input"] + ) + recipe_editor_output = json.loads( + recipe_editor_span.attributes["traceloop.entity.output"] + ) + assert isinstance(recipe_editor_input, dict) + assert isinstance(recipe_editor_output, dict) + + assert ( + search_tool_span.attributes[SpanAttributes.TRACELOOP_SPAN_KIND] + == TraceloopSpanKindValues.TOOL.value + ) + assert ( + search_tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.name"] + == "search_recipes" + ) + assert ( + search_tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.type"] == "FunctionTool" + ) + + assert "traceloop.entity.input" in search_tool_span.attributes + assert "traceloop.entity.output" in search_tool_span.attributes + + assert ( + modify_tool_span.attributes[SpanAttributes.TRACELOOP_SPAN_KIND] + == TraceloopSpanKindValues.TOOL.value + ) + assert ( + modify_tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.name"] + == "plan_and_apply_recipe_modifications" + ) + assert ( + modify_tool_span.attributes[f"{GEN_AI_COMPLETION}.tool.type"] == "FunctionTool" + ) + + assert "traceloop.entity.input" in modify_tool_span.attributes + assert "traceloop.entity.output" in modify_tool_span.attributes + + assert main_chat_span.parent is None + + assert search_tool_span.parent is not None + assert modify_tool_span.parent is not None + + assert main_chat_span.status.status_code == StatusCode.OK + for span in recipe_editor_spans: + assert span.status.status_code == StatusCode.OK + assert search_tool_span.status.status_code == StatusCode.OK + assert modify_tool_span.status.status_code == StatusCode.OK + + main_trace_id = main_chat_span.get_span_context().trace_id + all_trace_ids = {main_trace_id} + + for span in recipe_editor_spans: + span_trace_id = span.get_span_context().trace_id + assert span_trace_id == main_trace_id + all_trace_ids.add(span_trace_id) + + assert search_tool_span.get_span_context().trace_id == main_trace_id + all_trace_ids.add(search_tool_span.get_span_context().trace_id) + + assert modify_tool_span.get_span_context().trace_id == main_trace_id + all_trace_ids.add(modify_tool_span.get_span_context().trace_id) + + assert len(all_trace_ids) == 1 diff --git a/packages/sample-app/poetry.lock b/packages/sample-app/poetry.lock index 5d740cc88a..b2f4a9062f 100644 --- a/packages/sample-app/poetry.lock +++ b/packages/sample-app/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. [[package]] name = "aiofiles" @@ -7,6 +7,7 @@ description = "File support for asyncio." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5"}, {file = "aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c"}, @@ -19,6 +20,7 @@ description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, @@ -31,6 +33,7 @@ description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"}, {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"}, @@ -121,7 +124,7 @@ propcache = ">=0.2.0" yarl = ">=1.17.0,<2.0" [package.extras] -speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" @@ -130,6 +133,7 @@ description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, @@ -145,6 +149,7 @@ description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -157,6 +162,7 @@ description = "The official Python library for the anthropic API" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "anthropic-0.37.1-py3-none-any.whl", hash = "sha256:8f550f88906823752e2abf99fbe491fbc8d40bce4cb26b9663abdf7be990d721"}, {file = "anthropic-0.37.1.tar.gz", hash = "sha256:99f688265795daa7ba9256ee68eaf2f05d53cd99d7417f4a0c2dc292c106d00a"}, @@ -183,6 +189,7 @@ description = "High level compatibility layer for multiple asynchronous event lo optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"}, {file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"}, @@ -196,7 +203,7 @@ typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -206,6 +213,7 @@ description = "ASGI specs, helper code, and adapters" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, @@ -224,7 +232,7 @@ description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.10\"" +markers = "python_version < \"3.11\"" files = [ {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, @@ -237,18 +245,19 @@ description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, ] [package.extras] -benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "autopep8" @@ -257,6 +266,7 @@ description = "A tool that automatically formats Python code to conform to the P optional = false python-versions = ">=3.8" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "autopep8-2.3.1-py2.py3-none-any.whl", hash = "sha256:a203fe0fcad7939987422140ab17a930f684763bf7335bdb6709991dd7ef6c2d"}, {file = "autopep8-2.3.1.tar.gz", hash = "sha256:8d6c87eba648fdcfc83e29b788910b8643171c395d9c4bcf115ece035b9c9dda"}, @@ -273,6 +283,7 @@ description = "Function decoration for backoff and retry" optional = false python-versions = ">=3.7,<4.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, @@ -285,6 +296,7 @@ description = "Modern password hashing for your software and your servers" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "bcrypt-4.2.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:1340411a0894b7d3ef562fb233e4b6ed58add185228650942bdc885362f32c17"}, {file = "bcrypt-4.2.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ee315739bc8387aa36ff127afc99120ee452924e0df517a8f3e4c0187a0f5f"}, @@ -324,6 +336,7 @@ description = "Screen-scraping library" optional = false python-versions = ">=3.6.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, @@ -346,6 +359,7 @@ description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "boto3-1.35.96-py3-none-any.whl", hash = "sha256:e6acb2380791b13d8fd55062d9bbc6e27c3ddb3e73cff71c4ca02e6743780c67"}, {file = "boto3-1.35.96.tar.gz", hash = "sha256:bace02ef2181d176cedc1f8f90c95c301bb7c555db124cf80bc193cbb52a7c64"}, @@ -366,6 +380,7 @@ description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "botocore-1.35.96-py3-none-any.whl", hash = "sha256:b5f4cf11372aeccf87bb0b6148a020212c4c42fb5bcdebb6590bb10f6612b98e"}, {file = "botocore-1.35.96.tar.gz", hash = "sha256:385fd406ed14bdd624e082d3e15dd6575d490d5d7374fb02f0a798c3ca9ea802"}, @@ -386,7 +401,7 @@ description = "Python bindings for the Brotli compression library" optional = false python-versions = "*" groups = ["main"] -markers = "platform_python_implementation == \"CPython\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_python_implementation == \"CPython\"" files = [ {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, @@ -522,7 +537,7 @@ description = "Python CFFI bindings to the Brotli library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "platform_python_implementation != \"CPython\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_python_implementation != \"CPython\"" files = [ {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, @@ -563,6 +578,7 @@ description = "A simple, correct Python build frontend" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, @@ -577,7 +593,7 @@ tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} [package.extras] docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"] -test = ["build[uv,virtualenv]", "filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0) ; python_version < \"3.10\"", "setuptools (>=56.0.0) ; python_version == \"3.10\"", "setuptools (>=56.0.0) ; python_version == \"3.11\"", "setuptools (>=67.8.0) ; python_version >= \"3.12\"", "wheel (>=0.36.0)"] +test = ["build[uv,virtualenv]", "filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0)", "setuptools (>=56.0.0)", "setuptools (>=56.0.0)", "setuptools (>=67.8.0)", "wheel (>=0.36.0)"] typing = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", "tomli", "typing-extensions (>=3.7.4.3)"] uv = ["uv (>=0.1.18)"] virtualenv = ["virtualenv (>=20.0.35)"] @@ -589,6 +605,7 @@ description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, @@ -601,6 +618,7 @@ description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, @@ -613,7 +631,7 @@ description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "platform_python_implementation != \"CPython\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_python_implementation != \"CPython\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -694,6 +712,7 @@ description = "The Real First Universal Charset Detector. Open, modern and activ optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, @@ -796,6 +815,7 @@ description = "Chromas fork of hnswlib" optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "chroma_hnswlib-0.7.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f35192fbbeadc8c0633f0a69c3d3e9f1a4eab3a46b65458bbcbcabdd9e895c36"}, {file = "chroma_hnswlib-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f007b608c96362b8f0c8b6b2ac94f67f83fcbabd857c378ae82007ec92f4d82"}, @@ -838,6 +858,7 @@ description = "Chroma." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "chromadb-0.5.23-py3-none-any.whl", hash = "sha256:ffe5bdd7276d12cb682df0d38a13aa37573e6a3678e71889ac45f539ae05ad7e"}, {file = "chromadb-0.5.23.tar.gz", hash = "sha256:360a12b9795c5a33cb1f839d14410ccbde662ef1accd36153b0ae22312edabd1"}, @@ -880,6 +901,7 @@ description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -895,6 +917,7 @@ description = "" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cohere-5.13.6-py3-none-any.whl", hash = "sha256:b51519f22785a7e6dbc0b5dd3b1e2c9f6c1062ae96d7e2730b519896f722a66f"}, {file = "cohere-5.13.6.tar.gz", hash = "sha256:0fc723dcb85a2f7ccd5478fce48701b226bf8cdb0df46c06ae09f242f44668a3"}, @@ -923,7 +946,7 @@ files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -markers = {dev = "sys_platform == \"win32\""} +markers = {main = "python_version <= \"3.11\" or python_version >= \"3.12\"", dev = "(python_version <= \"3.11\" or python_version >= \"3.12\") and sys_platform == \"win32\""} [[package]] name = "coloredlogs" @@ -932,6 +955,7 @@ description = "Colored terminal output for Python's logging module" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, @@ -950,6 +974,7 @@ description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, @@ -1019,7 +1044,7 @@ files = [ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] -toml = ["tomli ; python_full_version <= \"3.11.0a6\""] +toml = ["tomli"] [[package]] name = "dataclasses-json" @@ -1028,6 +1053,7 @@ description = "Easily serialize dataclasses to and from JSON." optional = false python-versions = "<4.0,>=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, @@ -1044,6 +1070,7 @@ description = "HuggingFace community-driven open-source library of datasets" optional = false python-versions = ">=3.8.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "datasets-2.21.0-py3-none-any.whl", hash = "sha256:25e4e097110ce28824b746a107727ada94024cba11db8bc588d468414692b65a"}, {file = "datasets-2.21.0.tar.gz", hash = "sha256:998f85a8460f1bd982e5bd058f8a0808eef424249e3df1e8cdd594ccd0dc8ba2"}, @@ -1067,9 +1094,9 @@ xxhash = "*" [package.extras] apache-beam = ["apache-beam (>=2.26.0)"] -audio = ["librosa", "soundfile (>=0.12.1)", "soxr (>=0.4.0) ; python_version >= \"3.9\""] +audio = ["librosa", "soundfile (>=0.12.1)", "soxr (>=0.4.0)"] benchmarks = ["tensorflow (==2.12.0)", "torch (==2.0.1)", "transformers (==4.30.1)"] -dev = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14) ; sys_platform != \"win32\"", "jaxlib (>=0.3.14) ; sys_platform != \"win32\"", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "ruff (>=0.3.0)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0) ; python_version >= \"3.9\"", "sqlalchemy", "tensorflow (>=2.16.0) ; python_version >= \"3.10\"", "tensorflow (>=2.6.0)", "tensorflow (>=2.6.0) ; python_version < \"3.10\"", "tiktoken", "torch", "torch (>=2.0.0)", "transformers", "transformers (>=4.42.0)", "typing-extensions (>=4.6.1)", "zstandard"] +dev = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "ruff (>=0.3.0)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tensorflow (>=2.16.0)", "tensorflow (>=2.6.0)", "tensorflow (>=2.6.0)", "tiktoken", "torch", "torch (>=2.0.0)", "transformers", "transformers (>=4.42.0)", "typing-extensions (>=4.6.1)", "zstandard"] docs = ["s3fs", "tensorflow (>=2.6.0)", "torch", "transformers"] jax = ["jax (>=0.3.14)", "jaxlib (>=0.3.14)"] metrics-tests = ["Werkzeug (>=1.0.1)", "accelerate", "bert-score (>=0.3.6)", "jiwer", "langdetect", "mauve-text", "nltk (<3.8.2)", "requests-file (>=1.5.1)", "rouge-score", "sacrebleu", "sacremoses", "scikit-learn", "scipy", "sentencepiece", "seqeval", "six (>=1.15.0,<1.16.0)", "spacy (>=3.0.0)", "texttable (>=1.6.3)", "tldextract", "tldextract (>=3.1.0)", "toml (>=0.10.1)", "typer (<0.5.0)"] @@ -1077,8 +1104,8 @@ quality = ["ruff (>=0.3.0)"] s3 = ["s3fs"] tensorflow = ["tensorflow (>=2.6.0)"] tensorflow-gpu = ["tensorflow (>=2.6.0)"] -tests = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14) ; sys_platform != \"win32\"", "jaxlib (>=0.3.14) ; sys_platform != \"win32\"", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0) ; python_version >= \"3.9\"", "sqlalchemy", "tensorflow (>=2.16.0) ; python_version >= \"3.10\"", "tensorflow (>=2.6.0) ; python_version < \"3.10\"", "tiktoken", "torch (>=2.0.0)", "transformers (>=4.42.0)", "typing-extensions (>=4.6.1)", "zstandard"] -tests-numpy2 = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "jax (>=0.3.14) ; sys_platform != \"win32\"", "jaxlib (>=0.3.14) ; sys_platform != \"win32\"", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0) ; python_version >= \"3.9\"", "sqlalchemy", "tiktoken", "torch (>=2.0.0)", "typing-extensions (>=4.6.1)", "zstandard"] +tests = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tensorflow (>=2.16.0)", "tensorflow (>=2.6.0)", "tiktoken", "torch (>=2.0.0)", "transformers (>=4.42.0)", "typing-extensions (>=4.6.1)", "zstandard"] +tests-numpy2 = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (<8.0.0)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tiktoken", "torch (>=2.0.0)", "typing-extensions (>=4.6.1)", "zstandard"] torch = ["torch"] vision = ["Pillow (>=9.4.0)"] @@ -1089,6 +1116,7 @@ description = "Python @deprecated decorator to deprecate old python classes, fun optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, @@ -1098,7 +1126,7 @@ files = [ wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools ; python_version >= \"3.12\"", "sphinx (<2)", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"] [[package]] name = "dill" @@ -1107,6 +1135,7 @@ description = "serialize all of Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, @@ -1123,6 +1152,7 @@ description = "JSON decoder for Python that can extract data from the muck" optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dirtyjson-1.0.8-py3-none-any.whl", hash = "sha256:125e27248435a58acace26d5c2c4c11a1c0de0a9c5124c5a94ba78e517d74f53"}, {file = "dirtyjson-1.0.8.tar.gz", hash = "sha256:90ca4a18f3ff30ce849d100dcf4a003953c79d3a2348ef056f1d9c22231a25fd"}, @@ -1135,6 +1165,7 @@ description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -1147,6 +1178,7 @@ description = "Parse Python docstrings in reST, Google and Numpydoc format" optional = false python-versions = ">=3.6,<4.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "docstring_parser-0.16-py3-none-any.whl", hash = "sha256:bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637"}, {file = "docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e"}, @@ -1159,6 +1191,7 @@ description = "Search for words, documents, images, news, maps and text translat optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "duckduckgo_search-3.9.11-py3-none-any.whl", hash = "sha256:3636df4c5eec383c1c02f89c9693b6c5bbaeda38952e467a2fa930132f632ed4"}, {file = "duckduckgo_search-3.9.11.tar.gz", hash = "sha256:4d07a02647da58f1e46e35f11719265f0ce06eed60e2c9c2b00b1105b9084d07"}, @@ -1180,6 +1213,7 @@ description = "Module for converting between datetime.timedelta and Go's Duratio optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "durationpy-0.9-py3-none-any.whl", hash = "sha256:e65359a7af5cedad07fb77a2dd3f390f8eb0b74cb845589fa6c057086834dd38"}, {file = "durationpy-0.9.tar.gz", hash = "sha256:fd3feb0a69a0057d582ef643c355c40d2fa1c942191f914d12203b1a01ac722a"}, @@ -1192,7 +1226,7 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version == \"3.10\"" +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -1208,6 +1242,7 @@ description = "FastAPI framework, high performance, easy to learn, fast to code, optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fastapi-0.115.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305"}, {file = "fastapi-0.115.6.tar.gz", hash = "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654"}, @@ -1229,6 +1264,7 @@ description = "Fast read/write of AVRO files" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fastavro-1.10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1a9fe0672d2caf0fe54e3be659b13de3cad25a267f2073d6f4b9f8862acc31eb"}, {file = "fastavro-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86dd0410770e0c99363788f0584523709d85e57bb457372ec5c285a482c17fe6"}, @@ -1276,6 +1312,7 @@ description = "A platform independent file lock." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, @@ -1284,7 +1321,7 @@ files = [ [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] -typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] +typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "filetype" @@ -1293,6 +1330,7 @@ description = "Infer file type and MIME type of any file/buffer. No external dep optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, @@ -1305,6 +1343,7 @@ description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "flake8-7.1.1-py2.py3-none-any.whl", hash = "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"}, {file = "flake8-7.1.1.tar.gz", hash = "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38"}, @@ -1322,6 +1361,7 @@ description = "The FlatBuffers serialization format for Python" optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "flatbuffers-24.12.23-py2.py3-none-any.whl", hash = "sha256:c418e0d48890f4142b92fd3e343e73a48f194e1f80075ddcc5793779b3585444"}, {file = "flatbuffers-24.12.23.tar.gz", hash = "sha256:2910b0bc6ae9b6db78dd2b18d0b7a0709ba240fb5585f286a3a2b30785c22dac"}, @@ -1334,6 +1374,7 @@ description = "A list-like structure which implements collections.abc.MutableSeq optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -1436,6 +1477,7 @@ description = "File-system specification" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fsspec-2024.6.1-py3-none-any.whl", hash = "sha256:3cb443f8bcd2efb31295a5b9fdb02aee81d8452c80d28f97a6d0959e6cee101e"}, {file = "fsspec-2024.6.1.tar.gz", hash = "sha256:fad7d7e209dd4c1208e3bbfda706620e0da5142bebbd9c384afb95b07e798e49"}, @@ -1479,6 +1521,7 @@ description = "Google Ai Generativelanguage API client library" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_ai_generativelanguage-0.6.10-py3-none-any.whl", hash = "sha256:854a2bf833d18be05ad5ef13c755567b66a4f4a870f099b62c61fe11bddabcf4"}, {file = "google_ai_generativelanguage-0.6.10.tar.gz", hash = "sha256:6fa642c964d8728006fe7e8771026fc0b599ae0ebeaf83caf550941e8e693455"}, @@ -1497,6 +1540,7 @@ description = "Google API client core library" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_api_core-2.24.0-py3-none-any.whl", hash = "sha256:10d82ac0fca69c82a25b3efdeefccf6f28e02ebb97925a8cce8edbfe379929d9"}, {file = "google_api_core-2.24.0.tar.gz", hash = "sha256:e255640547a597a4da010876d333208ddac417d60add22b6851a0c66a831fcaf"}, @@ -1506,12 +1550,12 @@ files = [ google-auth = ">=2.14.1,<3.0.dev0" googleapis-common-protos = ">=1.56.2,<2.0.dev0" grpcio = [ - {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, {version = ">=1.33.2,<2.0dev", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, + {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, ] grpcio-status = [ + {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, - {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""}, ] proto-plus = ">=1.22.3,<2.0.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0" @@ -1519,7 +1563,7 @@ requests = ">=2.18.0,<3.0.0.dev0" [package.extras] async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.dev0)"] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0) ; python_version >= \"3.11\""] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] @@ -1530,6 +1574,7 @@ description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_api_python_client-2.158.0-py2.py3-none-any.whl", hash = "sha256:36f8c8d2e79e50f76790ca5946d2f3f8333e210dc8539a6c88e0742416474ad2"}, {file = "google_api_python_client-2.158.0.tar.gz", hash = "sha256:b6664597a9955e04977a62752e33fe44cb35c580e190c1cb08a041893172bd67"}, @@ -1549,6 +1594,7 @@ description = "Google Authentication Library" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_auth-2.37.0-py2.py3-none-any.whl", hash = "sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0"}, {file = "google_auth-2.37.0.tar.gz", hash = "sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00"}, @@ -1574,6 +1620,7 @@ description = "Google Authentication Library: httplib2 transport" optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, @@ -1590,6 +1637,7 @@ description = "Vertex AI API client library" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_cloud_aiplatform-1.82.0-py2.py3-none-any.whl", hash = "sha256:13368a961b2bfa8f46ccd10371bb19bd5f946d8f29c411726061ed1a140ce890"}, {file = "google_cloud_aiplatform-1.82.0.tar.gz", hash = "sha256:b7ea7379249cc1821aa46300a16e4b15aa64aa22665e2536b2bcb7e473d7438e"}, @@ -1615,10 +1663,10 @@ ag2-testing = ["absl-py", "ag2[gemini]", "cloudpickle (>=3.0,<4.0)", "google-clo agent-engines = ["cloudpickle (>=3.0,<4.0)", "google-cloud-logging (<4)", "google-cloud-trace (<2)", "packaging (>=24.0)", "pydantic (>=2.10,<3)", "typing-extensions"] autologging = ["mlflow (>=1.27.0,<=2.16.0)"] cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] -datasets = ["pyarrow (>=10.0.1) ; python_version == \"3.11\"", "pyarrow (>=14.0.0) ; python_version >= \"3.12\"", "pyarrow (>=3.0.0,<8.0dev) ; python_version < \"3.11\""] +datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)"] endpoint = ["requests (>=2.28.1)"] -evaluation = ["pandas (>=1.0.0)", "scikit-learn (<1.6.0) ; python_version <= \"3.10\"", "scikit-learn ; python_version > \"3.10\"", "tqdm (>=4.23.0)"] -full = ["docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.114.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.16.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1) ; python_version == \"3.11\"", "pyarrow (>=14.0.0) ; python_version >= \"3.12\"", "pyarrow (>=3.0.0,<8.0dev) ; python_version < \"3.11\"", "pyarrow (>=6.0.1)", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.33.0) ; python_version == \"3.11\"", "requests (>=2.28.1)", "scikit-learn (<1.6.0) ; python_version <= \"3.10\"", "scikit-learn ; python_version > \"3.10\"", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev) ; python_version <= \"3.11\"", "tensorflow (>=2.4.0,<3.0.0dev)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)"] +evaluation = ["pandas (>=1.0.0)", "scikit-learn", "scikit-learn (<1.6.0)", "tqdm (>=4.23.0)"] +full = ["docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.114.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.16.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "requests (>=2.28.1)", "scikit-learn", "scikit-learn (<1.6.0)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)"] langchain = ["langchain (>=0.3,<0.4)", "langchain-core (>=0.3,<0.4)", "langchain-google-vertexai (>=2,<3)", "langgraph (>=0.2.45,<0.3)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)"] langchain-testing = ["absl-py", "cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "langchain (>=0.3,<0.4)", "langchain-core (>=0.3,<0.4)", "langchain-google-vertexai (>=2,<3)", "langgraph (>=0.2.45,<0.3)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-sdk (<2)", "pydantic (>=2.6.3,<3)", "pytest-xdist", "typing-extensions"] lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"] @@ -1626,11 +1674,11 @@ metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"] pipelines = ["pyyaml (>=5.3.1,<7)"] prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<=0.114.0)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"] private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"] -ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.33.0) ; python_version == \"3.11\"", "setuptools (<70.0.0)"] -ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.33.0) ; python_version == \"3.11\"", "ray[train]", "scikit-learn (<1.6.0)", "setuptools (<70.0.0)", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] +ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "setuptools (<70.0.0)"] +ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "ray[train]", "scikit-learn (<1.6.0)", "setuptools (<70.0.0)", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] reasoningengine = ["cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-sdk (<2)", "pydantic (>=2.6.3,<3)", "typing-extensions"] -tensorboard = ["tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (>=2.3.0,<3.0.0dev) ; python_version <= \"3.11\"", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] -testing = ["aiohttp", "bigframes ; python_version >= \"3.10\"", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.114.0)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.16.0)", "nltk", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1) ; python_version == \"3.11\"", "pyarrow (>=14.0.0) ; python_version >= \"3.12\"", "pyarrow (>=3.0.0,<8.0dev) ; python_version < \"3.11\"", "pyarrow (>=6.0.1)", "pytest-asyncio", "pytest-xdist", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.33.0) ; python_version == \"3.11\"", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn (<1.6.0) ; python_version <= \"3.10\"", "scikit-learn ; python_version > \"3.10\"", "sentencepiece (>=0.2.0)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (==2.13.0) ; python_version <= \"3.11\"", "tensorflow (==2.16.1) ; python_version > \"3.11\"", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev) ; python_version <= \"3.11\"", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0) ; python_version <= \"3.11\"", "torch (>=2.2.0) ; python_version > \"3.11\"", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"] +tensorboard = ["tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] +testing = ["aiohttp", "bigframes", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.114.0)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.16.0)", "nltk", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pytest-asyncio", "pytest-xdist", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "scikit-learn (<1.6.0)", "sentencepiece (>=0.2.0)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (==2.13.0)", "tensorflow (==2.16.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "torch (>=2.2.0)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"] tokenization = ["sentencepiece (>=0.2.0)"] vizier = ["google-vizier (>=0.1.6)"] xai = ["tensorflow (>=2.3.0,<3.0.0dev)"] @@ -1642,6 +1690,7 @@ description = "Google BigQuery API client library" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_cloud_bigquery-3.27.0-py2.py3-none-any.whl", hash = "sha256:b53b0431e5ba362976a4cd8acce72194b4116cdf8115030c7b339b884603fcc3"}, {file = "google_cloud_bigquery-3.27.0.tar.gz", hash = "sha256:379c524054d7b090fa56d0c22662cc6e6458a6229b6754c0e7177e3a73421d2c"}, @@ -1657,14 +1706,14 @@ python-dateutil = ">=2.7.3,<3.0dev" requests = ">=2.21.0,<3.0.0dev" [package.extras] -all = ["Shapely (>=1.8.4,<3.0.0dev)", "bigquery-magics (>=0.1.0)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "importlib-metadata (>=1.0.0) ; python_version < \"3.8\"", "ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.22.3,<2.0.0dev)", "protobuf (>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] +all = ["Shapely (>=1.8.4,<3.0.0dev)", "bigquery-magics (>=0.1.0)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.22.3,<2.0.0dev)", "protobuf (>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] bigquery-v2 = ["proto-plus (>=1.22.3,<2.0.0dev)", "protobuf (>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev)"] -bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "pyarrow (>=3.0.0)"] +bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"] geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"] ipython = ["bigquery-magics (>=0.1.0)"] ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"] opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"] -pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0) ; python_version < \"3.8\"", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] +pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] [[package]] @@ -1674,6 +1723,7 @@ description = "Google Cloud API client core library" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, @@ -1693,6 +1743,7 @@ description = "Google Cloud Resource Manager API client library" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_cloud_resource_manager-1.14.0-py2.py3-none-any.whl", hash = "sha256:4860c3ea9ace760b317ea90d4e27f1b32e54ededdcc340a7cb70c8ef238d8f7c"}, {file = "google_cloud_resource_manager-1.14.0.tar.gz", hash = "sha256:daa70a3a4704759d31f812ed221e3b6f7b660af30c7862e4a0060ea91291db30"}, @@ -1712,6 +1763,7 @@ description = "Google Cloud Storage API client library" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_cloud_storage-2.19.0-py2.py3-none-any.whl", hash = "sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba"}, {file = "google_cloud_storage-2.19.0.tar.gz", hash = "sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2"}, @@ -1736,6 +1788,7 @@ description = "A python wrapper of the C library 'Google CRC32C'" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_crc32c-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5bcc90b34df28a4b38653c36bb5ada35671ad105c99cfe915fb5bed7ad6924aa"}, {file = "google_crc32c-1.6.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d9e9913f7bd69e093b81da4535ce27af842e7bf371cde42d1ae9e9bd382dc0e9"}, @@ -1776,6 +1829,7 @@ description = "Google Generative AI High level API client library and tools." optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_generativeai-0.8.3-py3-none-any.whl", hash = "sha256:1108ff89d5b8e59f51e63d1a8bf84701cd84656e17ca28d73aeed745e736d9b7"}, ] @@ -1800,6 +1854,7 @@ description = "Utilities for Google Media Downloads and Resumable Uploads" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_resumable_media-2.7.2-py2.py3-none-any.whl", hash = "sha256:3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa"}, {file = "google_resumable_media-2.7.2.tar.gz", hash = "sha256:5280aed4629f2b60b847b0d42f9857fd4935c11af266744df33d8074cae92fe0"}, @@ -1819,6 +1874,7 @@ description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed"}, {file = "googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c"}, @@ -1838,7 +1894,7 @@ description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")" files = [ {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, @@ -1919,6 +1975,22 @@ files = [ docs = ["Sphinx", "furo"] test = ["objgraph", "psutil"] +[[package]] +name = "griffe" +version = "1.7.3" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75"}, + {file = "griffe-1.7.3.tar.gz", hash = "sha256:52ee893c6a3a968b639ace8015bec9d36594961e156e23315c8e8e51401fa50b"}, +] + +[package.dependencies] +colorama = ">=0.4" + [[package]] name = "groq" version = "0.11.0" @@ -1926,6 +1998,7 @@ description = "The official Python library for the groq API" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "groq-0.11.0-py3-none-any.whl", hash = "sha256:e328531c979542e563668c62260aec13b43a6ee0ca9e2fb22dff1d26f8c8ce54"}, {file = "groq-0.11.0.tar.gz", hash = "sha256:dbb9aefedf388ddd4801ec7bf3eba7f5edb67948fec0cd2829d97244059f42a7"}, @@ -1946,6 +2019,7 @@ description = "IAM API client library" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "grpc_google_iam_v1-0.14.0-py2.py3-none-any.whl", hash = "sha256:fb4a084b30099ba3ab07d61d620a0d4429570b13ff53bd37bac75235f98b7da4"}, {file = "grpc_google_iam_v1-0.14.0.tar.gz", hash = "sha256:c66e07aa642e39bb37950f9e7f491f70dad150ac9801263b42b2814307c2df99"}, @@ -1963,6 +2037,7 @@ description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "grpcio-1.69.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:2060ca95a8db295ae828d0fc1c7f38fb26ccd5edf9aa51a0f44251f5da332e97"}, {file = "grpcio-1.69.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2e52e107261fd8fa8fa457fe44bfadb904ae869d87c1280bf60f93ecd3e79278"}, @@ -2031,6 +2106,7 @@ description = "Status proto mapping for gRPC" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "grpcio_status-1.69.0-py3-none-any.whl", hash = "sha256:d6b2a3c9562c03a817c628d7ba9a925e209c228762d6d7677ae5c9401a542853"}, {file = "grpcio_status-1.69.0.tar.gz", hash = "sha256:595ef84e5178d6281caa732ccf68ff83259241608d26b0e9c40a5e66eee2a2d2"}, @@ -2048,6 +2124,7 @@ description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, @@ -2060,6 +2137,7 @@ description = "HTTP/2 State-Machine based protocol implementation" optional = false python-versions = ">=3.6.1" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, @@ -2076,6 +2154,7 @@ description = "LLM framework to build customizable, production-ready LLM applica optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "haystack_ai-2.6.1-py3-none-any.whl", hash = "sha256:19dcb55d41451d36310135b6f3828c43a97710a2296c5891e1a3df1750ca1796"}, {file = "haystack_ai-2.6.1.tar.gz", hash = "sha256:d644f4e4fe3e9c89d62bc42ab7bf5984e275d01b3349d37b6ab395a0d2fb5a04"}, @@ -2105,6 +2184,7 @@ description = "Experimental components and features for the Haystack LLM framewo optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "haystack_experimental-0.4.0-py3-none-any.whl", hash = "sha256:c08a396f2eaff9dd16caeb94ef54291b97b3a98dfb1212a1823cbd6d6bab7fa3"}, {file = "haystack_experimental-0.4.0.tar.gz", hash = "sha256:fa920484a6eb49e7a31ce05108391693ebf6ef636e2acdbb00210bfc5ea2538c"}, @@ -2121,6 +2201,7 @@ description = "Pure-Python HPACK header compression" optional = false python-versions = ">=3.6.1" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, @@ -2133,6 +2214,7 @@ description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, @@ -2155,6 +2237,7 @@ description = "A comprehensive HTTP client library." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, @@ -2170,6 +2253,7 @@ description = "A collection of framework independent HTTP protocol utils." optional = false python-versions = ">=3.8.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httptools-0.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0"}, {file = "httptools-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da"}, @@ -2226,6 +2310,7 @@ description = "The next generation HTTP client." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, @@ -2243,7 +2328,7 @@ sniffio = "*" socksio = {version = "==1.*", optional = true, markers = "extra == \"socks\""} [package.extras] -brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +brotli = ["brotli", "brotlicffi"] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -2256,6 +2341,7 @@ description = "Consume Server-Sent Event (SSE) messages with HTTPX." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"}, {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"}, @@ -2268,6 +2354,7 @@ description = "Client library to download and publish models, datasets and other optional = false python-versions = ">=3.8.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "huggingface_hub-0.27.1-py3-none-any.whl", hash = "sha256:1c5155ca7d60b60c2e2fc38cbb3ffb7f7c3adf48f824015b219af9061771daec"}, {file = "huggingface_hub-0.27.1.tar.gz", hash = "sha256:c004463ca870283909d715d20f066ebd6968c2207dae9393fdffb3c1d4d8f98b"}, @@ -2304,6 +2391,7 @@ description = "Human friendly output for text interfaces using Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, @@ -2319,6 +2407,7 @@ description = "HTTP/2 framing layer for Python" optional = false python-versions = ">=3.6.1" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, @@ -2331,6 +2420,7 @@ description = "IBM SDK for Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ibm-cos-sdk-2.13.5.tar.gz", hash = "sha256:1aff7f9863ac9072a3db2f0053bec99478b26f3fb5fa797ce96a15bbb13cd40e"}, ] @@ -2347,6 +2437,7 @@ description = "Low-level, data-driven core of IBM SDK for Python" optional = false python-versions = ">=3.6" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ibm-cos-sdk-core-2.13.5.tar.gz", hash = "sha256:d3a99d8b06b3f8c00b1a9501f85538d592463e63ddf8cec32672ab5a0b107b83"}, ] @@ -2364,6 +2455,7 @@ description = "IBM S3 Transfer Manager" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ibm-cos-sdk-s3transfer-2.13.5.tar.gz", hash = "sha256:9649b1f2201c6de96ff5a6b5a3686de3a809e6ef3b8b12c7c4f2f7ce72da7749"}, ] @@ -2378,6 +2470,7 @@ description = "IBM Watson Machine Learning API Client" optional = false python-versions = "<3.13,>=3.10" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ibm_watson_machine_learning-1.0.367-py3-none-any.whl", hash = "sha256:d31cd0b8a2b09a04f8993de8f588f83187934baad4db77b4cdee6fbceddc9a60"}, {file = "ibm_watson_machine_learning-1.0.367.tar.gz", hash = "sha256:afa698f77331771c4ab3690d2c6ef5c429210f305fcf8de8b092b7f225f18ce5"}, @@ -2405,6 +2498,7 @@ description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -2420,6 +2514,7 @@ description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, @@ -2429,12 +2524,12 @@ files = [ zipp = ">=3.20" [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] [[package]] @@ -2444,13 +2539,14 @@ description = "Read resources from Python packages" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] @@ -2464,6 +2560,7 @@ description = "A port of Ruby on Rails inflector to Python" optional = false python-versions = ">=3.5" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"}, {file = "inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417"}, @@ -2476,6 +2573,7 @@ description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -2488,6 +2586,7 @@ description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["main", "dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, @@ -2506,6 +2605,7 @@ description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jiter-0.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ca8577f6a413abe29b079bc30f907894d7eb07a865c4df69475e868d73e71c7b"}, {file = "jiter-0.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b25bd626bde7fb51534190c7e3cb97cee89ee76b76d7585580e22f34f5e3f393"}, @@ -2592,6 +2692,7 @@ description = "JSON Matching Expressions" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, @@ -2604,6 +2705,7 @@ description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, @@ -2616,6 +2718,7 @@ description = "Apply JSON-Patches (RFC 6902)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, @@ -2631,6 +2734,7 @@ description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -2643,6 +2747,7 @@ description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, @@ -2665,6 +2770,7 @@ description = "The JSON Schema meta-schemas and vocabularies, exposed as a Regis optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, @@ -2680,6 +2786,7 @@ description = "Kubernetes python client" optional = false python-versions = ">=3.6" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kubernetes-31.0.0-py2.py3-none-any.whl", hash = "sha256:bf141e2d380c8520eada8b351f4e319ffee9636328c137aa432bc486ca1200e1"}, {file = "kubernetes-31.0.0.tar.gz", hash = "sha256:28945de906c8c259c1ebe62703b56a03b714049372196f854105afe4e6d014c0"}, @@ -2708,6 +2815,7 @@ description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langchain-0.3.24-py3-none-any.whl", hash = "sha256:596c5444716644ddd0cd819fb2bc9d0fd4221503b219fdfb5016edcfaa7da8ef"}, {file = "langchain-0.3.24.tar.gz", hash = "sha256:caf1bacdabbea429bc79b58b118c06c3386107d92812e15922072b91745f070f"}, @@ -2749,6 +2857,7 @@ description = "Community contributed LangChain integrations." optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langchain_community-0.3.22-py3-none-any.whl", hash = "sha256:02ecdc669408d587b9dda78462dbbe8c27168edd26bb205630d0bc753e7cce6b"}, {file = "langchain_community-0.3.22.tar.gz", hash = "sha256:36284687a9f64bc7820c0140beb3b96393f6c74c0b7ad8ba04ac35d673fe0988"}, @@ -2775,6 +2884,7 @@ description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langchain_core-0.3.55-py3-none-any.whl", hash = "sha256:b3cb36bf37755a616158a79866657c6697b43a2f7c69dd723ce425f1c76c1baa"}, {file = "langchain_core-0.3.55.tar.gz", hash = "sha256:0f2b3e311621116a83510c70b0ac9d959030a0a457a69483535cff18501fedc9"}, @@ -2799,6 +2909,7 @@ description = "An integration package connecting OpenAI and LangChain" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langchain_openai-0.3.14-py3-none-any.whl", hash = "sha256:b8e648d2d7678a5540818199d141ff727c6f1514294b3e1e999a95357c9d66a0"}, {file = "langchain_openai-0.3.14.tar.gz", hash = "sha256:0662db78620c2e5c3ccfc1c36dc959c0ddc80e6bdf7ef81632cbf4b2cc9b9461"}, @@ -2816,6 +2927,7 @@ description = "LangChain text splitting utilities" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langchain_text_splitters-0.3.8-py3-none-any.whl", hash = "sha256:e75cc0f4ae58dcf07d9f18776400cf8ade27fadd4ff6d264df6278bb302f6f02"}, {file = "langchain_text_splitters-0.3.8.tar.gz", hash = "sha256:116d4b9f2a22dda357d0b79e30acf005c5518177971c66a9f1ab0edfdb0f912e"}, @@ -2831,6 +2943,7 @@ description = "Building stateful, multi-actor applications with LLMs" optional = false python-versions = "<4.0,>=3.9.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langgraph-0.2.61-py3-none-any.whl", hash = "sha256:615f8bd345bf3a6ac3374ce7b4ecc96549301e598eb0f3e933c73b96af229961"}, {file = "langgraph-0.2.61.tar.gz", hash = "sha256:355aa6b6b3c19505e8b3c5f7bd813ffd59130d48e6aa017c0edf08273f4f42c2"}, @@ -2848,6 +2961,7 @@ description = "Library with base interfaces for LangGraph checkpoint savers." optional = false python-versions = "<4.0.0,>=3.9.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langgraph_checkpoint-2.0.9-py3-none-any.whl", hash = "sha256:b546ed6129929b8941ac08af6ce5cd26c8ebe1d25883d3c48638d34ade91ce42"}, {file = "langgraph_checkpoint-2.0.9.tar.gz", hash = "sha256:43847d7e385a2d9d2b684155920998e44ed42d2d1780719e4f6111fe3d6db84c"}, @@ -2864,6 +2978,7 @@ description = "SDK for interacting with LangGraph API" optional = false python-versions = "<4.0.0,>=3.9.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langgraph_sdk-0.1.51-py3-none-any.whl", hash = "sha256:ce2b58466d1700d06149782ed113157a8694a6d7932c801f316cd13fab315fe4"}, {file = "langgraph_sdk-0.1.51.tar.gz", hash = "sha256:dea1363e72562cb1e82a2d156be8d5b1a69ff3fe8815eee0e1e7a2f423242ec1"}, @@ -2880,6 +2995,7 @@ description = "Client library to connect to the LangSmith LLM Tracing and Evalua optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langsmith-0.2.10-py3-none-any.whl", hash = "sha256:b02f2f174189ff72e54c88b1aa63343defd6f0f676c396a690c63a4b6495dcc2"}, {file = "langsmith-0.2.10.tar.gz", hash = "sha256:153c7b3ccbd823528ff5bec84801e7e50a164e388919fc583252df5b27dd7830"}, @@ -2906,6 +3022,7 @@ description = "Tool to support lazy imports" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "lazy_imports-0.4.0-py3-none-any.whl", hash = "sha256:de0625cbbd781091c46a66003ec3953c87f0130e85a257cd1a24304237e4966b"}, {file = "lazy_imports-0.4.0.tar.gz", hash = "sha256:c3d9e4e295e6118588f58c6710d152bb2836e0276f790a120ee4ab608829cece"}, @@ -2923,6 +3040,7 @@ description = "Library to easily interface with LLM API providers" optional = false python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "litellm-1.67.5-py3-none-any.whl", hash = "sha256:bd3329731a36200539293521d312adf4f05fc4a6312a84baff2ce5a8b1507a43"}, {file = "litellm-1.67.5.tar.gz", hash = "sha256:a9c73feed05aba33b3f2879658f57bb3480b43404ae693ebc827f1c157affde5"}, @@ -2942,8 +3060,8 @@ tiktoken = ">=0.7.0" tokenizers = "*" [package.extras] -extra-proxy = ["azure-identity (>=1.15.0,<2.0.0)", "azure-keyvault-secrets (>=4.8.0,<5.0.0)", "google-cloud-kms (>=2.21.3,<3.0.0)", "prisma (==0.11.0)", "redisvl (>=0.4.1,<0.5.0) ; python_version >= \"3.9\" and python_version < \"3.14\"", "resend (>=0.8.0,<0.9.0)"] -proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", "boto3 (==1.34.34)", "cryptography (>=43.0.1,<44.0.0)", "fastapi (>=0.115.5,<0.116.0)", "fastapi-sso (>=0.16.0,<0.17.0)", "gunicorn (>=23.0.0,<24.0.0)", "litellm-proxy-extras (==0.1.13)", "mcp (==1.5.0) ; python_version >= \"3.10\"", "orjson (>=3.9.7,<4.0.0)", "pynacl (>=1.5.0,<2.0.0)", "python-multipart (>=0.0.18,<0.0.19)", "pyyaml (>=6.0.1,<7.0.0)", "rq", "uvicorn (>=0.29.0,<0.30.0)", "uvloop (>=0.21.0,<0.22.0)", "websockets (>=13.1.0,<14.0.0)"] +extra-proxy = ["azure-identity (>=1.15.0,<2.0.0)", "azure-keyvault-secrets (>=4.8.0,<5.0.0)", "google-cloud-kms (>=2.21.3,<3.0.0)", "prisma (==0.11.0)", "redisvl (>=0.4.1,<0.5.0)", "resend (>=0.8.0,<0.9.0)"] +proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", "boto3 (==1.34.34)", "cryptography (>=43.0.1,<44.0.0)", "fastapi (>=0.115.5,<0.116.0)", "fastapi-sso (>=0.16.0,<0.17.0)", "gunicorn (>=23.0.0,<24.0.0)", "litellm-proxy-extras (==0.1.13)", "mcp (==1.5.0)", "orjson (>=3.9.7,<4.0.0)", "pynacl (>=1.5.0,<2.0.0)", "python-multipart (>=0.0.18,<0.0.19)", "pyyaml (>=6.0.1,<7.0.0)", "rq", "uvicorn (>=0.29.0,<0.30.0)", "uvloop (>=0.21.0,<0.22.0)", "websockets (>=13.1.0,<14.0.0)"] [[package]] name = "llama-cloud" @@ -2952,6 +3070,7 @@ description = "" optional = false python-versions = "<4,>=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_cloud-0.1.8-py3-none-any.whl", hash = "sha256:1a0c4cf212a04f2375f1d0791ca4e5f196e0fb0567c4ec96cd9dbcad773de60a"}, {file = "llama_cloud-0.1.8.tar.gz", hash = "sha256:7199bab2240a9cc330740003fa77648f43f6e533da411a8250a4a70584f91153"}, @@ -2969,6 +3088,7 @@ description = "Interface between LLMs and your data" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index-0.12.10-py3-none-any.whl", hash = "sha256:c397e1355d48a043a4636857519185f9a47eb25e6482134c28e75f64cd4fe11e"}, {file = "llama_index-0.12.10.tar.gz", hash = "sha256:942bd89f6363a553ff30f053df3c12703ac81c726d1afb7fc14555b0ede5e8a2"}, @@ -2995,6 +3115,7 @@ description = "llama-index agent openai integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_agent_openai-0.4.1-py3-none-any.whl", hash = "sha256:162507543082f739a8c806911344c8d7f2434d0ee91124cfdd7b0ba5f76d0e57"}, {file = "llama_index_agent_openai-0.4.1.tar.gz", hash = "sha256:3a89137b228a6e9c2b3f46e367a27b75fb31b458e21777bba819de654707d59e"}, @@ -3012,6 +3133,7 @@ description = "llama-index cli" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_cli-0.4.0-py3-none-any.whl", hash = "sha256:60d12f89e6b85e80a0cc3a8b531f05a911b5eebaebc37314411476d1ba685904"}, {file = "llama_index_cli-0.4.0.tar.gz", hash = "sha256:d6ab201359962a8a34368aeda3a49bbbe67e9e009c59bd925c4fb2be4ace3906"}, @@ -3029,6 +3151,7 @@ description = "Interface between LLMs and your data" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_core-0.12.10.post1-py3-none-any.whl", hash = "sha256:897e8cd4efeff6842580b043bdf4008ac60f693df1de2bfd975307a4845707c2"}, {file = "llama_index_core-0.12.10.post1.tar.gz", hash = "sha256:af27bea4d1494ba84983a649976e60e3de677a73946aa45ed12ce27e3a623ddf"}, @@ -3065,6 +3188,7 @@ description = "llama-index embeddings huggingface integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_embeddings_huggingface-0.4.0-py3-none-any.whl", hash = "sha256:a5890bab349b118398054138b298a9e429776b85bcf8017fdf01cd5d60fbba12"}, {file = "llama_index_embeddings_huggingface-0.4.0.tar.gz", hash = "sha256:ce8f8b30b29cff85401aba2118285fb63fb8147a56b656ee20f7e8510ca085a2"}, @@ -3082,6 +3206,7 @@ description = "llama-index embeddings openai integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_embeddings_openai-0.3.1-py3-none-any.whl", hash = "sha256:f15a3d13da9b6b21b8bd51d337197879a453d1605e625a1c6d45e741756c0290"}, {file = "llama_index_embeddings_openai-0.3.1.tar.gz", hash = "sha256:1368aad3ce24cbaed23d5ad251343cef1eb7b4a06d6563d6606d59cb347fef20"}, @@ -3098,6 +3223,7 @@ description = "llama-index indices llama-cloud integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_indices_managed_llama_cloud-0.6.3-py3-none-any.whl", hash = "sha256:7f125602f624a2d321b6a4130cd98df35eb8c15818a159390755b2c13068f4ce"}, {file = "llama_index_indices_managed_llama_cloud-0.6.3.tar.gz", hash = "sha256:f09e4182cbc2a2bd75ae85cebb1681075247f0d91b931b094cac4315386ce87a"}, @@ -3114,6 +3240,7 @@ description = "llama-index llms openai integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_llms_openai-0.3.13-py3-none-any.whl", hash = "sha256:caea1d6cb5bdd34518fcefe28b784698c92120ed133e6cd4591f777cd15180b0"}, {file = "llama_index_llms_openai-0.3.13.tar.gz", hash = "sha256:51dda240dae7671c37e84bb50fe77fe6bb58a9b2a7e33dccd84473c9998afcea"}, @@ -3130,6 +3257,7 @@ description = "llama-index multi-modal-llms openai integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_multi_modal_llms_openai-0.4.2-py3-none-any.whl", hash = "sha256:093f60f59fc423abab110810f8f129b96b0212b9737d74480f0e3e1b715e975b"}, {file = "llama_index_multi_modal_llms_openai-0.4.2.tar.gz", hash = "sha256:3437a08cec85cebbc212aa73da5c9b8b054b4dc628338568435a7df88489476f"}, @@ -3146,6 +3274,7 @@ description = "llama-index program openai integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_program_openai-0.3.1-py3-none-any.whl", hash = "sha256:93646937395dc5318fd095153d2f91bd632b25215d013d14a87c088887d205f9"}, {file = "llama_index_program_openai-0.3.1.tar.gz", hash = "sha256:6039a6cdbff62c6388c07e82a157fe2edd3bbef0c5adf292ad8546bf4ec75b82"}, @@ -3163,6 +3292,7 @@ description = "llama-index question_gen openai integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_question_gen_openai-0.3.0-py3-none-any.whl", hash = "sha256:9b60ec114273a63b50349948666e5744a8f58acb645824e07c979041e8fec598"}, {file = "llama_index_question_gen_openai-0.3.0.tar.gz", hash = "sha256:efd3b468232808e9d3474670aaeab00e41b90f75f52d0c9bfbf11207e0963d62"}, @@ -3180,6 +3310,7 @@ description = "llama-index readers file integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_readers_file-0.4.2-py3-none-any.whl", hash = "sha256:9341ff375aae3ab58256af4fc7c6619e08b04a1e78bc5c9d3d1763df3b9223a6"}, {file = "llama_index_readers_file-0.4.2.tar.gz", hash = "sha256:d677a2eef0695d00b487ac4ea14c82e6a4eaade3a09c540f8f81626d852e3491"}, @@ -3202,6 +3333,7 @@ description = "llama-index readers llama-parse integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_readers_llama_parse-0.4.0-py3-none-any.whl", hash = "sha256:574e48386f28d2c86c3f961ca4a4906910312f3400dd0c53014465bfbc6b32bf"}, {file = "llama_index_readers_llama_parse-0.4.0.tar.gz", hash = "sha256:e99ec56f4f8546d7fda1a7c1ae26162fb9acb7ebcac343b5abdb4234b4644e0f"}, @@ -3218,6 +3350,7 @@ description = "llama-index vector_stores chroma integration" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_index_vector_stores_chroma-0.4.1-py3-none-any.whl", hash = "sha256:42200af4fa5c8df820b865825d1b506cecb922c8fbd7421eda8a5609b390c1d5"}, {file = "llama_index_vector_stores_chroma-0.4.1.tar.gz", hash = "sha256:70ee74ccf304adda04171d014e483759c68a1c92f679ea2ca2e6b6f45b6fef08"}, @@ -3234,6 +3367,7 @@ description = "Parse files into RAG-Optimized formats." optional = false python-versions = "<4.0,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llama_parse-0.5.19-py3-none-any.whl", hash = "sha256:715cc895d183531b4299359d4f4004089b2e522f5f137f316084e7aa04035b62"}, {file = "llama_parse-0.5.19.tar.gz", hash = "sha256:db69da70e199a2664705eb983a70fa92b7cee19dd6cff175af7692a0b8a4dd53"}, @@ -3251,6 +3385,7 @@ description = "Websocket Client Library" optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "lomond-0.3.3-py2.py3-none-any.whl", hash = "sha256:df1dd4dd7b802a12b71907ab1abb08b8ce9950195311207579379eb3b1553de7"}, {file = "lomond-0.3.3.tar.gz", hash = "sha256:427936596b144b4ec387ead99aac1560b77c8a78107d3d49415d3abbe79acbd3"}, @@ -3266,6 +3401,7 @@ description = "Powerful and Pythonic XML processing library combining libxml2/li optional = false python-versions = ">=3.6" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, @@ -3421,6 +3557,7 @@ description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -3446,6 +3583,7 @@ description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" groups = ["main", "dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -3517,6 +3655,7 @@ description = "A lightweight library for converting complex datatypes to and fro optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "marshmallow-3.25.0-py3-none-any.whl", hash = "sha256:50894cd57c6b097a6c6ed2bf216af47d10146990a54db52d03e32edb0448c905"}, {file = "marshmallow-3.25.0.tar.gz", hash = "sha256:5ba94a4eb68894ad6761a505eb225daf7e5cb7b4c32af62d4a45e9d42665bc31"}, @@ -3537,6 +3676,7 @@ description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -3544,29 +3684,32 @@ files = [ [[package]] name = "mcp" -version = "1.7.1" +version = "1.11.0" description = "Model Context Protocol SDK" optional = false python-versions = ">=3.10" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "mcp-1.7.1-py3-none-any.whl", hash = "sha256:f7e6108977db6d03418495426c7ace085ba2341b75197f8727f96f9cfd30057a"}, - {file = "mcp-1.7.1.tar.gz", hash = "sha256:eb4f1f53bd717f75dda8a1416e00804b831a8f3c331e23447a03b78f04b43a6e"}, + {file = "mcp-1.11.0-py3-none-any.whl", hash = "sha256:58deac37f7483e4b338524b98bc949b7c2b7c33d978f5fafab5bde041c5e2595"}, + {file = "mcp-1.11.0.tar.gz", hash = "sha256:49a213df56bb9472ff83b3132a4825f5c8f5b120a90246f08b0dac6bedac44c8"}, ] [package.dependencies] anyio = ">=4.5" httpx = ">=0.27" httpx-sse = ">=0.4" -pydantic = ">=2.7.2,<3.0.0" +jsonschema = ">=4.20.0" +pydantic = ">=2.8.0,<3.0.0" pydantic-settings = ">=2.5.2" python-multipart = ">=0.0.9" +pywin32 = {version = ">=310", markers = "sys_platform == \"win32\""} sse-starlette = ">=1.6.1" starlette = ">=0.27" uvicorn = {version = ">=0.23.1", markers = "sys_platform != \"emscripten\""} [package.extras] -cli = ["python-dotenv (>=1.0.0)", "typer (>=0.12.4)"] +cli = ["python-dotenv (>=1.0.0)", "typer (>=0.16.0)"] rich = ["rich (>=13.9.4)"] ws = ["websockets (>=15.0.1)"] @@ -3577,6 +3720,7 @@ description = "Markdown URL utilities" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -3589,6 +3733,7 @@ description = "Python extension for MurmurHash (MurmurHash3), a set of fast and optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f0a4b4bf05778ed77d820d6e7d0e9bd6beb0c01af10e1ce9233f5d2f814fcafa"}, {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac7a391039aeab95810c2d020b69a94eb6b4b37d4e2374831e92db3a0cdf71c6"}, @@ -3703,6 +3848,7 @@ description = "An implementation of time.monotonic() for Python 2 & < 3.3" optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, @@ -3715,6 +3861,7 @@ description = "More routines for operating on iterables, beyond itertools" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "more-itertools-10.5.0.tar.gz", hash = "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6"}, {file = "more_itertools-10.5.0-py3-none-any.whl", hash = "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef"}, @@ -3727,6 +3874,7 @@ description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -3735,7 +3883,7 @@ files = [ [package.extras] develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4) ; platform_python_implementation != \"PyPy\""] +gmpy = ["gmpy2 (>=2.1.0a4)"] tests = ["pytest (>=4.6)"] [[package]] @@ -3745,6 +3893,7 @@ description = "MessagePack serializer" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd"}, {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d"}, @@ -3819,6 +3968,7 @@ description = "multidict implementation" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -3924,6 +4074,7 @@ description = "better multiprocessing and multithreading in Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "multiprocess-0.70.16-pp310-pypy310_pp73-macosx_10_13_x86_64.whl", hash = "sha256:476887be10e2f59ff183c006af746cb6f1fd0eadcfd4ef49e605cbe2659920ee"}, {file = "multiprocess-0.70.16-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d951bed82c8f73929ac82c61f01a7b5ce8f3e5ef40f5b52553b4f547ce2b08ec"}, @@ -3949,6 +4100,7 @@ description = "Type system extensions for programs checked with the mypy type ch optional = false python-versions = ">=3.5" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -3961,6 +4113,7 @@ description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -3973,6 +4126,7 @@ description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.10" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, @@ -3993,6 +4147,7 @@ description = "Natural Language Toolkit" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1"}, {file = "nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868"}, @@ -4019,6 +4174,7 @@ description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -4065,7 +4221,7 @@ description = "CUBLAS native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08ed2686e9875d01b58e3cb379c6896df8e76c75e0d4a7f7dace3d7b6d9ef8eb"}, {file = "nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:235f728d6e2a409eddf1df58d5b0921cf80cfa9e72b9f2775ccb7b4a87984668"}, @@ -4079,7 +4235,7 @@ description = "CUDA profiling tools runtime libs." optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:166ee35a3ff1587f2490364f90eeeb8da06cd867bd5b701bf7f9a02b78bc63fc"}, {file = "nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_aarch64.whl", hash = "sha256:358b4a1d35370353d52e12f0a7d1769fc01ff74a191689d3870b2123156184c4"}, @@ -4095,7 +4251,7 @@ description = "NVRTC native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5847f1d6e5b757f1d2b3991a01082a44aad6f10ab3c5c0213fa3e25bddc25a13"}, {file = "nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:35b0cc6ee3a9636d5409133e79273ce1f3fd087abb0532d2d2e8fff1fe9efc53"}, @@ -4109,7 +4265,7 @@ description = "CUDA Runtime native Libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6116fad3e049e04791c0256a9778c16237837c08b27ed8c8401e2e45de8d60cd"}, {file = "nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d461264ecb429c84c8879a7153499ddc7b19b5f8d84c204307491989a365588e"}, @@ -4125,7 +4281,7 @@ description = "cuDNN runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:9fd4584468533c61873e5fda8ca41bac3a38bcb2d12350830c69b0a96a7e4def"}, {file = "nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:30ac3869f6db17d170e0e556dd6cc5eee02647abc31ca856634d5a40f82c15b2"}, @@ -4142,7 +4298,7 @@ description = "CUFFT native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d16079550df460376455cba121db6564089176d9bac9e4f360493ca4741b22a6"}, {file = "nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8510990de9f96c803a051822618d42bf6cb8f069ff3f48d93a8486efdacb48fb"}, @@ -4161,7 +4317,7 @@ description = "cuFile GPUDirect libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc23469d1c7e52ce6c1d55253273d32c565dd22068647f3aa59b3c6b005bf159"}, {file = "nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:8f57a0051dcf2543f6dc2b98a98cb2719c37d3cee1baba8965d57f3bbc90d4db"}, @@ -4174,7 +4330,7 @@ description = "CURAND native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_aarch64.whl", hash = "sha256:6e82df077060ea28e37f48a3ec442a8f47690c7499bff392a5938614b56c98d8"}, {file = "nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a42cd1344297f70b9e39a1e4f467a4e1c10f1da54ff7a85c12197f6c652c8bdf"}, @@ -4190,7 +4346,7 @@ description = "CUDA solver native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0ce237ef60acde1efc457335a2ddadfd7610b892d94efee7b776c64bb1cac9e0"}, {file = "nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e9e49843a7707e42022babb9bcfa33c29857a93b88020c4e4434656a655b698c"}, @@ -4211,7 +4367,7 @@ description = "CUSPARSE native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d25b62fb18751758fe3c93a4a08eff08effedfe4edf1c6bb5afd0890fe88f887"}, {file = "nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7aa32fa5470cf754f72d1116c7cbc300b4e638d3ae5304cfa4a638a5b87161b1"}, @@ -4230,7 +4386,7 @@ description = "NVIDIA cuSPARSELt" optional = false python-versions = "*" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8371549623ba601a06322af2133c4a44350575f5a3108fb75f3ef20b822ad5f1"}, {file = "nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5c8a26c36445dd2e6812f1177978a24e2d37cacce7e090f297a688d1ec44f46"}, @@ -4244,7 +4400,7 @@ description = "NVIDIA Collective Communication Library (NCCL) Runtime" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c196e95e832ad30fbbb50381eb3cbd1fadd5675e587a548563993609af19522"}, {file = "nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:694cf3879a206553cc9d7dbda76b13efaf610fdb70a50cba303de1b0d1530ac6"}, @@ -4257,7 +4413,7 @@ description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a"}, {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf4eaa7d4b6b543ffd69d6abfb11efdeb2db48270d94dfd3a452c24150829e41"}, @@ -4271,7 +4427,7 @@ description = "NVIDIA Tools Extension" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f44f8d86bb7d5629988d61c8d3ae61dddb2015dee142740536bc7481b022fe4b"}, {file = "nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_aarch64.whl", hash = "sha256:adcaabb9d436c9761fca2b13959a2d237c5f9fd406c8e4b723c695409ff88059"}, @@ -4287,6 +4443,7 @@ description = "A generic, spec-compliant, thorough implementation of the OAuth r optional = false python-versions = ">=3.6" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -4304,6 +4461,7 @@ description = "The official Python client for Ollama." optional = false python-versions = "<4.0,>=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ollama-0.4.7-py3-none-any.whl", hash = "sha256:85505663cca67a83707be5fb3aeff0ea72e67846cea5985529d8eca4366564a1"}, {file = "ollama-0.4.7.tar.gz", hash = "sha256:891dcbe54f55397d82d289c459de0ea897e103b86a3f1fad0fdb1895922a75ff"}, @@ -4320,6 +4478,7 @@ description = "ONNX Runtime is a runtime accelerator for Machine Learning models optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "onnxruntime-1.20.1-cp310-cp310-macosx_13_0_universal2.whl", hash = "sha256:e50ba5ff7fed4f7d9253a6baf801ca2883cc08491f9d32d78a80da57256a5439"}, {file = "onnxruntime-1.20.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b2908b50101a19e99c4d4e97ebb9905561daf61829403061c1adc1b588bc0de"}, @@ -4354,14 +4513,15 @@ sympy = "*" [[package]] name = "openai" -version = "1.75.0" +version = "1.96.1" description = "The official Python library for the openai API" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "openai-1.75.0-py3-none-any.whl", hash = "sha256:fe6f932d2ded3b429ff67cc9ad118c71327db32eb9d32dd723de3acfca337125"}, - {file = "openai-1.75.0.tar.gz", hash = "sha256:fb3ea907efbdb1bcfd0c44507ad9c961afd7dce3147292b54505ecfd17be8fd1"}, + {file = "openai-1.96.1-py3-none-any.whl", hash = "sha256:0afaab2019bae8e145e7a1baf6953167084f019dd15042c65edd117398c1eb1c"}, + {file = "openai-1.96.1.tar.gz", hash = "sha256:6d505b5cc550e036bfa3fe99d6cff565b11491d12378d4c353f92ef72b0a408a"}, ] [package.dependencies] @@ -4375,10 +4535,38 @@ tqdm = ">4" typing-extensions = ">=4.11,<5" [package.extras] +aiohttp = ["aiohttp", "httpx-aiohttp (>=0.1.8)"] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] realtime = ["websockets (>=13,<16)"] voice-helpers = ["numpy (>=2.0.2)", "sounddevice (>=0.5.1)"] +[[package]] +name = "openai-agents" +version = "0.0.19" +description = "OpenAI Agents SDK" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "openai_agents-0.0.19-py3-none-any.whl", hash = "sha256:daff03408e3a069e2a04fdf3968296cdc5f63ab635df1d8a54ca2e9352e68516"}, + {file = "openai_agents-0.0.19.tar.gz", hash = "sha256:4090d683ef7257b3f6299f76e477ad51a970fd76de7c55df65f4bc5029580f2b"}, +] + +[package.dependencies] +griffe = ">=1.5.6,<2" +mcp = {version = ">=1.9.4,<2", markers = "python_version >= \"3.10\""} +openai = ">=1.87.0" +pydantic = ">=2.10,<3" +requests = ">=2.0,<3" +types-requests = ">=2.0,<3" +typing-extensions = ">=4.12.2,<5" + +[package.extras] +litellm = ["litellm (>=1.67.4.post1,<2)"] +viz = ["graphviz (>=0.17)"] +voice = ["numpy (>=2.2.0,<3)", "websockets (>=15.0,<16)"] + [[package]] name = "opentelemetry-api" version = "1.34.1" @@ -4386,6 +4574,7 @@ description = "OpenTelemetry Python API" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_api-1.34.1-py3-none-any.whl", hash = "sha256:b7df4cb0830d5a6c29ad0c0691dbae874d8daefa934b8b1d642de48323d32a8c"}, {file = "opentelemetry_api-1.34.1.tar.gz", hash = "sha256:64f0bd06d42824843731d05beea88d4d4b6ae59f9fe347ff7dfa2cc14233bbb3"}, @@ -4402,6 +4591,7 @@ description = "OpenTelemetry Collector Exporters" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_exporter_otlp-1.34.1-py3-none-any.whl", hash = "sha256:f4a453e9cde7f6362fd4a090d8acf7881d1dc585540c7b65cbd63e36644238d4"}, {file = "opentelemetry_exporter_otlp-1.34.1.tar.gz", hash = "sha256:71c9ad342d665d9e4235898d205db17c5764cd7a69acb8a5dcd6d5e04c4c9988"}, @@ -4418,6 +4608,7 @@ description = "OpenTelemetry Protobuf encoding" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_exporter_otlp_proto_common-1.34.1-py3-none-any.whl", hash = "sha256:8e2019284bf24d3deebbb6c59c71e6eef3307cd88eff8c633e061abba33f7e87"}, {file = "opentelemetry_exporter_otlp_proto_common-1.34.1.tar.gz", hash = "sha256:b59a20a927facd5eac06edaf87a07e49f9e4a13db487b7d8a52b37cb87710f8b"}, @@ -4433,6 +4624,7 @@ description = "OpenTelemetry Collector Protobuf over gRPC Exporter" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_exporter_otlp_proto_grpc-1.34.1-py3-none-any.whl", hash = "sha256:04bb8b732b02295be79f8a86a4ad28fae3d4ddb07307a98c7aa6f331de18cca6"}, {file = "opentelemetry_exporter_otlp_proto_grpc-1.34.1.tar.gz", hash = "sha256:7c841b90caa3aafcfc4fee58487a6c71743c34c6dc1787089d8b0578bbd794dd"}, @@ -4454,6 +4646,7 @@ description = "OpenTelemetry Collector Protobuf over HTTP Exporter" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_exporter_otlp_proto_http-1.34.1-py3-none-any.whl", hash = "sha256:5251f00ca85872ce50d871f6d3cc89fe203b94c3c14c964bbdc3883366c705d8"}, {file = "opentelemetry_exporter_otlp_proto_http-1.34.1.tar.gz", hash = "sha256:aaac36fdce46a8191e604dcf632e1f9380c7d5b356b27b3e0edb5610d9be28ad"}, @@ -4475,6 +4668,7 @@ description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Py optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation-0.55b1-py3-none-any.whl", hash = "sha256:cbb1496b42bc394e01bc63701b10e69094e8564e281de063e4328d122cc7a97e"}, {file = "opentelemetry_instrumentation-0.55b1.tar.gz", hash = "sha256:2dc50aa207b9bfa16f70a1a0571e011e737a9917408934675b89ef4d5718c87b"}, @@ -4493,6 +4687,7 @@ description = "OpenTelemetry Aleph Alpha instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4516,6 +4711,7 @@ description = "OpenTelemetry Anthropic instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4539,6 +4735,7 @@ description = "ASGI instrumentation for OpenTelemetry" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_asgi-0.55b1-py3-none-any.whl", hash = "sha256:186620f7d0a71c8c817c5cbe91c80faa8f9c50967d458b8131c5694e21eb8583"}, {file = "opentelemetry_instrumentation_asgi-0.55b1.tar.gz", hash = "sha256:615cde388dd3af4d0e52629a6c75828253618aebcc6e65d93068463811528606"}, @@ -4561,6 +4758,7 @@ description = "OpenTelemetry Bedrock instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4583,6 +4781,7 @@ description = "OpenTelemetry Chroma DB instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4606,6 +4805,7 @@ description = "OpenTelemetry Cohere instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4629,6 +4829,7 @@ description = "OpenTelemetry crewAI instrumentation" optional = false python-versions = ">=3.10,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4652,6 +4853,7 @@ description = "OpenTelemetry FastAPI Instrumentation" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_fastapi-0.55b1-py3-none-any.whl", hash = "sha256:af4c09aebb0bd6b4a0881483b175e76547d2bc96329c94abfb794bf44f29f6bb"}, {file = "opentelemetry_instrumentation_fastapi-0.55b1.tar.gz", hash = "sha256:bb9f8c13a053e7ff7da221248067529cc320e9308d57f3908de0afa36f6c5744"}, @@ -4674,6 +4876,7 @@ description = "OpenTelemetry Google Generative AI instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4697,6 +4900,7 @@ description = "OpenTelemetry Groq instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4720,6 +4924,7 @@ description = "OpenTelemetry Haystack instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4743,6 +4948,7 @@ description = "OpenTelemetry Lancedb instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4766,6 +4972,7 @@ description = "OpenTelemetry Langchain instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4789,6 +4996,7 @@ description = "OpenTelemetry LlamaIndex instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4814,6 +5022,7 @@ description = "OpenTelemetry Logging instrumentation" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_logging-0.55b1-py3-none-any.whl", hash = "sha256:1b34b7bfcfa6a22f58f2000f041f5c169c5074738cf23bd33599f60ae1ecf1c5"}, {file = "opentelemetry_instrumentation_logging-0.55b1.tar.gz", hash = "sha256:8ab1e68a2496d36ed2388ec3178495d9fa31f805b93c5845f83f1fab718f28d0"}, @@ -4830,6 +5039,7 @@ description = "OpenTelemetry Marqo instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4853,6 +5063,7 @@ description = "OpenTelemetry mcp instrumentation" optional = false python-versions = ">=3.10,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4877,6 +5088,7 @@ description = "OpenTelemetry Milvus instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4900,6 +5112,7 @@ description = "OpenTelemetry Mistral AI instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4923,6 +5136,7 @@ description = "OpenTelemetry Ollama instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4946,6 +5160,7 @@ description = "OpenTelemetry OpenAI instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4970,6 +5185,7 @@ description = "OpenTelemetry OpenAI Agents instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -4993,6 +5209,7 @@ description = "OpenTelemetry Pinecone instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -5016,6 +5233,7 @@ description = "OpenTelemetry Qdrant instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -5039,6 +5257,7 @@ description = "OpenTelemetry Redis instrumentation" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_redis-0.55b1-py3-none-any.whl", hash = "sha256:8f40d742e1666e0e971f2385b47ddf6f55da2fe6bf77d2ff5f8f3b27cd5746b6"}, {file = "opentelemetry_instrumentation_redis-0.55b1.tar.gz", hash = "sha256:bce9b47907e08ede4961b845030fbffbf8e6f515e1b48b4697c5f36704a97743"}, @@ -5060,6 +5279,7 @@ description = "OpenTelemetry Replicate instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -5083,6 +5303,7 @@ description = "OpenTelemetry requests instrumentation" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_requests-0.55b1-py3-none-any.whl", hash = "sha256:c9ba0a67850b49aa965e760e87e4b68e52530e5373a0b3c15d290a8997136619"}, {file = "opentelemetry_instrumentation_requests-0.55b1.tar.gz", hash = "sha256:3a04ae7bc90af08acef074b369275cf77c60533b319fa91cad76a380fd035c83"}, @@ -5104,6 +5325,7 @@ description = "OpenTelemetry SageMaker instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -5124,6 +5346,7 @@ description = "OpenTelemetry SQLAlchemy instrumentation" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_sqlalchemy-0.55b1-py3-none-any.whl", hash = "sha256:d6b3cac2cc3301083608d3c0e2b3979f62c6ab327a12f5a7c779f9ab05eb6633"}, {file = "opentelemetry_instrumentation_sqlalchemy-0.55b1.tar.gz", hash = "sha256:3a25cfb75de9bb14d26ab274b90d5613867c976e93cde0c5fb673cb731006532"}, @@ -5146,6 +5369,7 @@ description = "Thread context propagation support for OpenTelemetry" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_threading-0.55b1-py3-none-any.whl", hash = "sha256:f865542b32b219c8fd01deb03b8c3c9ba2eb3f0501ae303338403fd2242962c7"}, {file = "opentelemetry_instrumentation_threading-0.55b1.tar.gz", hash = "sha256:4ed68502e7ed017bfc10b1f9e508cc5ccaea0e46ac1010f7f2541ab9c6eacd92"}, @@ -5163,6 +5387,7 @@ description = "OpenTelemetry Together AI instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -5186,6 +5411,7 @@ description = "OpenTelemetry transformers instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -5206,6 +5432,7 @@ description = "OpenTelemetry urllib3 instrumentation" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_urllib3-0.55b1-py3-none-any.whl", hash = "sha256:41c4a3a01194a713cd82c2067705f6ebc92652b9de56ac741594ce28afa01e09"}, {file = "opentelemetry_instrumentation_urllib3-0.55b1.tar.gz", hash = "sha256:2999eb2652c7461ea308ff1b3a61726a695e9df1cc2635b2627017b3a42ee214"}, @@ -5228,6 +5455,7 @@ description = "OpenTelemetry Vertex AI instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -5251,6 +5479,7 @@ description = "OpenTelemetry IBM Watsonx Instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -5274,6 +5503,7 @@ description = "OpenTelemetry Weaviate instrumentation" optional = false python-versions = ">=3.9,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -5297,6 +5527,7 @@ description = "OpenTelemetry Python Proto" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_proto-1.34.1-py3-none-any.whl", hash = "sha256:eb4bb5ac27f2562df2d6857fc557b3a481b5e298bc04f94cc68041f00cebcbd2"}, {file = "opentelemetry_proto-1.34.1.tar.gz", hash = "sha256:16286214e405c211fc774187f3e4bbb1351290b8dfb88e8948af209ce85b719e"}, @@ -5312,6 +5543,7 @@ description = "OpenTelemetry Python SDK" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_sdk-1.34.1-py3-none-any.whl", hash = "sha256:308effad4059562f1d92163c61c8141df649da24ce361827812c40abb2a1e96e"}, {file = "opentelemetry_sdk-1.34.1.tar.gz", hash = "sha256:8091db0d763fcd6098d4781bbc80ff0971f94e260739aa6afe6fd379cdf3aa4d"}, @@ -5329,6 +5561,7 @@ description = "OpenTelemetry Semantic Conventions" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_semantic_conventions-0.55b1-py3-none-any.whl", hash = "sha256:5da81dfdf7d52e3d37f8fe88d5e771e191de924cfff5f550ab0b8f7b2409baed"}, {file = "opentelemetry_semantic_conventions-0.55b1.tar.gz", hash = "sha256:ef95b1f009159c28d7a7849f5cbc71c4c34c845bb514d66adfdf1b3fff3598b3"}, @@ -5345,6 +5578,7 @@ description = "OpenTelemetry Semantic Conventions Extension for Large Language M optional = false python-versions = "<4,>=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_semantic_conventions_ai-0.4.11-py3-none-any.whl", hash = "sha256:9b07da1e66bed1746b61bb5d49d8fba9ae693625ec4ea94ddab390760505bf4b"}, {file = "opentelemetry_semantic_conventions_ai-0.4.11.tar.gz", hash = "sha256:bc84b71c66a01a5836a28104e691c5524f4f677fc90b40a4e6fbc2ec3e250610"}, @@ -5357,6 +5591,7 @@ description = "Web util for OpenTelemetry" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_util_http-0.55b1-py3-none-any.whl", hash = "sha256:e134218df8ff010e111466650e5f019496b29c3b4f1b7de0e8ff8ebeafeebdf4"}, {file = "opentelemetry_util_http-0.55b1.tar.gz", hash = "sha256:29e119c1f6796cccf5fc2aedb55274435cde5976d0ac3fec3ca20a80118f821e"}, @@ -5369,6 +5604,7 @@ description = "Fast, correct Python JSON library supporting dataclasses, datetim optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "orjson-3.10.14-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:849ea7845a55f09965826e816cdc7689d6cf74fe9223d79d758c714af955bcb6"}, {file = "orjson-3.10.14-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5947b139dfa33f72eecc63f17e45230a97e741942955a6c9e650069305eb73d"}, @@ -5454,6 +5690,7 @@ description = "A decorator to automatically detect mismatch when overriding a me optional = false python-versions = ">=3.6" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, @@ -5466,6 +5703,7 @@ description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["main", "dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -5478,6 +5716,7 @@ description = "Powerful data structures for data analysis, time series, and stat optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pandas-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bdec823dc6ec53f7a6339a0e34c68b144a7a1fd28d80c260534c39c62c5bf8c9"}, {file = "pandas-2.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:294d96cfaf28d688f30c918a765ea2ae2e0e71d3536754f4b6de0ea4a496d034"}, @@ -5508,9 +5747,9 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""}, {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}, - {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -5547,6 +5786,7 @@ description = "Parameterized testing with any Python test framework" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "parameterized-0.9.0-py2.py3-none-any.whl", hash = "sha256:4e0758e3d41bea3bbd05ec14fc2c24736723f243b28d702081aef438c9372b1b"}, {file = "parameterized-0.9.0.tar.gz", hash = "sha256:7fc905272cefa4f364c1a3429cbbe9c0f98b793988efb5bf90aac80f08db09b1"}, @@ -5562,6 +5802,7 @@ description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, @@ -5641,7 +5882,7 @@ docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] -typing = ["typing-extensions ; python_version < \"3.10\""] +typing = ["typing-extensions"] xmp = ["defusedxml"] [[package]] @@ -5651,6 +5892,7 @@ description = "Pinecone client and SDK" optional = false python-versions = "<4.0,>=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pinecone_client-3.2.2-py3-none-any.whl", hash = "sha256:7e492fdda23c73726bc0cb94c689bb950d06fb94e82b701a0c610c2e830db327"}, {file = "pinecone_client-3.2.2.tar.gz", hash = "sha256:887a12405f90ac11c396490f605fc479f31cf282361034d1ae0fccc02ac75bee"}, @@ -5666,7 +5908,7 @@ urllib3 = [ ] [package.extras] -grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv2 (==0.1.0)", "grpcio (>=1.44.0) ; python_version >= \"3.8\" and python_version < \"3.11\"", "grpcio (>=1.59.0) ; python_version >= \"3.11\" and python_version < \"4.0\"", "lz4 (>=3.1.3)", "protobuf (>=3.20.0,<3.21.0)"] +grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv2 (==0.1.0)", "grpcio (>=1.44.0)", "grpcio (>=1.59.0)", "lz4 (>=3.1.3)", "protobuf (>=3.20.0,<3.21.0)"] [[package]] name = "pluggy" @@ -5675,6 +5917,7 @@ description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -5691,6 +5934,7 @@ description = "Integrate PostHog into any python application." optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "posthog-3.7.5-py2.py3-none-any.whl", hash = "sha256:022132c17069dde03c5c5904e2ae1b9bd68d5059cbc5a8dffc5c1537a1b71cb5"}, {file = "posthog-3.7.5.tar.gz", hash = "sha256:8ba40ab623da35db72715fc87fe7dccb7fc272ced92581fe31db2d4dbe7ad761"}, @@ -5715,6 +5959,7 @@ description = "Accelerated property cache" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, @@ -5807,6 +6052,7 @@ description = "Beautiful, Pythonic protocol buffers." optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "proto_plus-1.25.0-py3-none-any.whl", hash = "sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961"}, {file = "proto_plus-1.25.0.tar.gz", hash = "sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91"}, @@ -5825,6 +6071,7 @@ description = "" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "protobuf-5.29.3-cp310-abi3-win32.whl", hash = "sha256:3ea51771449e1035f26069c4c7fd51fba990d07bc55ba80701c78f886bf9c888"}, {file = "protobuf-5.29.3-cp310-abi3-win_amd64.whl", hash = "sha256:a4fa6f80816a9a0678429e84973f2f98cbc218cca434abe8db2ad0bffc98503a"}, @@ -5846,6 +6093,7 @@ description = "Python library for Apache Arrow" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c"}, {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4"}, @@ -5901,6 +6149,7 @@ description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, @@ -5913,6 +6162,7 @@ description = "A collection of ASN.1-based protocols modules" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, @@ -5928,6 +6178,7 @@ description = "Python style guide checker" optional = false python-versions = ">=3.8" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, @@ -5940,7 +6191,7 @@ description = "C parser in Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "platform_python_implementation != \"CPython\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_python_implementation != \"CPython\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -5953,6 +6204,7 @@ description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"}, {file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"}, @@ -5965,7 +6217,7 @@ typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] +timezone = ["tzdata"] [[package]] name = "pydantic-core" @@ -5974,6 +6226,7 @@ description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, @@ -6087,6 +6340,7 @@ description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic_settings-2.7.1-py3-none-any.whl", hash = "sha256:590be9e6e24d06db33a4262829edef682500ef008565a969c73d39d5f8bfb3fd"}, {file = "pydantic_settings-2.7.1.tar.gz", hash = "sha256:10c9caad35e64bfb3c2fbf70a078c0e25cc92499782e5200747f942a065dec93"}, @@ -6108,6 +6362,7 @@ description = "passive checker of Python programs" optional = false python-versions = ">=3.8" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, @@ -6120,6 +6375,7 @@ description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, @@ -6135,6 +6391,7 @@ description = "pyparsing module - Classes and methods to define and execute pars optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, @@ -6150,6 +6407,7 @@ description = "A pure-python PDF library capable of splitting, merging, cropping optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pypdf-5.1.0-py3-none-any.whl", hash = "sha256:3bd4f503f4ebc58bae40d81e81a9176c400cbbac2ba2d877367595fb524dfdfc"}, {file = "pypdf-5.1.0.tar.gz", hash = "sha256:425a129abb1614183fd1aca6982f650b47f8026867c0ce7c4b9f281c443d2740"}, @@ -6173,6 +6431,7 @@ description = "A SQL query builder API for Python" optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, ] @@ -6184,6 +6443,7 @@ description = "Wrappers to call pyproject.toml-based build backend hooks." optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, @@ -6196,7 +6456,7 @@ description = "A python implementation of GNU readline." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform == \"win32\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and sys_platform == \"win32\"" files = [ {file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"}, {file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"}, @@ -6212,6 +6472,7 @@ description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, @@ -6235,6 +6496,7 @@ description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.7" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, @@ -6254,6 +6516,7 @@ description = "pytest plugin for generating HTML reports" optional = false python-versions = ">=3.8" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest_html-4.1.1-py3-none-any.whl", hash = "sha256:c8152cea03bd4e9bee6d525573b67bbc6622967b72b9628dda0ea3e2a0b5dd71"}, {file = "pytest_html-4.1.1.tar.gz", hash = "sha256:70a01e8ae5800f4a074b56a4cb1025c8f4f9b038bba5fe31e3c98eb996686f07"}, @@ -6275,6 +6538,7 @@ description = "pytest plugin for test session metadata" optional = false python-versions = ">=3.8" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest_metadata-3.1.1-py3-none-any.whl", hash = "sha256:c8e0844db684ee1c798cfa38908d20d67d0463ecb6137c72e91f418558dd5f4b"}, {file = "pytest_metadata-3.1.1.tar.gz", hash = "sha256:d2a29b0355fbc03f168aa96d41ff88b1a3b44a3b02acbe491801c98a048017c8"}, @@ -6293,6 +6557,7 @@ description = "pytest-sugar is a plugin for pytest that changes the default look optional = false python-versions = "*" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest-sugar-1.0.0.tar.gz", hash = "sha256:6422e83258f5b0c04ce7c632176c7732cab5fdb909cb39cca5c9139f81276c0a"}, {file = "pytest_sugar-1.0.0-py3-none-any.whl", hash = "sha256:70ebcd8fc5795dc457ff8b69d266a4e2e8a74ae0c3edc749381c64b5246c8dfd"}, @@ -6313,6 +6578,7 @@ description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -6328,6 +6594,7 @@ description = "Read key-value pairs from a .env file and set them as environment optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, @@ -6343,6 +6610,7 @@ description = "A streaming multipart parser for Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"}, {file = "python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13"}, @@ -6355,11 +6623,43 @@ description = "World timezone definitions, modern and historical" optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] +[[package]] +name = "pywin32" +version = "311" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +groups = ["main"] +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and sys_platform == \"win32\"" +files = [ + {file = "pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3"}, + {file = "pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b"}, + {file = "pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b"}, + {file = "pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151"}, + {file = "pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503"}, + {file = "pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2"}, + {file = "pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31"}, + {file = "pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067"}, + {file = "pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852"}, + {file = "pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d"}, + {file = "pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d"}, + {file = "pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a"}, + {file = "pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee"}, + {file = "pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87"}, + {file = "pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42"}, + {file = "pywin32-311-cp38-cp38-win32.whl", hash = "sha256:6c6f2969607b5023b0d9ce2541f8d2cbb01c4f46bc87456017cf63b73f1e2d8c"}, + {file = "pywin32-311-cp38-cp38-win_amd64.whl", hash = "sha256:c8015b09fb9a5e188f83b7b04de91ddca4658cee2ae6f3bc483f0b21a77ef6cd"}, + {file = "pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b"}, + {file = "pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91"}, + {file = "pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d"}, +] + [[package]] name = "pyyaml" version = "6.0.2" @@ -6367,6 +6667,7 @@ description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -6430,6 +6731,7 @@ description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, @@ -6446,6 +6748,7 @@ description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -6550,6 +6853,7 @@ description = "Python client for Replicate" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "replicate-0.22.0-py3-none-any.whl", hash = "sha256:a11e20e9589981a96bee6f3817494b5cc29735a108c71aff4515a81863ad9996"}, {file = "replicate-0.22.0.tar.gz", hash = "sha256:cab48c15ede619d5aa7d023a241626d504c70ea2b7db5792ebfb5ae9fa373cbc"}, @@ -6571,6 +6875,7 @@ description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -6593,6 +6898,7 @@ description = "OAuthlib authentication support for Requests." optional = false python-versions = ">=3.4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, @@ -6612,6 +6918,7 @@ description = "A utility belt for advanced users of python-requests" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, @@ -6627,6 +6934,7 @@ description = "Render rich text, tables, progress bars, syntax highlighting, mar optional = false python-versions = ">=3.8.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, @@ -6647,6 +6955,7 @@ description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, @@ -6760,6 +7069,7 @@ description = "Pure-Python RSA implementation" optional = false python-versions = ">=3.6,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, @@ -6775,6 +7085,7 @@ description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, @@ -6793,6 +7104,7 @@ description = "" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "safetensors-0.5.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:45b6092997ceb8aa3801693781a71a99909ab9cc776fbc3fa9322d29b1d3bef2"}, {file = "safetensors-0.5.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6d0d6a8ee2215a440e1296b843edf44fd377b055ba350eaba74655a2fe2c4bae"}, @@ -6831,6 +7143,7 @@ description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "scikit_learn-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:366fb3fa47dce90afed3d6106183f4978d6f24cfd595c2373424171b915ee718"}, {file = "scikit_learn-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:59cd96a8d9f8dfd546f5d6e9787e1b989e981388d7803abbc9efdcde61e47460"}, @@ -6886,6 +7199,7 @@ description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.10" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "scipy-1.15.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:aeac60d3562a7bf2f35549bdfdb6b1751c50590f55ce7322b4b2fc821dc27fca"}, {file = "scipy-1.15.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5abbdc6ede5c5fed7910cf406a948e2c0869231c0db091593a6b2fa78be77e5d"}, @@ -6935,7 +7249,7 @@ numpy = ">=1.23.5,<2.5" [package.extras] dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] -test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "sentence-transformers" @@ -6944,6 +7258,7 @@ description = "State-of-the-Art Text Embeddings" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sentence_transformers-3.3.1-py3-none-any.whl", hash = "sha256:abffcc79dab37b7d18d21a26d5914223dd42239cfe18cb5e111c66c54b658ae7"}, {file = "sentence_transformers-3.3.1.tar.gz", hash = "sha256:9635dbfb11c6b01d036b9cfcee29f7716ab64cf2407ad9f403a2e607da2ac48b"}, @@ -6972,20 +7287,20 @@ description = "Easily download, build, install, upgrade, and uninstall Python pa optional = false python-versions = ">=3.9" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version == \"3.12\"" +markers = "python_version <= \"3.11\" and platform_machine == \"x86_64\" and platform_system == \"Linux\" or python_version >= \"3.12\"" files = [ {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] -core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "shapely" @@ -6994,6 +7309,7 @@ description = "Manipulation and analysis of geometric objects" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "shapely-2.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29a34e068da2d321e926b5073539fd2a1d4429a2c656bd63f0bd4c8f5b236d0b"}, {file = "shapely-2.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c84c3f53144febf6af909d6b581bc05e8785d57e27f35ebaa5c1ab9baba13b"}, @@ -7053,6 +7369,7 @@ description = "Tool to Detect Surrounding Shell" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, @@ -7065,6 +7382,7 @@ description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -7077,6 +7395,7 @@ description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -7089,6 +7408,7 @@ description = "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5." optional = false python-versions = ">=3.6" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "socksio-1.0.0-py3-none-any.whl", hash = "sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3"}, {file = "socksio-1.0.0.tar.gz", hash = "sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac"}, @@ -7101,6 +7421,7 @@ description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, @@ -7113,6 +7434,7 @@ description = "Database Abstraction Library" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "SQLAlchemy-2.0.37-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da36c3b0e891808a7542c5c89f224520b9a16c7f5e4d6a1156955605e54aef0e"}, {file = "SQLAlchemy-2.0.37-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7402ff96e2b073a98ef6d6142796426d705addd27b9d26c3b32dbaa06d7d069"}, @@ -7174,7 +7496,10 @@ files = [ ] [package.dependencies] -greenlet = {version = "!=0.4.17", optional = true, markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\") or extra == \"asyncio\""} +greenlet = [ + {version = "!=0.4.17", markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"}, + {version = "!=0.4.17", optional = true, markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\") or extra == \"asyncio\""}, +] typing-extensions = ">=4.6.0" [package.extras] @@ -7209,6 +7534,7 @@ description = "SSE plugin for Starlette" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sse_starlette-2.3.3-py3-none-any.whl", hash = "sha256:8b0a0ced04a329ff7341b01007580dd8cf71331cc21c0ccea677d500618da1e0"}, {file = "sse_starlette-2.3.3.tar.gz", hash = "sha256:fdd47c254aad42907cfd5c5b83e2282be15be6c51197bf1a9b70b8e990522072"}, @@ -7229,6 +7555,7 @@ description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7"}, {file = "starlette-0.41.3.tar.gz", hash = "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835"}, @@ -7247,6 +7574,7 @@ description = "A simple library to convert rtf to text" optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "striprtf-0.0.26-py3-none-any.whl", hash = "sha256:8c8f9d32083cdc2e8bfb149455aa1cc5a4e0a035893bedc75db8b73becb3a1bb"}, {file = "striprtf-0.0.26.tar.gz", hash = "sha256:fdb2bba7ac440072d1c41eab50d8d74ae88f60a8b6575c6e2c7805dc462093aa"}, @@ -7259,6 +7587,7 @@ description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5"}, {file = "sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517"}, @@ -7277,6 +7606,7 @@ description = "Pretty-print tabular data" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, @@ -7292,6 +7622,7 @@ description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tenacity-8.5.0-py3-none-any.whl", hash = "sha256:b594c2a5945830c267ce6b79a166228323ed52718f30302c1359836112346687"}, {file = "tenacity-8.5.0.tar.gz", hash = "sha256:8bc6c0c8a09b31e6cad13c47afbed1a567518250a9a171418582ed8d9c20ca78"}, @@ -7308,6 +7639,7 @@ description = "ANSI color formatting for output in terminal" optional = false python-versions = ">=3.9" groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, @@ -7323,6 +7655,7 @@ description = "Hugging Face Text Generation Python Client" optional = false python-versions = "<4.0,>=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "text_generation-0.7.0-py3-none-any.whl", hash = "sha256:02ab337a0ee0e7c70e04a607b311c261caae74bde46a7d837c6fdd150108f4d8"}, {file = "text_generation-0.7.0.tar.gz", hash = "sha256:689200cd1f0d4141562af2515393c2c21cdbd9fac21c8398bf3043cdcc14184e"}, @@ -7340,6 +7673,7 @@ description = "threadpoolctl" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, @@ -7352,6 +7686,7 @@ description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tiktoken-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b07e33283463089c81ef1467180e3e00ab00d46c2c4bbcef0acab5f771d6695e"}, {file = "tiktoken-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9269348cb650726f44dd3bbb3f9110ac19a8dcc8f54949ad3ef652ca22a38e21"}, @@ -7400,6 +7735,7 @@ description = "" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"}, {file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"}, @@ -7530,7 +7866,7 @@ description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version == \"3.10\"" +markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -7573,6 +7909,7 @@ description = "Tensors and Dynamic neural networks in Python with strong GPU acc optional = false python-versions = ">=3.9.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "torch-2.7.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c9afea41b11e1a1ab1b258a5c31afbd646d6319042bfe4f231b408034b51128b"}, {file = "torch-2.7.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0b9960183b6e5b71239a3e6c883d8852c304e691c0b2955f7045e8a6d05b9183"}, @@ -7635,6 +7972,7 @@ description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -7657,6 +7995,7 @@ description = "Traceloop Software Development Kit (SDK) for Python" optional = false python-versions = ">=3.10,<4" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [] develop = true @@ -7719,6 +8058,7 @@ description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow optional = false python-versions = ">=3.8.0" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "transformers-4.46.3-py3-none-any.whl", hash = "sha256:a12ef6f52841fd190a3e5602145b542d03507222f2c64ebb7ee92e8788093aef"}, {file = "transformers-4.46.3.tar.gz", hash = "sha256:8ee4b3ae943fe33e82afff8e837f4b052058b07ca9be3cb5b729ed31295f72cc"}, @@ -7789,7 +8129,7 @@ description = "A language and compiler for custom Deep Learning operations" optional = false python-versions = "*" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "triton-3.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fad99beafc860501d7fcc1fb7045d9496cbe2c882b1674640304949165a916e7"}, {file = "triton-3.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3161a2bf073d6b22c4e2f33f951f3e5e3001462b2570e6df9cd57565bdec2984"}, @@ -7814,6 +8154,7 @@ description = "Typer, build great CLIs. Easy to code. Based on Python type hints optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typer-0.15.1-py3-none-any.whl", hash = "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847"}, {file = "typer-0.15.1.tar.gz", hash = "sha256:a0588c0a7fa68a1978a069818657778f86abe6ff5ea6abf472f940a08bfe4f0a"}, @@ -7832,6 +8173,7 @@ description = "Typing stubs for requests" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, @@ -7847,6 +8189,7 @@ description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, @@ -7859,6 +8202,7 @@ description = "Runtime inspection utilities for typing module." optional = false python-versions = "*" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, @@ -7875,6 +8219,7 @@ description = "Provider of IANA time zone data" optional = false python-versions = ">=2" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, @@ -7887,6 +8232,7 @@ description = "Implementation of RFC 6570 URI Templates" optional = false python-versions = ">=3.6" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, @@ -7899,13 +8245,14 @@ description = "HTTP library with thread-safe connection pooling, file post, and optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] [package.extras] -brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -7916,6 +8263,7 @@ description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4"}, {file = "uvicorn-0.34.0.tar.gz", hash = "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9"}, @@ -7929,12 +8277,12 @@ httptools = {version = ">=0.6.3", optional = true, markers = "extra == \"standar python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} -uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} [package.extras] -standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] +standard = ["colorama (>=0.4)", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] [[package]] name = "uvloop" @@ -7943,7 +8291,7 @@ description = "Fast implementation of asyncio event loop on top of libuv" optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"" +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and (sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\"" files = [ {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"}, {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"}, @@ -7996,6 +8344,7 @@ description = "Simple, modern and high performance file watching and code reload optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "watchfiles-1.0.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:1da46bb1eefb5a37a8fb6fd52ad5d14822d67c498d99bda8754222396164ae42"}, {file = "watchfiles-1.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2b961b86cd3973f5822826017cad7f5a75795168cb645c3a6b30c349094e02e3"}, @@ -8080,6 +8429,7 @@ description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, @@ -8097,6 +8447,7 @@ description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "websockets-14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29"}, {file = "websockets-14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179"}, @@ -8176,6 +8527,7 @@ description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, @@ -8251,6 +8603,7 @@ description = "Python binding for xxHash" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"}, {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"}, @@ -8384,6 +8737,7 @@ description = "Yet another URL library" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, @@ -8481,20 +8835,21 @@ description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "0c479276535d1e174305e13608780ae46d9bfa8fd49afc0dc1b6abeeb3ae4178" +content-hash = "08a14b2cfdb186b52fda58de94564016ef464bc326adfde5eafd89b41a463364" diff --git a/packages/sample-app/pyproject.toml b/packages/sample-app/pyproject.toml index a1df23c2b8..fd3eab4957 100644 --- a/packages/sample-app/pyproject.toml +++ b/packages/sample-app/pyproject.toml @@ -55,6 +55,7 @@ llama-index-llms-openai = "^0.3.12" ibm-watson-machine-learning = "^1.0.367" ollama = "^0.4.7" mcp = "^1.7.1" +openai-agents = "^0.0.19" [tool.poetry.dependencies.opentelemetry-instrumentation-openai] @@ -93,6 +94,10 @@ develop = true path = "../opentelemetry-instrumentation-crewai" develop = true +[tool.poetry.dependencies.opentelemetry-instrumentation-openai-agents] +path = "../opentelemetry-instrumentation-openai-agents" +develop = true + [tool.poetry.group.dev.dependencies] autopep8 = "^2.3.1" flake8 = "7.1.1" diff --git a/packages/sample-app/sample_app/openai_agents_example.py b/packages/sample-app/sample_app/openai_agents_example.py new file mode 100644 index 0000000000..28b62df4a4 --- /dev/null +++ b/packages/sample-app/sample_app/openai_agents_example.py @@ -0,0 +1,657 @@ +# The software is (c) Copyright 2025 Distyl AI Inc. All rights reserved. + +import asyncio +import json +from typing import Dict, List +from dataclasses import dataclass +from pydantic import BaseModel +import openai + +from traceloop.sdk import Traceloop + +from agents import Agent, function_tool, RunContextWrapper, Runner, ToolCallOutputItem +from openai.types.responses import ( + ResponseTextDeltaEvent, + ResponseOutputItemAddedEvent, + ResponseFunctionToolCall, + ResponseOutputText, + ResponseOutputRefusal, +) + +Traceloop.init(disable_batch=True) + + +class PlannedChange(BaseModel): + type: str + description: str + target: str + + +class ModificationPlan(BaseModel): + recipe_id: str + recipe_name: str + modification_request: str + planned_changes: List[PlannedChange] + confidence: str + + +class PlanResponse(BaseModel): + status: str + message: str + plan: ModificationPlan | None = None + available_recipes: List[str] | None = None + + +class Recipe(BaseModel): + id: str + name: str + ingredients: List[str] + instructions: List[str] + prep_time: str + cook_time: str + servings: int + + +class EditResponse(BaseModel): + status: str + message: str + modified_recipe: Recipe | None = None + changes_made: List[str] | None = None + original_recipe: Recipe | None = None + available_recipes: List[str] | None = None + + +class SearchResponse(BaseModel): + status: str + message: str + recipes: Dict[str, Recipe] | None = None + recipe_count: int | None = None + query: str | None = None + + +class ModifiedRecipeData(BaseModel): + id: str + name: str + ingredients: List[str] + instructions: List[str] + prep_time: str + cook_time: str + servings: int + + +class RecipeModificationResult(BaseModel): + modified_recipe: ModifiedRecipeData + changes_made: List[str] + modification_reasoning: str + + +GLOBAL_RECIPE_CONTEXT = { + "spaghetti_carbonara": { + "id": "spaghetti_carbonara", + "name": "Spaghetti Carbonara", + "ingredients": [ + "400g spaghetti", + "200g pancetta or guanciale", + "4 large eggs", + "100g Pecorino Romano cheese, grated", + "2 cloves garlic", + "Black pepper", + "Salt", + ], + "instructions": [ + "Cook spaghetti in salted boiling water until al dente", + "Dice pancetta and cook in a large pan until crispy", + "Whisk eggs with grated cheese and black pepper", + "Drain pasta, reserving 1 cup pasta water", + "Add hot pasta to the pan with pancetta", + "Remove from heat, add egg mixture, toss quickly", + "Add pasta water if needed to create creamy sauce", + "Serve immediately with extra cheese", + ], + "prep_time": "10 minutes", + "cook_time": "15 minutes", + "servings": 4, + }, + "chicken_tikka_masala": { + "id": "chicken_tikka_masala", + "name": "Chicken Tikka Masala", + "ingredients": [ + "500g chicken breast, cubed", + "200ml plain yogurt", + "2 tsp garam masala", + "1 tsp turmeric", + "1 onion, diced", + "3 cloves garlic, minced", + "1 inch ginger, grated", + "400ml coconut milk", + "400g canned tomatoes", + "2 tbsp tomato paste", + "1 tsp cumin", + "1 tsp coriander", + "Salt and pepper", + "Fresh cilantro", + ], + "instructions": [ + "Marinate chicken in yogurt, garam masala, and turmeric for 30 minutes", + "Grill or pan-fry chicken pieces until cooked through", + "Sauté onion until golden, add garlic and ginger", + "Add spices and cook for 1 minute", + "Add tomatoes and tomato paste, simmer 10 minutes", + "Add coconut milk and cooked chicken", + "Simmer for 15 minutes until thick", + "Garnish with cilantro and serve with rice", + ], + "prep_time": "45 minutes", + "cook_time": "30 minutes", + "servings": 4, + }, + "chocolate_chip_cookies": { + "id": "chocolate_chip_cookies", + "name": "Classic Chocolate Chip Cookies", + "ingredients": [ + "225g butter, softened", + "200g brown sugar", + "100g white sugar", + "2 large eggs", + "1 tsp vanilla extract", + "300g plain flour", + "1 tsp baking soda", + "1 tsp salt", + "300g chocolate chips", + ], + "instructions": [ + "Preheat oven to 190°C (375°F)", + "Cream butter and both sugars until light and fluffy", + "Beat in eggs and vanilla", + "Mix flour, baking soda, and salt in separate bowl", + "Gradually add dry ingredients to wet ingredients", + "Fold in chocolate chips", + "Drop rounded tablespoons onto baking sheet", + "Bake for 9-11 minutes until golden brown", + "Cool on baking sheet for 5 minutes before transferring", + ], + "prep_time": "15 minutes", + "cook_time": "10 minutes", + "servings": 24, + }, + "beef_stir_fry": { + "id": "beef_stir_fry", + "name": "Beef and Vegetable Stir Fry", + "ingredients": [ + "500g beef sirloin, sliced thin", + "2 tbsp vegetable oil", + "1 bell pepper, sliced", + "1 onion, sliced", + "200g broccoli florets", + "2 carrots, sliced", + "3 cloves garlic, minced", + "2 tbsp soy sauce", + "1 tbsp oyster sauce", + "1 tsp sesame oil", + "1 tsp cornstarch", + "2 tbsp water", + "Green onions for garnish", + ], + "instructions": [ + "Heat wok or large pan over high heat", + "Add oil and beef, stir-fry for 2-3 minutes", + "Remove beef and set aside", + "Add vegetables to pan, stir-fry for 3-4 minutes", + "Add garlic and cook for 30 seconds", + "Return beef to pan", + "Mix soy sauce, oyster sauce, sesame oil, cornstarch and water", + "Add sauce to pan, stir for 1 minute until thickened", + "Garnish with green onions and serve with rice", + ], + "prep_time": "15 minutes", + "cook_time": "8 minutes", + "servings": 4, + }, + "caesar_salad": { + "id": "caesar_salad", + "name": "Classic Caesar Salad", + "ingredients": [ + "2 heads romaine lettuce, chopped", + "1/2 cup mayonnaise", + "2 tbsp lemon juice", + "2 cloves garlic, minced", + "1 tsp Dijon mustard", + "1 tsp Worcestershire sauce", + "1/2 cup Parmesan cheese, grated", + "2 anchovy fillets, minced (optional)", + "1 cup croutons", + "Black pepper", + "Salt", + ], + "instructions": [ + "Wash and dry romaine lettuce thoroughly", + "Whisk mayonnaise, lemon juice, garlic, and mustard", + "Add Worcestershire sauce and anchovies if using", + "Season dressing with salt and pepper", + "Toss lettuce with dressing", + "Add most of the Parmesan cheese and toss", + "Top with croutons and remaining cheese", + "Serve immediately", + ], + "prep_time": "15 minutes", + "cook_time": "0 minutes", + "servings": 4, + }, +} + + +@dataclass +class ChatContext: + """Standalone context for the chat application.""" + + conversation_history: List[Dict[str, str]] = None + + def __post_init__(self): + if self.conversation_history is None: + self.conversation_history = [] + + +@function_tool +async def plan_and_apply_recipe_modifications( + cw: RunContextWrapper[ChatContext], recipe: Recipe, modification_request: str +) -> EditResponse: + """ + Plan modifications to a recipe based on user request and apply them. + + Args: + recipe_name: Name of the recipe to modify + modification_request: Description of the desired changes + + Returns: + Dictionary containing planned modifications and applied modifications + """ + print(f"Planning and applying modifications for recipe: {recipe.name}") + print(f"Modification request: {modification_request}") + + client = openai.OpenAI() + + modification_prompt = f""" +You are an expert chef and recipe developer. You need to modify an existing recipe based on a user's request. + +Original Recipe: +Name: {recipe.name} +Ingredients: {json.dumps(recipe.ingredients, indent=2)} +Instructions: {json.dumps(recipe.instructions, indent=2)} +Prep Time: {recipe.prep_time} +Cook Time: {recipe.cook_time} +Servings: {recipe.servings} + +User's Modification Request: "{modification_request}" + +Please create a modified version of this recipe that incorporates the user's request. Consider: +- Ingredient substitutions (vegetarian/vegan, gluten-free, allergies, etc.) +- Scaling (doubling, halving, different serving sizes) +- Cooking method changes (faster, slower, different techniques) +- Flavor modifications (spicier, less salty, sweeter, etc.) +- Dietary restrictions and preferences +- Seasonal ingredient swaps +- Nutritional improvements + +Make sure all ingredients have proper quantities and units. Keep the essence of the original recipe while making +the requested modifications. Be creative but practical. + +Provide a clear list of what changes you made and explain your reasoning for the modifications. +""" + + response = client.beta.chat.completions.parse( + model="gpt-4o-mini", + messages=[ + { + "role": "system", + "content": "You are an expert chef and recipe developer who modifies recipes based on user requests.", + }, + {"role": "user", "content": modification_prompt}, + ], + temperature=0.3, + max_tokens=1500, + response_format=RecipeModificationResult, + ) + + modification_result = response.choices[0].message.parsed + + modified_recipe_data = modification_result.modified_recipe.model_dump() + changes_made = modification_result.changes_made + reasoning = modification_result.modification_reasoning + required_fields = ["name", "ingredients", "instructions"] + + for field in required_fields: + if field not in modified_recipe_data: + print(f"\n[LLM response missing required field: {field}]\n") + return EditResponse( + status="error", message=f"LLM response missing required field: {field}" + ) + + modified_recipe_data["id"] = recipe.id + if "prep_time" not in modified_recipe_data: + modified_recipe_data["prep_time"] = recipe.prep_time + if "cook_time" not in modified_recipe_data: + modified_recipe_data["cook_time"] = recipe.cook_time + if "servings" not in modified_recipe_data: + modified_recipe_data["servings"] = recipe.servings + + GLOBAL_RECIPE_CONTEXT[recipe.id] = modified_recipe_data + + return EditResponse( + status="success", + message=f'Successfully modified {modified_recipe_data["name"]} using AI. {reasoning}', + modified_recipe=Recipe(**modified_recipe_data), + changes_made=changes_made, + original_recipe=recipe, + ) + + +@function_tool +async def search_recipes( + cw: RunContextWrapper[ChatContext], query: str = "" +) -> SearchResponse: + """ + Search and browse recipes in the database. + + Args: + query: Search term to filter recipes (optional) + + Returns: + Dictionary containing matching recipes + """ + print(f"Searching recipes for query: '{query}'") + + try: + recipe_context = GLOBAL_RECIPE_CONTEXT + + if not query: + recipes_dict = {k: Recipe(**v) for k, v in recipe_context.items()} + return SearchResponse( + status="success", + message=f"Found {len(recipe_context)} recipes in database", + recipes=recipes_dict, + recipe_count=len(recipe_context), + ) + + client = openai.OpenAI() + recipe_summaries = [] + + for recipe_id, recipe in recipe_context.items(): + summary = { + "id": recipe_id, + "name": recipe["name"], + "ingredients": recipe["ingredients"][ + :5 + ], # First 5 ingredients for brevity + "cuisine_type": "various", # Could be enhanced with actual cuisine classification + "prep_time": recipe.get("prep_time", "Unknown"), + "cook_time": recipe.get("cook_time", "Unknown"), + "servings": recipe.get("servings", "Unknown"), + } + recipe_summaries.append(summary) + + search_prompt = f""" +You are a recipe search expert. Given a user's search query and a list of available recipes, +identify which recipes are most relevant to the user's request. + +User's search query: "{query}" + +Available recipes: +{json.dumps(recipe_summaries, indent=2)} + +Please analyze the query and return a JSON response with the following format: +{{ + "relevant_recipe_ids": ["recipe_id1", "recipe_id2", ...], + "reasoning": "Brief explanation of why these recipes match the query" +}} + +Consider: +- Ingredient matches (exact or similar) +- Cuisine type preferences +- Cooking method preferences +- Dietary restrictions (vegetarian, vegan, gluten-free, etc.) +- Meal type (breakfast, lunch, dinner, dessert) +- Difficulty level or time preferences +- Flavor profiles (spicy, sweet, savory, etc.) + +Return only the JSON response, no additional text. +""" + + response = client.chat.completions.create( + model="gpt-4o-mini", + messages=[ + { + "role": "system", + "content": "You are a helpful recipe search assistant that returns only valid JSON.", + }, + {"role": "user", "content": search_prompt}, + ], + temperature=0.1, + max_tokens=500, + ) + + llm_response = response.choices[0].message.content.strip() + + try: + search_result = json.loads(llm_response) + relevant_ids = search_result.get("relevant_recipe_ids", []) + reasoning = search_result.get("reasoning", "LLM analysis") + except json.JSONDecodeError: + print( + "Failed to parse LLM response as JSON, falling back to keyword search" + ) + + query_lower = query.lower() + relevant_ids = [] + for recipe_id, recipe in recipe_context.items(): + if query_lower in recipe["name"].lower() or any( + query_lower in ingredient.lower() + for ingredient in recipe["ingredients"] + ): + relevant_ids.append(recipe_id) + reasoning = "Keyword-based fallback search" + + matching_recipes = {} + for recipe_id in relevant_ids: + if recipe_id in recipe_context: + matching_recipes[recipe_id] = recipe_context[recipe_id] + + recipes_dict = {k: Recipe(**v) for k, v in matching_recipes.items()} + + message = ( + f'Found {len(matching_recipes)} recipes matching "{query}". {reasoning}' + ) + + return SearchResponse( + status="success", + message=message, + recipes=recipes_dict, + recipe_count=len(matching_recipes), + query=query, + ) + + except Exception as e: + print(f"Error searching recipes: {str(e)}") + return SearchResponse( + status="error", message=f"Failed to search recipes: {str(e)}" + ) + + +class RecipeEditorAgent(Agent[ChatContext]): + """Specialized agent for recipe editing and management tasks with function tools.""" + + def __init__(self, model: str = "gpt-4o"): + super().__init__( + name="Recipe Editor Agent", + instructions=""" + You are a recipe editor specialist powered by AI. Your role is to: + 1. Help users search and browse recipes using the search_recipes tool with intelligent semantic search + 2. Modify recipes using AI-powered analysis with the + plan_and_apply_recipe_modifications tool + + Your capabilities: + - Search recipes using natural language queries (e.g., "healthy dinner", "quick breakfast", + "spicy vegetarian") + - Intelligently modify recipes based on dietary restrictions, preferences, scaling, and cooking methods + - Make complex ingredient substitutions and cooking technique adjustments + - Provide detailed explanations of changes and reasoning + + When users want to modify a recipe: + 1. Use search_recipes to find the recipe if they mention it by name + 2. Use plan_and_apply_recipe_modifications to intelligently modify the recipe using AI + + The AI system will handle complex modifications like: + - Dietary conversions (vegetarian, vegan, gluten-free, keto, etc.) + - Scaling recipes up or down + - Flavor profile changes (spicier, less salty, sweeter) + - Cooking method improvements (faster, healthier, easier) + - Ingredient substitutions based on availability or preferences + + Always explain the changes made and provide helpful cooking tips. + """, + model=model, + tools=[search_recipes, plan_and_apply_recipe_modifications], + ) + + +class MainChatAgent(Agent[ChatContext]): + """Main chat agent that handles general conversation and routes to specialized agents.""" + + def __init__( + self, model: str = "gpt-4o", recipe_editor_agent: RecipeEditorAgent = None + ): + super().__init__( + name="Main Chat Agent", + instructions=""" + You are a helpful AI assistant that specializes in recipe management and cooking. + You can handle general cooking conversation and route specialized tasks to expert agents. + + When users ask about recipes, cooking, ingredients, meal planning, or food modifications, + you will transfer them to the recipe editor agent. + + Keywords that should trigger handoff to recipe editor: + - "recipe", "recipes", "cooking", "cook" + - "ingredient", "ingredients", "food" + - "meal", "dish", "cuisine" + - "modify", "change", "edit", "update" + - "vegetarian", "vegan", "gluten-free", "spicy" + - "search", "find", "browse", "show me" + + For all other conversations, respond helpfully and conversationally. + """, + model=model, + tools=[], + handoffs=[recipe_editor_agent], + ) + + +async def handle_runner_stream(runner: "Runner"): + """Utility to iterate over a Runner's event stream and + print assistant deltas, tool invocations, and tool outputs. + + Args: + runner: The streaming `Runner` instance returned by + `Runner().run_streamed(...)`. + + Returns: + The raw handoff information object if a hand-off occurs, otherwise + ``None``. + """ + + handoff_info = None + + async for event in runner.stream_events(): + if event.type == "raw_response_event": + if isinstance(event.data, ResponseTextDeltaEvent): + print(event.data.delta, end="", flush=True) + elif isinstance(event.data, ResponseOutputItemAddedEvent): + if isinstance(event.data.item, ResponseFunctionToolCall): + print(f"\n[Calling tool: {event.data.item.name}]\n") + elif event.type == "run_item_stream_event": + if event.name == "tool_output" and isinstance( + event.item, ToolCallOutputItem + ): + raw_item = event.item.raw_item + content = ( + raw_item.get("content") + if isinstance(raw_item, dict) + else getattr(raw_item, "content", "") + ) + if content: + print(f"\n[Tool output: {content}]\n", end="", flush=True) + + elif event.name == "message_output_created": + raw_item = event.item.raw_item + + role = getattr(raw_item, "role", None) + if role is None and isinstance(raw_item, dict): + role = raw_item.get("role") + + if role == "assistant": + content_parts = [] + for part in getattr(raw_item, "content", []): + if isinstance(part, ResponseOutputText): + content_parts.append(part.text) + elif isinstance(part, ResponseOutputRefusal): + content_parts.append(part.refusal) + if content_parts: + print("".join(content_parts), end="", flush=True) + + elif event.name == "handoff_occurred": + handoff_info = event.item.raw_item + print("\n[Handed off to Recipe Editor Agent]\n") + + print() + return handoff_info + + +async def run_streaming_chat(user_input: str): + """ + Run the streaming chat application with agent handoffs. + """ + print("Starting Streaming Chat Application with Agent Handoffs") + print("=" * 60) + + chat_ctx = ChatContext(conversation_history=[]) + + recipe_editor_agent = RecipeEditorAgent() + main_chat_agent = MainChatAgent(recipe_editor_agent=recipe_editor_agent) + + print("Agents initialized successfully") + print("Try asking about recipes, cooking, or ingredient modifications") + print("Example: 'Can you show me some recipes?' or 'Make the carbonara vegetarian'") + print("Type 'quit' to exit") + print("-" * 60) + + print(f"\nYou: {user_input}", end="", flush=True) + chat_ctx.conversation_history.append({"role": "user", "content": user_input}) + + print("\nAssistant: ", end="", flush=True) + + messages = [{"role": "user", "content": user_input}] + main_runner = Runner().run_streamed(starting_agent=main_chat_agent, input=messages) + handoff_info = await handle_runner_stream(main_runner) + + if handoff_info and "recipe" in str(handoff_info).lower(): + recipe_messages = [{"role": "user", "content": user_input}] + recipe_runner = Runner().run_streamed( + starting_agent=recipe_editor_agent, input=recipe_messages + ) + await handle_runner_stream(recipe_runner) + + +if __name__ == "__main__": + """ + Main entry point for the streaming chat application. + + This demonstrates: + 1. MainChatAgent handling general conversation + 2. Handoff to RecipeEditorAgent for specialized tasks + 3. RecipeEditorAgent using function tools in sequence + 4. Streaming responses back to the user + """ + print("Demo: OpenAI Agents SDK with Handoffs and Function Tools") + print("Use case: Recipe Management and Editing") + + user_input = "Can you edit the carbonara recipe to be vegetarian?" + + asyncio.run(run_streaming_chat(user_input))