From 3876b8e881a1364471d8c0af7a820cfc6bf131db Mon Sep 17 00:00:00 2001 From: William Kennedy Date: Thu, 27 Jun 2024 15:59:16 -0400 Subject: [PATCH] update api for better model support --- docs/assets/search.js | 2 +- docs/classes/Client.html | 34 +++++++++++++++------------ package-lock.json | 4 ++-- package.json | 2 +- src/api_client.ts | 50 ++++++++++++++++++---------------------- 5 files changed, 46 insertions(+), 46 deletions(-) diff --git a/docs/assets/search.js b/docs/assets/search.js index 80aedd3..6470083 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAE61dXZPbtpL9LzOvcx0B/M7bOh833sTZ1PW92dpypVycETxDjyQqJOWJk8p/X4AkyEarG6A48+AqedToA+A0Go1Divzrqqmf2quv3/919VgdtldfC5nfXB3Kvbr6+uqbXaUO3dXN1anZ6f/e7cq2Ve1Xw59fPXT7nf5u/Kv+/urvG+slEXLyclcf2q453XV143N17doBtzdXx7IxHZl6NAOJjYwnJOPbhzB8P3vu2u0/qvYfx6b6XHZqOU55rH5UX7xQk8kqNLmJAQsPpZeD69Fg4Yyd+X737rug+8FmLcKvVVvVhyDIZLYKp94fd6oL4kCzNTjf7W/Vdlsd7r0w0GoNyvflXXcqd1XnjzLHbA3OD6rcdQ/fPKi7Ry+Qa7cG6c3hk7oL0gOt1qD8Sx135Z365c0bL4xjtgbn3/Uf1V2IHWC0CqMpD+1uSBUeEGC1asbKp2/rfyp/hgFGRD6rO82Z2l6I+UvdLgAdrV4MVSeyZcCz4VrsJJ2TRtOAza86dKr5qOOv/ar/wruTOhuPCvu5tjZ0MAw9md3P0/O23qpdOzlXh9O+/Wr4o7+D8zBfN9X2XnX1k2p+Kpt79abbv93t33R3vNdrXxt6CGNHyR78oJq9auUvTf3TrtyXUf7aA00aX475c31qB1e9GykiHyht/ZyRvq102VTusmVDhdaXo/70k5mod7/vvtFGTX7rgSRMV+Dtys+lSLLXP3zvg3KsVjCoTnpKTAninURkdjnO/1VR/Nop585BoM3lCN8qdWyVeuznPM1evxlLag+gp8lCfJBi653CKaT/29IM8l9tq+OzPOAOz06uoQndwaEXpP//tKrhXY/fXuz13Ze2U3ve7/T9Ms/zfOoCBU+n+dPifLyrQV2H2l/bb+lO9dCk17F4Yv3O3y/yfFa8vVXdQ709CyPny6Uz8K/ysK3PmDl3dT0ZMhS5XSOxvi8f8aRQSKPZepxvdLF3XzdfFmAB0/V4b8sWBxGFNZpdiDOz/1N5uD+V92f5Y/r74hzysakey8PB7+gamtGdnntE4+wfyqbCtQ1GmYzWYTTlbRDC2qxE2KtDVR5CGJPVOpQ/VXNbVp+CONBuFdLrsv39hNchQpls1iGoXdmc2uCcOXYrkQ73+nQfgrFG6zDqNkz/bLQKQ6ehchfCmI3WYTyouwcVwpiM1mI09aMKRBewWolSHVQbBLFG6zCauuyCtAOrdSh/6ukOQIwmq/x/Wx6qNgAw2axDOHWhEViTVf6/O9zvgkOYjdZhtF0dXuLAahXK99WnIMZksxJhVx2rQx3CmKxWohzCQTUbrcPQZqGwmmxWIfxT7wh3QT6A1ToUVTf3YZTZaiVKsw9jjDbrEBp9/g0AjCbr/J8+lY3OpAGI2WoVyg9lFU7ps9E6DHXbqKcAhLVZh6D/EJgoa7LO/0mXS014noDZKpw3d7r80/0MFO/QbB2OPrfqSiA4IMduHVITzIvWZJ1/Xf+FhzEZrcL47/JYhosrYLUK5Ud9rCy3pR9kNlqJ8Wf5GKBjslmHUDcqRMdkswrhp7L7HGR8NlqHUXUPpzJc/zh2q5Delndqu6DScuxWIu3KLyKEMtqsR5ALEOSzEPQ/LM5RIKPZWpwuuOBno5UYet9+COxas9EqjJ/VMSgFTDbrEOrmSYXLOWi2CucX1YS3q9loHUYdPlZNNisRmu50fwqGlmO3Culf9X5B/gJW61BObZiV2WgVxrtyX4cgJpt1CKq5DY5iNlqHsas/l4HjwmSzGmGBKAvNVuKUn/VGFChRgdU6lOMCmWY2WofxVD5UofQ4G63EUNvwOCajVRj/LvfVzo9gTdb5VzudjAIA1mYdwkMZoGG0WOf91DwGOZiNVmH857Epq/Dqg2brcJptgInRYpX3/1W70DxZk1X+f61UZz6G9j/HbjkSvHvqddmqNP7ucGfuUJjQwN1PjoH3MqF7K2ffYGi8zO01akKPx+0vPSZzh8ebw/HUvVVtq8dO4WOb5feJNfVuucfr0ZoezFlHGci7WsOA+zaCqHODi4HJifyfo7lvtPV2YLRZPpEfz+/DDfm9/rjgplzcaQa+w7eZBsG74D2nC6Fvzd0hvzT1/tid37ob7AbT+nldOlbV8h4Mxs8GdG5cuAgdt7y4K2SUe7uwPK735h6usK9raxfoPAszLF3/ohyRZtO1YOUf/64fVSAFjGjAdiVcp/ZHpY/0p8afasd16VivhayPvyzBGszWg/y4DOTH9SD1gmQ94MyWy6HwygnssRdvr4G97uJtLrC1+nbzyzbyAFB96jwpxoGaTC8Bw7x881BXd+zQhm+Xs6L/ov5Y4OzaGvJdHzvmz2pLoGbTtWBtp5MGu1Ag1mR5ARRmhMO5gAV2lxwn378XsqF5a6oIv+vJ5nL3d40qhx90ePzPRpcDeDfcpXst2/ueVjZIxt5PRosAnJPSOPJv4Y+RfFP0rff3SAgIheC7d995Kx37/QsVO467BRxM3VtZ8iC8JVVPEDJU+CDMRbVPCHRB+ePCLq2AgsCeIgghhuqgBVBsKXQG5a+GQlD1IVCkuHjQ/CLQNEmieb19+NB9OV4K+WpqFUZ+NXfUu+K/Vbuu9PSj//7FCjTH4aIKbeqidxT+emYyeKGSxvW3oKqZe8jAbQMsQDhr+wy4e3UwCUFtP3TqDx9ZEPes0TM6sKvvj01968ubEBqYPwP0Y2UudHzQG2XLKyoIGbe5DJ6IVA/uS5R61k2o2jM9WVXwTQALaj4PSKDsm1CWVH4emFABckHtsbIEnEeyoAp0YS4tBPGkBWtBBIeCdXgohLciBCYvI5Fjh+GDNewlA/j7SbU+EfUMFDR4FnC195QVZ6jW+lmQwYr0DHZZUboAekFdega+tDRdAu+pTs9xQwXqMkC2RqUA/WUqDUivyUDB6hi95Lq8TPJy+7quXiRwlxSNi6D9mhuBvEB544BpHv1VK7R5ocL1zOWC2tXp6jpd7hx2iTq3BNiv0Z3jLlDqGFiaQT/ySxR0wFOophu7tKqsgzALKjs/VKC4g1hL6js/mLfEg1DhKi8wKn+h54xqQa13BnZpuUdMY7DiOweFYT09oYsv+lyTl1ACCY8hqlA/uWvI/UXwxZiT+bNA/fUXOdZw/bUMOlR/UeCL6q+F8Fz9ReJ666/FgHT9xQB66i8WkF4enn0b2bzEvk25DO3buKvrV6Wzay9clqv3bBI1tGcvhGWVLhLUL3HxkHTA+HGfXSa4nrxlwtyly8sEBBMqE4JQvjIBYQXLhDCYZ/fGYKHdmwK7aPemR+ffvUlQ+KQ7++BLdvN2LZZHHbdyCH/+dYO6eKlqQuH5RRMWkJw4Pf+kBu8YvEBGP/cXSOduDy9OqwReIKcuAlRnz2P1Y6rgk1k5WJItL+pzU6rryJdR5/5cnFARSCCfBoE86RQhhbJpEIqtGxCQv2AIwmxDC3K8IFZ6rodRIJfkanrqvKmahAQhPD872H38L0BFJi+QdCiPgbSD+8klnruaPnGQkNb6eZBsrqMx/dmOB6VZ8+M+N/UgT77cA7p0cfLBMIHsE4bypB+MFco/C8AMUYEAsMXcaHkB1CX5gRmbN0HQoCDWpjv32QThWrxAfiAcBtID6iSvwtyWtxW3bihYt8lzwPk8QeEG0gQLSTLnBX1ujnAd+VLE3J+LMwQCCSSIIJAnPyCkUHoIQ7HZASP5kwMFdEluoMflTQ0kJIiv+fn5bGpAJi+QGyiPgeSA+8lAHtTTB16nJXGdJs8C57MDCRxIDzwozZ8f97kZAnnypQjQpYtzBIYJJIkwlCdLYKxQmlgAxuaJMyx/oiChLskUzNi8qYIGBbFm34LBZgrH4AXyxLm/QJZwe3jp+YKA858ulsGxWYHC8+cEDpBiyYf43Gzg+PHlgqkzF2cCFyKQB0Iwnizg4oRyQBCIzQAIx7/+CZhLVj85Ju/apwBhTI2vpmHqUPD18sjilyHyFlqEoG+c4HxZ969d+9WwrKp1BujXtRZAeZLM2WwGUgwJRgWDl7xLrlTS69Jx5M0xU38uTzIuSCjLhIB8acZFCuaZENStarsPC+N6xCSavBD4h2CkM134sCzw/R0JJhIIviyX8Bd95757V5s6SyThFafWZnsytPzpnhoneF3kG3MV7GfVPdXN+dvk4JfeVb701ZFnDhe9QNLpI0OXwQmjDVYzCv96xyWYt+5TaHjY2/Nnz1yMHH4KDo+/6Ak43IhxsHxfgZt9HUzzzcuFyeRteYz0XePUxLJ7CAGNNotZ8uH5gmNGvDwyEOaFYTEjL4+JAfG3m/H09vVfV5/Ngx71tvL1lXwVvSp0i4+V2m116/dDV7S/er83Pn4bv/tVGfqMxWDy1ebq5v3mJpGvMhH99tvNe9ui/6L/Q28m9P/ETRy/krFjJRwrqf8nb+LsVbpJHDPpmEX6fxGFGTlmej7ex5S32DFL9P8SyixxzFL9v5QySx2zTP8vo8wyxyzX/8uJ+cgdK03J+4KwKty5NVMtSBIEYqGnQVDdEy4Twsy4ILkQLhnCTLqIKG5dOoSZdkESIlxGhJl5kZADckkRZvJFSlq6vAgz/yIjLV1qhOFA5GQ/XXpEwVu6FMmeooJCly5F0vAgSTIlWiz9ahGkpUuRNERISVq6HElDhCTXlnQ5koYInScpS5cjaYiQJJvS5UgaIiTJpnQ5koYISbIpXY6kIULvfZSly1FkiJAkR5HLUWSIiEiOIpejyBARkRxFKKf1SY3kKHI5igwREZ3/XI4iQ0REchS5HEWGiIjkKHI5igwREclR5HIUGSIikqPI5SgyREQkR5HLUWyIiEiOYpej2BARkxzFLkexISImOYpdjmJDRExyFKOtp997SI5il6PYEBGTHMUuR7EhIiY5il2OYkNETHIUuxzFhoiY5Ch2OYoNETHJUexylBgiYpKjxOUoMUQkJEeJy1FiiEhIjhKXo8QQkZAcJS5HiSEiITlKUIXQlwgkR4nLUWKISEiOEpejxBCRkBwlLkeJISIhOUpcjhJDREJylLgcpYaIhOQodTlKDREpyVHqcpQaIlKSo9TlKDVEpCRHqcuRqWnfpyRHqctRaohISY5SVMj1lRzJUepylBoiUpKj1OUoNUSkJEepy1FqiEhJjlKXo8wQkZIcZS5HmSEiIznKXI4yQ0RGcpS5HGWGiIzkKHM5ygwRGclR5nKUGSIykqPM5SgzRGQkRxmqt/uCm+QocznKDBEZyVHmcpQZIjKSo8zlKDdEZCRHuctRbojISY5yl6PcEJGTHOUuR7khIic5yl2OckNETnKUuxzlhoic5Ch3OcoNETnJUe5ylBsicpKjHB2L+nMRyVHucpQbInKSo9zlqDBE5CRHhctRYYgoSI4Kl6PCEFGQHBUuR4UhoiA5KlyOCkNEQXJUuBwVhoiC5KhwOSoMEQXJUeFyVBgiCpKjwuWoMEQUJEcFOr7251eSowIfYQ0TBUnS8B207U+xG+bAi86xm/4guyGpGr6Exv1ZdkOyNXwJjfvz7IYkbPgSGvdH2g3J2fAlNO5PtRv6ALxB59pNf7Dd0GfgDTrabvqz7YY+Bm/Q6XbTH283JH/Dl8B4FCFoBs9kiEGHoBnESsQgRQiaQSxGDGqEoBnEgsSgSAiaQaxJDKKE0S/OhQ6sSgyyBKNgYGFiUCZEehOLV5nMkDEicBAnREYbIwIHfULQBCKFQvQ6BCU2CaRQiF6HoBUfiVWkgTs6KpBKIXotQtDah0BChejlCEHLHwJpFaJXJAStgAgkV4helNB4N5EeX4K1L0Rer0toPFooQ+T10oTGI8lDuoXo1QmNRxsj8nqBQuORxki9EL1GYa4HkMaIwWgQAmkGIywFDlogzSCSMUQUe0IZKRkiSjyLBIkZopcs9EhIUpCeIXrVQtDKi0CShuiFCz0SMjaQqiF67UKPhO4GYrCXL/RISM9I2xCDuEErqYi/XsLQg76JIu0XLVekb4h44C+jjbGc2/MX5bQx4i9OPIsKCR0iHvgrSLKR1iF6RUPPEN0NxF8vagha7BFI8RBx4esz4i/ZeBIB0j1EIjyJAEkfIpGeRIDUD5FEnkSABBCRxJ5EkGBNvmeQVr8EkkFEL3YIWgATSAkRycAgXRshMUQkvg0Q6SGiVz0ErZkJJImIdONZ20gVEb32IWiNTSBhRPTyh6BlNoG0EdErIIJW2gSSR0Q6XFOhszNSSETKXukSKb6sknqyBlJJRJp5sgYSSkSae7IG0kpE6luBSC4R2caTNZBiIjLhyRpINBG9NCJooVIg3URkkWenQtKJ6AUSQQubAqknIhsui9EX5ZCAIrLUk2IyfG0s86QYJKOILPekGKSkiKzwpBgkpoheMhG0JCuQniJy4ZlnJKmIXHqyBlJVRB55ygckrIh8YJBOXkhbEb2CwqUYJK+IPPWUD0hhEXnmKR+QyCJ6KYW8li2QyiLywpMIkNAiio0nESCtRRTCkwiQ3CIK6UkESHERReRJBEh0EUXsSQRIdxHFsALp/QRJL6LwnSOQ+iJ6jUXQ1wMEEmBE4TtHIA1GFL5zBJJh5MZzjpBIh5EbzzlCIh1GDjoMfRlDIh1GDjoMvU4k0mHkoMPQ8yyRDiMHHYZeJxLpMHLQYRLyAr9EOozcsHd+SKTCyEGFoReVRCqMHFQYelFJpMLIQYWhF5VEKowcVBh6nUikwshBhaHXiUQqjBxUGPr6kkQqjBxUGGaWkQojhWcPlEiGkePdIczNFIi/QYZhYg7JMHKQYZgwQjKM7JUW6mYfie8S6ZUW0hLfJTJqMHQInd0oIj0hhO8VGVQYJoTw7SLSt/bwHSODCkNfIZT4ppFBhWHiDd83Mqgw9BVFiW8dkZ4zvMR3jwwqTEqJXRKJMDLyHOElEmFkr7NQcptECoyMPCd4iRQYGXlO8BIpMDLynOAlUmDkoMCkMZktkAIjIx97SIGRgwJDX5GVSIGRPgVGIgVGDgoMfQVXIgVG+hQYiRQYGfN30kkkwUifBCORBCN9EoxEEoz0STASSTAy9hGIJBgZ+whEEowcJBj68rdEEoyMfQQiCUYOEgx9uVwiCUYmPgKRBCNHCYYkECkwMvERiBQYmfgIRAqMTHwEIgVGJj4CkQIjEx+BSIGRgwJD32sgkQIjEx+BSIGRiSd/IgFGpj7+kAAjU/YihETyi0x99CH5RaY++pD8IlMffUh+kamPPiTAyNRHHxJg5CDAZBsymJEAIwcBhmYE6S9y0F84x4i+QX9hagGkv8hBf2G4RvqLHPQX8iAskfwiB/mFIRvJL3KQXxiykfwiB/mFIRvJL3KQX+g7bSSSX+Qgv9A320gkv8hBfqHvt5FIfpGD/ELfciOR/CIH+YWJOSS/yEF+oW/RkUh+kYP8QkUc0l5kL6/QWRkpL3JQXjJSx5BIeZE5f/VWIuFFDsILfaeQRMKLHIQX0i2+ZXkgjt7LkO4iB92FGxwibtBd6MGNskv/s4/PqunU9s3w84/376dXUP119WH8TYiR7Hun5uchRqj/+q+//55/BWL+Z7yXH5vqsTyYn8jNbWM5N9WFCtNy/1A21Z3TDkDqmoVpd6we1RfYDLRiwZryFmHFACthm+n/9i+XBw0T0JCdlrat2q40ryYA/dyAjgqu5Z+quS2rTwg0BaAZ09T+9AiQmIF2ZiVo05srEzU+D8q+4x04EjAaBMeNbv/7yQmjOAMdz7lmalc2pxZPdA6asj1Wh/tyVzntirmdrvW4dvMPSuF8gWGaFOpp7PwaF7oQ0AUXINyvaaEjCR2xpJt3fDtRBgI74gK7bzU8Oaean1IF+QaTaG7PYNzULV4eCQjyhAvy26ba3quuflKNZv5eVd1+v9tXnbNCJfAkOU93ZVfuUA8AAQnXc91O3deNm0fAmGMucO7697OCaANthuVlLrzzbe/G54WDuY4A0eY+A75xNTzOF7SVsK3k6J7aTu/agFQncGlzATu5mF4FDV3k0AW3Vo0LqgMwL5p7Q/jWbeu0BB1PxrlPfVOgmxPTDxO6uRTsbT++cA82j2FzH3u6+TmBMYhWwWZI0/zz+JaRuTFI7uk4/jzsgZiCBI4h57L77OJ8GHDZmwuhIQ9UHCRwj8n5BahJVO6KB4sg4eNneGwLAEzBsGU0hpCM7YfEfvAElWrqR+UGJRhFwk9ldVAomEFnEh5wfBw5XD4wVcc2ELLN+KGIxlEINi3tKuVWKoBMlgbwQPu5IdjtsxF2wy6JyQMVkcCTuSgUckFEJFzWBTuh8JfooDVoa4smaT/wAxrfRgUzYwYzYz5yEtmtIrF/ydkh2qeNQMZhuo2tr9T6KmyXxRgDRqwfPlhgaVvJxH5I7YeMnauhK9v+R+wwhcG1H2c2AIXtjnUs7AzK1HbHfrBhKxP7IbUf+ETQ1HpLQns/3BLYrexPnUGcViCRshl8W5q3fzrNALcJl3eHB1LDpAPrQ3bH3ip1bJV67CvxNLutxjB1CiQQBpLbt4gNC4zW3KDEtDt1aJIAGrtLgue6zy1Bw9yGQmFDgWN38nQ+gU5dyJE8tScyQwEdcPvFcAoizlQCbpbC7hG5/VCwIzrc73AEgZ6kbLumQckJLv9p0XOt267GNTqcQTYAPoJnXM9NQYdHCoW0WYY9086u7obHD0I24SlHcovvY/no5ByYASNu6B+rT3jgYO2lXMb9WO2qY3WonYaglykXMej9wHDJwS065YoC3R6nmBQUE3y7Rseq2wyEKFu8mHPzHZ4gkD9Tbmnhlz/DgcLtjp3he1U39xgZFrNcGNyrZo+aAcCUy8H3jc6kTisQPikXPvenT6UepqMtpIDIjFuwD2WF96UMrLiMWyYPqtx1D+dLBG6vLKa6bdSTAwlinS3Idf2qK3F5bOrdrtyXUX7rbDDOVhV0sa/0HlXuMtcHVFS4CNbV8NaZZ6h9ZNx6ezgd7ssGzzTAyzg8XW3uSg3p6A0ZWDRsDVShSgzupfFY34h0Oo3ZbW5jNz5pa7PIFkO2lUzsh9R+YEc+vukG7mlQB8jsXiTYYRgHH/vnPkHFCRbdObf8+7YH+4Ax2DyBzbkoH58CCycRnvsiu6Gl9gAz7ayb6SRjzxbSTqttJWP7gS3INGqtz144bEDfWdGOkcpgOWC7wY9+dEHshHD6WBmoatAWASVeViWsOp3s0YjhWY2brE/lscQH1Qwkz4xLnuaaQLl1CrcM5E62qH8s/ywfnfHlIP2xQfVY613XGV4OaGEPVzoJ3J90NLtXL0DLmG/ZfUYTmoMlmHMrVxdBD6cSF2Q5WAGs/DJk6Pb3XX8mQJkaKhncotcOPpf6ZH378NFpC+OOC/1dfW9exeAqD1ChF2xZtC/v1PasBs1Bj3Oux/tyV34RTjPQWTZD9c2k0wwsEvb83jfT//ZOS7BMWHFNt+zQKsnhqYdbJXtTYDw4O18OK2xulezL1skd8ATOpp59+Uc3vlwUCshQJrH5VCT28J7Zraxgx04puvCIFNmDAs/X4AJ1DPqQVlVgL+icXz+BlYewkoOw6p6IbbdS+6Gw+3dhtYeNlS7kJI548d0RwGMm1+ygjujyVQG4LDguD+qkKy0jp6JqC17v4+IcvjUB7j9QTmAvuB3q5knh4r0AKbPgUuahPrVDsdhnMn3ydrsOD4JcLrFP+YWxBo8ccWRJtQFT2NPpZpIcbHkV2XrCtpKJ/ZDaD2wJSUvY8Mq3YFVc6hKKhEfEiJtD+9p5OH5Yf0RT5cnN4PBETFi1QdrZDHc0D4hEpIOxFixcVbnDhIcZlmbdqhneaLBX3UPt1tzwVCLYI4V24UwwLDIjtlGNFZoCNCv4Zk13uj+hHaAACYzVn533G8HFCBcyq3AQqxhqmebnInTD33VnzwpZeOFUsIHf6INT7WyRcAVGXAA15dO2vleos3C1+Boe6xYlK1h5+Fq2rTprDDMGN0Nj/DnjBN2NWFAYt24Egj6z5f3Y/GzZwJC3yYrbHGYfxCEDHvHYO0maGp0Mnfm2xy9hL5mJzKZdtkA3Hp3ZgPku4nZHHd5ntXIBWChYFk7tWboCQ2DXRVvua9QMTBhbA53fSAKFOynt1pPYD6xU1armFnccJOiCywStru11je0IGuZZN0A54vaUdld/Lp0oKeBetOHIMe3O7o4yD+MBbblwaI9nV1PMw3ZAS25rsK9AgDsgTCPxJBtMFyAnNWRSC2xNYI1lYj9Y1UGyKl37VD5UbslmHv0Dus5lzvZJbc8GDavcDZcD2y9tp9ycCyaLvWWiK/eVWxNv4FRtuNXTqZ3eztyGMAGwl3R1J49GGj6h1QDLUmFXg7CCl8imYo0L7zOhGV6Nkhtbr7M3pnUPJWIM7gEbbjV29dFNn/CSm4jsIcleQxXZpPdx0aM9Hl2PsCM2MIUtREVmY5Zdht30ziC4JKDT0dUkPbKXfKwrYtuAZxn2Emk3v10E1sRwddrVxSUj9q46eNHPFveS1e7dlzdAP1AoYdUrHcCPZysVUr/hWp4em7I6T4owobIa/qnZuovOUf7Z2zf6VyCAjRUMcJwm9jBwat3bPOFZgj2DfK5UZ4xaVCLA9M1eVX3Sh2R3Xl39lAP9UkXxLb73Tjp6NdXytxt9EDiqXXXQRu9/+/vv/wdZ4jpIatUAAA=="; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/classes/Client.html b/docs/classes/Client.html index 22a290c..6a26db3 100644 --- a/docs/classes/Client.html +++ b/docs/classes/Client.html @@ -1,6 +1,8 @@ Client | predictionguard

Client provides access the PredictionGuard API.

Constructors

Properties

Methods

Chat ChatSSE @@ -19,7 +21,9 @@

Constructors

  • constructor constructs a Client API for use.

    Parameters

    • url: string

      url represents the transport and domain:port.

    • apiKey: string

      apiKey represents PG api key.

      -

    Returns Client

Properties

apiKey: string
url: string

Methods

  • Chat generates chat completions based on a conversation history.

    +

Returns Client

Properties

apiKey: string
chatModels: Map<Models, boolean> = ...

Set of models supported by the chat APIs.

+
completionModels: Map<Models, boolean> = ...

Set of models supported by the completion API.

+
url: string

Methods

  • Chat generates chat completions based on a conversation history.

    Parameters

    • input: ChatInput

      input represents the entire set of possible input for the Chat call.

    Returns Promise<[Chat, null | Error]>

      @@ -28,7 +32,7 @@

    Example

    import * as pg from 'predictionguard';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function Chat() {
    const input = {
    model: pg.Models.NeuralChat7B,
    messages: [
    {
    role: pg.Roles.User,
    content: 'How do you feel about the world in general',
    },
    ],
    maxTokens: 1000,
    temperature: 0.1,
    topP: 0.1,
    topK: 50.0,
    options: {
    factuality: true,
    toxicity: true,
    pii: pg.PIIs.Replace,
    piiReplaceMethod: pg.ReplaceMethods.Random,
    },
    };

    var [result, err] = await client.Chat(input);
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }

    console.log('RESULT:' + result.createdDate() + ': ' + result.model + ': ' + result.choices[0].message.content);
    }

    Chat();
    -
  • ChatSSE generates a stream of chat completions based on a +

  • ChatSSE generates a stream of chat completions based on a conversation history.

    Parameters

    • input: ChatSSEInput

      input represents the entire set of possible input for the SSE Chat call.

      @@ -38,7 +42,7 @@

    Example

    import * as pg from 'predictiongaurd';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function ChatSSE() {
    const input = {
    model: pg.Models.NeuralChat7B,
    messages: [
    {
    role: pg.Roles.User,
    content: 'How do you feel about the world in general',
    },
    ],
    maxTokens: 1000,
    temperature: 0.1,
    topP: 0.1,
    topK: 50.0,
    onMessage: function (event, err) {
    if (err != null) {
    if (err.error == 'EOF') {
    return;
    }
    console.log(err);
    }

    for (const choice of event.choices) {
    if (choice.delta.hasOwnProperty('content')) {
    process.stdout.write(choice.delta.content);
    }
    }
    },
    };

    var err = await client.ChatSSE(input);
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }
    }

    ChatSSE();
    -
  • ChatVision generates answers a question about an image.

    Parameters

    • input: ChatVisionInput

      input represents the entire set of possible input for the Vision Chat call.

    Returns Promise<[ChatVision, null | Error]>

      @@ -47,7 +51,7 @@

    Example

    import * as pg from 'predictionguard';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function ChatVision() {
    const image = new pg.ImageNetwork('https://pbs.twimg.com/profile_images/1571574401107169282/ylAgz_f5_400x400.jpg');

    const input = {
    role: pg.Roles.User,
    question: 'is there a deer in this picture',
    image: image,
    maxTokens: 1000,
    temperature: 0.1,
    topP: 0.1,
    topK: 50.0,
    };

    var [result, err] = await client.ChatVision(input);
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }

    console.log('RESULT:' + result.createdDate() + ': ' + result.model + ': ' + result.choices[0].message.content);
    }

    ChatVision();
    -
  • Completion generates text completions based on the provided input.

    Parameters

    • input: CompletionInput

      input represents the entire set of possible input for the Completion call.

    Returns Promise<[Completion, null | Error]>

      @@ -56,7 +60,7 @@

    Example

    import * as pg from 'predictionguard';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function Completions() {
    const input = {
    model: pg.Models.NeuralChat7B,
    prompt: 'Will I lose my hair',
    maxTokens: 1000,
    temperature: 0.1,
    topP: 0.1,
    topK: 50.0,
    };

    var [result, err] = await client.Completion(input);
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }

    console.log('RESULT:' + result.choices[0].text);
    }

    Completions();
    -
  • Embedding generates chat completions based on a conversation history.

    Parameters

    • input: EmbeddingInput[]

      input represents a collection of text and images to vectorize.

    Returns Promise<[Embedding, null | Error]>

      @@ -65,7 +69,7 @@

    Example

    import * as pg from 'predictiongaurd';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function Embedding() {
    const image = new pg.ImageNetwork('https://pbs.twimg.com/profile_images/1571574401107169282/ylAgz_f5_400x400.jpg');

    const input = [
    {
    text: 'This is Bill Kennedy, a decent Go developer.',
    image: image,
    },
    ];

    var [result, err] = await client.Embedding(input);
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }

    for (const dt of result.data) {
    process.stdout.write(dt.embedding.toString());
    }
    }

    Embedding();
    -
  • Factuality checks the factuality of a given text compared to a reference.

    +
  • Factuality checks the factuality of a given text compared to a reference.

    Parameters

    • reference: string

      reference represents the reference text for comparison.

    • text: string

      text represents the text to be checked @@ -76,14 +80,14 @@

    Example

    import * as pg from 'predictionguard';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function Factuality() {
    const fact = `The President shall receive in full for his services during
    the term for which he shall have been elected compensation in the aggregate
    amount of 400,000 a year, to be paid monthly, and in addition an expense
    allowance of 50,000 to assist in defraying expenses relating to or resulting
    from the discharge of his official duties. Any unused amount of such expense
    allowance shall revert to the Treasury pursuant to section 1552 of title 31,
    United States Code. No amount of such expense allowance shall be included in
    the gross income of the President. He shall be entitled also to the use of
    the furniture and other effects belonging to the United States and kept in
    the Executive Residence at the White House.`;

    const text = `The president of the united states can take a salary of one
    million dollars`;

    var [result, err] = await client.Factuality(fact, text);
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }

    console.log('RESULT:' + JSON.stringify(result.checks[0]));
    }

    Factuality();
    -
  • HealthCheck validates the PG API Service is available.

    +
  • HealthCheck validates the PG API Service is available.

    Returns Promise<[string, null | Error]>

    • A Promise with a string and an Error object if the error is not null.

    Example

    import * as pg from 'predictionguard';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function HealthCheck() {
    var [result, err] = await client.HealthCheck();
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }

    console.log(result);
    }

    HealthCheck();
    -
  • Injection detects potential prompt injection attacks in a given prompt.

    Parameters

    • prompt: string

      prompt represents the text to detect injection attacks against.

    Returns Promise<[Injection, null | Error]>

      @@ -92,14 +96,14 @@

    Example

    import * as pg from 'predictionguard';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function Injection() {
    const prompt = `A short poem may be a stylistic choice or it may be that you
    have said what you intended to say in a more concise way.`;

    var [result, err] = await client.Injection(prompt);
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }

    console.log('RESULT:' + result.checks[0].probability);
    }

    Injection();
    -
  • RawDoGet performs a raw GET call.

    +
  • RawDoGet performs a raw GET call.

    Parameters

    • endpoint: string

      endpoint represents endpoint to call and does not include the transport or domain.

    Returns Promise<[any, null | Error]>

    • A Promise with a respose object and an error object if the error is not null.
    -
  • RawDoPost performs a raw POST call.

    +
  • RawDoPost performs a raw POST call.

    Parameters

    • endpoint: string

      endpoint represents endpoint to call and does not include the transport or domain.

    • body: any

      body represents an input object.

      @@ -107,7 +111,7 @@
    • A Promise with a respose object and an error object if the error is not null.
    -
  • RawDoSSEPost performs a raw POST call with SSE support.

    +
  • RawDoSSEPost performs a raw POST call with SSE support.

    Parameters

    • endpoint: string

      endpoint represents endpoint to call and does not include the transport or domain.

    • body: any

      body represents an input object.

      @@ -116,7 +120,7 @@
        • (event, err): void
        • Parameters

          • event: null | ServerSentEvent
          • err: null | Error

          Returns void

    Returns Promise<null | Error>

    • A Promise with an error object if the error is not null.
    -
  • ReplacePII replaces personal information such as names, SSNs, and +

  • ReplacePII replaces personal information such as names, SSNs, and emails in a given text.

    Parameters

    • replaceMethod: ReplaceMethods

      replaceMethod represents the method to use for replacing personal information.

      @@ -128,7 +132,7 @@

    Example

    import * as pg from 'predictionguard';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function ReplacePII() {
    const replaceMethod = pg.ReplaceMethods.Mask;
    const prompt = `My email is bill@ardanlabs.com and my number is 954-123-4567.`;

    var [result, err] = await client.ReplacePII(replaceMethod, prompt);
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }

    console.log('RESULT:' + result.checks[0].new_prompt);
    }

    ReplacePII();
    -
  • Toxicity checks the toxicity of a given text.

    Parameters

    • text: string

      text represents the text to be scored for toxicity.

    Returns Promise<[Toxicity, null | Error]>

      @@ -137,7 +141,7 @@

    Example

    import * as pg from 'predictionguard';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function Toxicity() {
    const text = `Every flight I have is late and I am very angry. I want to
    hurt someone.`;

    var [result, err] = await client.Toxicity(text);
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }

    console.log('RESULT:' + result.checks[0].score);
    }

    Toxicity();
    -
  • Translate converts text from one language to another.

    +
  • Translate converts text from one language to another.

    Parameters

    • text: string

      text represents the text to be translated.

    • sourceLang: Languages

      sourceLang represents the source language of the text.

      @@ -149,4 +153,4 @@

    Example

    import * as pg from 'predictionguard';

    const client = new pg.Client('https://api.predictionguard.com', process.env.PGKEY);

    async function Translate() {
    const sourceLang = pg.Languages.English;
    const targetLang = pg.Languages.Spanish;
    const text = `The rain in Spain stays mainly in the plain`;

    var [result, err] = await client.Translate(text, sourceLang, targetLang);
    if (err != null) {
    console.log('ERROR:' + err.error);
    return;
    }

    console.log('RESULT:' + result.best_translation);
    }

    Translate();
    -
\ No newline at end of file +
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b1fc5f1..8709773 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "predictionguard", - "version": "0.16.0", + "version": "0.17.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "predictionguard", - "version": "0.16.0", + "version": "0.17.0", "license": "Apache 2.0", "dependencies": { "fetch-sse": "^1.0.23", diff --git a/package.json b/package.json index e6ce4f1..8f0e0d5 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "type": "module", "name": "predictionguard", "author": "Prediction Guard", - "version": "0.16.0", + "version": "0.17.0", "license": "Apache 2.0", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/src/api_client.ts b/src/api_client.ts index 66621fd..b948603 100644 --- a/src/api_client.ts +++ b/src/api_client.ts @@ -2,7 +2,7 @@ import fetch from 'node-fetch'; import * as sse from 'fetch-sse'; import * as model from './api_model.js'; -const version = '0.16.0'; +const version = '0.17.0'; /** Client provides access the PredictionGuard API. */ export class Client { @@ -24,6 +24,16 @@ export class Client { // ------------------------------------------------------------------------- // Chat + /** Set of models supported by the chat APIs. */ + private chatModels = new Map([ + [model.Models.DeepseekCoder67BInstruct, true], + [model.Models.Hermes2ProLlama38B, true], + [model.Models.Hermes2ProMistral7B, true], + [model.Models.LLama3SqlCoder8b, true], + [model.Models.Llava157BHF, true], + [model.Models.NeuralChat7B, true], + ]); + /** Chat generates chat completions based on a conversation history. * * @example @@ -83,20 +93,12 @@ export class Client { }, }; - const models = new Map(); - models.set(model.Models.DeepseekCoder67BInstruct, true); - models.set(model.Models.Hermes2ProLlama38B, true); - models.set(model.Models.Hermes2ProMistral7B, true); - models.set(model.Models.LLama3SqlCoder8b, true); - models.set(model.Models.Llava157BHF, true); - models.set(model.Models.NeuralChat7B, true); - try { if (!input.hasOwnProperty('model')) { return [zero, {error: 'model is a mandatory input'}]; } - if (!models.get(input.model)) { + if (!this.chatModels.get(input.model)) { return [zero, {error: 'model specified is not supported'}]; } @@ -251,20 +253,12 @@ export class Client { * null. */ async ChatSSE(input: model.ChatSSEInput): Promise { - const models = new Map(); - models.set(model.Models.DeepseekCoder67BInstruct, true); - models.set(model.Models.Hermes2ProLlama38B, true); - models.set(model.Models.Hermes2ProMistral7B, true); - models.set(model.Models.LLama3SqlCoder8b, true); - models.set(model.Models.Llava157BHF, true); - models.set(model.Models.NeuralChat7B, true); - try { if (!input.hasOwnProperty('model')) { return {error: 'model is a mandatory input'}; } - if (!models.get(input.model)) { + if (!this.chatModels.get(input.model)) { return {error: 'model specified is not supported'}; } @@ -463,6 +457,15 @@ export class Client { // ------------------------------------------------------------------------- // Completion + /** Set of models supported by the completion API. */ + private completionModels = new Map([ + [model.Models.DeepseekCoder67BInstruct, true], + [model.Models.Hermes2ProLlama38B, true], + [model.Models.Hermes2ProMistral7B, true], + [model.Models.NeuralChat7B, true], + [model.Models.NousHermesLlama213B, true], + ]); + /** Completion generates text completions based on the provided input. * * @example @@ -510,19 +513,12 @@ export class Client { }, }; - const models = new Map(); - models.set(model.Models.DeepseekCoder67BInstruct, true); - models.set(model.Models.Hermes2ProLlama38B, true); - models.set(model.Models.Hermes2ProMistral7B, true); - models.set(model.Models.NeuralChat7B, true); - models.set(model.Models.NousHermesLlama213B, true); - try { if (!input.hasOwnProperty('model')) { return [zero, {error: 'model is a mandatory input'}]; } - if (!models.get(input.model)) { + if (!this.completionModels.get(input.model)) { return [zero, {error: 'model specified is not supported'}]; }