diff --git a/.github/workflows/CI-api-docs.yml b/.github/workflows/CI-api-docs.yml index 1de19cb5..1244dbbe 100644 --- a/.github/workflows/CI-api-docs.yml +++ b/.github/workflows/CI-api-docs.yml @@ -29,7 +29,7 @@ jobs: --make-html \ --html-output=./docs/api \ --project-base-dir="." \ - --docformat=restructuredtext \ + --docformat=epytext \ --intersphinx=https://docs.python.org/3/objects.inv \ ./runpod diff --git a/docs/api/ajax.js b/docs/api/ajax.js new file mode 100644 index 00000000..9a951eb1 --- /dev/null +++ b/docs/api/ajax.js @@ -0,0 +1,50 @@ +// Implement simple cached AJAX functions. + +var _cache = {}; + +/* +* Get a promise for the HTTP get responseText. +*/ +function httpGetPromise(url) { + const promise = new Promise((_resolve, _reject) => { + httpGet(url, (responseText) => { + _resolve(responseText); + }, + (error) => { + _reject(error); + }); + }); + return promise +} + +function httpGet(url, onload, onerror) { + if (_cache[url]) { + _cachedHttpGet(url, onload, onerror); + } + else{ + _httpGet(url, onload, onerror); + } +} + +function _cachedHttpGet(url, onload, onerror) { + setTimeout(() => { onload(_cache[url]) }, 0); +} + +function _httpGet(url, onload, onerror) { + + var xobj = new XMLHttpRequest(); + xobj.open('GET', url, true); // Asynchronous + + xobj.onload = function () { + // add document to cache. + _cache[url] = xobj.responseText; + onload(xobj.responseText); + }; + + xobj.onerror = function (error) { + console.log(error) + onerror(error) + }; + + xobj.send(null); +} diff --git a/docs/api/all-documents.html b/docs/api/all-documents.html new file mode 100644 index 00000000..9312525c --- /dev/null +++ b/docs/api/all-documents.html @@ -0,0 +1,3899 @@ + + + + + + + All Documents + + + + + + + + + + + + + + +
+ + + + + +
+ + + + +
+

All Documents

+ + +
+ + \ No newline at end of file diff --git a/docs/api/apidocs.css b/docs/api/apidocs.css new file mode 100644 index 00000000..f4f4326c --- /dev/null +++ b/docs/api/apidocs.css @@ -0,0 +1,1162 @@ +body { + display: flex; + flex-direction: column; + min-height: 100vh; + overflow-y: scroll; +} + +.container-fluid{ + max-width: 1380px; + width: 100%; + flex: auto; +} + +nav.navbar { + width:100%; + margin-bottom: 0; +} + +nav.mainnavbar > div.container-fluid { + display: flex; + flex-wrap: wrap; +} + +nav div.layoutOptions { + display: flex; + flex-wrap: wrap; + align-items: end; + margin-left: auto; + padding-top:11px; +} + +nav.navbar .navbar-header { + float: none; + width: 100%; + position: relative; +} + +.page-header { + margin-top: 22px; + top: 0; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: baseline; + background-color: #fff; + margin-bottom: 3px; + border-bottom: 0; + box-shadow: 0 0 8px 8px #fff; + z-index: 99; +} + +.navbar-brand { + padding: 0; + margin: 0; + height: auto; +} + +.navbar-brand a, .navbar-brand span { + color:#777777; + padding: 15px; + display: inline-block; +} + +.navbar-brand *:first-child { + padding-right: 0; +} + +.navbar-brand *:last-child { + padding-left: 0; + padding-right: 0; +} + +.navbar-brand a:hover { + color: #444444; + text-decoration: none; +} + +a.projecthome:hover { + color: #23527c; +} + +.navlinks { + margin: 0; + display: flex; + flex-wrap: wrap; + align-items: baseline; +} + +.navlinks > a { + padding: 10px 0 10px 15px; +} + + +.navlinks > a:hover { + background-color: transparent; + text-decoration: none; +} + +.page-header h1 { + margin: 0; +} + +.categoryHeader { + font-size: 24px; + color: #777; + margin-bottom: 1.8em; +} + +/* Footer */ + +footer.navbar { + margin: auto 0 0 0; + padding-top: 15px; + padding-bottom: 15px; + background-color: #fff; + border-width: 1px 0 0 0; + border-radius: 0; + text-align: center; +} + +a[name] { + position: relative; + bottom: 10px; + font-size: 0; +} + +ul { + margin-top: 10px; + margin-left: 10px; + padding-left: 10px; +} + +li { + padding-top: 5px; + padding-bottom: 5px; +} + +#summaryTree .compact-modules { + list-style: none; + line-height: 1.8em; +} + +li a { + text-decoration: none; +} + +ul ul { + border-left-color: #e1f5fe; + border-left-width: 1px; + border-left-style: solid; +} + +ul ul ul { + border-left-color: #b3e5fc; +} + +ul ul ul ul { + border-left-color: #81d4fa; +} + +ul ul ul ul ul { + border-left-color: #4fc3f7; +} + +ul ul ul ul ul ul { + border-left-color: #29b6f6; +} + +ul ul ul ul ul ul ul { + border-left-color: #03a9f4; +} + +ul ul ul ul ul ul ul { + border-left-color: #039be5; +} + +.pre { + white-space: pre; +} + +.undocumented { + font-style: italic; + color: #9e9e9e; +} + +.functionBody p { + margin: 0; + padding: 8px 0 6px; +} + +#splitTables > p { + margin-bottom: 5px; +} + +#splitTables > table { + margin-bottom: 20px; + width: 100%; + border: 0; +} + +#splitTables > table tr { + border-bottom-color: #eee; + border-bottom-width: 1px; + border-bottom-style: solid; + width: 100%; +} + +#splitTables > table tr td { + padding: 5px; + border-left-color: #eee; + border-left-width: 1px; + border-left-style: solid; +} + +.fieldTable { + width: 100%; + border: 0; +} + +/* Arg name */ +.fieldArg { + margin-right: 7px; +} + +.fieldArg:before { + margin-right: 6px; + content: "\2022"; + font-size: 14px; +} + +.fieldTable tr:not(.fieldStart) td:first-child, +.valueTable tr:not(.fieldStart) td:first-child{ + padding: 3px 4px 3px 10px; +} + +.fieldTable tr td { + padding: 2px; +} + + +/* Argument name + type column table */ +.fieldTable tr td.fieldArgContainer { + width: 325px; + word-break: break-word; +} + +/* parameters names in parameters table */ +.fieldTable tr td.fieldArgContainer > .fieldArg { + display: inline; +} + +/* parameters types (in parameters table) */ +.fieldTable tr td.fieldArgContainer > code { + /* we don't want word break for the types because we already add tags inside the type HTML, and that should suffice. */ + word-break: normal; + display: inline-flex; + flex-wrap: wrap; +} + +/* Argument description column or return value desc, etc */ +.fieldTable tr td::nth-child(2) { + padding-left: 10px; +} + +/* Kind column table */ +#splitTables > table tr td:first-child { + /* border-left: none; */ + width: 150px; +} + +/* Attr name column table */ +#splitTables > table tr td:nth-child(2) { + width: 240px; + word-break: break-word; +} + +/* Fix proportion size of summary table columns */ +#splitTables > table { + table-layout: fixed; +} + +/* For smaller displays, i.e. half screen */ +@media only screen and (max-width: 1100px) { + + /* Attr name column table */ + #splitTables > table tr td:nth-child(2) { + width: 200px; + } + + /* Summary column table */ + #splitTables > table tr td:nth-child(3) { + width: auto; + } + +} + +@media only screen and (max-width: 820px) { + + /* Kind column table */ + #splitTables > table tr td:first-child { + border-left: none; + width: 20%; + } + + /* Attr name column table */ + #splitTables > table tr td:nth-child(2) { + width: 160px; + } + /* Argument name + type column table */ + .fieldTable tr td.fieldArgContainer { + width: 170px; + } + .fieldTable { + table-layout: fixed; + } +} + +@media only screen and (max-width: 450px) { + /* Attr name column table */ + #splitTables > table tr td:nth-child(2) { + width: 100px; + } + /* Argument name + type column table */ + .fieldTable tr td.fieldArgContainer { + width: 125px; + } +} + +table .package { + background-color: #fff3e0; +} + +table .module { + background-color: #fff8e1; +} + +table .class, table .classvariable, table .baseclassvariable, table .exception { + background-color: #fffde7; +} + +table .instancevariable, table .baseinstancevariable, table .variable, table .attribute, table .property { + background-color: #f3e5f5; +} + +table .interface { + background-color: #fbe9e7; +} + +table .method, table .function, table .basemethod, table .baseclassmethod, table .classmethod { + background-color: #f1f8e9; +} + +table .private { + background-color: #f1f1f1; +} + +.fieldName { + font-weight: bold; +} + + +#childList > div { + margin: 10px; + padding: 10px; + padding-bottom: 5px; + display: block; + border-left-color: #03a9f4; + border-left-width: 1px; + border-left-style: solid; + background: #fafafa; +} + +.functionBody { + margin-left: 5px; +} + +.functionBody > #part { + font-style: italic; +} + +.functionBody > #part > a { + text-decoration: none; +} + +.functionBody .interfaceinfo { + font-style: italic; + margin-bottom: 3px; + margin-top: 3px; +} + +.functionBody > .undocumented { + + margin-top: 6px; + margin-bottom: 6px; +} + +/* Use a slightly more compact presentation for signatures */ +.function-signature { + word-spacing: -5px; +} + +.function-signature code { + padding: 2px 1px; +} + +/* +- Links to class/function/etc names are nested like this: + label + +- 'functionHeader' is used for lines like `def func():` and `var =` +*/ +code, .literal, .pre, #childList > div .functionHeader, +#splitTables > table tr td:nth-child(2), .fieldArg { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code, #childList > div .functionHeader, .fieldArg { + color: #222222; +} + +/* Intersphinx links are not red, but simply blue */ +a.intersphinx-link { + color: #03458a; + background-color: #f0ebe694; +} + +/* Links to objects within the system use this special css. +This applies to inline docstring content marked up as code, + for example L{foo} in epytext or `bar` in restructuredtext, + but also to links that are present in summary tables. +*/ +a.internal-link { + color:#c7254e; + background-color:#f9f2f4; +} + +/* top navagation bar */ +.page-header > h1 { + margin-top: 0; +} +.page-header > h1 > code { + color: #971c3a; +} + +/* Bootstart 3.x sets font-size to 17.5px which just + looks ridiculously large, so we unset it here. +*/ +blockquote { + font-size: unset; +} + +/* +This defines the code style, it's black on light gray. +It also overwrite the default values inherited from bootstrap min +*/ +code, .literal { + padding:2px 4px; + background-color: #f4f4f4; + border-radius:4px +} + + +a.sourceLink { + color: #337ab7!important; + font-weight: normal; + background-color: transparent!important; +} + + + + +.moduleDocstring { + margin: 20px; +} + +#partOf { + margin-top: -13px; + margin-bottom: 19px; +} + +.fromInitPy { + font-style: italic; +} + +pre { + padding-left: 0; +} + +/* Private stuff */ + +body.private-hidden #splitTables .private, +body.private-hidden #childList .private, +body.private-hidden #summaryTree .private, +body.private-hidden nav.sidebar .private, +body.private-hidden #search-results .private, +body.private-hidden .container > .private { + display: none!important; +} + +/* Show private and other options */ + +#showPrivate:hover { + text-decoration: none; +} + +#showPrivate button { + padding: 5px; + padding-bottom: 15px; +} + +#showPrivate button:hover { + text-decoration: none; +} + +#current-docs-container { + font-style: italic; + padding-top: 11px; +} + +/* Deprecation stuff */ + +.deprecationNotice { + margin: 10px; +} + +/* Syntax highlighting for source code */ + +.py-string { + color: #337ab7; +} +.py-comment { + color: #309078; + font-style: italic; +} +.py-keyword { + font-weight: bold; +} +.py-defname { + color: #a947b8; + font-weight: bold; +} +.py-builtin { + color: #fc7844; + font-weight: bold; +} + +/* Doctest */ + +pre.py-doctest { + padding: .5em; +} +.py-prompt, .py-more { + color: #a8a8a8; +} +.py-output { + color: #c7254e; +} + +/* Admonitions */ + +div.rst-admonition p.rst-admonition-title:after { + content: ":"; +} + +div.rst-admonition p.rst-admonition-title { + margin: 0; + padding: 0.1em 0 0.35em 0em; + font-weight: bold; +} + +div.rst-admonition p.rst-admonition-title { + color: #333333; +} + +div.rst-admonition { + padding: 8px; + margin-bottom: 20px; + background-color: #EEE; + border: 1px solid #CCC; + border-radius: 4px; +} + +div.warning, div.attention, div.danger, div.error, div.caution { + background-color: #ffcf9cb0; + border: 1px solid #ffbbaa; +} + +div.danger p.rst-admonition-title, div.error p.rst-admonition-title, div.caution p.rst-admonition-title { + color: #b94a48; +} + +div.tip p.rst-admonition-title, div.hint p.rst-admonition-title, div.important p.rst-admonition-title{ + color: #3a87ad; +} + +div.tip, div.hint, div.important { + background-color: #d9edf7; + border-color: #bce8f1; +} + +.sidebarcontainer { + width: 297px; /* Set the width of the sidebar: 290px + 2px for the border + 5px for the padding */ + max-height: 100vh; /* Full-height: remove this if you want "auto" height */ + float: left; + padding: 10px 0px 10px 5px; + margin:24px 20px 20px 0; + border: 1px solid; + border-radius: 4px; + display: flex; + position: sticky; + top: 0; + overflow-wrap: break-word; + overflow-x: none; + overflow-y: scroll; + background-color: #fbfbfb; + border-color: #e7e7e7; + scrollbar-width: thin; + scrollbar-color: rgb(194,194,194) rgb(249,249,249); +} + +.sidebarcontainer::-webkit-scrollbar { + width: 10px; /* Scrollbar width on Chromium-based browsers */ + border: solid 1px rgb(229,229,229); + background-color: rgb(249,249,249); +} + +.sidebarcontainer::-webkit-scrollbar:horizontal { + display: none; +} + +.sidebarcontainer::-webkit-scrollbar-track { + box-shadow: inset 0 0 5px 5px transparent; + border: solid 1px transparent; +} + +.sidebarcontainer::-webkit-scrollbar-thumb { + box-shadow: inset 0 0 5px 5px rgb(194,194,194); + border: solid 2px transparent; + border-radius: 5px; +} + + +/* The sidebar menu */ + +.sidebar { + /*! padding-bottom: 10px; */ + width: 100%; +} + +.sidebar > div { + width: 100%; + padding-top: 7px; +} + +.sidebar > div:first-child { + padding-top: 0; + margin-top: -4px; +} + +.sidebar > div:last-child { + padding-bottom: 15px; +} + +.sidebar > div:nth-child(2) { + background-color: RGBA(0,10,10, 0.03); + box-shadow: -5px 5px 0px 10px RGBA(0,10,10, 0.03); + margin-top: 20px; +} + +.sidebar ul { + display: block; + margin: 0 0 5px 0; + padding: 0 0 0 10px; + width: 100%; +} + +.sidebar li { + width: 100%; + padding: 0; + display: flex; + overflow: hidden; + flex-wrap: wrap; + word-break: break-word; +} + +.sidebar li p { + margin: 0; + width: 100%; +} + +.sidebar li ul { + margin: 0 0 2px 0; + padding: 0 0 0 7px; + border: 0; +} + +/* Generated TOC */ +.sidebar ul.rst-simple, .sidebar ul.rst-simple ul { + margin: 0 0 5px 0; + padding: 0 0 0 15px; + margin: 0; + border-left: 1px solid #e7e7e7; +} + +.sidebar li a { + display: inline-block; + width: 100%; + padding-top: 3px; + padding-bottom: 3px; + color: #414141; +} + +.sidebar li a:hover { + color: #C7354E; +} + +.sidebar > div ul > li > .itemName > code, .sidebar > div ul > li > .itemName > code > a { + background-color: transparent; +} + +.sidebar ul > li > .itemName { + width: 100%; +} + +.sidebar > div ul > li > .itemName > code { + padding: 0; + width: 100%; +} + +.sidebar .thingTitle { + margin-bottom: 7px; + margin-top: 7px; + overflow: hidden; + color: #555; + font-size: 18px; + display: flex; + flex-wrap: wrap; + align-items: baseline; + word-break: break-word; + padding: 0 15px 3px 1px; + box-shadow: -10px 12px 0px -11px #888; +} + +.sidebar .thingTitle > span { + margin-right: 7px; +} + +.sidebar .thingTitle > code { + font-size: 16px; + color: #555; + background-color: transparent; + padding-left: 0; + padding-right: 0; + display: flex; +} + +.sidebar .thingTitle > code a { + background-color: transparent; +} + +.sidebar .childrenKindTitle { + color: #414141; + margin-left: 4px; + margin-bottom: 3px; + font-size: 15px; + /*! border-bottom: solid 1px #9d9d9d; */ + box-shadow: -11px 11px 0px -10px #aeaeaec4; + font-style: italic; +} + + +/* Style page content */ +#main { + + /* Same as the width of the sidebar + 20px*/ + display: flex; + flex-direction: column; +} + +/* Special case for the --nosidebar option */ +.nosidebar { + margin-left: 10px!important; +} + +/* For bigger displays, i.e. full screen */ +@media only screen and (min-width: 1330px) { + .sidebarcontainer { + width: 317px; /* Set the width of the sidebar: 310px + 2px for the border + 5px for the scrollbar */ + } +} + +/* For smaller displays, i.e. half screen */ +@media only screen and (max-width: 1100px) { + .sidebarcontainer { + width: 257px; /* Set the width of the sidebar: 250px + 2px for the border + 5px for the scrollbar */ + } +} + +/* For smaller displays mobile phone */ +@media only screen and (max-width: 900px) { + .sidebarcontainer { + width: 207px; /* Set the width of the sidebar: 200px + 2px for the border + 5px for the scrollbar */ + } +} + + +nav.foot { + margin-top: 20px; + background-color: #fff; + text-align: center; + border-width: 1px 0 0 0; + border-radius: 0; +} + +nav.foot address { + padding-top: 15px; + text-align: center; +} + +#collapseSideBar { + border-radius: 4px; + color: rgb(68, 68, 68); + font-size: 1.2em; + display: block; + float: left; + width: 0; + padding: 0; + margin: 0; + position: sticky; + top: 0; + right: 0; +} + +#collapseSideBar > a:hover{ + background-color: #e1e1e1; + text-decoration: none; +} + +#collapseSideBar > a { + height: 42px; + width: 15px; + font-size: 1.2em; + color: #333; + padding: 1px; + background-color: #e7e7e7; + border-radius: 0 4px 0 4px; + margin: -11px 0 0 -15px; + text-align: center; + display: flex; + align-items: center; + justify-content: center; + border: solid 1px #e7e7e7; +} + +/* collapsed */ + +body.sidebar-collapsed .sidebar { + display: none; +} + +body.sidebar-collapsed .sidebarcontainer { + border: none; + padding: 0; + width: 5px; + overflow: visible; + background-color: transparent; +} + +body.sidebar-collapsed #main { + margin: 0 0 0 25px!important; +} + +body.sidebar-collapsed #collapseSideBar { + left: 1px; +} + +body.sidebar-collapsed #collapseSideBar > a { + margin-top: -1px; + margin-left: 0; + border-radius: 4px; + background-color: #f8f8f8; +} + +body.sidebar-collapsed #collapseSideBar > a:hover { + background-color: #e7e7e7; +} + +/* On smaller screens, where width is less than 650px, simply hide sidebar */ +@media screen and (max-width: 650px) { + .sidebar { + display: none; + } + #main { + margin: 0; + } + .sidebarcontainer { + display: none!important; + } + #collapseSideBar { + display: none; + } +} + +/* Style for expandable content */ + +input.tocChildrenToggle { + display: none; + } + +.lbl-toggle { + display: block; + width: 18px; + font-weight: bold; + font-family: monospace; + font-size: 12px; + text-transform: uppercase; + text-align: center; + color: #333; + /* background: #0069ff; */ + cursor: pointer; + border-radius: 7px; + transition: all 0.1s ease-out; + margin: 0 0 0 0; + padding: 5px 2px 0 2px; + color: rgb(163, 163, 163); + position: absolute; +} + +.lbl-toggle::before { + content: " "; + display: inline-block; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid currentColor; + vertical-align: middle; + margin-right: 0.7rem; + transform: translateY(-2px); + } + +.lbl-toggle:hover { + color: #333; + } + +.tocChildrenToggle:checked + .lbl-toggle::before { + transform: rotate(90deg) translateX(-3px); + } + +.expandableContent { + height: 0px; + overflow: hidden; + flex-basis: 100%; + padding: 0 0 0 8px; + margin-left: 5px; + border-left: 1px solid #e7e7e7; +} + +.expandableContent > div { + margin-top: 5px; +} + +.tocChildrenToggle:checked ~ .expandableContent { + height: auto; +} + +.tocChildrenToggle:not(:checked) ~ .expandableContent .lbl-toggle { + position: relative; +} + +.tocChildrenToggle:checked + .lbl-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + color: #333; + } + +.expandableContent .childrenKindTitle { + font-size: 14px; + /* margin-left: 5px; */ +} + +.expandableItem { + display: flex; + flex-wrap: wrap; +} + +.expandableItem > code { + width: calc(100% - 20px)!important; + margin-left: 18px; +} + +/* Special cases to display the current object name in the sidebar */ +.thisobject a { + font-weight: bold; +} +.expandableItem label.notExpandable { + cursor: not-allowed; +} +/* Version modified style */ +.rst-versionmodified { + display: block; + font-weight: bold; +} + +/* Search */ + +/* clears the ‘X’ from search input for Chrome */ +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-results-button, +input[type="search"]::-webkit-search-results-decoration { display: none; } + +.navlinks > #search-box-container { + padding: 0 0 8px 15px; + align-self: flex-end; + margin-left: auto; + display: none; +} + +#search-results { + margin-top: 5px; +} + +#search-results tr{ + display:block; + border-bottom: 0.5px solid #CCC; +} + +#search-results tr { + border-bottom: 1px #ddd solid; + padding-bottom: 1px; +} + +#search-results tr td { + border-left: 1px #ddd solid; + padding: 2px; +} + +#search-results tr td:first-child { + width: 120px; +} + +#search-results tr:last-child{ + border-bottom: none; +} + +#search-results tr article, #search-results tr article *{ + display:inline; +} + +#search-results section { + padding: 5px 0 0 8px; +} + +.search-help-hidden #search-help-box{ + display: none!important; +} + +#search-help-button{ + background-color: #e6e6e6; +} + +.search-help-hidden #search-help-button{ + background-color: rgb(255, 255, 255); +} + +.search-help-hidden #search-help-button:hover { + background-color: #e6e6e6; +} + +#search-results-container { + padding: 10px; + width: 100%; + max-width: 850px; + max-height: calc(100vh - 70px); + right: 0; + position: absolute; + overflow-x: hidden; + overflow-y: scroll; + background-color: #fbfbfb; + border: 1px solid #CCC; + border-radius: 4px; + z-index: 500; + margin-top: -9px; + word-break: break-word; +} + +#search-status{ + padding-bottom:2px; +} + +#search-buttons{ + float: right; +} + +#search-buttons > span { + padding: 0.3em 0.4em 0.4em; +} + +#toggle-search-in-docstrings-checkbox{ + margin-top: -2.5px; + cursor: pointer; +} + +/* Constant values repr */ +pre.constant-value { padding: .5em; } +.rst-variable-linewrap { color: #604000; font-weight: bold; } +.rst-variable-ellipsis { color: #604000; font-weight: bold; } +.rst-variable-quote { color: #604000; font-weight: bold; } + +/* Those two are currently not used */ +.rst-variable-group { color: #000000; } +.rst-variable-op { color: #000000; } + +.rst-variable-string { color: #337ab7; } +.rst-variable-unknown { color: #a00000; font-weight: bold; } +.rst-re { color: #000000; } +.rst-re-char { color: #337ab7; } +.rst-re-op { color: #fc7844; } +.rst-re-group { color: #309078; } +.rst-re-ref { color: #890000; } + +/* highlight the targeted item with "#" */ +#childList a:target ~ .functionHeader, #childList a:target ~ .functionBody{ + background-color: rgb(253, 255, 223); +} +#childList a:target ~ .functionHeader{ + box-shadow: 0px 0px 0px 10px rgb(253, 255, 223); +} +#childList a:target ~ .functionBody{ + box-shadow: -2px -8px 0px 13px rgb(253 255 223); +} +/* in class hierarchy */ +#summaryTree a:target ~ div { + background-color: rgb(253, 255, 223); + box-shadow: 0px 0px 0px 7px rgb(253, 255, 223); +} + +/* deprecations uses a orange text */ +.rst-deprecated > .rst-versionmodified{ + color:#aa6708; +} + +/* CSS for anchor links */ +.headerLink{ + display:none; + color:black; + float:right; + margin-left:5px; + padding-left:5px; + padding-right:5px; +} +@media (hover) { + /* See https://css-tricks.com/annoying-mobile-double-tap-link-issue/ */ + .headerLink:hover{ + text-decoration:none; + background-color: #ccc; + } + #childList > div:hover .headerLink{ + display:inline-block; + } +} +#childList a:target ~ .functionHeader .headerLink{ + display: inline-block +} diff --git a/docs/api/bootstrap.min.css b/docs/api/bootstrap.min.css new file mode 100644 index 00000000..cd1c616a --- /dev/null +++ b/docs/api/bootstrap.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.4 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/docs/api/classIndex.html b/docs/api/classIndex.html new file mode 100644 index 00000000..d1db3230 --- /dev/null +++ b/docs/api/classIndex.html @@ -0,0 +1,167 @@ + + + + + + + + Class Hierarchy + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + \ No newline at end of file diff --git a/docs/api/extra.css b/docs/api/extra.css new file mode 100644 index 00000000..e69de29b diff --git a/docs/api/fonts/info.svg b/docs/api/fonts/info.svg new file mode 100644 index 00000000..8f48f86c --- /dev/null +++ b/docs/api/fonts/info.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/docs/api/fonts/x-circle.svg b/docs/api/fonts/x-circle.svg new file mode 100644 index 00000000..ce37cdc3 --- /dev/null +++ b/docs/api/fonts/x-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/docs/api/fullsearchindex.json b/docs/api/fullsearchindex.json new file mode 100644 index 00000000..fe968984 --- /dev/null +++ b/docs/api/fullsearchindex.json @@ -0,0 +1 @@ +{"version": "2.3.9", "fields": ["name", "names", "qname", "docstring", "kind"], "fieldVectors": [["name/runpod", [0, 24.43]], ["names/runpod", [0, 5.034]], ["qname/runpod", [0, 8.143]], ["docstring/runpod", [0, 4.572, 1, 8.542, 2, 8.542, 3, 7.668]], ["kind/runpod", [4, -7.007]], ["name/runpod.api", [5, 33.246]], ["names/runpod.api", [5, 6.85]], ["qname/runpod.api", [6, 22.998]], ["docstring/runpod.api", [1, 8.542, 2, 8.542, 3, 7.668, 7, 12.912]], ["kind/runpod.api", [4, -7.007]], ["name/runpod.api.ctl_commands", [8, 68.993]], ["names/runpod.api.ctl_commands", [9, 10.203, 10, 7.068]], ["qname/runpod.api.ctl_commands", [11, 22.998]], ["docstring/runpod.api.ctl_commands", [0, 3.651, 5, 4.968, 9, 9.395, 12, 6.736, 13, 7.001, 14, 6.242]], ["kind/runpod.api.ctl_commands", [15, -4.629]], ["name/runpod.api.graphql", [16, 43.55]], ["names/runpod.api.graphql", [16, 8.973]], ["qname/runpod.api.graphql", [17, 22.998]], ["docstring/runpod.api.graphql", [0, 3.914, 5, 5.326, 12, 7.073, 13, 7.505, 16, 6.977]], ["kind/runpod.api.graphql", [15, -4.629]], ["name/runpod.api.mutations", [18, 62.863]], ["names/runpod.api.mutations", [18, 12.952]], ["qname/runpod.api.mutations", [19, 22.998]], ["docstring/runpod.api.mutations", [1, 7.879, 5, 5.739, 16, 7.518, 20, 11.911, 21, 7.073]], ["kind/runpod.api.mutations", [4, -7.007]], ["name/runpod.api.mutations.container_register_auth", [22, 68.993]], ["names/runpod.api.mutations.container_register_auth", [23, 7.875, 24, 9.237, 25, 6.651]], ["qname/runpod.api.mutations.container_register_auth", [26, 22.998]], ["docstring/runpod.api.mutations.container_register_auth", [0, 3.039, 5, 4.135, 12, 7.052, 13, 5.827, 21, 5.096, 25, 6.179, 27, 5.677, 28, 6.942]], ["kind/runpod.api.mutations.container_register_auth", [15, -4.629]], ["name/runpod.api.mutations.endpoints", [29, 53.401]], ["names/runpod.api.mutations.endpoints", [29, 11.003]], ["qname/runpod.api.mutations.endpoints", [30, 22.998]], ["docstring/runpod.api.mutations.endpoints", [0, 3.421, 5, 4.656, 12, 7.555, 13, 6.56, 21, 5.737, 31, 3.594]], ["kind/runpod.api.mutations.endpoints", [15, -4.629]], ["name/runpod.api.mutations.pods", [32, 51.397]], ["names/runpod.api.mutations.pods", [32, 10.59]], ["qname/runpod.api.mutations.pods", [33, 22.998]], ["docstring/runpod.api.mutations.pods", [0, 3.421, 5, 4.656, 12, 7.555, 13, 6.56, 21, 5.737, 34, 3.421]], ["kind/runpod.api.mutations.pods", [15, -4.629]], ["name/runpod.api.mutations.templates", [35, 58.825]], ["names/runpod.api.mutations.templates", [35, 12.12]], ["qname/runpod.api.mutations.templates", [36, 22.998]], ["docstring/runpod.api.mutations.templates", [0, 3.421, 5, 4.656, 12, 7.555, 13, 6.56, 21, 5.737, 37, 6.56]], ["kind/runpod.api.mutations.templates", [15, -4.629]], ["name/runpod.api.mutations.user", [38, 34.994]], ["names/runpod.api.mutations.user", [38, 7.21]], ["qname/runpod.api.mutations.user", [39, 22.998]], ["docstring/runpod.api.mutations.user", [0, 3.651, 5, 4.968, 12, 7.835, 21, 6.123, 38, 5.23]], ["kind/runpod.api.mutations.user", [15, -4.629]], ["name/runpod.api.queries", [40, 62.863]], ["names/runpod.api.queries", [40, 12.952]], ["qname/runpod.api.queries", [41, 22.998]], ["docstring/runpod.api.queries", [1, 8.542, 2, 8.542, 3, 7.668, 42, 8.767]], ["kind/runpod.api.queries", [4, -7.007]], ["name/runpod.api.queries.endpoints", [29, 53.401]], ["names/runpod.api.queries.endpoints", [29, 11.003]], ["qname/runpod.api.queries.endpoints", [43, 22.998]], ["docstring/runpod.api.queries.endpoints", [16, 8.899, 31, 5.244, 42, 9.572]], ["kind/runpod.api.queries.endpoints", [15, -4.629]], ["name/runpod.api.queries.gpus", [44, 58.825]], ["names/runpod.api.queries.gpus", [44, 12.12]], ["qname/runpod.api.queries.gpus", [45, 22.998]], ["docstring/runpod.api.queries.gpus", [0, 3.651, 5, 4.968, 12, 7.835, 42, 7.001, 46, 6.37]], ["kind/runpod.api.queries.gpus", [15, -4.629]], ["name/runpod.api.queries.pods", [32, 51.397]], ["names/runpod.api.queries.pods", [32, 10.59]], ["qname/runpod.api.queries.pods", [47, 22.998]], ["docstring/runpod.api.queries.pods", [0, 3.421, 5, 4.656, 12, 7.555, 13, 6.56, 42, 6.56, 46, 5.969]], ["kind/runpod.api.queries.pods", [15, -4.629]], ["name/runpod.api.queries.user", [38, 34.994]], ["names/runpod.api.queries.user", [38, 7.21]], ["qname/runpod.api.queries.user", [48, 22.998]], ["docstring/runpod.api.queries.user", [0, 3.039, 5, 4.135, 12, 7.052, 38, 6.5, 42, 8.701, 49, 6.942]], ["kind/runpod.api.queries.user", [15, -4.629]], ["name/runpod.cli", [50, 32.846]], ["names/runpod.cli", [50, 6.767]], ["qname/runpod.cli", [51, 20.954]], ["docstring/runpod.cli", [1, 8.542, 2, 8.542, 3, 7.668, 50, 6.147]], ["kind/runpod.cli", [4, -7.007]], ["name/runpod.cli.entry", [52, 62.863]], ["names/runpod.cli.entry", [52, 12.952]], ["qname/runpod.cli.entry", [53, 22.998]], ["docstring/runpod.cli.entry", [0, 3.421, 12, 6.429, 50, 6.657, 54, 13.983, 55, 9.662]], ["kind/runpod.cli.entry", [15, -4.629]], ["name/runpod.cli.groups", [56, 62.863]], ["names/runpod.cli.groups", [56, 12.952]], ["qname/runpod.cli.groups", [57, 22.998]], ["docstring/runpod.cli.groups", [1, 7.312, 2, 7.312, 3, 6.563, 50, 5.262, 51, 10.071, 58, 8.941]], ["kind/runpod.cli.groups", [4, -7.007]], ["name/runpod.cli.groups.config", [59, 40.218]], ["names/runpod.cli.groups.config", [59, 8.287]], ["qname/runpod.cli.groups.config", [60, 22.998]], ["docstring/runpod.cli.groups.config", [50, 6.147, 59, 7.527, 61, 11.765, 62, 2.46]], ["kind/runpod.cli.groups.config", [4, -7.007]], ["name/runpod.cli.groups.config.commands", [10, 43.55]], ["names/runpod.cli.groups.config.commands", [10, 8.973]], ["qname/runpod.cli.groups.config.commands", [63, 22.998]], ["docstring/runpod.cli.groups.config.commands", [14, 10.351, 58, 10.445, 59, 7.527]], ["kind/runpod.cli.groups.config.commands", [15, -4.629]], ["name/runpod.cli.groups.config.functions", [64, 48.178]], ["names/runpod.cli.groups.config.functions", [64, 9.926]], ["qname/runpod.cli.groups.config.functions", [65, 22.998]], ["docstring/runpod.cli.groups.config.functions", [0, 3.629, 12, 4.712, 50, 3.059, 62, 1.224, 66, 6.426, 67, 4.363, 68, 3.891, 69, 4.974, 70, 7.38, 71, 6.426, 72, 2.955, 73, 5.855, 74, 6.426]], ["kind/runpod.cli.groups.config.functions", [15, -4.629]], ["name/runpod.cli.groups.exec", [75, 49.679]], ["names/runpod.cli.groups.exec", [75, 10.236]], ["qname/runpod.cli.groups.exec", [76, 22.998]], ["docstring/runpod.cli.groups.exec", [50, 6.147, 67, 8.767, 77, 11.01, 78, 12.912]], ["kind/runpod.cli.groups.exec", [4, -7.007]], ["name/runpod.cli.groups.exec.commands", [10, 43.55]], ["names/runpod.cli.groups.exec.commands", [10, 8.973]], ["qname/runpod.cli.groups.exec.commands", [79, 22.998]], ["docstring/runpod.cli.groups.exec.commands", [0, 3.651, 12, 7.835, 14, 6.242, 50, 4.909, 75, 7.424]], ["kind/runpod.cli.groups.exec.commands", [15, -4.629]], ["name/runpod.cli.groups.exec.functions", [64, 48.178]], ["names/runpod.cli.groups.exec.functions", [64, 9.926]], ["qname/runpod.cli.groups.exec.functions", [80, 22.998]], ["docstring/runpod.cli.groups.exec.functions", [0, 3.651, 12, 7.835, 50, 4.909, 62, 1.965, 75, 7.424]], ["kind/runpod.cli.groups.exec.functions", [15, -4.629]], ["name/runpod.cli.groups.exec.helpers", [81, 51.397]], ["names/runpod.cli.groups.exec.helpers", [81, 10.59]], ["qname/runpod.cli.groups.exec.helpers", [82, 22.998]], ["docstring/runpod.cli.groups.exec.helpers", [0, 3.651, 14, 6.242, 50, 4.909, 58, 8.341, 62, 1.965, 75, 7.424, 83, 7.981]], ["kind/runpod.cli.groups.exec.helpers", [15, -4.629]], ["name/runpod.cli.groups.pod", [34, 24.43]], ["names/runpod.cli.groups.pod", [34, 5.034]], ["qname/runpod.cli.groups.pod", [84, 22.998]], ["docstring/runpod.cli.groups.pod", [14, 7.817, 34, 4.572, 67, 8.767, 85, 11.01]], ["kind/runpod.cli.groups.pod", [4, -7.007]], ["name/runpod.cli.groups.pod.commands", [10, 43.55]], ["names/runpod.cli.groups.pod.commands", [10, 8.973]], ["qname/runpod.cli.groups.pod.commands", [86, 22.998]], ["docstring/runpod.cli.groups.pod.commands", [0, 3.651, 12, 7.835, 14, 6.242, 34, 3.651, 50, 4.909]], ["kind/runpod.cli.groups.pod.commands", [15, -4.629]], ["name/runpod.cli.groups.project", [87, 33.659]], ["names/runpod.cli.groups.project", [87, 6.935]], ["qname/runpod.cli.groups.project", [88, 22.998]], ["docstring/runpod.cli.groups.project", [1, 9.327, 2, 9.327, 87, 6.878]], ["kind/runpod.cli.groups.project", [4, -7.007]], ["name/runpod.cli.groups.project.commands", [10, 43.55]], ["names/runpod.cli.groups.project.commands", [10, 8.973]], ["qname/runpod.cli.groups.project.commands", [89, 22.998]], ["docstring/runpod.cli.groups.project.commands", [0, 3.651, 12, 7.835, 14, 6.242, 50, 4.909, 87, 5.03]], ["kind/runpod.cli.groups.project.commands", [15, -4.629]], ["name/runpod.cli.groups.project.functions", [64, 48.178]], ["names/runpod.cli.groups.project.functions", [64, 9.926]], ["qname/runpod.cli.groups.project.functions", [90, 22.998]], ["docstring/runpod.cli.groups.project.functions", [0, 3.651, 12, 7.835, 50, 4.909, 62, 1.965, 87, 5.03]], ["kind/runpod.cli.groups.project.functions", [15, -4.629]], ["name/runpod.cli.groups.project.helpers", [81, 51.397]], ["names/runpod.cli.groups.project.helpers", [81, 10.59]], ["qname/runpod.cli.groups.project.helpers", [91, 22.998]], ["docstring/runpod.cli.groups.project.helpers", [14, 7.211, 58, 9.635, 62, 2.269, 83, 9.219, 87, 5.811]], ["kind/runpod.cli.groups.project.helpers", [15, -4.629]], ["name/runpod.cli.groups.ssh", [92, 30.05]], ["names/runpod.cli.groups.ssh", [92, 6.192]], ["qname/runpod.cli.groups.ssh", [93, 22.998]], ["docstring/runpod.cli.groups.ssh", [50, 6.712, 62, 2.686, 92, 6.141]], ["kind/runpod.cli.groups.ssh", [4, -7.007]], ["name/runpod.cli.groups.ssh.commands", [10, 43.55]], ["names/runpod.cli.groups.ssh.commands", [10, 8.973]], ["qname/runpod.cli.groups.ssh.commands", [94, 22.998]], ["docstring/runpod.cli.groups.ssh.commands", [0, 3.651, 12, 7.835, 14, 6.242, 50, 4.909, 92, 4.491]], ["kind/runpod.cli.groups.ssh.commands", [15, -4.629]], ["name/runpod.cli.groups.ssh.functions", [64, 48.178]], ["names/runpod.cli.groups.ssh.functions", [64, 9.926]], ["qname/runpod.cli.groups.ssh.functions", [95, 22.998]], ["docstring/runpod.cli.groups.ssh.functions", [0, 3.651, 12, 7.835, 50, 4.909, 62, 1.965, 92, 4.491]], ["kind/runpod.cli.groups.ssh.functions", [15, -4.629]], ["name/runpod.cli.utils", [96, 55.809]], ["names/runpod.cli.utils", [96, 11.499]], ["qname/runpod.cli.utils", [97, 22.998]], ["docstring/runpod.cli.utils", [50, 6.147, 62, 2.46, 67, 8.767, 98, 9.298]], ["kind/runpod.cli.utils", [4, -7.007]], ["name/runpod.cli.utils.rp_info", [99, 62.863]], ["names/runpod.cli.utils.rp_info", [100, 5.757, 101, 8.063]], ["qname/runpod.cli.utils.rp_info", [102, 22.998]], ["docstring/runpod.cli.utils.rp_info", [0, 2.602, 12, 6.411, 34, 2.602, 49, 5.945, 50, 3.499, 62, 1.4, 67, 4.99, 98, 8.201, 99, 6.696, 103, 5.945]], ["kind/runpod.cli.utils.rp_info", [15, -4.629]], ["name/runpod.cli.utils.rp_runpodignore", [104, 68.993]], ["names/runpod.cli.utils.rp_runpodignore", [100, 5.757, 105, 11.198]], ["qname/runpod.cli.utils.rp_runpodignore", [106, 22.998]], ["docstring/runpod.cli.utils.rp_runpodignore", [72, 6.736, 107, 9.395, 108, 8.791, 109, 3.651, 110, 5.376, 111, 8.341]], ["kind/runpod.cli.utils.rp_runpodignore", [15, -4.629]], ["name/runpod.cli.utils.rp_sync", [112, 68.993]], ["names/runpod.cli.utils.rp_sync", [100, 5.757, 113, 8.063]], ["qname/runpod.cli.utils.rp_sync", [114, 22.998]], ["docstring/runpod.cli.utils.rp_sync", [113, 7.959, 115, 10.071, 116, 9.934, 117, 10.071, 118, 7.718]], ["kind/runpod.cli.utils.rp_sync", [15, -4.629]], ["name/runpod.cli.utils.rp_userspace", [119, 68.993]], ["names/runpod.cli.utils.rp_userspace", [100, 5.757, 120, 11.198]], ["qname/runpod.cli.utils.rp_userspace", [121, 22.998]], ["docstring/runpod.cli.utils.rp_userspace", [0, 3.651, 12, 7.835, 50, 4.909, 98, 7.424, 122, 10.311]], ["kind/runpod.cli.utils.rp_userspace", [15, -4.629]], ["name/runpod.cli.utils.ssh_cmd", [123, 68.993]], ["names/runpod.cli.utils.ssh_cmd", [92, 4.877, 124, 11.198]], ["qname/runpod.cli.utils.ssh_cmd", [125, 22.998]], ["docstring/runpod.cli.utils.ssh_cmd", [0, 2.602, 12, 6.411, 14, 6.895, 50, 3.499, 92, 4.961, 98, 5.292, 126, 5.292, 127, 2.987, 128, 4.99]], ["kind/runpod.cli.utils.ssh_cmd", [15, -4.629]], ["name/runpod.endpoint", [31, 25.662]], ["names/runpod.endpoint", [31, 5.287]], ["qname/runpod.endpoint", [129, 22.998]], ["docstring/runpod.endpoint", [1, 8.542, 2, 8.542, 3, 7.668, 31, 4.803]], ["kind/runpod.endpoint", [4, -7.007]], ["name/runpod.endpoint.asyncio", [130, 53.401]], ["names/runpod.endpoint.asyncio", [130, 11.003]], ["qname/runpod.endpoint.asyncio", [131, 22.998]], ["docstring/runpod.endpoint.asyncio", [0, 4.992, 31, 5.244, 130, 10.912]], ["kind/runpod.endpoint.asyncio", [4, -7.007]], ["name/runpod.endpoint.asyncio.asyncio_runner", [132, 68.993]], ["names/runpod.endpoint.asyncio.asyncio_runner", [130, 8.667, 133, 9.058]], ["qname/runpod.endpoint.asyncio.asyncio_runner", [134, 22.998]], ["docstring/runpod.endpoint.asyncio.asyncio_runner", [3, 7.668, 31, 4.803, 127, 5.249, 135, 11.01]], ["kind/runpod.endpoint.asyncio.asyncio_runner", [15, -4.629]], ["name/runpod.endpoint.helpers", [81, 51.397]], ["names/runpod.endpoint.helpers", [81, 10.59]], ["qname/runpod.endpoint.helpers", [136, 22.998]], ["docstring/runpod.endpoint.helpers", [0, 4.217, 5, 5.739, 31, 4.43, 62, 2.269, 83, 9.219]], ["kind/runpod.endpoint.helpers", [15, -4.629]], ["name/runpod.endpoint.runner", [133, 55.809]], ["names/runpod.endpoint.runner", [133, 11.499]], ["qname/runpod.endpoint.runner", [137, 22.998]], ["docstring/runpod.endpoint.runner", [0, 3.914, 12, 7.073, 31, 4.111, 133, 8.941, 138, 7.137]], ["kind/runpod.endpoint.runner", [15, -4.629]], ["name/runpod.error", [139, 34.994]], ["names/runpod.error", [139, 7.21]], ["qname/runpod.error", [140, 22.998]], ["docstring/runpod.error", [0, 3.219, 12, 4.179, 27, 6.013, 72, 4.179, 139, 4.61, 141, 9.09, 142, 9.09, 143, 3.298, 144, 9.09]], ["kind/runpod.error", [15, -4.629]], ["name/runpod.serverless", [145, 40.218]], ["names/runpod.serverless", [145, 8.287]], ["qname/runpod.serverless", [146, 22.998]], ["docstring/runpod.serverless", [0, 2.733, 27, 5.106, 145, 4.499, 147, 5.974, 148, 7.719, 149, 7.198, 150, 6.581, 151, 9.568, 152, 4.083]], ["kind/runpod.serverless", [4, -7.007]], ["name/runpod.serverless.core", [153, 58.825]], ["names/runpod.serverless.core", [153, 12.12]], ["qname/runpod.serverless.core", [154, 22.998]], ["docstring/runpod.serverless.core", [0, 4.217, 62, 2.269, 145, 6.943, 149, 5.962, 153, 10.155]], ["kind/runpod.serverless.core", [15, -4.629]], ["name/runpod.serverless.modules", [155, 62.863]], ["names/runpod.serverless.modules", [155, 12.952]], ["qname/runpod.serverless.modules", [156, 22.998]], ["docstring/runpod.serverless.modules", [1, 7.879, 2, 7.879, 3, 9.617, 116, 7.691]], ["kind/runpod.serverless.modules", [4, -7.007]], ["name/runpod.serverless.modules.rp_fastapi", [157, 68.993]], ["names/runpod.serverless.modules.rp_fastapi", [100, 5.757, 158, 9.058]], ["qname/runpod.serverless.modules.rp_fastapi", [159, 22.998]], ["docstring/runpod.serverless.modules.rp_fastapi", [5, 4.38, 127, 3.695, 149, 4.55, 158, 7.353, 160, 4.674, 161, 6.347, 162, 7.75, 163, 5.398, 164, 8.282]], ["kind/runpod.serverless.modules.rp_fastapi", [15, -4.629]], ["name/runpod.serverless.modules.rp_handler", [165, 68.993]], ["names/runpod.serverless.modules.rp_handler", [100, 5.757, 166, 7.231]], ["qname/runpod.serverless.modules.rp_handler", [167, 22.998]], ["docstring/runpod.serverless.modules.rp_handler", [101, 10.152, 103, 11.404, 166, 9.104]], ["kind/runpod.serverless.modules.rp_handler", [15, -4.629]], ["name/runpod.serverless.modules.rp_http", [168, 68.993]], ["names/runpod.serverless.modules.rp_http", [100, 5.757, 169, 9.058]], ["qname/runpod.serverless.modules.rp_http", [170, 22.998]], ["docstring/runpod.serverless.modules.rp_http", [3, 7.073, 160, 6.124, 169, 9.635, 171, 8.873, 172, 6.597]], ["kind/runpod.serverless.modules.rp_http", [15, -4.629]], ["name/runpod.serverless.modules.rp_job", [173, 68.993]], ["names/runpod.serverless.modules.rp_job", [100, 5.757, 174, 3.17]], ["qname/runpod.serverless.modules.rp_job", [175, 22.998]], ["docstring/runpod.serverless.modules.rp_job", [61, 12.846, 83, 10.912, 174, 3.991]], ["kind/runpod.serverless.modules.rp_job", [15, -4.629]], ["name/runpod.serverless.modules.rp_local", [176, 68.993]], ["names/runpod.serverless.modules.rp_local", [100, 5.757, 177, 6.779]], ["qname/runpod.serverless.modules.rp_local", [178, 22.998]], ["docstring/runpod.serverless.modules.rp_local", [0, 4.188, 12, 5.438, 62, 1.471, 145, 6.895, 149, 3.863, 177, 4.673, 179, 7.719, 180, 5.39, 181, 5.39]], ["kind/runpod.serverless.modules.rp_local", [15, -4.629]], ["name/runpod.serverless.modules.rp_logger", [182, 68.993]], ["names/runpod.serverless.modules.rp_logger", [100, 5.757, 183, 9.058]], ["qname/runpod.serverless.modules.rp_logger", [184, 22.998]], ["docstring/runpod.serverless.modules.rp_logger", [3, 1.692, 12, 2.354, 49, 2.304, 62, 0.543, 70, 2.051, 101, 2.051, 139, 1.445, 185, 2.429, 186, 2.849, 187, 3.171, 188, 3.687, 189, 2.122, 190, 2.849, 191, 2.849, 192, 2.849, 193, 2.849, 194, 2.849, 195, 2.849, 196, 2.051, 197, 2.849, 198, 2.596, 199, 2.849, 200, 2.849, 201, 2.849, 202, 5.121, 203, 2.051, 204, 2.429, 205, 2.849, 206, 2.849, 207, 2.596, 208, 2.596, 209, 2.304, 210, 2.849, 211, 2.849, 212, 2.849, 213, 2.849, 214, 2.596, 215, 2.849, 216, 2.849, 217, 2.849, 218, 2.596]], ["kind/runpod.serverless.modules.rp_logger", [15, -4.629]], ["name/runpod.serverless.modules.rp_ping", [219, 68.993]], ["names/runpod.serverless.modules.rp_ping", [100, 5.757, 220, 7.603]], ["qname/runpod.serverless.modules.rp_ping", [221, 22.998]], ["docstring/runpod.serverless.modules.rp_ping", [0, 2.878, 3, 4.826, 143, 2.949, 163, 4.826, 220, 5.518, 222, 8.127, 223, 7.601, 224, 6.574, 225, 4.576, 226, 8.127]], ["kind/runpod.serverless.modules.rp_ping", [15, -4.629]], ["name/runpod.serverless.modules.rp_progress", [227, 68.993]], ["names/runpod.serverless.modules.rp_progress", [100, 5.757, 228, 7.819]], ["qname/runpod.serverless.modules.rp_progress", [229, 22.998]], ["docstring/runpod.serverless.modules.rp_progress", [0, 4.992, 3, 8.372, 228, 9.845]], ["kind/runpod.serverless.modules.rp_progress", [15, -4.629]], ["name/runpod.serverless.modules.rp_scale", [230, 68.993]], ["names/runpod.serverless.modules.rp_scale", [100, 5.757, 231, 9.547]], ["qname/runpod.serverless.modules.rp_scale", [232, 22.998]], ["docstring/runpod.serverless.modules.rp_scale", [0, 4.356, 12, 5.656, 62, 1.549, 145, 7.171, 149, 4.068, 180, 5.675, 231, 6.93, 233, 8.127]], ["kind/runpod.serverless.modules.rp_scale", [15, -4.629]], ["name/runpod.serverless.modules.rp_tips", [234, 68.993]], ["names/runpod.serverless.modules.rp_tips", [100, 5.757, 235, 11.198]], ["qname/runpod.serverless.modules.rp_tips", [236, 22.998]], ["docstring/runpod.serverless.modules.rp_tips", [0, 5.497, 237, 12.558]], ["kind/runpod.serverless.modules.rp_tips", [15, -4.629]], ["name/runpod.serverless.modules.worker_state", [238, 68.993]], ["names/runpod.serverless.modules.worker_state", [149, 5.605, 239, 8.667]], ["qname/runpod.serverless.modules.worker_state", [240, 22.998]], ["docstring/runpod.serverless.modules.worker_state", [171, 6.393, 174, 2.429, 239, 6.642, 241, 3.738, 242, 8.582, 243, 6.393, 244, 6.642, 245, 6.179, 246, 8.582, 247, 3.902]], ["kind/runpod.serverless.modules.worker_state", [15, -4.629]], ["name/runpod.serverless.utils", [96, 55.809]], ["names/runpod.serverless.utils", [96, 11.499]], ["qname/runpod.serverless.utils", [248, 22.998]], ["docstring/runpod.serverless.utils", [1, 7.879, 2, 7.879, 3, 7.073, 98, 8.577, 116, 7.691]], ["kind/runpod.serverless.utils", [4, -7.007]], ["name/runpod.serverless.utils.rp_cleanup", [249, 68.993]], ["names/runpod.serverless.utils.rp_cleanup", [100, 5.757, 250, 11.198]], ["qname/runpod.serverless.utils.rp_cleanup", [251, 22.998]], ["docstring/runpod.serverless.utils.rp_cleanup", [0, 2.733, 12, 5.438, 34, 2.733, 145, 4.499, 149, 3.863, 174, 2.185, 252, 7.719, 253, 5.558, 254, 6.244, 255, 5.39, 256, 5.974]], ["kind/runpod.serverless.utils.rp_cleanup", [15, -4.629]], ["name/runpod.serverless.utils.rp_cuda", [257, 68.993]], ["names/runpod.serverless.utils.rp_cuda", [100, 5.757, 258, 10.203]], ["qname/runpod.serverless.utils.rp_cuda", [259, 22.998]], ["docstring/runpod.serverless.utils.rp_cuda", [62, 2.106, 180, 7.718, 260, 11.053, 261, 10.071, 262, 10.071, 263, 11.053]], ["kind/runpod.serverless.utils.rp_cuda", [15, -4.629]], ["name/runpod.serverless.utils.rp_debugger", [264, 68.993]], ["names/runpod.serverless.utils.rp_debugger", [100, 5.757, 265, 9.547]], ["qname/runpod.serverless.utils.rp_debugger", [266, 22.998]], ["docstring/runpod.serverless.utils.rp_debugger", [0, 3.219, 12, 6.149, 62, 1.732, 67, 6.172, 145, 5.299, 196, 6.545, 267, 9.09, 268, 9.09]], ["kind/runpod.serverless.utils.rp_debugger", [15, -4.629]], ["name/runpod.serverless.utils.rp_download", [269, 68.993]], ["names/runpod.serverless.utils.rp_download", [100, 5.757, 270, 8.342]], ["qname/runpod.serverless.utils.rp_download", [271, 22.998]], ["docstring/runpod.serverless.utils.rp_download", [3, 3.269, 12, 4.157, 72, 2.531, 116, 5.838, 174, 1.558, 185, 4.693, 253, 6.511, 254, 4.453, 255, 3.844, 256, 4.261, 270, 4.101, 272, 5.505, 273, 3.001, 274, 4.693, 275, 5.016, 276, 5.505, 277, 5.505]], ["kind/runpod.serverless.utils.rp_download", [15, -4.629]], ["name/runpod.serverless.utils.rp_upload", [278, 68.993]], ["names/runpod.serverless.utils.rp_upload", [100, 5.757, 279, 7.231]], ["qname/runpod.serverless.utils.rp_upload", [280, 22.998]], ["docstring/runpod.serverless.utils.rp_upload", [3, 7.073, 12, 7.446, 185, 10.155, 281, 11.911]], ["kind/runpod.serverless.utils.rp_upload", [15, -4.629]], ["name/runpod.serverless.utils.rp_validator", [282, 68.993]], ["names/runpod.serverless.utils.rp_validator", [100, 5.757, 283, 11.198]], ["qname/runpod.serverless.utils.rp_validator", [284, 22.998]], ["docstring/runpod.serverless.utils.rp_validator", [0, 2.733, 12, 6.612, 62, 1.471, 69, 5.974, 98, 5.558, 145, 4.499, 180, 5.39, 273, 4.208, 285, 7.719, 286, 7.033]], ["kind/runpod.serverless.utils.rp_validator", [15, -4.629]], ["name/runpod.serverless.worker", [149, 34.533]], ["names/runpod.serverless.worker", [149, 7.115]], ["qname/runpod.serverless.worker", [287, 22.998]], ["docstring/runpod.serverless.worker", [0, 4.033, 12, 5.236, 27, 4.862, 34, 2.602, 145, 6.639, 149, 3.678, 253, 5.292, 288, 7.349, 289, 7.349, 290, 7.349]], ["kind/runpod.serverless.worker", [15, -4.629]], ["name/runpod.user_agent", [291, 62.863]], ["names/runpod.user_agent", [38, 5.68, 292, 8.667]], ["qname/runpod.user_agent", [293, 22.998]], ["docstring/runpod.user_agent", [0, 4.217, 38, 6.041, 138, 7.691, 292, 9.219, 294, 10.852]], ["kind/runpod.user_agent", [15, -4.629]], ["name/runpod.version", [295, 46.843]], ["names/runpod.version", [295, 9.651]], ["qname/runpod.version", [296, 22.998]], ["docstring/runpod.version", [0, 4.992, 138, 9.104, 295, 9.572]], ["kind/runpod.version", [15, -4.629]], ["name/runpod.version.get_version", [297, 34.496]], ["names/runpod.version.get_version", [241, 2.439, 295, 3.801]], ["qname/runpod.version.get_version", [298, 11.499]], ["docstring/runpod.version.get_version", [0, 2.496, 138, 4.552, 295, 4.786]], ["kind/runpod.version.get_version", [62, -1.166]], ["name/runpod.version.__version__", [299, 34.496]], ["names/runpod.version.__version__", [295, 4.826]], ["qname/runpod.version.__version__", [300, 11.499]], ["docstring/runpod.version.__version__", []], ["kind/runpod.version.__version__", [301, -1.552]], ["name/runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH", [302, 34.496]], ["names/runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH", [303, 4.618, 304, 3.938, 305, 4.618]], ["qname/runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH", [306, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH", []], ["kind/runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH", [307, -2.441]], ["name/runpod.serverless.modules.rp_logger.LOG_LEVELS", [308, 34.496]], ["names/runpod.serverless.modules.rp_logger.LOG_LEVELS", [187, 2.545, 309, 5.599]], ["qname/runpod.serverless.modules.rp_logger.LOG_LEVELS", [310, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.LOG_LEVELS", []], ["kind/runpod.serverless.modules.rp_logger.LOG_LEVELS", [307, -2.441]], ["name/runpod.serverless.modules.rp_logger._validate_log_level", [311, 34.496]], ["names/runpod.serverless.modules.rp_logger._validate_log_level", [187, 2.1, 188, 3.326, 312, 3.326]], ["qname/runpod.serverless.modules.rp_logger._validate_log_level", [313, 11.499]], ["docstring/runpod.serverless.modules.rp_logger._validate_log_level", [109, 1.825, 188, 5.275, 196, 5.275, 314, 3.005, 315, 3.061]], ["kind/runpod.serverless.modules.rp_logger._validate_log_level", [62, -1.166]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger", [316, 68.993]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger", [34, 3.271, 127, 3.755, 183, 7.472]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger", [317, 22.998]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger", [143, 5.115, 187, 6.41, 318, 12.021]], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger", [143, -4.439]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.__instance", [319, 31.431]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.__instance", [320, 2.497]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.__instance", [321, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.__instance", []], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.__instance", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.level", [188, 24.84]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.level", [188, 5.118]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.level", [322, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.level", []], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.level", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.__new__", [323, 27.905]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.__new__", [324, 4.486]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.__new__", [325, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.__new__", []], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.__new__", [326, -1.676]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.set_level", [327, 34.496]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.set_level", [68, 3.39, 188, 4.032]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.set_level", [328, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.set_level", [68, 4.048, 187, 2.066, 188, 4.815, 189, 3.386, 196, 4.815, 315, 2.699]], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.set_level", [326, -1.676]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.log", [187, 15.683]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.log", [187, 3.231]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.log", [329, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.log", [187, 2.708, 330, 5.426, 331, 5.955, 332, 5.955, 333, 4.159]], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.log", [326, -1.676]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.secret", [334, 29.413]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.secret", [334, 6.06]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.secret", [335, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.secret", [187, 1.951, 334, 3.658, 336, 4.291, 337, 4.291, 338, 4.291, 339, 3.658, 340, 3.658, 341, 4.291, 342, 4.291, 343, 4.291]], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.secret", [326, -1.676]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.debug", [196, 24.84]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.debug", [196, 5.118]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.debug", [344, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.debug", [187, 3.529, 196, 5.589]], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.debug", [326, -1.676]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.info", [101, 24.84]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.info", [101, 5.118]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.info", [345, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.info", [101, 5.589, 187, 3.529]], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.info", [326, -1.676]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.warn", [209, 27.905]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.warn", [209, 5.749]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.warn", [346, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.warn", [187, 3.529, 209, 6.279]], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.warn", [326, -1.676]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.error", [139, 17.497]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.error", [139, 3.605]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.error", [347, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.error", [139, 3.937, 187, 3.529]], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.error", [326, -1.676]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.tip", [237, 27.905]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.tip", [237, 5.749]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.tip", [348, 11.499]], ["docstring/runpod.serverless.modules.rp_logger.RunPodLogger.tip", [187, 3.529, 237, 6.279]], ["kind/runpod.serverless.modules.rp_logger.RunPodLogger.tip", [326, -1.676]], ["name/runpod.serverless.modules.worker_state.REF_COUNT_ZERO", [349, 34.496]], ["names/runpod.serverless.modules.worker_state.REF_COUNT_ZERO", [350, 4.618, 351, 4.208, 352, 4.618]], ["qname/runpod.serverless.modules.worker_state.REF_COUNT_ZERO", [353, 11.499]], ["docstring/runpod.serverless.modules.worker_state.REF_COUNT_ZERO", []], ["kind/runpod.serverless.modules.worker_state.REF_COUNT_ZERO", [307, -2.441]], ["name/runpod.serverless.modules.worker_state.WORKER_ID", [354, 34.496]], ["names/runpod.serverless.modules.worker_state.WORKER_ID", [149, 2.802, 247, 2.545]], ["qname/runpod.serverless.modules.worker_state.WORKER_ID", [355, 11.499]], ["docstring/runpod.serverless.modules.worker_state.WORKER_ID", []], ["kind/runpod.serverless.modules.worker_state.WORKER_ID", [307, -2.441]], ["name/runpod.serverless.modules.worker_state.IS_LOCAL_TEST", [356, 34.496]], ["names/runpod.serverless.modules.worker_state.IS_LOCAL_TEST", [177, 2.796, 181, 3.225, 357, 3.326]], ["qname/runpod.serverless.modules.worker_state.IS_LOCAL_TEST", [358, 11.499]], ["docstring/runpod.serverless.modules.worker_state.IS_LOCAL_TEST", []], ["kind/runpod.serverless.modules.worker_state.IS_LOCAL_TEST", [307, -2.441]], ["name/runpod.serverless.modules.worker_state.get_auth_header", [359, 34.496]], ["names/runpod.serverless.modules.worker_state.get_auth_header", [25, 3.326, 241, 2.012, 360, 3.575]], ["qname/runpod.serverless.modules.worker_state.get_auth_header", [361, 11.499]], ["docstring/runpod.serverless.modules.worker_state.get_auth_header", [5, 2.87, 109, 2.109, 360, 4.61, 362, 5.426, 363, 3.605]], ["kind/runpod.serverless.modules.worker_state.get_auth_header", [62, -1.166]], ["name/runpod.serverless.modules.worker_state.Job", [174, 19.532]], ["names/runpod.serverless.modules.worker_state.Job", [174, 4.024]], ["qname/runpod.serverless.modules.worker_state.Job", [364, 22.998]], ["docstring/runpod.serverless.modules.worker_state.Job", [174, 4.034, 225, 3.473, 247, 2.804, 273, 3.363, 365, 4.441, 366, 4.595, 367, 3.216, 368, 4.989, 369, 6.168, 370, 4.441, 371, 6.168, 372, 6.734, 373, 3.087]], ["kind/runpod.serverless.modules.worker_state.Job", [143, -4.439]], ["name/runpod.serverless.modules.worker_state.Job.__init__", [374, 20.109]], ["names/runpod.serverless.modules.worker_state.Job.__init__", [375, 4.143]], ["qname/runpod.serverless.modules.worker_state.Job.__init__", [376, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Job.__init__", []], ["kind/runpod.serverless.modules.worker_state.Job.__init__", [326, -1.676]], ["name/runpod.serverless.modules.worker_state.Job.id", [247, 15.683]], ["names/runpod.serverless.modules.worker_state.Job.id", [247, 3.231]], ["qname/runpod.serverless.modules.worker_state.Job.id", [377, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Job.id", []], ["kind/runpod.serverless.modules.worker_state.Job.id", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.worker_state.Job.input", [273, 18.807]], ["names/runpod.serverless.modules.worker_state.Job.input", [273, 3.875]], ["qname/runpod.serverless.modules.worker_state.Job.input", [378, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Job.input", []], ["kind/runpod.serverless.modules.worker_state.Job.input", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.worker_state.Job.webhook", [372, 23.421]], ["names/runpod.serverless.modules.worker_state.Job.webhook", [372, 4.826]], ["qname/runpod.serverless.modules.worker_state.Job.webhook", [379, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Job.webhook", []], ["kind/runpod.serverless.modules.worker_state.Job.webhook", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.worker_state.Job.__eq__", [380, 34.496]], ["names/runpod.serverless.modules.worker_state.Job.__eq__", [381, 7.108]], ["qname/runpod.serverless.modules.worker_state.Job.__eq__", [382, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Job.__eq__", []], ["kind/runpod.serverless.modules.worker_state.Job.__eq__", [326, -1.676]], ["name/runpod.serverless.modules.worker_state.Job.__hash__", [383, 34.496]], ["names/runpod.serverless.modules.worker_state.Job.__hash__", [384, 7.108]], ["qname/runpod.serverless.modules.worker_state.Job.__hash__", [385, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Job.__hash__", []], ["kind/runpod.serverless.modules.worker_state.Job.__hash__", [326, -1.676]], ["name/runpod.serverless.modules.worker_state.Job.__str__", [386, 29.413]], ["names/runpod.serverless.modules.worker_state.Job.__str__", [387, 4.702]], ["qname/runpod.serverless.modules.worker_state.Job.__str__", [388, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Job.__str__", []], ["kind/runpod.serverless.modules.worker_state.Job.__str__", [326, -1.676]], ["name/runpod.serverless.modules.worker_state.Jobs", [389, 46.843]], ["names/runpod.serverless.modules.worker_state.Jobs", [389, 9.651]], ["qname/runpod.serverless.modules.worker_state.Jobs", [390, 22.998]], ["docstring/runpod.serverless.modules.worker_state.Jobs", [174, 3.656, 239, 9.994, 391, 12.912, 392, 7.817]], ["kind/runpod.serverless.modules.worker_state.Jobs", [143, -4.439]], ["name/runpod.serverless.modules.worker_state.Jobs._instance", [393, 31.431]], ["names/runpod.serverless.modules.worker_state.Jobs._instance", [320, 2.497]], ["qname/runpod.serverless.modules.worker_state.Jobs._instance", [394, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Jobs._instance", []], ["kind/runpod.serverless.modules.worker_state.Jobs._instance", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.worker_state.Jobs.jobs", [389, 23.421]], ["names/runpod.serverless.modules.worker_state.Jobs.jobs", [389, 4.826]], ["qname/runpod.serverless.modules.worker_state.Jobs.jobs", [395, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Jobs.jobs", []], ["kind/runpod.serverless.modules.worker_state.Jobs.jobs", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.worker_state.Jobs.__new__", [323, 27.905]], ["names/runpod.serverless.modules.worker_state.Jobs.__new__", [324, 4.486]], ["qname/runpod.serverless.modules.worker_state.Jobs.__new__", [396, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Jobs.__new__", []], ["kind/runpod.serverless.modules.worker_state.Jobs.__new__", [326, -1.676]], ["name/runpod.serverless.modules.worker_state.Jobs.add_job", [397, 34.496]], ["names/runpod.serverless.modules.worker_state.Jobs.add_job", [174, 1.585, 398, 3.615]], ["qname/runpod.serverless.modules.worker_state.Jobs.add_job", [399, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Jobs.add_job", [110, 3.366, 174, 2.42, 398, 4.169]], ["kind/runpod.serverless.modules.worker_state.Jobs.add_job", [326, -1.676]], ["name/runpod.serverless.modules.worker_state.Jobs.remove_job", [400, 34.496]], ["names/runpod.serverless.modules.worker_state.Jobs.remove_job", [174, 1.585, 401, 5.599]], ["qname/runpod.serverless.modules.worker_state.Jobs.remove_job", [402, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Jobs.remove_job", [110, 3.366, 174, 2.42, 403, 5.223]], ["kind/runpod.serverless.modules.worker_state.Jobs.remove_job", [326, -1.676]], ["name/runpod.serverless.modules.worker_state.Jobs.get_job", [404, 31.431]], ["names/runpod.serverless.modules.worker_state.Jobs.get_job", [174, 1.585, 241, 2.439]], ["qname/runpod.serverless.modules.worker_state.Jobs.get_job", [405, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Jobs.get_job", [109, 1.609, 160, 2.337, 174, 1.287, 177, 2.751, 181, 3.174, 247, 2.066, 406, 3.174, 407, 4.141, 408, 4.545]], ["kind/runpod.serverless.modules.worker_state.Jobs.get_job", [326, -1.676]], ["name/runpod.serverless.modules.worker_state.Jobs.get_job_list", [409, 34.496]], ["names/runpod.serverless.modules.worker_state.Jobs.get_job_list", [110, 2.408, 174, 1.307, 241, 2.012]], ["qname/runpod.serverless.modules.worker_state.Jobs.get_job_list", [410, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Jobs.get_job_list", [109, 2.286, 110, 3.366, 174, 1.828, 370, 4.649]], ["kind/runpod.serverless.modules.worker_state.Jobs.get_job_list", [326, -1.676]], ["name/runpod.serverless.modules.worker_state.Jobs.get_job_count", [411, 34.496]], ["names/runpod.serverless.modules.worker_state.Jobs.get_job_count", [174, 1.307, 241, 2.012, 351, 4.208]], ["qname/runpod.serverless.modules.worker_state.Jobs.get_job_count", [412, 11.499]], ["docstring/runpod.serverless.modules.worker_state.Jobs.get_job_count", [109, 2.496, 174, 1.996, 413, 4.663]], ["kind/runpod.serverless.modules.worker_state.Jobs.get_job_count", [326, -1.676]], ["name/runpod.serverless.modules.rp_tips.log", [187, 15.683]], ["names/runpod.serverless.modules.rp_tips.log", [187, 3.231]], ["qname/runpod.serverless.modules.rp_tips.log", [414, 11.499]], ["docstring/runpod.serverless.modules.rp_tips.log", []], ["kind/runpod.serverless.modules.rp_tips.log", [301, -1.552]], ["name/runpod.serverless.modules.rp_tips.check_return_size", [415, 34.496]], ["names/runpod.serverless.modules.rp_tips.check_return_size", [109, 1.635, 314, 2.692, 416, 3.736]], ["qname/runpod.serverless.modules.rp_tips.check_return_size", [417, 11.499]], ["docstring/runpod.serverless.modules.rp_tips.check_return_size", [109, 1.439, 160, 2.089, 279, 2.624, 314, 2.369, 416, 4.976, 418, 4.064, 419, 4.064, 420, 4.064, 421, 4.064, 422, 3.145]], ["kind/runpod.serverless.modules.rp_tips.check_return_size", [62, -1.166]], ["name/runpod.serverless.modules.rp_job.JOB_GET_URL", [423, 34.496]], ["names/runpod.serverless.modules.rp_job.JOB_GET_URL", [174, 1.307, 241, 2.012, 424, 2.443]], ["qname/runpod.serverless.modules.rp_job.JOB_GET_URL", [425, 11.499]], ["docstring/runpod.serverless.modules.rp_job.JOB_GET_URL", []], ["kind/runpod.serverless.modules.rp_job.JOB_GET_URL", [307, -2.441]], ["name/runpod.serverless.modules.rp_job.log", [187, 15.683]], ["names/runpod.serverless.modules.rp_job.log", [187, 3.231]], ["qname/runpod.serverless.modules.rp_job.log", [426, 11.499]], ["docstring/runpod.serverless.modules.rp_job.log", []], ["kind/runpod.serverless.modules.rp_job.log", [301, -1.552]], ["name/runpod.serverless.modules.rp_job.job_list", [427, 26.701]], ["names/runpod.serverless.modules.rp_job.job_list", [110, 2.919, 174, 1.585]], ["qname/runpod.serverless.modules.rp_job.job_list", [428, 11.499]], ["docstring/runpod.serverless.modules.rp_job.job_list", []], ["kind/runpod.serverless.modules.rp_job.job_list", [301, -1.552]], ["name/runpod.serverless.modules.rp_job._job_get_url", [429, 34.496]], ["names/runpod.serverless.modules.rp_job._job_get_url", [174, 1.307, 241, 2.012, 424, 2.443]], ["qname/runpod.serverless.modules.rp_job._job_get_url", [430, 11.499]], ["docstring/runpod.serverless.modules.rp_job._job_get_url", [5, 2.735, 62, 0.408, 109, 0.757, 145, 2.795, 172, 3.144, 225, 1.204, 387, 1.415, 424, 2.536, 431, 3.659, 432, 1.824, 433, 1.949, 434, 1.824, 435, 2.139, 436, 2.139, 437, 2.139, 438, 2.139, 439, 1.593]], ["kind/runpod.serverless.modules.rp_job._job_get_url", [62, -1.166]], ["name/runpod.serverless.modules.rp_job.get_job", [404, 31.431]], ["names/runpod.serverless.modules.rp_job.get_job", [174, 1.585, 241, 2.439]], ["qname/runpod.serverless.modules.rp_job.get_job", [440, 11.499]], ["docstring/runpod.serverless.modules.rp_job.get_job", [160, 1.1, 172, 1.185, 174, 1.357, 181, 1.494, 333, 1.494, 367, 1.115, 403, 1.73, 441, 1.54, 442, 2.139, 443, 1.949, 444, 2.139, 445, 1.655, 446, 3.334, 447, 1.381, 448, 3.659, 449, 1.949, 450, 4.795, 451, 1.949, 452, 1.824, 453, 2.139, 454, 2.139, 455, 2.139]], ["kind/runpod.serverless.modules.rp_job.get_job", [62, -1.166]], ["name/runpod.serverless.modules.rp_job.run_job", [456, 34.496]], ["names/runpod.serverless.modules.rp_job.run_job", [127, 2.276, 174, 1.585]], ["qname/runpod.serverless.modules.rp_job.run_job", [457, 11.499]], ["docstring/runpod.serverless.modules.rp_job.run_job", [62, 0.544, 109, 1.011, 127, 2.399, 160, 2.395, 166, 3.81, 174, 1.928, 367, 1.488, 458, 2.601, 459, 2.309, 460, 2.855, 461, 1.635]], ["kind/runpod.serverless.modules.rp_job.run_job", [62, -1.166]], ["name/runpod.serverless.modules.rp_job.run_job_generator", [462, 34.496]], ["names/runpod.serverless.modules.rp_job.run_job_generator", [127, 1.877, 174, 1.307, 463, 4.208]], ["qname/runpod.serverless.modules.rp_job.run_job_generator", [464, 11.499]], ["docstring/runpod.serverless.modules.rp_job.run_job_generator", [127, 1.744, 160, 2.206, 174, 1.215, 373, 3.207, 465, 3.608, 466, 2.237, 467, 3.658, 468, 4.291]], ["kind/runpod.serverless.modules.rp_job.run_job_generator", [62, -1.166]], ["name/runpod.serverless.core.log", [187, 15.683]], ["names/runpod.serverless.core.log", [187, 3.231]], ["qname/runpod.serverless.core.log", [469, 11.499]], ["docstring/runpod.serverless.core.log", []], ["kind/runpod.serverless.core.log", [301, -1.552]], ["name/runpod.serverless.core.CGetJobResult", [470, 68.993]], ["names/runpod.serverless.core.CGetJobResult", [174, 2.615, 461, 5.29, 471, 9.237]], ["qname/runpod.serverless.core.CGetJobResult", [472, 22.998]], ["docstring/runpod.serverless.core.CGetJobResult", [49, 4.797, 151, 4.797, 214, 5.403, 413, 3.923, 461, 3.396, 473, 9.608, 474, 5.93, 475, 5.93, 476, 5.93, 477, 5.403, 478, 5.93, 479, 5.93, 480, 5.93, 481, 5.403, 482, 5.403, 483, 5.93, 484, 5.93]], ["kind/runpod.serverless.core.CGetJobResult", [143, -4.439]], ["name/runpod.serverless.core.CGetJobResult._fields_", [485, 34.496]], ["names/runpod.serverless.core.CGetJobResult._fields_", [486, 7.108]], ["qname/runpod.serverless.core.CGetJobResult._fields_", [487, 11.499]], ["docstring/runpod.serverless.core.CGetJobResult._fields_", []], ["kind/runpod.serverless.core.CGetJobResult._fields_", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.core.CGetJobResult.__str__", [386, 29.413]], ["names/runpod.serverless.core.CGetJobResult.__str__", [387, 4.702]], ["qname/runpod.serverless.core.CGetJobResult.__str__", [488, 11.499]], ["docstring/runpod.serverless.core.CGetJobResult.__str__", []], ["kind/runpod.serverless.core.CGetJobResult.__str__", [326, -1.676]], ["name/runpod.serverless.core.Hook", [489, 62.863]], ["names/runpod.serverless.core.Hook", [489, 12.952]], ["qname/runpod.serverless.core.Hook", [490, 22.998]], ["docstring/runpod.serverless.core.Hook", [143, 4.685, 318, 11.01, 491, 11.765, 492, 12.912]], ["kind/runpod.serverless.core.Hook", [143, -4.439]], ["name/runpod.serverless.core.Hook._instance", [393, 31.431]], ["names/runpod.serverless.core.Hook._instance", [320, 2.497]], ["qname/runpod.serverless.core.Hook._instance", [493, 11.499]], ["docstring/runpod.serverless.core.Hook._instance", []], ["kind/runpod.serverless.core.Hook._instance", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.core.Hook._get_jobs", [494, 34.496]], ["names/runpod.serverless.core.Hook._get_jobs", [241, 2.439, 389, 3.801]], ["qname/runpod.serverless.core.Hook._get_jobs", [495, 11.499]], ["docstring/runpod.serverless.core.Hook._get_jobs", []], ["kind/runpod.serverless.core.Hook._get_jobs", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.core.Hook._progress_update", [496, 34.496]], ["names/runpod.serverless.core.Hook._progress_update", [228, 3.91, 497, 4.032]], ["qname/runpod.serverless.core.Hook._progress_update", [498, 11.499]], ["docstring/runpod.serverless.core.Hook._progress_update", []], ["kind/runpod.serverless.core.Hook._progress_update", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.core.Hook._stream_output", [499, 34.496]], ["names/runpod.serverless.core.Hook._stream_output", [373, 2.802, 466, 2.919]], ["qname/runpod.serverless.core.Hook._stream_output", [500, 11.499]], ["docstring/runpod.serverless.core.Hook._stream_output", []], ["kind/runpod.serverless.core.Hook._stream_output", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.core.Hook._post_output", [501, 34.496]], ["names/runpod.serverless.core.Hook._post_output", [373, 2.802, 502, 4.032]], ["qname/runpod.serverless.core.Hook._post_output", [503, 11.499]], ["docstring/runpod.serverless.core.Hook._post_output", []], ["kind/runpod.serverless.core.Hook._post_output", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.core.Hook._finish_stream", [504, 34.496]], ["names/runpod.serverless.core.Hook._finish_stream", [466, 2.919, 505, 5.101]], ["qname/runpod.serverless.core.Hook._finish_stream", [506, 11.499]], ["docstring/runpod.serverless.core.Hook._finish_stream", []], ["kind/runpod.serverless.core.Hook._finish_stream", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.core.Hook.__new__", [323, 27.905]], ["names/runpod.serverless.core.Hook.__new__", [324, 4.486]], ["qname/runpod.serverless.core.Hook.__new__", [507, 11.499]], ["docstring/runpod.serverless.core.Hook.__new__", []], ["kind/runpod.serverless.core.Hook.__new__", [326, -1.676]], ["name/runpod.serverless.core.Hook.__init__", [374, 20.109]], ["names/runpod.serverless.core.Hook.__init__", [375, 4.143]], ["qname/runpod.serverless.core.Hook.__init__", [508, 11.499]], ["docstring/runpod.serverless.core.Hook.__init__", []], ["kind/runpod.serverless.core.Hook.__init__", [326, -1.676]], ["name/runpod.serverless.core.Hook.rust_so_path", [509, 34.496]], ["names/runpod.serverless.core.Hook.rust_so_path", [510, 4.208, 511, 4.618, 512, 3.225]], ["qname/runpod.serverless.core.Hook.rust_so_path", [513, 11.499]], ["docstring/runpod.serverless.core.Hook.rust_so_path", []], ["kind/runpod.serverless.core.Hook.rust_so_path", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.core.Hook.rust_crate_version", [514, 34.496]], ["names/runpod.serverless.core.Hook.rust_crate_version", [295, 3.136, 510, 4.208, 515, 4.208]], ["qname/runpod.serverless.core.Hook.rust_crate_version", [516, 11.499]], ["docstring/runpod.serverless.core.Hook.rust_crate_version", []], ["kind/runpod.serverless.core.Hook.rust_crate_version", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.core.Hook._initialized", [517, 34.496]], ["names/runpod.serverless.core.Hook._initialized", [518, 7.108]], ["qname/runpod.serverless.core.Hook._initialized", [519, 11.499]], ["docstring/runpod.serverless.core.Hook._initialized", []], ["kind/runpod.serverless.core.Hook._initialized", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.core.Hook._json_serialize_job_data", [520, 34.496]], ["names/runpod.serverless.core.Hook._json_serialize_job_data", [174, 1.113, 521, 3.042, 522, 3.93, 523, 2.744]], ["qname/runpod.serverless.core.Hook._json_serialize_job_data", [524, 11.499]], ["docstring/runpod.serverless.core.Hook._json_serialize_job_data", []], ["kind/runpod.serverless.core.Hook._json_serialize_job_data", [326, -1.676]], ["name/runpod.serverless.core.Hook.get_jobs", [525, 31.431]], ["names/runpod.serverless.core.Hook.get_jobs", [241, 2.439, 389, 3.801]], ["qname/runpod.serverless.core.Hook.get_jobs", [526, 11.499]], ["docstring/runpod.serverless.core.Hook.get_jobs", [109, 1.711, 110, 2.519, 174, 2.549, 366, 3.599, 441, 3.479]], ["kind/runpod.serverless.core.Hook.get_jobs", [326, -1.676]], ["name/runpod.serverless.core.Hook.progress_update", [527, 31.431]], ["names/runpod.serverless.core.Hook.progress_update", [228, 3.91, 497, 4.032]], ["qname/runpod.serverless.core.Hook.progress_update", [528, 11.499]], ["docstring/runpod.serverless.core.Hook.progress_update", [5, 2.87, 225, 3.353, 228, 4.159, 245, 4.288, 529, 5.078]], ["kind/runpod.serverless.core.Hook.progress_update", [326, -1.676]], ["name/runpod.serverless.core.Hook.stream_output", [530, 34.496]], ["names/runpod.serverless.core.Hook.stream_output", [373, 2.802, 466, 2.919]], ["qname/runpod.serverless.core.Hook.stream_output", [531, 11.499]], ["docstring/runpod.serverless.core.Hook.stream_output", [5, 2.663, 225, 3.112, 461, 3.165, 466, 2.882, 529, 4.712, 532, 5.527]], ["kind/runpod.serverless.core.Hook.stream_output", [326, -1.676]], ["name/runpod.serverless.core.Hook.post_output", [533, 34.496]], ["names/runpod.serverless.core.Hook.post_output", [373, 2.802, 502, 4.032]], ["qname/runpod.serverless.core.Hook.post_output", [534, 11.499]], ["docstring/runpod.serverless.core.Hook.post_output", [5, 1.86, 109, 1.367, 174, 1.093, 225, 2.173, 333, 2.695, 461, 2.21, 529, 3.291, 535, 3.859, 536, 3.859, 537, 3.516, 538, 2.987, 539, 2.987]], ["kind/runpod.serverless.core.Hook.post_output", [326, -1.676]], ["name/runpod.serverless.core.Hook.finish_stream", [540, 34.496]], ["names/runpod.serverless.core.Hook.finish_stream", [466, 2.919, 505, 5.101]], ["qname/runpod.serverless.core.Hook.finish_stream", [541, 11.499]], ["docstring/runpod.serverless.core.Hook.finish_stream", [174, 1.459, 256, 3.99, 433, 4.697, 441, 3.712, 461, 2.952, 466, 2.688, 481, 4.697]], ["kind/runpod.serverless.core.Hook.finish_stream", [326, -1.676]], ["name/runpod.serverless.core._process_job", [542, 31.431]], ["names/runpod.serverless.core._process_job", [174, 1.585, 439, 4.171]], ["qname/runpod.serverless.core._process_job", [543, 11.499]], ["docstring/runpod.serverless.core._process_job", [174, 1.996, 439, 5.251, 544, 5.456]], ["kind/runpod.serverless.core._process_job", [62, -1.166]], ["name/runpod.serverless.core.run", [127, 14.023]], ["names/runpod.serverless.core.run", [127, 2.889]], ["qname/runpod.serverless.core.run", [545, 11.499]], ["docstring/runpod.serverless.core.run", [27, 2.32, 59, 2.044, 62, 0.668, 109, 1.242, 127, 1.425, 149, 1.755, 166, 2.264, 174, 0.993, 363, 2.123, 367, 1.828, 461, 2.008, 546, 3.195, 547, 3.507, 548, 3.507]], ["kind/runpod.serverless.core.run", [62, -1.166]], ["name/runpod.serverless.core.main", [147, 26.701]], ["names/runpod.serverless.core.main", [147, 5.501]], ["qname/runpod.serverless.core.main", [549, 11.499]], ["docstring/runpod.serverless.core.main", [127, 2.421, 130, 4.61, 149, 2.981, 550, 4.61, 551, 4.61]], ["kind/runpod.serverless.core.main", [62, -1.166]], ["name/runpod.user_agent.construct_user_agent", [552, 34.496]], ["names/runpod.user_agent.construct_user_agent", [38, 2.343, 292, 3.575, 434, 3.938]], ["qname/runpod.user_agent.construct_user_agent", [553, 11.499]], ["docstring/runpod.user_agent.construct_user_agent", [0, 1.701, 38, 1.504, 138, 3.102, 292, 2.295, 294, 2.701, 370, 2.135, 434, 2.528, 465, 1.669, 554, 2.013, 555, 2.965, 556, 2.965, 557, 2.965, 558, 2.965, 559, 2.965, 560, 2.965, 561, 2.965]], ["kind/runpod.user_agent.construct_user_agent", [62, -1.166]], ["name/runpod.user_agent.USER_AGENT", [291, 31.431]], ["names/runpod.user_agent.USER_AGENT", [38, 2.84, 292, 4.334]], ["qname/runpod.user_agent.USER_AGENT", [562, 11.499]], ["docstring/runpod.user_agent.USER_AGENT", []], ["kind/runpod.user_agent.USER_AGENT", [307, -2.441]], ["name/runpod.serverless.modules.rp_local.log", [187, 15.683]], ["names/runpod.serverless.modules.rp_local.log", [187, 3.231]], ["qname/runpod.serverless.modules.rp_local.log", [563, 11.499]], ["docstring/runpod.serverless.modules.rp_local.log", []], ["kind/runpod.serverless.modules.rp_local.log", [301, -1.552]], ["name/runpod.serverless.modules.rp_local.run_local", [564, 34.496]], ["names/runpod.serverless.modules.rp_local.run_local", [127, 2.276, 177, 3.39]], ["qname/runpod.serverless.modules.rp_local.run_local", [565, 11.499]], ["docstring/runpod.serverless.modules.rp_local.run_local", [127, 2.866, 149, 3.528, 177, 4.268]], ["kind/runpod.serverless.modules.rp_local.run_local", [62, -1.166]], ["name/runpod.serverless.modules.rp_handler.is_generator", [566, 34.496]], ["names/runpod.serverless.modules.rp_handler.is_generator", [357, 4.032, 463, 5.101]], ["qname/runpod.serverless.modules.rp_handler.is_generator", [567, 11.499]], ["docstring/runpod.serverless.modules.rp_handler.is_generator", [62, 1.23, 166, 4.169, 314, 3.764, 465, 3.635]], ["kind/runpod.serverless.modules.rp_handler.is_generator", [62, -1.166]], ["name/runpod.serverless.modules.rp_ping.log", [187, 15.683]], ["names/runpod.serverless.modules.rp_ping.log", [187, 3.231]], ["qname/runpod.serverless.modules.rp_ping.log", [568, 11.499]], ["docstring/runpod.serverless.modules.rp_ping.log", []], ["kind/runpod.serverless.modules.rp_ping.log", [301, -1.552]], ["name/runpod.serverless.modules.rp_ping.jobs", [389, 23.421]], ["names/runpod.serverless.modules.rp_ping.jobs", [389, 4.826]], ["qname/runpod.serverless.modules.rp_ping.jobs", [569, 11.499]], ["docstring/runpod.serverless.modules.rp_ping.jobs", []], ["kind/runpod.serverless.modules.rp_ping.jobs", [301, -1.552]], ["name/runpod.serverless.modules.rp_ping.Heartbeat", [223, 42.626]], ["names/runpod.serverless.modules.rp_ping.Heartbeat", [223, 8.783]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat", [570, 22.998]], ["docstring/runpod.serverless.modules.rp_ping.Heartbeat", [0, 4.572, 163, 7.668, 223, 7.978, 225, 7.27]], ["kind/runpod.serverless.modules.rp_ping.Heartbeat", [143, -4.439]], ["name/runpod.serverless.modules.rp_ping.Heartbeat.PING_URL", [571, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat.PING_URL", [220, 3.801, 424, 2.962]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat.PING_URL", [572, 11.499]], ["docstring/runpod.serverless.modules.rp_ping.Heartbeat.PING_URL", []], ["kind/runpod.serverless.modules.rp_ping.Heartbeat.PING_URL", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL", [573, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL", [220, 3.801, 574, 5.599]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL", [575, 11.499]], ["docstring/runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL", []], ["kind/runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL", [307, -2.441]], ["name/runpod.serverless.modules.rp_ping.Heartbeat._thread_started", [576, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat._thread_started", [577, 4.529, 578, 5.599]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat._thread_started", [579, 11.499]], ["docstring/runpod.serverless.modules.rp_ping.Heartbeat._thread_started", []], ["kind/runpod.serverless.modules.rp_ping.Heartbeat._thread_started", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_ping.Heartbeat.__init__", [374, 20.109]], ["names/runpod.serverless.modules.rp_ping.Heartbeat.__init__", [375, 4.143]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat.__init__", [580, 11.499]], ["docstring/runpod.serverless.modules.rp_ping.Heartbeat.__init__", [143, 2.557, 223, 4.355, 581, 5.456]], ["kind/runpod.serverless.modules.rp_ping.Heartbeat.__init__", [326, -1.676]], ["name/runpod.serverless.modules.rp_ping.Heartbeat._session", [582, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat._session", [447, 4.59]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat._session", [583, 11.499]], ["docstring/runpod.serverless.modules.rp_ping.Heartbeat._session", []], ["kind/runpod.serverless.modules.rp_ping.Heartbeat._session", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.rp_ping.Heartbeat.start_ping", [584, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat.start_ping", [152, 2.962, 220, 3.801]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat.start_ping", [585, 11.499]], ["docstring/runpod.serverless.modules.rp_ping.Heartbeat.start_ping", [0, 2.109, 163, 3.536, 220, 4.043, 223, 3.679, 225, 3.353]], ["kind/runpod.serverless.modules.rp_ping.Heartbeat.start_ping", [326, -1.676]], ["name/runpod.serverless.modules.rp_ping.Heartbeat.ping_loop", [586, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat.ping_loop", [220, 3.801, 551, 4.334]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat.ping_loop", [587, 11.499]], ["docstring/runpod.serverless.modules.rp_ping.Heartbeat.ping_loop", [0, 2.109, 163, 3.536, 220, 4.043, 223, 3.679, 225, 3.353]], ["kind/runpod.serverless.modules.rp_ping.Heartbeat.ping_loop", [326, -1.676]], ["name/runpod.serverless.modules.rp_ping.Heartbeat._send_ping", [588, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat._send_ping", [220, 3.801, 225, 3.152]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat._send_ping", [589, 11.499]], ["docstring/runpod.serverless.modules.rp_ping.Heartbeat._send_ping", [0, 2.286, 163, 3.834, 223, 3.989, 225, 3.635]], ["kind/runpod.serverless.modules.rp_ping.Heartbeat._send_ping", [326, -1.676]], ["name/runpod.serverless.modules.rp_scale.log", [187, 15.683]], ["names/runpod.serverless.modules.rp_scale.log", [187, 3.231]], ["qname/runpod.serverless.modules.rp_scale.log", [590, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.log", []], ["kind/runpod.serverless.modules.rp_scale.log", [301, -1.552]], ["name/runpod.serverless.modules.rp_scale.job_list", [427, 26.701]], ["names/runpod.serverless.modules.rp_scale.job_list", [110, 2.919, 174, 1.585]], ["qname/runpod.serverless.modules.rp_scale.job_list", [591, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.job_list", []], ["kind/runpod.serverless.modules.rp_scale.job_list", [301, -1.552]], ["name/runpod.serverless.modules.rp_scale._default_concurrency_modifier", [592, 34.496]], ["names/runpod.serverless.modules.rp_scale._default_concurrency_modifier", [203, 3.326, 593, 3.736, 594, 4.208]], ["qname/runpod.serverless.modules.rp_scale._default_concurrency_modifier", [595, 11.499]], ["docstring/runpod.serverless.modules.rp_scale._default_concurrency_modifier", [62, 0.565, 109, 1.701, 203, 2.135, 261, 2.701, 367, 1.546, 392, 3.666, 596, 5.39, 597, 2.701, 598, 2.965, 599, 2.965, 600, 4.804]], ["kind/runpod.serverless.modules.rp_scale._default_concurrency_modifier", [62, -1.166]], ["name/runpod.serverless.modules.rp_scale.JobScaler", [601, 68.993]], ["names/runpod.serverless.modules.rp_scale.JobScaler", [174, 3.17, 602, 9.547]], ["qname/runpod.serverless.modules.rp_scale.JobScaler", [603, 22.998]], ["docstring/runpod.serverless.modules.rp_scale.JobScaler", [143, 3.505, 172, 5.351, 174, 2.735, 224, 7.816, 231, 8.238, 413, 6.392, 596, 7.478, 602, 8.238]], ["kind/runpod.serverless.modules.rp_scale.JobScaler", [143, -4.439]], ["name/runpod.serverless.modules.rp_scale.JobScaler.__init__", [374, 20.109]], ["names/runpod.serverless.modules.rp_scale.JobScaler.__init__", [375, 4.143]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.__init__", [604, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.JobScaler.__init__", []], ["kind/runpod.serverless.modules.rp_scale.JobScaler.__init__", [326, -1.676]], ["name/runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier", [605, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier", [593, 4.529, 594, 5.101]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier", [606, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier", []], ["kind/runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks", [607, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks", [174, 1.113, 241, 1.712, 608, 3.93, 609, 3.93]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks", [610, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks", []], ["kind/runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.rp_scale.JobScaler.job_history", [611, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.job_history", [174, 1.585, 612, 5.599]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.job_history", [613, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.JobScaler.job_history", []], ["kind/runpod.serverless.modules.rp_scale.JobScaler.job_history", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.rp_scale.JobScaler.current_concurrency", [614, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.current_concurrency", [392, 3.39, 593, 4.529]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.current_concurrency", [615, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.JobScaler.current_concurrency", []], ["kind/runpod.serverless.modules.rp_scale.JobScaler.current_concurrency", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.rp_scale.JobScaler._is_alive", [616, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler._is_alive", [357, 4.032, 617, 5.101]], ["qname/runpod.serverless.modules.rp_scale.JobScaler._is_alive", [618, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.JobScaler._is_alive", []], ["kind/runpod.serverless.modules.rp_scale.JobScaler._is_alive", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.rp_scale.JobScaler.is_alive", [619, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.is_alive", [357, 4.032, 617, 5.101]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.is_alive", [620, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.JobScaler.is_alive", [109, 2.286, 149, 3.232, 452, 5.505, 621, 6.456]], ["kind/runpod.serverless.modules.rp_scale.JobScaler.is_alive", [326, -1.676]], ["name/runpod.serverless.modules.rp_scale.JobScaler.kill_worker", [622, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.kill_worker", [149, 2.802, 623, 5.101]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.kill_worker", [624, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.JobScaler.kill_worker", [149, 3.528, 452, 6.01, 623, 6.423]], ["kind/runpod.serverless.modules.rp_scale.JobScaler.kill_worker", [326, -1.676]], ["name/runpod.serverless.modules.rp_scale.JobScaler.get_jobs", [525, 31.431]], ["names/runpod.serverless.modules.rp_scale.JobScaler.get_jobs", [241, 2.439, 389, 3.801]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.get_jobs", [625, 11.499]], ["docstring/runpod.serverless.modules.rp_scale.JobScaler.get_jobs", [103, 4.288, 109, 1.187, 110, 1.749, 160, 1.724, 163, 3.148, 172, 1.857, 174, 1.501, 523, 2.342, 596, 2.596, 626, 3.056, 627, 3.056, 628, 3.354]], ["kind/runpod.serverless.modules.rp_scale.JobScaler.get_jobs", [326, -1.676]], ["name/runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE", [629, 34.496]], ["names/runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE", [174, 1.113, 424, 2.079, 630, 3.581, 631, 2.83]], ["qname/runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE", [632, 11.499]], ["docstring/runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE", []], ["kind/runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE", [307, -2.441]], ["name/runpod.serverless.modules.rp_http.JOB_DONE_URL", [633, 34.496]], ["names/runpod.serverless.modules.rp_http.JOB_DONE_URL", [174, 1.307, 424, 2.443, 630, 4.208]], ["qname/runpod.serverless.modules.rp_http.JOB_DONE_URL", [634, 11.499]], ["docstring/runpod.serverless.modules.rp_http.JOB_DONE_URL", []], ["kind/runpod.serverless.modules.rp_http.JOB_DONE_URL", [307, -2.441]], ["name/runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE", [635, 34.496]], ["names/runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE", [174, 1.113, 424, 2.079, 466, 2.049, 631, 2.83]], ["qname/runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE", [636, 11.499]], ["docstring/runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE", []], ["kind/runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE", [307, -2.441]], ["name/runpod.serverless.modules.rp_http.JOB_STREAM_URL", [637, 34.496]], ["names/runpod.serverless.modules.rp_http.JOB_STREAM_URL", [174, 1.307, 424, 2.443, 466, 2.408]], ["qname/runpod.serverless.modules.rp_http.JOB_STREAM_URL", [638, 11.499]], ["docstring/runpod.serverless.modules.rp_http.JOB_STREAM_URL", []], ["kind/runpod.serverless.modules.rp_http.JOB_STREAM_URL", [307, -2.441]], ["name/runpod.serverless.modules.rp_http.log", [187, 15.683]], ["names/runpod.serverless.modules.rp_http.log", [187, 3.231]], ["qname/runpod.serverless.modules.rp_http.log", [639, 11.499]], ["docstring/runpod.serverless.modules.rp_http.log", []], ["kind/runpod.serverless.modules.rp_http.log", [301, -1.552]], ["name/runpod.serverless.modules.rp_http.job_list", [427, 26.701]], ["names/runpod.serverless.modules.rp_http.job_list", [110, 2.919, 174, 1.585]], ["qname/runpod.serverless.modules.rp_http.job_list", [640, 11.499]], ["docstring/runpod.serverless.modules.rp_http.job_list", []], ["kind/runpod.serverless.modules.rp_http.job_list", [301, -1.552]], ["name/runpod.serverless.modules.rp_http._transmit", [641, 34.496]], ["names/runpod.serverless.modules.rp_http._transmit", [642, 6.476]], ["qname/runpod.serverless.modules.rp_http._transmit", [643, 11.499]], ["docstring/runpod.serverless.modules.rp_http._transmit", [13, 4.043, 461, 3.411, 502, 4.288, 642, 5.426, 644, 5.955]], ["kind/runpod.serverless.modules.rp_http._transmit", [62, -1.166]], ["name/runpod.serverless.modules.rp_http._handle_result", [645, 34.496]], ["names/runpod.serverless.modules.rp_http._handle_result", [461, 3.206, 646, 5.599]], ["qname/runpod.serverless.modules.rp_http._handle_result", [647, 11.499]], ["docstring/runpod.serverless.modules.rp_http._handle_result", [62, 1.053, 83, 4.278, 171, 4.117, 225, 3.112, 461, 3.165, 466, 2.882]], ["kind/runpod.serverless.modules.rp_http._handle_result", [62, -1.166]], ["name/runpod.serverless.modules.rp_http.send_result", [648, 34.496]], ["names/runpod.serverless.modules.rp_http.send_result", [225, 3.152, 461, 3.206]], ["qname/runpod.serverless.modules.rp_http.send_result", [649, 11.499]], ["docstring/runpod.serverless.modules.rp_http.send_result", [109, 2.496, 174, 1.996, 461, 4.037]], ["kind/runpod.serverless.modules.rp_http.send_result", [62, -1.166]], ["name/runpod.serverless.modules.rp_http.stream_result", [650, 34.496]], ["names/runpod.serverless.modules.rp_http.stream_result", [461, 3.206, 466, 2.919]], ["qname/runpod.serverless.modules.rp_http.stream_result", [651, 11.499]], ["docstring/runpod.serverless.modules.rp_http.stream_result", [109, 2.286, 174, 1.828, 461, 3.697, 466, 3.366]], ["kind/runpod.serverless.modules.rp_http.stream_result", [62, -1.166]], ["name/runpod.serverless.utils.rp_download.HEADERS", [652, 24.089]], ["names/runpod.serverless.utils.rp_download.HEADERS", [652, 4.963]], ["qname/runpod.serverless.utils.rp_download.HEADERS", [653, 11.499]], ["docstring/runpod.serverless.utils.rp_download.HEADERS", []], ["kind/runpod.serverless.utils.rp_download.HEADERS", [307, -2.441]], ["name/runpod.serverless.utils.rp_download.calculate_chunk_size", [654, 34.496]], ["names/runpod.serverless.utils.rp_download.calculate_chunk_size", [416, 3.736, 655, 4.618, 656, 4.208]], ["qname/runpod.serverless.utils.rp_download.calculate_chunk_size", [657, 11.499]], ["docstring/runpod.serverless.utils.rp_download.calculate_chunk_size", [72, 2.541, 416, 6.222, 656, 5.036, 658, 5.527, 659, 3.752]], ["kind/runpod.serverless.utils.rp_download.calculate_chunk_size", [62, -1.166]], ["name/runpod.serverless.utils.rp_download.download_files_from_urls", [660, 34.496]], ["names/runpod.serverless.utils.rp_download.download_files_from_urls", [270, 2.928, 661, 3.042, 662, 3.581, 663, 3.93]], ["qname/runpod.serverless.utils.rp_download.download_files_from_urls", [664, 11.499]], ["docstring/runpod.serverless.utils.rp_download.download_files_from_urls", [72, 2.645, 109, 0.975, 110, 2.357, 116, 2.919, 174, 0.779, 253, 1.982, 270, 3.368, 424, 2.391, 512, 1.922, 544, 2.13, 665, 2.752, 666, 2.508, 667, 2.13, 668, 2.752]], ["kind/runpod.serverless.utils.rp_download.download_files_from_urls", [62, -1.166]], ["name/runpod.serverless.utils.rp_download.file", [72, 15.86]], ["names/runpod.serverless.utils.rp_download.file", [72, 3.268]], ["qname/runpod.serverless.utils.rp_download.file", [669, 11.499]], ["docstring/runpod.serverless.utils.rp_download.file", [27, 1.131, 68, 1.035, 72, 3.231, 109, 0.605, 116, 1.104, 160, 0.879, 270, 2.244, 275, 1.558, 314, 0.997, 315, 2.89, 340, 1.458, 360, 1.324, 366, 1.274, 406, 2.104, 424, 0.905, 512, 1.194, 544, 1.324, 666, 1.558, 670, 1.71, 671, 1.71, 672, 1.71, 673, 1.458, 674, 1.71, 675, 1.104, 676, 1.71]], ["kind/runpod.serverless.utils.rp_download.file", [62, -1.166]], ["name/runpod.serverless.utils.rp_upload.logger", [183, 27.905]], ["names/runpod.serverless.utils.rp_upload.logger", [183, 5.749]], ["qname/runpod.serverless.utils.rp_upload.logger", [677, 11.499]], ["docstring/runpod.serverless.utils.rp_upload.logger", []], ["kind/runpod.serverless.utils.rp_upload.logger", [301, -1.552]], ["name/runpod.serverless.utils.rp_upload.FMT", [678, 31.431]], ["names/runpod.serverless.utils.rp_upload.FMT", [678, 6.476]], ["qname/runpod.serverless.utils.rp_upload.FMT", [679, 11.499]], ["docstring/runpod.serverless.utils.rp_upload.FMT", []], ["kind/runpod.serverless.utils.rp_upload.FMT", [307, -2.441]], ["name/runpod.serverless.utils.rp_upload.extract_region_from_url", [680, 34.496]], ["names/runpod.serverless.utils.rp_upload.extract_region_from_url", [424, 2.079, 662, 3.581, 673, 3.351, 681, 3.581]], ["qname/runpod.serverless.utils.rp_upload.extract_region_from_url", [682, 11.499]], ["docstring/runpod.serverless.utils.rp_upload.extract_region_from_url", [31, 2.401, 424, 3.415, 673, 5.505, 681, 5.883]], ["kind/runpod.serverless.utils.rp_upload.extract_region_from_url", [62, -1.166]], ["name/runpod.serverless.utils.rp_upload.get_boto_client", [683, 34.496]], ["names/runpod.serverless.utils.rp_upload.get_boto_client", [241, 2.012, 684, 4.618, 685, 3.326]], ["qname/runpod.serverless.utils.rp_upload.get_boto_client", [686, 11.499]], ["docstring/runpod.serverless.utils.rp_upload.get_boto_client", [59, 3.222, 109, 1.957, 685, 3.98, 687, 5.527, 688, 5.527, 689, 3.98]], ["kind/runpod.serverless.utils.rp_upload.get_boto_client", [62, -1.166]], ["name/runpod.serverless.utils.rp_upload.upload_image", [690, 34.496]], ["names/runpod.serverless.utils.rp_upload.upload_image", [279, 3.615, 691, 5.101]], ["qname/runpod.serverless.utils.rp_upload.upload_image", [692, 11.499]], ["docstring/runpod.serverless.utils.rp_upload.upload_image", [72, 2.738, 279, 3.845, 422, 4.61, 544, 4.61, 689, 4.288]], ["kind/runpod.serverless.utils.rp_upload.upload_image", [62, -1.166]], ["name/runpod.serverless.utils.rp_upload.files", [661, 26.701]], ["names/runpod.serverless.utils.rp_upload.files", [661, 5.501]], ["qname/runpod.serverless.utils.rp_upload.files", [693, 11.499]], ["docstring/runpod.serverless.utils.rp_upload.files", [62, 0.735, 72, 2.719, 109, 1.367, 110, 3.084, 279, 3.819, 424, 2.042, 627, 3.516, 694, 3.859, 695, 3.291]], ["kind/runpod.serverless.utils.rp_upload.files", [62, -1.166]], ["name/runpod.serverless.utils.rp_upload.bucket_upload", [696, 34.496]], ["names/runpod.serverless.utils.rp_upload.bucket_upload", [279, 3.615, 689, 4.032]], ["qname/runpod.serverless.utils.rp_upload.bucket_upload", [697, 11.499]], ["docstring/runpod.serverless.utils.rp_upload.bucket_upload", [72, 2.968, 279, 4.169, 422, 4.997, 689, 4.649]], ["kind/runpod.serverless.utils.rp_upload.bucket_upload", [62, -1.166]], ["name/runpod.serverless.utils.rp_upload.upload_file_to_bucket", [698, 34.496]], ["names/runpod.serverless.utils.rp_upload.upload_file_to_bucket", [72, 1.807, 279, 2.538, 689, 2.83, 699, 3.581]], ["qname/runpod.serverless.utils.rp_upload.upload_file_to_bucket", [700, 11.499]], ["docstring/runpod.serverless.utils.rp_upload.upload_file_to_bucket", [72, 2.221, 109, 1.711, 279, 3.119, 422, 3.739, 424, 2.555, 544, 3.739, 689, 3.479, 695, 4.119]], ["kind/runpod.serverless.utils.rp_upload.upload_file_to_bucket", [62, -1.166]], ["name/runpod.serverless.utils.rp_upload.upload_in_memory_object", [701, 34.496]], ["names/runpod.serverless.utils.rp_upload.upload_in_memory_object", [279, 2.538, 366, 2.928, 702, 3.93, 703, 3.93]], ["qname/runpod.serverless.utils.rp_upload.upload_in_memory_object", [704, 11.499]], ["docstring/runpod.serverless.utils.rp_upload.upload_in_memory_object", [109, 1.609, 279, 2.935, 366, 3.386, 422, 3.518, 424, 2.404, 477, 4.141, 689, 3.273, 695, 3.875, 705, 4.545]], ["kind/runpod.serverless.utils.rp_upload.upload_in_memory_object", [62, -1.166]], ["name/runpod.serverless.utils.rp_debugger.OS_INFO", [706, 34.496]], ["names/runpod.serverless.utils.rp_debugger.OS_INFO", [101, 4.032, 707, 5.599]], ["qname/runpod.serverless.utils.rp_debugger.OS_INFO", [708, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.OS_INFO", []], ["kind/runpod.serverless.utils.rp_debugger.OS_INFO", [307, -2.441]], ["name/runpod.serverless.utils.rp_debugger.PROCESSOR", [709, 31.431]], ["names/runpod.serverless.utils.rp_debugger.PROCESSOR", [709, 6.476]], ["qname/runpod.serverless.utils.rp_debugger.PROCESSOR", [710, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.PROCESSOR", []], ["kind/runpod.serverless.utils.rp_debugger.PROCESSOR", [301, -1.552]], ["name/runpod.serverless.utils.rp_debugger.PYTHON_VERSION", [711, 34.496]], ["names/runpod.serverless.utils.rp_debugger.PYTHON_VERSION", [138, 3.615, 295, 3.801]], ["qname/runpod.serverless.utils.rp_debugger.PYTHON_VERSION", [712, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.PYTHON_VERSION", []], ["kind/runpod.serverless.utils.rp_debugger.PYTHON_VERSION", [307, -2.441]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints", [713, 46.843]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints", [713, 9.651]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints", [714, 22.998]], ["docstring/runpod.serverless.utils.rp_debugger.Checkpoints", [2, 2.262, 143, 1.241, 152, 3.187, 315, 2.031, 318, 2.916, 398, 2.208, 537, 3.116, 715, 9.518, 716, 3.116, 717, 2.916, 718, 3.42, 719, 3.42, 720, 3.42, 721, 3.42, 722, 3.42, 723, 6.025, 724, 3.42, 725, 3.42, 726, 3.42, 727, 3.42, 728, 3.42, 729, 2.262, 730, 7.359, 731, 3.42, 732, 3.42, 733, 2.322, 734, 3.42]], ["kind/runpod.serverless.utils.rp_debugger.Checkpoints", [143, -4.439]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.__instance", [319, 31.431]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.__instance", [320, 2.497]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.__instance", [735, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.Checkpoints.__instance", []], ["kind/runpod.serverless.utils.rp_debugger.Checkpoints.__instance", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints", [713, 23.421]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints", [713, 4.826]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints", [736, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints", []], ["kind/runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup", [737, 34.496]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup", [315, 3.325, 738, 5.599]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup", [739, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup", []], ["kind/runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.__new__", [323, 27.905]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.__new__", [324, 4.486]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.__new__", [740, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.Checkpoints.__new__", []], ["kind/runpod.serverless.utils.rp_debugger.Checkpoints.__new__", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.add", [398, 22.275]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.add", [398, 4.59]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.add", [741, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.Checkpoints.add", [109, 2.109, 398, 3.845, 715, 5.831, 742, 5.955]], ["kind/runpod.serverless.utils.rp_debugger.Checkpoints.add", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.start", [152, 18.248]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.start", [152, 3.76]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.start", [743, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.Checkpoints.start", [152, 4.106, 715, 5.589]], ["kind/runpod.serverless.utils.rp_debugger.Checkpoints.start", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.stop", [733, 23.421]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.stop", [733, 4.826]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.stop", [744, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.Checkpoints.stop", [715, 5.589, 733, 5.27]], ["kind/runpod.serverless.utils.rp_debugger.Checkpoints.stop", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints", [745, 34.496]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints", [241, 2.439, 713, 3.801]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints", [746, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints", [461, 4.445, 715, 5.589]], ["kind/runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.clear", [747, 26.701]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.clear", [747, 5.501]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.clear", [748, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.Checkpoints.clear", [715, 5.589, 747, 6.008]], ["kind/runpod.serverless.utils.rp_debugger.Checkpoints.clear", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.LineTimer", [749, 68.993]], ["names/runpod.serverless.utils.rp_debugger.LineTimer", [750, 11.198, 751, 10.203]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer", [752, 22.998]], ["docstring/runpod.serverless.utils.rp_debugger.LineTimer", [77, 6.581, 98, 5.558, 160, 7.394, 366, 5.75, 715, 5.558, 716, 10.777, 753, 6.244, 754, 7.719, 755, 7.033]], ["kind/runpod.serverless.utils.rp_debugger.LineTimer", [143, -4.439]], ["name/runpod.serverless.utils.rp_debugger.LineTimer.__init__", [374, 20.109]], ["names/runpod.serverless.utils.rp_debugger.LineTimer.__init__", [375, 4.143]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer.__init__", [756, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.LineTimer.__init__", []], ["kind/runpod.serverless.utils.rp_debugger.LineTimer.__init__", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.LineTimer.checkpoints", [713, 23.421]], ["names/runpod.serverless.utils.rp_debugger.LineTimer.checkpoints", [713, 4.826]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer.checkpoints", [757, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.LineTimer.checkpoints", []], ["kind/runpod.serverless.utils.rp_debugger.LineTimer.checkpoints", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.utils.rp_debugger.LineTimer.name", [315, 20.484]], ["names/runpod.serverless.utils.rp_debugger.LineTimer.name", [315, 4.221]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer.name", [758, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.LineTimer.name", []], ["kind/runpod.serverless.utils.rp_debugger.LineTimer.name", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.utils.rp_debugger.LineTimer.__enter__", [759, 31.431]], ["names/runpod.serverless.utils.rp_debugger.LineTimer.__enter__", [760, 6.06]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer.__enter__", [761, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.LineTimer.__enter__", []], ["kind/runpod.serverless.utils.rp_debugger.LineTimer.__enter__", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.LineTimer.__exit__", [762, 31.431]], ["names/runpod.serverless.utils.rp_debugger.LineTimer.__exit__", [763, 6.06]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer.__exit__", [764, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.LineTimer.__exit__", []], ["kind/runpod.serverless.utils.rp_debugger.LineTimer.__exit__", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.FunctionTimer", [765, 68.993]], ["names/runpod.serverless.utils.rp_debugger.FunctionTimer", [62, 2.133, 751, 10.203]], ["qname/runpod.serverless.utils.rp_debugger.FunctionTimer", [766, 22.998]], ["docstring/runpod.serverless.utils.rp_debugger.FunctionTimer", [62, 2.269, 143, 4.321, 659, 8.087, 767, 11.911, 768, 11.911]], ["kind/runpod.serverless.utils.rp_debugger.FunctionTimer", [143, -4.439]], ["name/runpod.serverless.utils.rp_debugger.FunctionTimer.__init__", [374, 20.109]], ["names/runpod.serverless.utils.rp_debugger.FunctionTimer.__init__", [375, 4.143]], ["qname/runpod.serverless.utils.rp_debugger.FunctionTimer.__init__", [769, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.FunctionTimer.__init__", []], ["kind/runpod.serverless.utils.rp_debugger.FunctionTimer.__init__", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.FunctionTimer.function", [62, 6.573]], ["names/runpod.serverless.utils.rp_debugger.FunctionTimer.function", [62, 1.354]], ["qname/runpod.serverless.utils.rp_debugger.FunctionTimer.function", [770, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.FunctionTimer.function", []], ["kind/runpod.serverless.utils.rp_debugger.FunctionTimer.function", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints", [713, 23.421]], ["names/runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints", [713, 4.826]], ["qname/runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints", [771, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints", []], ["kind/runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.utils.rp_debugger.FunctionTimer.__call__", [772, 34.496]], ["names/runpod.serverless.utils.rp_debugger.FunctionTimer.__call__", [253, 5.118]], ["qname/runpod.serverless.utils.rp_debugger.FunctionTimer.__call__", [773, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.FunctionTimer.__call__", []], ["kind/runpod.serverless.utils.rp_debugger.FunctionTimer.__call__", [326, -1.676]], ["name/runpod.serverless.utils.rp_debugger.get_debugger_output", [774, 34.496]], ["names/runpod.serverless.utils.rp_debugger.get_debugger_output", [241, 2.012, 265, 3.938, 373, 2.312]], ["qname/runpod.serverless.utils.rp_debugger.get_debugger_output", [775, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.get_debugger_output", [109, 2.496, 373, 3.528, 776, 6.423]], ["kind/runpod.serverless.utils.rp_debugger.get_debugger_output", [62, -1.166]], ["name/runpod.serverless.utils.rp_debugger.clear_debugger_output", [777, 34.496]], ["names/runpod.serverless.utils.rp_debugger.clear_debugger_output", [265, 3.938, 373, 2.312, 747, 3.575]], ["qname/runpod.serverless.utils.rp_debugger.clear_debugger_output", [778, 11.499]], ["docstring/runpod.serverless.utils.rp_debugger.clear_debugger_output", [373, 3.528, 747, 5.456, 776, 6.423]], ["kind/runpod.serverless.utils.rp_debugger.clear_debugger_output", [62, -1.166]], ["name/runpod.serverless.worker.log", [187, 15.683]], ["names/runpod.serverless.worker.log", [187, 3.231]], ["qname/runpod.serverless.worker.log", [779, 11.499]], ["docstring/runpod.serverless.worker.log", []], ["kind/runpod.serverless.worker.log", [301, -1.552]], ["name/runpod.serverless.worker.job_list", [427, 26.701]], ["names/runpod.serverless.worker.job_list", [110, 2.919, 174, 1.585]], ["qname/runpod.serverless.worker.job_list", [780, 11.499]], ["docstring/runpod.serverless.worker.job_list", []], ["kind/runpod.serverless.worker.job_list", [301, -1.552]], ["name/runpod.serverless.worker.heartbeat", [223, 21.313]], ["names/runpod.serverless.worker.heartbeat", [223, 4.391]], ["qname/runpod.serverless.worker.heartbeat", [781, 11.499]], ["docstring/runpod.serverless.worker.heartbeat", []], ["kind/runpod.serverless.worker.heartbeat", [301, -1.552]], ["name/runpod.serverless.worker._get_auth_header", [782, 34.496]], ["names/runpod.serverless.worker._get_auth_header", [25, 3.326, 241, 2.012, 360, 3.575]], ["qname/runpod.serverless.worker._get_auth_header", [783, 11.499]], ["docstring/runpod.serverless.worker._get_auth_header", [5, 2.87, 109, 2.109, 360, 4.61, 362, 5.426, 363, 3.605]], ["kind/runpod.serverless.worker._get_auth_header", [62, -1.166]], ["name/runpod.serverless.worker._is_local", [784, 34.496]], ["names/runpod.serverless.worker._is_local", [177, 3.39, 357, 4.032]], ["qname/runpod.serverless.worker._is_local", [785, 11.499]], ["docstring/runpod.serverless.worker._is_local", [109, 1.825, 127, 2.096, 149, 2.58, 177, 3.121, 333, 3.6, 538, 3.99, 539, 3.99]], ["kind/runpod.serverless.worker._is_local", [62, -1.166]], ["name/runpod.serverless.worker._process_job", [542, 31.431]], ["names/runpod.serverless.worker._process_job", [174, 1.585, 439, 4.171]], ["qname/runpod.serverless.worker._process_job", [786, 11.499]], ["docstring/runpod.serverless.worker._process_job", []], ["kind/runpod.serverless.worker._process_job", [62, -1.166]], ["name/runpod.serverless.worker.run_worker", [787, 34.496]], ["names/runpod.serverless.worker.run_worker", [127, 2.276, 149, 2.802]], ["qname/runpod.serverless.worker.run_worker", [788, 11.499]], ["docstring/runpod.serverless.worker.run_worker", [59, 2.369, 70, 2.926, 149, 3.079, 152, 2.15, 367, 2.119, 439, 3.027, 459, 3.287, 551, 3.145, 789, 4.064, 790, 3.703]], ["kind/runpod.serverless.worker.run_worker", [62, -1.166]], ["name/runpod.serverless.worker.main", [147, 26.701]], ["names/runpod.serverless.worker.main", [147, 5.501]], ["qname/runpod.serverless.worker.main", [791, 11.499]], ["docstring/runpod.serverless.worker.main", [0, 1.756, 127, 2.896, 149, 3.113, 174, 0.873, 177, 3.002, 181, 2.154, 314, 1.798, 551, 2.387, 763, 2.63, 792, 1.831]], ["kind/runpod.serverless.worker.main", [62, -1.166]], ["name/runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID", [793, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID", [0, 1.635, 31, 1.718, 247, 2.1]], ["qname/runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID", [794, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID", []], ["kind/runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID", [307, -2.441]], ["name/runpod.serverless.modules.rp_fastapi.TITLE", [795, 31.431]], ["names/runpod.serverless.modules.rp_fastapi.TITLE", [795, 6.476]], ["qname/runpod.serverless.modules.rp_fastapi.TITLE", [796, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.TITLE", []], ["kind/runpod.serverless.modules.rp_fastapi.TITLE", [307, -2.441]], ["name/runpod.serverless.modules.rp_fastapi.DESCRIPTION", [797, 25.698]], ["names/runpod.serverless.modules.rp_fastapi.DESCRIPTION", [797, 5.295]], ["qname/runpod.serverless.modules.rp_fastapi.DESCRIPTION", [798, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.DESCRIPTION", []], ["kind/runpod.serverless.modules.rp_fastapi.DESCRIPTION", [301, -1.552]], ["name/runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION", [799, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION", [127, 2.276, 797, 4.171]], ["qname/runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION", [800, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION", []], ["kind/runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION", [307, -2.441]], ["name/runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION", [801, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION", [797, 4.171, 802, 4.774]], ["qname/runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION", [803, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION", []], ["kind/runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION", [307, -2.441]], ["name/runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION", [804, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION", [466, 2.919, 797, 4.171]], ["qname/runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION", [805, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION", []], ["kind/runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION", [307, -2.441]], ["name/runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION", [806, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION", [797, 4.171, 807, 3.459]], ["qname/runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION", [808, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION", []], ["kind/runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION", [307, -2.441]], ["name/runpod.serverless.modules.rp_fastapi.job_list", [427, 26.701]], ["names/runpod.serverless.modules.rp_fastapi.job_list", [110, 2.919, 174, 1.585]], ["qname/runpod.serverless.modules.rp_fastapi.job_list", [809, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.job_list", []], ["kind/runpod.serverless.modules.rp_fastapi.job_list", [301, -1.552]], ["name/runpod.serverless.modules.rp_fastapi.heartbeat", [223, 21.313]], ["names/runpod.serverless.modules.rp_fastapi.heartbeat", [223, 4.391]], ["qname/runpod.serverless.modules.rp_fastapi.heartbeat", [810, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.heartbeat", []], ["kind/runpod.serverless.modules.rp_fastapi.heartbeat", [301, -1.552]], ["name/runpod.serverless.modules.rp_fastapi.Job", [174, 19.532]], ["names/runpod.serverless.modules.rp_fastapi.Job", [174, 4.024]], ["qname/runpod.serverless.modules.rp_fastapi.Job", [811, 22.998]], ["docstring/runpod.serverless.modules.rp_fastapi.Job", [174, 4.395, 365, 11.178]], ["kind/runpod.serverless.modules.rp_fastapi.Job", [143, -4.439]], ["name/runpod.serverless.modules.rp_fastapi.Job.id", [247, 15.683]], ["names/runpod.serverless.modules.rp_fastapi.Job.id", [247, 3.231]], ["qname/runpod.serverless.modules.rp_fastapi.Job.id", [812, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.Job.id", []], ["kind/runpod.serverless.modules.rp_fastapi.Job.id", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.Job.input", [273, 18.807]], ["names/runpod.serverless.modules.rp_fastapi.Job.input", [273, 3.875]], ["qname/runpod.serverless.modules.rp_fastapi.Job.input", [813, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.Job.input", []], ["kind/runpod.serverless.modules.rp_fastapi.Job.input", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.TestJob", [814, 68.993]], ["names/runpod.serverless.modules.rp_fastapi.TestJob", [174, 3.17, 181, 7.819]], ["qname/runpod.serverless.modules.rp_fastapi.TestJob", [815, 22.998]], ["docstring/runpod.serverless.modules.rp_fastapi.TestJob", [174, 3.129, 181, 7.718, 273, 6.026, 365, 7.959, 523, 7.718, 675, 7.137]], ["kind/runpod.serverless.modules.rp_fastapi.TestJob", [143, -4.439]], ["name/runpod.serverless.modules.rp_fastapi.TestJob.id", [247, 15.683]], ["names/runpod.serverless.modules.rp_fastapi.TestJob.id", [247, 3.231]], ["qname/runpod.serverless.modules.rp_fastapi.TestJob.id", [816, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.TestJob.id", []], ["kind/runpod.serverless.modules.rp_fastapi.TestJob.id", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.TestJob.input", [273, 18.807]], ["names/runpod.serverless.modules.rp_fastapi.TestJob.input", [273, 3.875]], ["qname/runpod.serverless.modules.rp_fastapi.TestJob.input", [817, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.TestJob.input", []], ["kind/runpod.serverless.modules.rp_fastapi.TestJob.input", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.TestJob.webhook", [372, 23.421]], ["names/runpod.serverless.modules.rp_fastapi.TestJob.webhook", [372, 4.826]], ["qname/runpod.serverless.modules.rp_fastapi.TestJob.webhook", [818, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.TestJob.webhook", []], ["kind/runpod.serverless.modules.rp_fastapi.TestJob.webhook", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.DefaultRequest", [819, 68.993]], ["names/runpod.serverless.modules.rp_fastapi.DefaultRequest", [172, 6.202, 203, 8.063]], ["qname/runpod.serverless.modules.rp_fastapi.DefaultRequest", [820, 22.998]], ["docstring/runpod.serverless.modules.rp_fastapi.DefaultRequest", [181, 9.845, 273, 7.686, 365, 10.152]], ["kind/runpod.serverless.modules.rp_fastapi.DefaultRequest", [143, -4.439]], ["name/runpod.serverless.modules.rp_fastapi.DefaultRequest.input", [273, 18.807]], ["names/runpod.serverless.modules.rp_fastapi.DefaultRequest.input", [273, 3.875]], ["qname/runpod.serverless.modules.rp_fastapi.DefaultRequest.input", [821, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.DefaultRequest.input", []], ["kind/runpod.serverless.modules.rp_fastapi.DefaultRequest.input", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook", [372, 23.421]], ["names/runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook", [372, 4.826]], ["qname/runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook", [822, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook", []], ["kind/runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.JobOutput", [823, 68.993]], ["names/runpod.serverless.modules.rp_fastapi.JobOutput", [174, 3.17, 373, 5.605]], ["qname/runpod.serverless.modules.rp_fastapi.JobOutput", [824, 22.998]], ["docstring/runpod.serverless.modules.rp_fastapi.JobOutput", [174, 3.991, 365, 10.152, 373, 7.057]], ["kind/runpod.serverless.modules.rp_fastapi.JobOutput", [143, -4.439]], ["name/runpod.serverless.modules.rp_fastapi.JobOutput.id", [247, 15.683]], ["names/runpod.serverless.modules.rp_fastapi.JobOutput.id", [247, 3.231]], ["qname/runpod.serverless.modules.rp_fastapi.JobOutput.id", [825, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.JobOutput.id", []], ["kind/runpod.serverless.modules.rp_fastapi.JobOutput.id", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.JobOutput.status", [807, 21.313]], ["names/runpod.serverless.modules.rp_fastapi.JobOutput.status", [807, 4.391]], ["qname/runpod.serverless.modules.rp_fastapi.JobOutput.status", [826, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.JobOutput.status", []], ["kind/runpod.serverless.modules.rp_fastapi.JobOutput.status", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.JobOutput.output", [373, 17.266]], ["names/runpod.serverless.modules.rp_fastapi.JobOutput.output", [373, 3.558]], ["qname/runpod.serverless.modules.rp_fastapi.JobOutput.output", [827, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.JobOutput.output", []], ["kind/runpod.serverless.modules.rp_fastapi.JobOutput.output", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.JobOutput.error", [139, 17.497]], ["names/runpod.serverless.modules.rp_fastapi.JobOutput.error", [139, 3.605]], ["qname/runpod.serverless.modules.rp_fastapi.JobOutput.error", [828, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.JobOutput.error", []], ["kind/runpod.serverless.modules.rp_fastapi.JobOutput.error", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.StreamOutput", [829, 68.993]], ["names/runpod.serverless.modules.rp_fastapi.StreamOutput", [373, 5.605, 466, 5.839]], ["qname/runpod.serverless.modules.rp_fastapi.StreamOutput", [830, 22.998]], ["docstring/runpod.serverless.modules.rp_fastapi.StreamOutput", [174, 3.991, 466, 7.351, 831, 14.098]], ["kind/runpod.serverless.modules.rp_fastapi.StreamOutput", [143, -4.439]], ["name/runpod.serverless.modules.rp_fastapi.StreamOutput.id", [247, 15.683]], ["names/runpod.serverless.modules.rp_fastapi.StreamOutput.id", [247, 3.231]], ["qname/runpod.serverless.modules.rp_fastapi.StreamOutput.id", [832, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.StreamOutput.id", []], ["kind/runpod.serverless.modules.rp_fastapi.StreamOutput.id", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.StreamOutput.status", [807, 21.313]], ["names/runpod.serverless.modules.rp_fastapi.StreamOutput.status", [807, 4.391]], ["qname/runpod.serverless.modules.rp_fastapi.StreamOutput.status", [833, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.StreamOutput.status", []], ["kind/runpod.serverless.modules.rp_fastapi.StreamOutput.status", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.StreamOutput.stream", [466, 17.987]], ["names/runpod.serverless.modules.rp_fastapi.StreamOutput.stream", [466, 3.706]], ["qname/runpod.serverless.modules.rp_fastapi.StreamOutput.stream", [834, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.StreamOutput.stream", []], ["kind/runpod.serverless.modules.rp_fastapi.StreamOutput.stream", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi.StreamOutput.error", [139, 17.497]], ["names/runpod.serverless.modules.rp_fastapi.StreamOutput.error", [139, 3.605]], ["qname/runpod.serverless.modules.rp_fastapi.StreamOutput.error", [835, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.StreamOutput.error", []], ["kind/runpod.serverless.modules.rp_fastapi.StreamOutput.error", [143, -1.618, 301, -1.132]], ["name/runpod.serverless.modules.rp_fastapi._send_webhook", [836, 34.496]], ["names/runpod.serverless.modules.rp_fastapi._send_webhook", [225, 3.152, 372, 3.801]], ["qname/runpod.serverless.modules.rp_fastapi._send_webhook", [837, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi._send_webhook", [109, 0.909, 172, 1.422, 180, 1.793, 225, 3.085, 333, 1.793, 367, 1.339, 372, 2.899, 387, 1.699, 424, 2.899, 451, 2.34, 459, 2.077, 521, 1.988, 538, 1.988, 539, 1.988, 838, 3.89, 839, 2.568]], ["kind/runpod.serverless.modules.rp_fastapi._send_webhook", [62, -1.166]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI", [840, 62.863]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI", [5, 5.396, 149, 5.605]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI", [841, 22.998]], ["docstring/runpod.serverless.modules.rp_fastapi.WorkerAPI", [5, 4.38, 127, 3.695, 149, 4.55, 158, 7.353, 160, 4.674, 161, 6.347, 162, 7.75, 163, 5.398, 164, 8.282]], ["kind/runpod.serverless.modules.rp_fastapi.WorkerAPI", [143, -4.439]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__", [374, 20.109]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__", [375, 4.143]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__", [842, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__", [68, 2.123, 143, 1.272, 152, 1.855, 158, 2.837, 162, 2.99, 163, 2.082, 166, 2.264, 174, 0.993, 223, 2.167, 439, 2.612, 577, 2.837, 581, 4.25, 840, 3.195]], ["kind/runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__", [326, -1.676]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI.config", [59, 20.109]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI.config", [59, 4.143]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI.config", [843, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.WorkerAPI.config", []], ["kind/runpod.serverless.modules.rp_fastapi.WorkerAPI.config", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app", [844, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app", [100, 2.879, 845, 5.599]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app", [846, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app", []], ["kind/runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app", [301, -1.132, 320, -1.567]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn", [847, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn", [152, 2.962, 848, 5.101]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn", [849, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn", [152, 3.729, 163, 4.186, 848, 6.423]], ["kind/runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn", [326, -1.676]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime", [850, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime", [851, 6.06]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime", [852, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime", [109, 1.301, 139, 1.864, 160, 1.889, 166, 3.677, 180, 3.977, 218, 3.348, 273, 2.003, 286, 3.348, 330, 3.348, 523, 2.566, 853, 3.675]], ["kind/runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime", [326, -1.676]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run", [854, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run", [127, 2.276, 855, 4.529]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run", [856, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run", [31, 2.215, 127, 2.421, 857, 4.288, 858, 4.817, 859, 4.817]], ["kind/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run", [326, -1.676]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync", [860, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync", [802, 4.774, 855, 4.529]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync", [861, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync", [31, 2.215, 802, 5.078, 857, 4.288, 858, 4.817, 859, 4.817]], ["kind/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync", [326, -1.676]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream", [862, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream", [466, 2.919, 855, 4.529]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream", [863, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream", [31, 2.215, 466, 3.105, 857, 4.288, 858, 4.817, 859, 4.817]], ["kind/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream", [326, -1.676]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status", [864, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status", [807, 3.459, 855, 4.529]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status", [865, 11.499]], ["docstring/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status", [31, 2.215, 857, 4.288, 858, 4.817, 859, 4.817, 866, 4.159]], ["kind/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status", [326, -1.676]], ["name/runpod.serverless.modules.rp_progress.log", [187, 15.683]], ["names/runpod.serverless.modules.rp_progress.log", [187, 3.231]], ["qname/runpod.serverless.modules.rp_progress.log", [867, 11.499]], ["docstring/runpod.serverless.modules.rp_progress.log", []], ["kind/runpod.serverless.modules.rp_progress.log", [301, -1.552]], ["name/runpod.serverless.modules.rp_progress._create_session_async", [868, 34.496]], ["names/runpod.serverless.modules.rp_progress._create_session_async", [447, 2.982, 869, 3.225, 870, 4.208]], ["qname/runpod.serverless.modules.rp_progress._create_session_async", [871, 11.499]], ["docstring/runpod.serverless.modules.rp_progress._create_session_async", [447, 4.552, 449, 6.423, 792, 4.186]], ["kind/runpod.serverless.modules.rp_progress._create_session_async", [62, -1.166]], ["name/runpod.serverless.modules.rp_progress._async_progress_update", [872, 34.496]], ["names/runpod.serverless.modules.rp_progress._async_progress_update", [228, 3.225, 497, 3.326, 870, 4.208]], ["qname/runpod.serverless.modules.rp_progress._async_progress_update", [873, 11.499]], ["docstring/runpod.serverless.modules.rp_progress._async_progress_update", [62, 1.135, 135, 5.078, 225, 3.353, 245, 4.288, 874, 5.955]], ["kind/runpod.serverless.modules.rp_progress._async_progress_update", [62, -1.166]], ["name/runpod.serverless.modules.rp_progress._thread_target", [875, 34.496]], ["names/runpod.serverless.modules.rp_progress._thread_target", [577, 4.529, 876, 5.599]], ["qname/runpod.serverless.modules.rp_progress._thread_target", [877, 11.499]], ["docstring/runpod.serverless.modules.rp_progress._thread_target", [13, 3.752, 171, 4.117, 550, 4.278, 551, 4.278, 878, 5.527, 879, 5.527]], ["kind/runpod.serverless.modules.rp_progress._thread_target", [62, -1.166]], ["name/runpod.serverless.modules.rp_progress.progress_update", [527, 31.431]], ["names/runpod.serverless.modules.rp_progress.progress_update", [228, 3.91, 497, 4.032]], ["qname/runpod.serverless.modules.rp_progress.progress_update", [880, 11.499]], ["docstring/runpod.serverless.modules.rp_progress.progress_update", [127, 2.096, 174, 1.459, 228, 3.6, 245, 3.712, 392, 3.121, 577, 4.17, 881, 5.155]], ["kind/runpod.serverless.modules.rp_progress.progress_update", [62, -1.166]], ["name/runpod.serverless.log", [187, 15.683]], ["names/runpod.serverless.log", [187, 3.231]], ["qname/runpod.serverless.log", [882, 11.499]], ["docstring/runpod.serverless.log", []], ["kind/runpod.serverless.log", [301, -1.552]], ["name/runpod.serverless.parser", [883, 31.431]], ["names/runpod.serverless.parser", [883, 6.476]], ["qname/runpod.serverless.parser", [884, 11.499]], ["docstring/runpod.serverless.parser", []], ["kind/runpod.serverless.parser", [301, -1.552]], ["name/runpod.serverless._set_config_args", [885, 34.496]], ["names/runpod.serverless._set_config_args", [59, 2.692, 68, 2.796, 886, 4.618]], ["qname/runpod.serverless._set_config_args", [887, 11.499]], ["docstring/runpod.serverless._set_config_args", [59, 3.898, 68, 2.751, 109, 1.609, 150, 3.875, 403, 3.676, 888, 4.545, 889, 4.545, 890, 4.545]], ["kind/runpod.serverless._set_config_args", [62, -1.166]], ["name/runpod.serverless._get_realtime_port", [891, 34.496]], ["names/runpod.serverless._get_realtime_port", [241, 2.012, 851, 3.938, 892, 3.326]], ["qname/runpod.serverless._get_realtime_port", [893, 11.499]], ["docstring/runpod.serverless._get_realtime_port", [243, 4.436, 244, 4.61, 892, 4.288, 894, 5.426, 895, 4.043]], ["kind/runpod.serverless._get_realtime_port", [62, -1.166]], ["name/runpod.serverless._get_realtime_concurrency", [896, 34.496]], ["names/runpod.serverless._get_realtime_concurrency", [241, 2.012, 593, 3.736, 851, 3.938]], ["qname/runpod.serverless._get_realtime_concurrency", [897, 11.499]], ["docstring/runpod.serverless._get_realtime_concurrency", [243, 4.436, 244, 4.61, 596, 4.61, 894, 5.426, 895, 4.043]], ["kind/runpod.serverless._get_realtime_concurrency", [62, -1.166]], ["name/runpod.serverless._signal_handler", [898, 31.431]], ["names/runpod.serverless._signal_handler", [166, 3.615, 899, 4.529]], ["qname/runpod.serverless._signal_handler", [900, 11.499]], ["docstring/runpod.serverless._signal_handler", [171, 5.251, 899, 5.702, 901, 7.049]], ["kind/runpod.serverless._signal_handler", [62, -1.166]], ["name/runpod.serverless.start", [152, 18.248]], ["names/runpod.serverless.start", [152, 3.76]], ["qname/runpod.serverless.start", [902, 11.499]], ["docstring/runpod.serverless.start", [59, 1.32, 62, 0.732, 70, 1.631, 127, 1.562, 145, 1.32, 149, 2.504, 150, 3.276, 152, 1.198, 166, 1.463, 458, 3.501, 459, 3.108, 596, 1.753, 597, 2.064, 790, 2.064, 903, 2.265, 904, 2.265, 905, 2.265, 906, 2.265, 907, 2.265]], ["kind/runpod.serverless.start", [62, -1.166]], ["name/runpod.error.RunPodError", [908, 68.993]], ["names/runpod.error.RunPodError", [34, 3.271, 127, 3.755, 139, 4.685]], ["qname/runpod.error.RunPodError", [909, 22.998]], ["docstring/runpod.error.RunPodError", [0, 4.572, 139, 6.549, 143, 4.685, 659, 8.767]], ["kind/runpod.error.RunPodError", [910, -10.432]], ["name/runpod.error.RunPodError.__init__", [374, 20.109]], ["names/runpod.error.RunPodError.__init__", [375, 4.143]], ["qname/runpod.error.RunPodError.__init__", [911, 11.499]], ["docstring/runpod.error.RunPodError.__init__", []], ["kind/runpod.error.RunPodError.__init__", [326, -1.676]], ["name/runpod.error.RunPodError.message", [304, 29.413]], ["names/runpod.error.RunPodError.message", [304, 6.06]], ["qname/runpod.error.RunPodError.message", [912, 11.499]], ["docstring/runpod.error.RunPodError.message", []], ["kind/runpod.error.RunPodError.message", [301, -1.132, 320, -1.567]], ["name/runpod.error.RunPodError.__str__", [386, 29.413]], ["names/runpod.error.RunPodError.__str__", [387, 4.702]], ["qname/runpod.error.RunPodError.__str__", [913, 11.499]], ["docstring/runpod.error.RunPodError.__str__", []], ["kind/runpod.error.RunPodError.__str__", [326, -1.676]], ["name/runpod.error.AuthenticationError", [914, 68.993]], ["names/runpod.error.AuthenticationError", [139, 5.68, 915, 11.198]], ["qname/runpod.error.AuthenticationError", [916, 22.998]], ["docstring/runpod.error.AuthenticationError", [917, 10.503, 918, 12.021, 919, 11.404]], ["kind/runpod.error.AuthenticationError", [910, -10.432]], ["name/runpod.error.QueryError", [920, 68.993]], ["names/runpod.error.QueryError", [139, 5.68, 921, 7.408]], ["qname/runpod.error.QueryError", [922, 22.998]], ["docstring/runpod.error.QueryError", [16, 8.151, 42, 8.767, 917, 9.619, 919, 10.445]], ["kind/runpod.error.QueryError", [910, -10.432]], ["name/runpod.error.QueryError.__init__", [374, 20.109]], ["names/runpod.error.QueryError.__init__", [375, 4.143]], ["qname/runpod.error.QueryError.__init__", [923, 11.499]], ["docstring/runpod.error.QueryError.__init__", []], ["kind/runpod.error.QueryError.__init__", [326, -1.676]], ["name/runpod.error.QueryError.query", [921, 22.821]], ["names/runpod.error.QueryError.query", [921, 4.702]], ["qname/runpod.error.QueryError.query", [924, 11.499]], ["docstring/runpod.error.QueryError.query", []], ["kind/runpod.error.QueryError.query", [301, -1.132, 320, -1.567]], ["name/runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED", [925, 34.496]], ["names/runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED", [169, 3.736, 807, 2.853, 926, 4.208]], ["qname/runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED", [927, 11.499]], ["docstring/runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED", []], ["kind/runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED", [307, -2.441]], ["name/runpod.api.graphql.run_graphql_query", [928, 34.496]], ["names/runpod.api.graphql.run_graphql_query", [16, 2.915, 127, 1.877, 921, 3.055]], ["qname/runpod.api.graphql.run_graphql_query", [929, 11.499]], ["docstring/runpod.api.graphql.run_graphql_query", [16, 4.45, 42, 4.786, 127, 2.866]], ["kind/runpod.api.graphql.run_graphql_query", [62, -1.166]], ["name/runpod.api.mutations.container_register_auth.generate_container_registry_auth", [930, 34.496]], ["names/runpod.api.mutations.container_register_auth.generate_container_registry_auth", [23, 3.351, 25, 2.83, 931, 2.538, 932, 3.581]], ["qname/runpod.api.mutations.container_register_auth.generate_container_registry_auth", [933, 11.499]], ["docstring/runpod.api.mutations.container_register_auth.generate_container_registry_auth", [16, 2.31, 21, 2.173, 27, 2.421, 28, 2.96, 109, 0.757, 198, 1.949, 315, 2.173, 367, 1.115, 370, 2.635, 387, 3.755, 465, 1.204, 667, 1.655, 918, 4.088, 934, 3.334, 935, 3.334]], ["kind/runpod.api.mutations.container_register_auth.generate_container_registry_auth", [62, -1.166]], ["name/runpod.api.mutations.endpoints.generate_endpoint_mutation", [936, 34.496]], ["names/runpod.api.mutations.endpoints.generate_endpoint_mutation", [31, 1.718, 931, 2.982, 937, 3.326]], ["qname/runpod.api.mutations.endpoints.generate_endpoint_mutation", [938, 11.499]], ["docstring/runpod.api.mutations.endpoints.generate_endpoint_mutation", [16, 3.254, 21, 3.061, 31, 1.918, 324, 3.254, 370, 3.712, 465, 2.903, 792, 3.061]], ["kind/runpod.api.mutations.endpoints.generate_endpoint_mutation", [62, -1.166]], ["name/runpod.api.mutations.endpoints.update_endpoint_template_mutation", [939, 34.496]], ["names/runpod.api.mutations.endpoints.update_endpoint_template_mutation", [31, 1.462, 497, 2.83, 631, 2.83, 937, 2.83]], ["qname/runpod.api.mutations.endpoints.update_endpoint_template_mutation", [940, 11.499]], ["docstring/runpod.api.mutations.endpoints.update_endpoint_template_mutation", [16, 3.049, 21, 2.869, 37, 3.28, 245, 3.479, 370, 3.479, 465, 2.72, 895, 3.28, 941, 4.402]], ["kind/runpod.api.mutations.endpoints.update_endpoint_template_mutation", [62, -1.166]], ["name/runpod.api.mutations.pods.generate_pod_deployment_mutation", [942, 34.496]], ["names/runpod.api.mutations.pods.generate_pod_deployment_mutation", [34, 1.392, 931, 2.538, 937, 2.83, 943, 3.93]], ["qname/runpod.api.mutations.pods.generate_pod_deployment_mutation", [944, 11.499]], ["docstring/runpod.api.mutations.pods.generate_pod_deployment_mutation", [21, 3.536, 34, 2.109, 465, 3.353, 945, 5.078, 946, 5.955]], ["kind/runpod.api.mutations.pods.generate_pod_deployment_mutation", [62, -1.166]], ["name/runpod.api.mutations.pods.generate_pod_stop_mutation", [947, 34.496]], ["names/runpod.api.mutations.pods.generate_pod_stop_mutation", [34, 1.392, 733, 2.668, 931, 2.538, 937, 2.83]], ["qname/runpod.api.mutations.pods.generate_pod_stop_mutation", [948, 11.499]], ["docstring/runpod.api.mutations.pods.generate_pod_stop_mutation", [21, 3.834, 34, 2.286, 465, 3.635, 733, 4.383]], ["kind/runpod.api.mutations.pods.generate_pod_stop_mutation", [62, -1.166]], ["name/runpod.api.mutations.pods.generate_pod_resume_mutation", [949, 34.496]], ["names/runpod.api.mutations.pods.generate_pod_resume_mutation", [34, 1.392, 931, 2.538, 937, 2.83, 950, 3.581]], ["qname/runpod.api.mutations.pods.generate_pod_resume_mutation", [951, 11.499]], ["docstring/runpod.api.mutations.pods.generate_pod_resume_mutation", [21, 3.834, 34, 2.286, 465, 3.635, 952, 5.883]], ["kind/runpod.api.mutations.pods.generate_pod_resume_mutation", [62, -1.166]], ["name/runpod.api.mutations.pods.generate_pod_terminate_mutation", [953, 34.496]], ["names/runpod.api.mutations.pods.generate_pod_terminate_mutation", [34, 1.392, 931, 2.538, 937, 2.83, 954, 3.581]], ["qname/runpod.api.mutations.pods.generate_pod_terminate_mutation", [955, 11.499]], ["docstring/runpod.api.mutations.pods.generate_pod_terminate_mutation", [21, 3.834, 34, 2.286, 465, 3.635, 956, 5.505]], ["kind/runpod.api.mutations.pods.generate_pod_terminate_mutation", [62, -1.166]], ["name/runpod.api.mutations.templates.generate_pod_template", [957, 34.496]], ["names/runpod.api.mutations.templates.generate_pod_template", [34, 1.635, 631, 3.326, 931, 2.982]], ["qname/runpod.api.mutations.templates.generate_pod_template", [958, 11.499]], ["docstring/runpod.api.mutations.templates.generate_pod_template", [16, 3.049, 21, 2.869, 34, 1.711, 37, 3.28, 324, 3.049, 370, 3.479, 465, 2.72, 792, 2.869]], ["kind/runpod.api.mutations.templates.generate_pod_template", [62, -1.166]], ["name/runpod.api.mutations.user.generate_user_mutation", [959, 34.496]], ["names/runpod.api.mutations.user.generate_user_mutation", [38, 2.343, 931, 2.982, 937, 3.326]], ["qname/runpod.api.mutations.user.generate_user_mutation", [960, 11.499]], ["docstring/runpod.api.mutations.user.generate_user_mutation", [21, 3.536, 38, 3.021, 465, 3.353, 961, 5.955, 962, 5.955]], ["kind/runpod.api.mutations.user.generate_user_mutation", [62, -1.166]], ["name/runpod.api.queries.endpoints.QUERY_ENDPOINT", [963, 34.496]], ["names/runpod.api.queries.endpoints.QUERY_ENDPOINT", [31, 2.082, 921, 3.704]], ["qname/runpod.api.queries.endpoints.QUERY_ENDPOINT", [964, 11.499]], ["docstring/runpod.api.queries.endpoints.QUERY_ENDPOINT", []], ["kind/runpod.api.queries.endpoints.QUERY_ENDPOINT", [307, -2.441]], ["name/runpod.api.queries.gpus.QUERY_GPU_TYPES", [965, 34.496]], ["names/runpod.api.queries.gpus.QUERY_GPU_TYPES", [46, 2.853, 921, 3.055, 966, 4.208]], ["qname/runpod.api.queries.gpus.QUERY_GPU_TYPES", [967, 11.499]], ["docstring/runpod.api.queries.gpus.QUERY_GPU_TYPES", []], ["kind/runpod.api.queries.gpus.QUERY_GPU_TYPES", [307, -2.441]], ["name/runpod.api.queries.gpus.generate_gpu_query", [968, 34.496]], ["names/runpod.api.queries.gpus.generate_gpu_query", [46, 2.853, 921, 3.055, 931, 2.982]], ["qname/runpod.api.queries.gpus.generate_gpu_query", [969, 11.499]], ["docstring/runpod.api.queries.gpus.generate_gpu_query", [42, 4.043, 46, 3.679, 465, 3.353, 675, 3.845, 970, 4.817]], ["kind/runpod.api.queries.gpus.generate_gpu_query", [62, -1.166]], ["name/runpod.api.queries.pods.QUERY_POD", [971, 34.496]], ["names/runpod.api.queries.pods.QUERY_POD", [34, 1.982, 921, 3.704]], ["qname/runpod.api.queries.pods.QUERY_POD", [972, 11.499]], ["docstring/runpod.api.queries.pods.QUERY_POD", []], ["kind/runpod.api.queries.pods.QUERY_POD", [307, -2.441]], ["name/runpod.api.queries.pods.generate_pod_query", [973, 34.496]], ["names/runpod.api.queries.pods.generate_pod_query", [34, 1.635, 921, 3.055, 931, 2.982]], ["qname/runpod.api.queries.pods.generate_pod_query", [974, 11.499]], ["docstring/runpod.api.queries.pods.generate_pod_query", [42, 4.043, 46, 3.679, 465, 3.353, 675, 3.845, 970, 4.817]], ["kind/runpod.api.queries.pods.generate_pod_query", [62, -1.166]], ["name/runpod.api.queries.user.QUERY_USER", [975, 34.496]], ["names/runpod.api.queries.user.QUERY_USER", [38, 2.84, 921, 3.704]], ["qname/runpod.api.queries.user.QUERY_USER", [976, 11.499]], ["docstring/runpod.api.queries.user.QUERY_USER", []], ["kind/runpod.api.queries.user.QUERY_USER", [307, -2.441]], ["name/runpod.api.ctl_commands.get_user", [977, 34.496]], ["names/runpod.api.ctl_commands.get_user", [38, 2.84, 241, 2.439]], ["qname/runpod.api.ctl_commands.get_user", [978, 11.499]], ["docstring/runpod.api.ctl_commands.get_user", [38, 3.937, 392, 4.699]], ["kind/runpod.api.ctl_commands.get_user", [62, -1.166]], ["name/runpod.api.ctl_commands.update_user_settings", [979, 34.496]], ["names/runpod.api.ctl_commands.update_user_settings", [38, 2.343, 497, 3.326, 980, 4.618]], ["qname/runpod.api.ctl_commands.update_user_settings", [981, 11.499]], ["docstring/runpod.api.ctl_commands.update_user_settings", [38, 3.546, 245, 3.479, 363, 2.925, 392, 2.925, 982, 3.196, 983, 4.831, 984, 4.119]], ["kind/runpod.api.ctl_commands.update_user_settings", [62, -1.166]], ["name/runpod.api.ctl_commands.get_gpus", [985, 34.496]], ["names/runpod.api.ctl_commands.get_gpus", [44, 4.774, 241, 2.439]], ["qname/runpod.api.ctl_commands.get_gpus", [986, 11.499]], ["docstring/runpod.api.ctl_commands.get_gpus", [46, 4.796, 675, 5.012]], ["kind/runpod.api.ctl_commands.get_gpus", [62, -1.166]], ["name/runpod.api.ctl_commands.get_gpu", [987, 31.431]], ["names/runpod.api.ctl_commands.get_gpu", [46, 3.459, 241, 2.439]], ["qname/runpod.api.ctl_commands.get_gpu", [988, 11.499]], ["docstring/runpod.api.ctl_commands.get_gpu", [46, 4.442, 109, 1.367, 247, 1.755, 675, 2.492, 970, 3.122, 982, 3.912, 989, 3.516, 990, 3.859, 991, 3.516]], ["kind/runpod.api.ctl_commands.get_gpu", [62, -1.166]], ["name/runpod.api.ctl_commands.get_pods", [992, 34.496]], ["names/runpod.api.ctl_commands.get_pods", [32, 4.171, 241, 2.439]], ["qname/runpod.api.ctl_commands.get_pods", [993, 11.499]], ["docstring/runpod.api.ctl_commands.get_pods", [34, 3.058]], ["kind/runpod.api.ctl_commands.get_pods", [62, -1.166]], ["name/runpod.api.ctl_commands.get_pod", [994, 34.496]], ["names/runpod.api.ctl_commands.get_pod", [34, 1.982, 241, 2.439]], ["qname/runpod.api.ctl_commands.get_pod", [995, 11.499]], ["docstring/runpod.api.ctl_commands.get_pod", [34, 2.724, 247, 2.513, 970, 4.471, 982, 3.656, 996, 3.859]], ["kind/runpod.api.ctl_commands.get_pod", [62, -1.166]], ["name/runpod.api.ctl_commands.create_pod", [997, 34.496]], ["names/runpod.api.ctl_commands.create_pod", [34, 1.982, 869, 3.91]], ["qname/runpod.api.ctl_commands.create_pod", [998, 11.499]], ["docstring/runpod.api.ctl_commands.create_pod", [34, 1.839, 37, 0.511, 46, 0.879, 103, 0.609, 152, 0.399, 160, 0.731, 189, 0.561, 204, 0.642, 243, 0.561, 244, 0.583, 247, 0.647, 274, 0.642, 315, 1.199, 523, 0.526, 554, 1.371, 675, 0.486, 717, 0.642, 729, 0.498, 753, 0.609, 792, 0.447, 892, 1.024, 982, 3.613, 987, 0.686, 991, 0.686, 996, 0.526, 999, 0.686, 1000, 0.642, 1001, 0.753, 1002, 1.422, 1003, 0.753, 1004, 0.753, 1005, 1.422, 1006, 0.753, 1007, 0.753, 1008, 0.753, 1009, 0.753, 1010, 0.753, 1011, 0.686, 1012, 0.686, 1013, 0.686, 1014, 0.686, 1015, 1.15, 1016, 0.686, 1017, 0.686, 1018, 0.686, 1019, 0.686, 1020, 0.642, 1021, 1.296, 1022, 0.686, 1023, 0.686, 1024, 0.686, 1025, 0.686, 1026, 0.686, 1027, 0.609, 1028, 0.526, 1029, 0.609, 1030, 0.583, 1031, 0.609, 1032, 0.609, 1033, 0.609, 1034, 0.609]], ["kind/runpod.api.ctl_commands.create_pod", [62, -1.166]], ["name/runpod.api.ctl_commands.stop_pod", [1035, 34.496]], ["names/runpod.api.ctl_commands.stop_pod", [34, 1.982, 733, 3.801]], ["qname/runpod.api.ctl_commands.stop_pod", [1036, 11.499]], ["docstring/runpod.api.ctl_commands.stop_pod", [34, 1.701, 247, 1.348, 554, 2.013, 729, 1.961, 733, 2.013, 982, 1.961, 996, 3.354, 1028, 3.354, 1029, 2.398, 1030, 2.295, 1031, 2.398, 1032, 2.398, 1033, 2.398, 1034, 2.398, 1037, 2.701]], ["kind/runpod.api.ctl_commands.stop_pod", [62, -1.166]], ["name/runpod.api.ctl_commands.resume_pod", [1038, 34.496]], ["names/runpod.api.ctl_commands.resume_pod", [34, 1.982, 950, 5.101]], ["qname/runpod.api.ctl_commands.resume_pod", [1039, 11.499]], ["docstring/runpod.api.ctl_commands.resume_pod", [34, 1.772, 46, 1.399, 247, 1.03, 413, 1.498, 554, 1.538, 729, 1.498, 952, 2.064, 982, 2.542, 996, 2.683, 1011, 2.064, 1012, 2.064, 1028, 3.494, 1029, 1.832, 1030, 1.753, 1031, 1.832, 1032, 1.832, 1033, 1.832, 1034, 1.832, 1037, 2.064, 1040, 2.265]], ["kind/runpod.api.ctl_commands.resume_pod", [62, -1.166]], ["name/runpod.api.ctl_commands.terminate_pod", [1041, 34.496]], ["names/runpod.api.ctl_commands.terminate_pod", [34, 1.982, 954, 5.101]], ["qname/runpod.api.ctl_commands.terminate_pod", [1042, 11.499]], ["docstring/runpod.api.ctl_commands.terminate_pod", [34, 1.701, 247, 1.348, 554, 2.013, 729, 1.961, 956, 2.528, 982, 1.961, 996, 3.354, 1028, 3.354, 1029, 2.398, 1030, 2.295, 1031, 2.398, 1032, 2.398, 1033, 2.398, 1034, 2.398, 1043, 2.965]], ["kind/runpod.api.ctl_commands.terminate_pod", [62, -1.166]], ["name/runpod.api.ctl_commands.create_template", [1044, 34.496]], ["names/runpod.api.ctl_commands.create_template", [631, 4.032, 869, 3.91]], ["qname/runpod.api.ctl_commands.create_template", [1045, 11.499]], ["docstring/runpod.api.ctl_commands.create_template", [14, 0.574, 25, 0.683, 27, 1.168, 28, 0.768, 34, 0.877, 37, 2.104, 145, 0.553, 152, 0.502, 160, 0.488, 189, 0.707, 204, 0.809, 243, 0.707, 244, 0.734, 247, 0.431, 274, 0.809, 315, 1.47, 554, 1.681, 717, 0.809, 729, 0.628, 792, 0.563, 892, 1.271, 982, 3.747, 999, 0.865, 1000, 1.505, 1013, 0.865, 1014, 1.609, 1015, 1.428, 1016, 0.865, 1017, 0.865, 1018, 0.865, 1019, 0.865, 1020, 0.809, 1021, 1.609, 1022, 0.865, 1023, 0.865, 1024, 0.865, 1025, 0.865, 1026, 0.865, 1027, 0.768, 1028, 0.663, 1030, 0.734, 1046, 0.949, 1047, 0.949, 1048, 0.865, 1049, 0.949, 1050, 0.949, 1051, 0.949, 1052, 0.949, 1053, 0.949]], ["kind/runpod.api.ctl_commands.create_template", [62, -1.166]], ["name/runpod.api.ctl_commands.get_endpoints", [1054, 34.496]], ["names/runpod.api.ctl_commands.get_endpoints", [29, 4.334, 241, 2.439]], ["qname/runpod.api.ctl_commands.get_endpoints", [1055, 11.499]], ["docstring/runpod.api.ctl_commands.get_endpoints", [31, 3.212]], ["kind/runpod.api.ctl_commands.get_endpoints", [62, -1.166]], ["name/runpod.api.ctl_commands.create_endpoint", [1056, 34.496]], ["names/runpod.api.ctl_commands.create_endpoint", [31, 2.082, 869, 3.91]], ["qname/runpod.api.ctl_commands.create_endpoint", [1057, 11.499]], ["docstring/runpod.api.ctl_commands.create_endpoint", [31, 2.387, 37, 0.735, 46, 0.669, 73, 1.818, 149, 0.998, 160, 1.772, 189, 0.807, 247, 1.261, 315, 1.185, 413, 1.32, 554, 0.735, 602, 1.701, 675, 0.699, 729, 0.716, 792, 0.643, 982, 4.046, 989, 0.987, 1015, 0.876, 1027, 1.614, 1028, 0.756, 1058, 1.083, 1059, 1.083, 1060, 1.083, 1061, 1.083, 1062, 0.807, 1063, 1.083, 1064, 1.083, 1065, 1.083, 1066, 1.083, 1067, 1.083, 1068, 1.083, 1069, 0.756, 1070, 1.083]], ["kind/runpod.api.ctl_commands.create_endpoint", [62, -1.166]], ["name/runpod.api.ctl_commands.update_endpoint_template", [1071, 34.496]], ["names/runpod.api.ctl_commands.update_endpoint_template", [31, 1.718, 497, 3.326, 631, 3.326]], ["qname/runpod.api.ctl_commands.update_endpoint_template", [1072, 11.499]], ["docstring/runpod.api.ctl_commands.update_endpoint_template", [31, 2.195, 37, 3.163, 160, 1.468, 245, 2.056, 247, 2.118, 554, 1.938, 729, 1.888, 982, 3.082, 1027, 3.768, 1028, 1.993, 1069, 3.253, 1073, 2.855]], ["kind/runpod.api.ctl_commands.update_endpoint_template", [62, -1.166]], ["name/runpod.api.ctl_commands.create_container_registry_auth", [1074, 34.496]], ["names/runpod.api.ctl_commands.create_container_registry_auth", [23, 3.351, 25, 2.83, 869, 2.744, 932, 3.581]], ["qname/runpod.api.ctl_commands.create_container_registry_auth", [1075, 11.499]], ["docstring/runpod.api.ctl_commands.create_container_registry_auth", [27, 3.826, 28, 3.961, 109, 0.779, 224, 1.78, 315, 2.226, 367, 1.147, 387, 3.239, 523, 1.536, 667, 1.703, 792, 1.306, 918, 4.931, 934, 3.415, 935, 3.415, 1076, 2.2]], ["kind/runpod.api.ctl_commands.create_container_registry_auth", [62, -1.166]], ["name/runpod.cli.groups.config.functions.CREDENTIAL_FILE", [1077, 34.496]], ["names/runpod.cli.groups.config.functions.CREDENTIAL_FILE", [72, 2.574, 1078, 5.599]], ["qname/runpod.cli.groups.config.functions.CREDENTIAL_FILE", [1079, 11.499]], ["docstring/runpod.cli.groups.config.functions.CREDENTIAL_FILE", []], ["kind/runpod.cli.groups.config.functions.CREDENTIAL_FILE", [307, -2.441]], ["name/runpod.cli.groups.config.functions.set_credentials", [1080, 34.496]], ["names/runpod.cli.groups.config.functions.set_credentials", [68, 3.39, 1081, 4.529]], ["qname/runpod.cli.groups.config.functions.set_credentials", [1082, 11.499]], ["docstring/runpod.cli.groups.config.functions.set_credentials", [5, 1.031, 38, 1.085, 68, 2.215, 72, 0.983, 160, 1.1, 203, 1.54, 363, 1.295, 367, 1.115, 387, 2.421, 729, 1.415, 895, 1.452, 1083, 3.12, 1084, 2.96, 1085, 1.949, 1086, 4.369, 1087, 1.655, 1088, 2.139, 1089, 2.139, 1090, 3.659, 1091, 2.139, 1092, 2.139]], ["kind/runpod.cli.groups.config.functions.set_credentials", [62, -1.166]], ["name/runpod.cli.groups.config.functions.check_credentials", [1093, 34.496]], ["names/runpod.cli.groups.config.functions.check_credentials", [314, 3.264, 1081, 4.529]], ["qname/runpod.cli.groups.config.functions.check_credentials", [1094, 11.499]], ["docstring/runpod.cli.groups.config.functions.check_credentials", [69, 4.61, 72, 2.738, 314, 3.472, 895, 4.043, 1084, 4.817]], ["kind/runpod.cli.groups.config.functions.check_credentials", [62, -1.166]], ["name/runpod.cli.groups.config.functions.get_credentials", [1095, 34.496]], ["names/runpod.cli.groups.config.functions.get_credentials", [241, 2.439, 1081, 4.529]], ["qname/runpod.cli.groups.config.functions.get_credentials", [1096, 11.499]], ["docstring/runpod.cli.groups.config.functions.get_credentials", [109, 2.109, 1084, 4.817, 1085, 5.426, 1086, 5.426, 1097, 4.817]], ["kind/runpod.cli.groups.config.functions.get_credentials", [62, -1.166]], ["name/runpod.endpoint.helpers.FINAL_STATES", [1098, 34.496]], ["names/runpod.endpoint.helpers.FINAL_STATES", [1099, 5.101, 1100, 5.599]], ["qname/runpod.endpoint.helpers.FINAL_STATES", [1101, 11.499]], ["docstring/runpod.endpoint.helpers.FINAL_STATES", []], ["kind/runpod.endpoint.helpers.FINAL_STATES", [307, -2.441]], ["name/runpod.endpoint.helpers.UNAUTHORIZED_MSG", [1102, 34.496]], ["names/runpod.endpoint.helpers.UNAUTHORIZED_MSG", [926, 5.101, 1103, 5.101]], ["qname/runpod.endpoint.helpers.UNAUTHORIZED_MSG", [1104, 11.499]], ["docstring/runpod.endpoint.helpers.UNAUTHORIZED_MSG", []], ["kind/runpod.endpoint.helpers.UNAUTHORIZED_MSG", [307, -2.441]], ["name/runpod.endpoint.helpers.API_KEY_NOT_SET_MSG", [1105, 34.496]], ["names/runpod.endpoint.helpers.API_KEY_NOT_SET_MSG", [5, 1.648, 68, 2.071, 1103, 3.117, 1106, 2.322, 1107, 3.42]], ["qname/runpod.endpoint.helpers.API_KEY_NOT_SET_MSG", [1108, 11.499]], ["docstring/runpod.endpoint.helpers.API_KEY_NOT_SET_MSG", []], ["kind/runpod.endpoint.helpers.API_KEY_NOT_SET_MSG", [307, -2.441]], ["name/runpod.endpoint.helpers.is_completed", [1109, 34.496]], ["names/runpod.endpoint.helpers.is_completed", [357, 4.032, 1110, 5.599]], ["qname/runpod.endpoint.helpers.is_completed", [1111, 11.499]], ["docstring/runpod.endpoint.helpers.is_completed", [109, 1.609, 145, 2.649, 172, 2.517, 239, 3.518, 333, 3.174, 445, 3.518, 866, 3.174, 1099, 4.141, 1112, 4.545]], ["kind/runpod.endpoint.helpers.is_completed", [62, -1.166]], ["name/runpod.endpoint.runner.RunPodClient", [1113, 68.993]], ["names/runpod.endpoint.runner.RunPodClient", [34, 3.271, 127, 3.755, 685, 6.651]], ["qname/runpod.endpoint.runner.RunPodClient", [1114, 22.998]], ["docstring/runpod.endpoint.runner.RunPodClient", [31, 4.803, 127, 5.249, 253, 9.298, 685, 9.298]], ["kind/runpod.endpoint.runner.RunPodClient", [143, -4.439]], ["name/runpod.endpoint.runner.RunPodClient.__init__", [374, 20.109]], ["names/runpod.endpoint.runner.RunPodClient.__init__", [375, 4.143]], ["qname/runpod.endpoint.runner.RunPodClient.__init__", [1115, 11.499]], ["docstring/runpod.endpoint.runner.RunPodClient.__init__", [5, 2.328, 363, 2.925, 581, 5.412, 917, 3.599, 1116, 4.402, 1117, 3.908, 1118, 4.402]], ["kind/runpod.endpoint.runner.RunPodClient.__init__", [326, -1.676]], ["name/runpod.endpoint.runner.RunPodClient.rp_session", [1119, 34.496]], ["names/runpod.endpoint.runner.RunPodClient.rp_session", [100, 2.879, 447, 3.615]], ["qname/runpod.endpoint.runner.RunPodClient.rp_session", [1120, 11.499]], ["docstring/runpod.endpoint.runner.RunPodClient.rp_session", []], ["kind/runpod.endpoint.runner.RunPodClient.rp_session", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.runner.RunPodClient.headers", [652, 24.089]], ["names/runpod.endpoint.runner.RunPodClient.headers", [652, 4.963]], ["qname/runpod.endpoint.runner.RunPodClient.headers", [1121, 11.499]], ["docstring/runpod.endpoint.runner.RunPodClient.headers", []], ["kind/runpod.endpoint.runner.RunPodClient.headers", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.runner.RunPodClient.endpoint_url_base", [1122, 29.413]], ["names/runpod.endpoint.runner.RunPodClient.endpoint_url_base", [31, 1.718, 424, 2.443, 659, 3.136]], ["qname/runpod.endpoint.runner.RunPodClient.endpoint_url_base", [1123, 11.499]], ["docstring/runpod.endpoint.runner.RunPodClient.endpoint_url_base", []], ["kind/runpod.endpoint.runner.RunPodClient.endpoint_url_base", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.runner.RunPodClient._request", [1124, 34.496]], ["names/runpod.endpoint.runner.RunPodClient._request", [172, 3.937]], ["qname/runpod.endpoint.runner.RunPodClient._request", [1125, 11.499]], ["docstring/runpod.endpoint.runner.RunPodClient._request", [27, 0.862, 31, 1.206, 109, 0.837, 160, 1.215, 163, 1.403, 169, 1.912, 172, 1.796, 224, 2.623, 225, 1.331, 255, 0.91, 326, 0.888, 367, 0.68, 406, 0.91, 413, 0.862, 432, 1.111, 502, 0.939, 512, 0.91, 521, 1.829, 523, 1.65, 753, 1.054, 838, 1.188, 866, 1.65, 917, 0.971, 1062, 0.971, 1097, 1.054, 1118, 1.188, 1126, 1.303, 1127, 1.009, 1128, 0.939, 1129, 0.971, 1130, 1.009, 1131, 1.303, 1132, 1.303, 1133, 1.303, 1134, 1.303]], ["kind/runpod.endpoint.runner.RunPodClient._request", [326, -1.676]], ["name/runpod.endpoint.runner.RunPodClient.post", [502, 24.84]], ["names/runpod.endpoint.runner.RunPodClient.post", [502, 5.118]], ["qname/runpod.endpoint.runner.RunPodClient.post", [1135, 11.499]], ["docstring/runpod.endpoint.runner.RunPodClient.post", [31, 2.887, 502, 5.589]], ["kind/runpod.endpoint.runner.RunPodClient.post", [326, -1.676]], ["name/runpod.endpoint.runner.RunPodClient.get", [241, 15.025]], ["names/runpod.endpoint.runner.RunPodClient.get", [241, 3.096]], ["qname/runpod.endpoint.runner.RunPodClient.get", [1136, 11.499]], ["docstring/runpod.endpoint.runner.RunPodClient.get", [31, 3.212]], ["kind/runpod.endpoint.runner.RunPodClient.get", [326, -1.676]], ["name/runpod.endpoint.runner.Job", [174, 19.532]], ["names/runpod.endpoint.runner.Job", [174, 4.024]], ["qname/runpod.endpoint.runner.Job", [1137, 22.998]], ["docstring/runpod.endpoint.runner.Job", [0, 4.217, 127, 4.842, 174, 3.372, 365, 8.577, 1138, 10.852]], ["kind/runpod.endpoint.runner.Job", [143, -4.439]], ["name/runpod.endpoint.runner.Job.__init__", [374, 20.109]], ["names/runpod.endpoint.runner.Job.__init__", [375, 4.143]], ["qname/runpod.endpoint.runner.Job.__init__", [1139, 11.499]], ["docstring/runpod.endpoint.runner.Job.__init__", [31, 1.682, 172, 1.524, 174, 1.629, 247, 2.055, 367, 1.435, 368, 2.226, 406, 1.922, 432, 2.347, 581, 2.13, 685, 1.982, 1069, 1.922, 1116, 2.508, 1117, 3.657, 1140, 4.119]], ["kind/runpod.endpoint.runner.Job.__init__", [326, -1.676]], ["name/runpod.endpoint.runner.Job.endpoint_id", [1069, 24.089]], ["names/runpod.endpoint.runner.Job.endpoint_id", [31, 2.082, 247, 2.545]], ["qname/runpod.endpoint.runner.Job.endpoint_id", [1141, 11.499]], ["docstring/runpod.endpoint.runner.Job.endpoint_id", []], ["kind/runpod.endpoint.runner.Job.endpoint_id", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.runner.Job.job_id", [368, 27.905]], ["names/runpod.endpoint.runner.Job.job_id", [174, 1.585, 247, 2.545]], ["qname/runpod.endpoint.runner.Job.job_id", [1142, 11.499]], ["docstring/runpod.endpoint.runner.Job.job_id", []], ["kind/runpod.endpoint.runner.Job.job_id", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.runner.Job.rp_client", [1143, 31.431]], ["names/runpod.endpoint.runner.Job.rp_client", [100, 2.879, 685, 4.032]], ["qname/runpod.endpoint.runner.Job.rp_client", [1144, 11.499]], ["docstring/runpod.endpoint.runner.Job.rp_client", []], ["kind/runpod.endpoint.runner.Job.rp_client", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.runner.Job.job_status", [1145, 31.431]], ["names/runpod.endpoint.runner.Job.job_status", [174, 1.585, 807, 3.459]], ["qname/runpod.endpoint.runner.Job.job_status", [1146, 11.499]], ["docstring/runpod.endpoint.runner.Job.job_status", []], ["kind/runpod.endpoint.runner.Job.job_status", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.runner.Job.job_output", [1147, 31.431]], ["names/runpod.endpoint.runner.Job.job_output", [174, 1.585, 373, 2.802]], ["qname/runpod.endpoint.runner.Job.job_output", [1148, 11.499]], ["docstring/runpod.endpoint.runner.Job.job_output", []], ["kind/runpod.endpoint.runner.Job.job_output", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.runner.Job._fetch_job", [1149, 31.431]], ["names/runpod.endpoint.runner.Job._fetch_job", [174, 1.585, 1150, 4.774]], ["qname/runpod.endpoint.runner.Job._fetch_job", [1151, 11.499]], ["docstring/runpod.endpoint.runner.Job._fetch_job", [109, 1.825, 339, 4.396, 521, 3.99, 866, 3.6, 917, 3.841, 1152, 4.697, 1153, 4.396]], ["kind/runpod.endpoint.runner.Job._fetch_job", [326, -1.676]], ["name/runpod.endpoint.runner.Job.status", [807, 21.313]], ["names/runpod.endpoint.runner.Job.status", [807, 4.391]], ["qname/runpod.endpoint.runner.Job.status", [1154, 11.499]], ["docstring/runpod.endpoint.runner.Job.status", [109, 2.286, 172, 3.576, 174, 1.828, 866, 4.508]], ["kind/runpod.endpoint.runner.Job.status", [326, -1.676]], ["name/runpod.endpoint.runner.Job.output", [373, 17.266]], ["names/runpod.endpoint.runner.Job.output", [373, 3.558]], ["qname/runpod.endpoint.runner.Job.output", [1155, 11.499]], ["docstring/runpod.endpoint.runner.Job.output", [109, 1.187, 163, 1.991, 172, 1.857, 174, 0.949, 225, 1.888, 255, 2.342, 367, 1.749, 373, 1.679, 413, 2.219, 523, 2.342, 1062, 2.498, 1127, 2.596, 1128, 2.415, 1129, 2.498, 1130, 2.596]], ["kind/runpod.endpoint.runner.Job.output", [326, -1.676]], ["name/runpod.endpoint.runner.Job.stream", [466, 17.987]], ["names/runpod.endpoint.runner.Job.stream", [466, 3.706]], ["qname/runpod.endpoint.runner.Job.stream", [1156, 11.499]], ["docstring/runpod.endpoint.runner.Job.stream", [109, 1.957, 172, 3.061, 174, 1.565, 373, 2.766, 465, 3.112, 467, 4.712]], ["kind/runpod.endpoint.runner.Job.stream", [326, -1.676]], ["name/runpod.endpoint.runner.Job.cancel", [1157, 25.698]], ["names/runpod.endpoint.runner.Job.cancel", [1157, 5.295]], ["qname/runpod.endpoint.runner.Job.cancel", [1158, 11.499]], ["docstring/runpod.endpoint.runner.Job.cancel", [109, 1.138, 163, 1.908, 172, 1.78, 174, 0.91, 255, 2.244, 367, 1.675, 413, 2.126, 461, 1.84, 1062, 2.394, 1127, 2.487, 1128, 2.314, 1129, 2.394, 1130, 2.487, 1157, 3.818, 1159, 2.74]], ["kind/runpod.endpoint.runner.Job.cancel", [326, -1.676]], ["name/runpod.endpoint.runner.Endpoint", [31, 25.662]], ["names/runpod.endpoint.runner.Endpoint", [31, 5.287]], ["qname/runpod.endpoint.runner.Endpoint", [1160, 22.998]], ["docstring/runpod.endpoint.runner.Endpoint", [0, 3.914, 31, 4.111, 85, 9.424, 127, 4.493, 174, 3.129, 1138, 10.071]], ["kind/runpod.endpoint.runner.Endpoint", [143, -4.439]], ["name/runpod.endpoint.runner.Endpoint.__init__", [374, 20.109]], ["names/runpod.endpoint.runner.Endpoint.__init__", [375, 4.143]], ["qname/runpod.endpoint.runner.Endpoint.__init__", [1161, 11.499]], ["docstring/runpod.endpoint.runner.Endpoint.__init__", [31, 2.28, 247, 1.094, 367, 1.255, 406, 1.681, 554, 1.634, 581, 1.863, 729, 2.676, 1028, 4.28, 1069, 1.681, 1117, 1.947, 1140, 2.193, 1162, 2.407, 1163, 2.407, 1164, 2.407, 1165, 2.407, 1166, 2.407, 1167, 2.407]], ["kind/runpod.endpoint.runner.Endpoint.__init__", [326, -1.676]], ["name/runpod.endpoint.runner.Endpoint.endpoint_id", [1069, 24.089]], ["names/runpod.endpoint.runner.Endpoint.endpoint_id", [31, 2.082, 247, 2.545]], ["qname/runpod.endpoint.runner.Endpoint.endpoint_id", [1168, 11.499]], ["docstring/runpod.endpoint.runner.Endpoint.endpoint_id", []], ["kind/runpod.endpoint.runner.Endpoint.endpoint_id", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.runner.Endpoint.rp_client", [1143, 31.431]], ["names/runpod.endpoint.runner.Endpoint.rp_client", [100, 2.879, 685, 4.032]], ["qname/runpod.endpoint.runner.Endpoint.rp_client", [1169, 11.499]], ["docstring/runpod.endpoint.runner.Endpoint.rp_client", []], ["kind/runpod.endpoint.runner.Endpoint.rp_client", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.runner.Endpoint.run", [127, 14.023]], ["names/runpod.endpoint.runner.Endpoint.run", [127, 2.889]], ["qname/runpod.endpoint.runner.Endpoint.run", [1170, 11.499]], ["docstring/runpod.endpoint.runner.Endpoint.run", [31, 2.042, 109, 1.242, 127, 2.232, 151, 2.837, 172, 1.942, 174, 0.993, 273, 2.994, 367, 1.828, 406, 2.449, 1117, 2.837, 1171, 3.195]], ["kind/runpod.endpoint.runner.Endpoint.run", [326, -1.676]], ["name/runpod.endpoint.runner.Endpoint.run_sync", [1172, 34.496]], ["names/runpod.endpoint.runner.Endpoint.run_sync", [113, 4.032, 127, 2.276]], ["qname/runpod.endpoint.runner.Endpoint.run_sync", [1173, 11.499]], ["docstring/runpod.endpoint.runner.Endpoint.run_sync", [31, 2.383, 127, 1.744, 151, 3.471, 273, 3.493, 367, 2.237, 406, 2.996, 1171, 3.91, 1174, 4.291]], ["kind/runpod.endpoint.runner.Endpoint.run_sync", [326, -1.676]], ["name/runpod.endpoint.runner.Endpoint.health", [1175, 25.698]], ["names/runpod.endpoint.runner.Endpoint.health", [1175, 5.295]], ["qname/runpod.endpoint.runner.Endpoint.health", [1176, 11.499]], ["docstring/runpod.endpoint.runner.Endpoint.health", [31, 1.147, 149, 1.544, 163, 1.831, 172, 1.708, 255, 2.154, 314, 1.798, 367, 1.608, 413, 2.04, 1062, 2.297, 1127, 2.387, 1128, 2.221, 1129, 2.297, 1130, 2.387, 1159, 2.63, 1175, 2.297, 1177, 3.084, 1178, 3.084]], ["kind/runpod.endpoint.runner.Endpoint.health", [326, -1.676]], ["name/runpod.endpoint.runner.Endpoint.purge_queue", [1179, 31.431]], ["names/runpod.endpoint.runner.Endpoint.purge_queue", [441, 4.032, 1180, 5.101]], ["qname/runpod.endpoint.runner.Endpoint.purge_queue", [1181, 11.499]], ["docstring/runpod.endpoint.runner.Endpoint.purge_queue", [109, 1.05, 163, 1.761, 172, 1.642, 174, 0.839, 255, 2.07, 367, 1.546, 413, 1.961, 441, 2.135, 461, 1.698, 941, 2.701, 1062, 2.209, 1127, 2.295, 1128, 2.135, 1129, 2.209, 1130, 2.295, 1159, 2.528, 1182, 4.377]], ["kind/runpod.endpoint.runner.Endpoint.purge_queue", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job", [174, 19.532]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job", [174, 4.024]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job", [1183, 22.998]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job", [31, 4.43, 135, 10.155, 143, 4.321, 174, 3.372, 365, 8.577]], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job", [143, -4.439]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.__init__", [374, 20.109]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.__init__", [375, 4.143]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.__init__", [1184, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.__init__", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.__init__", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id", [1069, 24.089]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id", [31, 2.082, 247, 2.545]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id", [1185, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.job_id", [368, 27.905]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.job_id", [174, 1.585, 247, 2.545]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.job_id", [1186, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.job_id", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.job_id", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.headers", [652, 24.089]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.headers", [652, 4.963]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.headers", [1187, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.headers", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.headers", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.session", [447, 22.275]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.session", [447, 4.59]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.session", [1188, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.session", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.session", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base", [1122, 29.413]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base", [31, 1.718, 424, 2.443, 659, 3.136]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base", [1189, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.job_status", [1145, 31.431]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.job_status", [174, 1.585, 807, 3.459]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.job_status", [1190, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.job_status", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.job_status", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.job_output", [1147, 31.431]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.job_output", [174, 1.585, 373, 2.802]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.job_output", [1191, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.job_output", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.job_output", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job", [1149, 31.431]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job", [174, 1.585, 1150, 4.774]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job", [1192, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job", [109, 1.242, 174, 0.993, 339, 2.99, 367, 1.828, 424, 1.855, 512, 2.449, 521, 2.714, 866, 3.834, 1152, 3.195, 1153, 2.99, 1193, 3.507, 1194, 5.491]], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.status", [807, 21.313]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.status", [807, 4.391]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.status", [1195, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.status", [109, 1.825, 174, 1.459, 241, 2.245, 256, 3.99, 866, 3.6, 919, 4.17, 1196, 5.155]], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.status", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion", [1197, 34.496]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion", [1128, 3.326, 1198, 4.208, 1199, 4.618]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion", [1200, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.output", [373, 17.266]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.output", [373, 3.558]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.output", [1201, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.output", [5, 1.771, 109, 1.301, 145, 2.142, 174, 1.974, 256, 2.844, 373, 1.839, 917, 2.737, 919, 4.607, 1128, 2.646, 1202, 3.675]], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.output", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.stream", [466, 17.987]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.stream", [466, 3.706]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.stream", [1203, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.stream", [109, 1.957, 172, 3.061, 174, 1.565, 373, 2.766, 465, 3.112, 467, 4.712]], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.stream", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.cancel", [1157, 25.698]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.cancel", [1157, 5.295]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.cancel", [1204, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Job.cancel", [109, 1.825, 174, 1.459, 373, 2.58, 392, 3.121, 1157, 5.457, 1205, 5.155]], ["kind/runpod.endpoint.asyncio.asyncio_runner.Job.cancel", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint", [31, 25.662]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint", [31, 5.287]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint", [1206, 22.998]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Endpoint", [31, 5.244, 127, 5.731, 143, 5.115]], ["kind/runpod.endpoint.asyncio.asyncio_runner.Endpoint", [143, -4.439]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__", [374, 20.109]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__", [375, 4.143]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__", [1207, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id", [1069, 24.089]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id", [31, 2.082, 247, 2.545]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id", [1208, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url", [1209, 34.496]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url", [31, 2.082, 424, 2.962]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url", [1210, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers", [652, 24.089]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers", [652, 4.963]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers", [1211, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.session", [447, 22.275]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.session", [447, 4.59]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.session", [1212, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Endpoint.session", []], ["kind/runpod.endpoint.asyncio.asyncio_runner.Endpoint.session", [301, -1.132, 320, -1.567]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.run", [127, 14.023]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.run", [127, 2.889]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.run", [1213, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Endpoint.run", [31, 1.435, 109, 1.367, 127, 1.569, 174, 1.093, 273, 3.224, 367, 2.012, 546, 3.516, 792, 2.292, 1097, 3.122, 1214, 3.859, 1215, 3.859]], ["kind/runpod.endpoint.asyncio.asyncio_runner.Endpoint.run", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.health", [1175, 25.698]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.health", [1175, 5.295]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.health", [1216, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Endpoint.health", [31, 2.861, 109, 1.957, 314, 3.222, 1175, 5.73]], ["kind/runpod.endpoint.asyncio.asyncio_runner.Endpoint.health", [326, -1.676]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue", [1179, 31.431]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue", [441, 4.032, 1180, 5.101]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue", [1217, 11.499]], ["docstring/runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue", [31, 2.056, 109, 1.957, 441, 3.98, 866, 3.859, 1182, 7.009]], ["kind/runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue", [326, -1.676]], ["name/runpod.SSH_KEY_PATH", [1218, 31.431]], ["names/runpod.SSH_KEY_PATH", [92, 2.012, 512, 3.225, 1106, 3.136]], ["qname/runpod.SSH_KEY_PATH", [1219, 11.499]], ["docstring/runpod.SSH_KEY_PATH", []], ["kind/runpod.SSH_KEY_PATH", [307, -2.441]], ["name/runpod.profile", [1220, 31.431]], ["names/runpod.profile", [1220, 6.476]], ["qname/runpod.profile", [1221, 11.499]], ["docstring/runpod.profile", []], ["kind/runpod.profile", [301, -1.552]], ["name/runpod._credentials", [1222, 34.496]], ["names/runpod._credentials", [1081, 5.749]], ["qname/runpod._credentials", [1223, 11.499]], ["docstring/runpod._credentials", []], ["kind/runpod._credentials", [301, -1.552]], ["name/runpod.api_key", [1224, 34.496]], ["names/runpod.api_key", [5, 2.698, 1106, 3.801]], ["qname/runpod.api_key", [1225, 11.499]], ["docstring/runpod.api_key", []], ["kind/runpod.api_key", [301, -1.552]], ["name/runpod.api_url_base", [1226, 34.496]], ["names/runpod.api_url_base", [5, 2.225, 424, 2.443, 659, 3.136]], ["qname/runpod.api_url_base", [1227, 11.499]], ["docstring/runpod.api_url_base", []], ["kind/runpod.api_url_base", [301, -1.552]], ["name/runpod.endpoint_url_base", [1122, 29.413]], ["names/runpod.endpoint_url_base", [31, 1.718, 424, 2.443, 659, 3.136]], ["qname/runpod.endpoint_url_base", [1228, 11.499]], ["docstring/runpod.endpoint_url_base", []], ["kind/runpod.endpoint_url_base", [301, -1.552]], ["name/runpod.cli.groups.ssh.functions.SSH_FILES", [1229, 34.496]], ["names/runpod.cli.groups.ssh.functions.SSH_FILES", [92, 2.439, 661, 4.334]], ["qname/runpod.cli.groups.ssh.functions.SSH_FILES", [1230, 11.499]], ["docstring/runpod.cli.groups.ssh.functions.SSH_FILES", []], ["kind/runpod.cli.groups.ssh.functions.SSH_FILES", [307, -2.441]], ["name/runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint", [1231, 34.496]], ["names/runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint", [92, 1.712, 241, 1.712, 1106, 2.668, 1232, 3.581]], ["qname/runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint", [1233, 11.499]], ["docstring/runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint", [92, 3.07, 363, 4.268, 1232, 6.423]], ["kind/runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint", [62, -1.166]], ["name/runpod.cli.groups.ssh.functions.get_user_pub_keys", [1234, 34.496]], ["names/runpod.cli.groups.ssh.functions.get_user_pub_keys", [38, 1.993, 241, 1.712, 1235, 3.581, 1236, 3.581]], ["qname/runpod.cli.groups.ssh.functions.get_user_pub_keys", [1237, 11.499]], ["docstring/runpod.cli.groups.ssh.functions.get_user_pub_keys", [92, 2.812, 363, 3.909, 392, 3.909, 1083, 5.505]], ["kind/runpod.cli.groups.ssh.functions.get_user_pub_keys", [62, -1.166]], ["name/runpod.cli.groups.ssh.functions.generate_ssh_key_pair", [1238, 34.496]], ["names/runpod.cli.groups.ssh.functions.generate_ssh_key_pair", [92, 1.712, 931, 2.538, 1106, 2.668, 1239, 3.581]], ["qname/runpod.cli.groups.ssh.functions.generate_ssh_key_pair", [1240, 11.499]], ["docstring/runpod.cli.groups.ssh.functions.generate_ssh_key_pair", [92, 1.243, 363, 3.572, 367, 1.488, 387, 1.888, 465, 1.607, 659, 1.938, 667, 3.605, 984, 2.434, 1048, 2.601, 1235, 2.601, 1239, 4.244, 1241, 2.855, 1242, 4.658, 1243, 2.855]], ["kind/runpod.cli.groups.ssh.functions.generate_ssh_key_pair", [62, -1.166]], ["name/runpod.cli.groups.ssh.functions.add_ssh_key", [1244, 34.496]], ["names/runpod.cli.groups.ssh.functions.add_ssh_key", [92, 2.012, 398, 2.982, 1106, 3.136]], ["qname/runpod.cli.groups.ssh.functions.add_ssh_key", [1245, 11.499]], ["docstring/runpod.cli.groups.ssh.functions.add_ssh_key", [0, 1.242, 92, 1.527, 314, 2.044, 363, 3.324, 392, 2.123, 398, 2.264, 755, 3.195, 895, 2.381, 984, 2.99, 1083, 2.99, 1087, 2.714, 1129, 2.612, 1246, 3.195]], ["kind/runpod.cli.groups.ssh.functions.add_ssh_key", [62, -1.166]], ["name/runpod.cli.STOP_EVENT", [1247, 34.496]], ["names/runpod.cli.STOP_EVENT", [550, 4.334, 733, 3.801]], ["qname/runpod.cli.STOP_EVENT", [1248, 11.499]], ["docstring/runpod.cli.STOP_EVENT", []], ["kind/runpod.cli.STOP_EVENT", [307, -2.441]], ["name/runpod.cli.BASE_DOCKER_IMAGE", [1249, 34.496]], ["names/runpod.cli.BASE_DOCKER_IMAGE", [659, 3.136, 691, 4.208, 1000, 3.938]], ["qname/runpod.cli.BASE_DOCKER_IMAGE", [1250, 11.499]], ["docstring/runpod.cli.BASE_DOCKER_IMAGE", []], ["kind/runpod.cli.BASE_DOCKER_IMAGE", [307, -2.441]], ["name/runpod.cli.GPU_TYPES", [1251, 34.496]], ["names/runpod.cli.GPU_TYPES", [46, 3.459, 966, 5.101]], ["qname/runpod.cli.GPU_TYPES", [1252, 11.499]], ["docstring/runpod.cli.GPU_TYPES", []], ["kind/runpod.cli.GPU_TYPES", [307, -2.441]], ["name/runpod.cli.ENV_VARS", [1253, 34.496]], ["names/runpod.cli.ENV_VARS", [1020, 4.774, 1254, 5.599]], ["qname/runpod.cli.ENV_VARS", [1255, 11.499]], ["docstring/runpod.cli.ENV_VARS", []], ["kind/runpod.cli.ENV_VARS", [307, -2.441]], ["name/runpod.cli.utils.rp_info.get_pod_ssh_ip_port", [1256, 34.496]], ["names/runpod.cli.utils.rp_info.get_pod_ssh_ip_port", [34, 1.211, 92, 1.49, 241, 1.49, 892, 2.463, 1257, 2.916]], ["qname/runpod.cli.utils.rp_info.get_pod_ssh_ip_port", [1258, 11.499]], ["docstring/runpod.cli.utils.rp_info.get_pod_ssh_ip_port", [34, 1.957, 92, 2.407, 109, 1.957, 892, 3.98, 1257, 4.712, 1259, 5.527]], ["kind/runpod.cli.utils.rp_info.get_pod_ssh_ip_port", [62, -1.166]], ["name/runpod.cli.utils.rp_userspace.find_ssh_key_file", [1260, 34.496]], ["names/runpod.cli.utils.rp_userspace.find_ssh_key_file", [72, 1.807, 92, 1.712, 1106, 2.668, 1261, 3.581]], ["qname/runpod.cli.utils.rp_userspace.find_ssh_key_file", [1262, 11.499]], ["docstring/runpod.cli.utils.rp_userspace.find_ssh_key_file", [34, 0.779, 72, 1.723, 92, 0.958, 109, 1.734, 116, 1.421, 126, 1.584, 160, 1.131, 207, 4.462, 340, 1.876, 363, 3.927, 443, 2.005, 445, 1.703, 512, 1.536, 626, 2.005, 1218, 2.005, 1261, 2.005, 1263, 3.196]], ["kind/runpod.cli.utils.rp_userspace.find_ssh_key_file", [62, -1.166]], ["name/runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS", [1264, 34.496]], ["names/runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS", [1265, 5.599, 1266, 5.599]], ["qname/runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS", [1267, 11.499]], ["docstring/runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS", []], ["kind/runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS", [307, -2.441]], ["name/runpod.cli.utils.rp_runpodignore.get_ignore_list", [1268, 34.496]], ["names/runpod.cli.utils.rp_runpodignore.get_ignore_list", [110, 2.408, 241, 2.012, 1269, 3.938]], ["qname/runpod.cli.utils.rp_runpodignore.get_ignore_list", [1270, 11.499]], ["docstring/runpod.cli.utils.rp_runpodignore.get_ignore_list", [72, 3.368, 107, 4.697, 108, 4.396, 109, 1.825, 110, 2.688, 111, 4.17]], ["kind/runpod.cli.utils.rp_runpodignore.get_ignore_list", [62, -1.166]], ["name/runpod.cli.utils.rp_runpodignore.should_ignore", [1271, 34.496]], ["names/runpod.cli.utils.rp_runpodignore.should_ignore", [1269, 4.774, 1272, 5.599]], ["qname/runpod.cli.utils.rp_runpodignore.should_ignore", [1273, 11.499]], ["docstring/runpod.cli.utils.rp_runpodignore.should_ignore", [72, 2.541, 109, 1.957, 111, 4.471, 333, 3.859, 538, 4.278, 539, 4.278]], ["kind/runpod.cli.utils.rp_runpodignore.should_ignore", [62, -1.166]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection", [1274, 62.863]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection", [1274, 12.952]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection", [1275, 22.998]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection", [14, 7.211, 92, 5.188, 126, 8.577, 127, 4.842, 128, 8.087]], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection", [143, -4.439]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.__init__", [374, 20.109]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.__init__", [375, 4.143]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.__init__", [1276, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.__init__", []], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.__init__", [326, -1.676]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.pod_id", [996, 24.089]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.pod_id", [34, 1.982, 247, 2.545]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.pod_id", [1277, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.pod_id", []], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.pod_id", [301, -1.132, 320, -1.567]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip", [1278, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip", [34, 1.982, 1257, 4.774]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip", [1279, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip", []], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip", [301, -1.132, 320, -1.567]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.pod_port", [1280, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.pod_port", [34, 1.982, 892, 4.032]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.pod_port", [1281, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.pod_port", []], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.pod_port", [301, -1.132, 320, -1.567]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.key_file", [1282, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.key_file", [72, 2.574, 1106, 3.801]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.key_file", [1283, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.key_file", []], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.key_file", [301, -1.132, 320, -1.567]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.ssh", [92, 15.025]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.ssh", [92, 3.096]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.ssh", [1284, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.ssh", []], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.ssh", [301, -1.132, 320, -1.567]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.__enter__", [759, 31.431]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.__enter__", [760, 6.06]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.__enter__", [1285, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.__enter__", []], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.__enter__", [326, -1.676]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.__exit__", [762, 31.431]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.__exit__", [763, 6.06]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.__exit__", [1286, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.__exit__", []], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.__exit__", [326, -1.676]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options", [1287, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options", [92, 2.012, 241, 2.012, 1288, 4.618]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options", [1289, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options", [34, 2.286, 92, 2.812, 126, 4.649, 1290, 6.456]], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options", [326, -1.676]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler", [898, 31.431]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler", [166, 3.615, 899, 4.529]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler", [1291, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler", [171, 5.782, 899, 6.279]], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler", [326, -1.676]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.run_commands", [1292, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.run_commands", [10, 3.534, 127, 2.276]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.run_commands", [1293, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.run_commands", [14, 3.346, 92, 2.407, 110, 2.882, 127, 2.247, 128, 3.752, 1294, 5.527]], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.run_commands", [326, -1.676]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.put_file", [1295, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.put_file", [72, 2.574, 1296, 5.599]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.put_file", [1297, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.put_file", [72, 2.37, 92, 2.245, 118, 3.6, 128, 3.5, 177, 3.121, 1298, 4.396, 1299, 4.697]], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.put_file", [326, -1.676]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.get_file", [1300, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.get_file", [72, 2.574, 241, 2.439]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.get_file", [1301, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.get_file", [72, 2.37, 92, 2.245, 118, 3.6, 128, 3.5, 177, 3.121, 1150, 4.396, 1299, 4.697]], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.get_file", [326, -1.676]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal", [1302, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal", [161, 3.91, 1303, 5.599]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal", [1304, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal", [92, 2.594, 128, 4.043, 161, 4.159, 491, 5.426, 956, 5.078]], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal", [326, -1.676]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.rsync", [1305, 31.431]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.rsync", [1305, 6.476]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.rsync", [1306, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.rsync", [72, 2.116, 92, 0.882, 108, 1.727, 111, 1.639, 113, 3.941, 116, 4.359, 118, 2.439, 128, 1.375, 160, 1.042, 177, 2.787, 367, 1.056, 387, 2.31, 1307, 2.026, 1308, 2.026, 1309, 1.846, 1310, 2.026]], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.rsync", [326, -1.676]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.close", [1311, 29.413]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.close", [1311, 6.06]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.close", [1312, 11.499]], ["docstring/runpod.cli.utils.ssh_cmd.SSHConnection.close", [92, 3.07, 126, 5.076, 1311, 6.01]], ["kind/runpod.cli.utils.ssh_cmd.SSHConnection.close", [326, -1.676]], ["name/runpod.cli.groups.project.helpers.validate_project_name", [1313, 34.496]], ["names/runpod.cli.groups.project.helpers.validate_project_name", [87, 2.253, 312, 3.326, 315, 2.742]], ["qname/runpod.cli.groups.project.helpers.validate_project_name", [1314, 11.499]], ["docstring/runpod.cli.groups.project.helpers.validate_project_name", [69, 5.456, 87, 3.439, 315, 4.186]], ["kind/runpod.cli.groups.project.helpers.validate_project_name", [62, -1.166]], ["name/runpod.cli.groups.project.helpers.get_project_pod", [1315, 34.496]], ["names/runpod.cli.groups.project.helpers.get_project_pod", [34, 1.635, 87, 2.253, 241, 2.012]], ["qname/runpod.cli.groups.project.helpers.get_project_pod", [1316, 11.499]], ["docstring/runpod.cli.groups.project.helpers.get_project_pod", [34, 1.609, 87, 2.217, 109, 2.368, 314, 2.649, 895, 4.54, 996, 3.174, 1263, 3.875]], ["kind/runpod.cli.groups.project.helpers.get_project_pod", [62, -1.166]], ["name/runpod.cli.groups.project.helpers.get_project_endpoint", [1317, 34.496]], ["names/runpod.cli.groups.project.helpers.get_project_endpoint", [31, 1.718, 87, 2.253, 241, 2.012]], ["qname/runpod.cli.groups.project.helpers.get_project_endpoint", [1318, 11.499]], ["docstring/runpod.cli.groups.project.helpers.get_project_endpoint", [31, 2.487, 87, 2.217, 109, 2.368, 314, 2.649, 895, 4.54, 1263, 3.875]], ["kind/runpod.cli.groups.project.helpers.get_project_endpoint", [62, -1.166]], ["name/runpod.cli.groups.project.helpers.copy_template_files", [1319, 34.496]], ["names/runpod.cli.groups.project.helpers.copy_template_files", [631, 3.326, 661, 3.575, 1320, 4.618]], ["qname/runpod.cli.groups.project.helpers.copy_template_files", [1321, 11.499]], ["docstring/runpod.cli.groups.project.helpers.copy_template_files", [37, 4.043, 72, 2.738, 116, 3.845, 1298, 5.078, 1322, 5.955]], ["kind/runpod.cli.groups.project.helpers.copy_template_files", [62, -1.166]], ["name/runpod.cli.groups.project.helpers.attempt_pod_launch", [1323, 34.496]], ["names/runpod.cli.groups.project.helpers.attempt_pod_launch", [34, 1.635, 161, 3.225, 1324, 4.208]], ["qname/runpod.cli.groups.project.helpers.attempt_pod_launch", [1325, 11.499]], ["docstring/runpod.cli.groups.project.helpers.attempt_pod_launch", [34, 2.109, 70, 4.288, 161, 4.159, 406, 4.159, 1324, 5.426]], ["kind/runpod.cli.groups.project.helpers.attempt_pod_launch", [62, -1.166]], ["name/runpod.cli.groups.project.helpers.load_project_config", [1326, 34.496]], ["names/runpod.cli.groups.project.helpers.load_project_config", [59, 2.692, 87, 2.253, 1327, 4.208]], ["qname/runpod.cli.groups.project.helpers.load_project_config", [1328, 11.499]], ["docstring/runpod.cli.groups.project.helpers.load_project_config", [59, 3.764, 72, 2.968, 87, 3.15, 1327, 5.883]], ["kind/runpod.cli.groups.project.helpers.load_project_config", [62, -1.166]], ["name/runpod.cli.utils.rp_sync.WatcherHandler", [1329, 68.993]], ["names/runpod.cli.utils.rp_sync.WatcherHandler", [166, 7.231, 1330, 9.547]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler", [1331, 22.998]], ["docstring/runpod.cli.utils.rp_sync.WatcherHandler", [113, 7.959, 115, 10.071, 116, 9.934, 117, 10.071, 118, 7.718]], ["kind/runpod.cli.utils.rp_sync.WatcherHandler", [143, -4.439]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.__init__", [374, 20.109]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.__init__", [375, 4.143]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.__init__", [1332, 11.499]], ["docstring/runpod.cli.utils.rp_sync.WatcherHandler.__init__", []], ["kind/runpod.cli.utils.rp_sync.WatcherHandler.__init__", [326, -1.676]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.action_function", [1333, 34.496]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.action_function", [62, 1.067, 1334, 5.599]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.action_function", [1335, 11.499]], ["docstring/runpod.cli.utils.rp_sync.WatcherHandler.action_function", []], ["kind/runpod.cli.utils.rp_sync.WatcherHandler.action_function", [301, -1.132, 320, -1.567]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.local_path", [1309, 31.431]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.local_path", [177, 3.39, 512, 3.91]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.local_path", [1336, 11.499]], ["docstring/runpod.cli.utils.rp_sync.WatcherHandler.local_path", []], ["kind/runpod.cli.utils.rp_sync.WatcherHandler.local_path", [301, -1.132, 320, -1.567]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.ignore_list", [1337, 34.496]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.ignore_list", [110, 2.919, 1269, 4.774]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.ignore_list", [1338, 11.499]], ["docstring/runpod.cli.utils.rp_sync.WatcherHandler.ignore_list", []], ["kind/runpod.cli.utils.rp_sync.WatcherHandler.ignore_list", [301, -1.132, 320, -1.567]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.debouncer", [1339, 31.431]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.debouncer", [1339, 6.476]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.debouncer", [1340, 11.499]], ["docstring/runpod.cli.utils.rp_sync.WatcherHandler.debouncer", []], ["kind/runpod.cli.utils.rp_sync.WatcherHandler.debouncer", [301, -1.132, 320, -1.567]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.on_any_event", [1341, 34.496]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.on_any_event", [445, 3.575, 550, 3.575, 1342, 4.618]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.on_any_event", [1343, 11.499]], ["docstring/runpod.cli.utils.rp_sync.WatcherHandler.on_any_event", [253, 5.589, 550, 6.008]], ["kind/runpod.cli.utils.rp_sync.WatcherHandler.on_any_event", [326, -1.676]], ["name/runpod.cli.utils.rp_sync.start_watcher", [1344, 34.496]], ["names/runpod.cli.utils.rp_sync.start_watcher", [152, 2.962, 1330, 4.774]], ["qname/runpod.cli.utils.rp_sync.start_watcher", [1345, 11.499]], ["docstring/runpod.cli.utils.rp_sync.start_watcher", [152, 4.106, 1330, 6.618]], ["kind/runpod.cli.utils.rp_sync.start_watcher", [62, -1.166]], ["name/runpod.cli.utils.rp_sync.sync_directory", [1346, 34.496]], ["names/runpod.cli.utils.rp_sync.sync_directory", [113, 4.032, 1347, 5.599]], ["qname/runpod.cli.utils.rp_sync.sync_directory", [1348, 11.499]], ["docstring/runpod.cli.utils.rp_sync.sync_directory", [113, 4.288, 116, 5.229, 118, 4.159, 177, 3.605]], ["kind/runpod.cli.utils.rp_sync.sync_directory", [62, -1.166]], ["name/runpod.cli.groups.project.functions.STARTER_TEMPLATES", [1349, 34.496]], ["names/runpod.cli.groups.project.functions.STARTER_TEMPLATES", [35, 4.774, 1350, 5.599]], ["qname/runpod.cli.groups.project.functions.STARTER_TEMPLATES", [1351, 11.499]], ["docstring/runpod.cli.groups.project.functions.STARTER_TEMPLATES", []], ["kind/runpod.cli.groups.project.functions.STARTER_TEMPLATES", [307, -2.441]], ["name/runpod.cli.groups.project.functions._launch_dev_pod", [1352, 34.496]], ["names/runpod.cli.groups.project.functions._launch_dev_pod", [34, 1.635, 161, 3.225, 1353, 4.208]], ["qname/runpod.cli.groups.project.functions._launch_dev_pod", [1354, 11.499]], ["docstring/runpod.cli.groups.project.functions._launch_dev_pod", [34, 2.496, 161, 4.922, 857, 5.076]], ["kind/runpod.cli.groups.project.functions._launch_dev_pod", [62, -1.166]], ["name/runpod.cli.groups.project.functions.create_new_project", [1355, 34.496]], ["names/runpod.cli.groups.project.functions.create_new_project", [87, 2.253, 324, 2.915, 869, 3.225]], ["qname/runpod.cli.groups.project.functions.create_new_project", [1356, 11.499]], ["docstring/runpod.cli.groups.project.functions.create_new_project", [87, 3.439, 324, 4.45, 792, 4.186]], ["kind/runpod.cli.groups.project.functions.create_new_project", [62, -1.166]], ["name/runpod.cli.groups.project.functions.start_project", [1357, 34.496]], ["names/runpod.cli.groups.project.functions.start_project", [87, 2.731, 152, 2.962]], ["qname/runpod.cli.groups.project.functions.start_project", [1358, 11.499]], ["docstring/runpod.cli.groups.project.functions.start_project", [34, 1.263, 59, 0.659, 72, 0.954, 87, 3.338, 92, 0.492, 138, 0.73, 152, 0.598, 160, 0.581, 243, 1.546, 295, 0.768, 314, 0.659, 315, 0.671, 407, 1.03, 515, 1.03, 730, 4.272, 792, 1.709, 857, 0.814, 895, 1.954, 1015, 1.679, 1087, 0.875, 1097, 0.915, 1298, 0.964, 1359, 1.03, 1360, 3.551, 1361, 1.891, 1362, 1.131, 1363, 1.131, 1364, 1.131, 1365, 1.131]], ["kind/runpod.cli.groups.project.functions.start_project", [62, -1.166]], ["name/runpod.cli.groups.project.functions.create_project_endpoint", [1366, 34.496]], ["names/runpod.cli.groups.project.functions.create_project_endpoint", [31, 1.718, 87, 2.253, 869, 3.225]], ["qname/runpod.cli.groups.project.functions.create_project_endpoint", [1367, 11.499]], ["docstring/runpod.cli.groups.project.functions.create_project_endpoint", [31, 1.466, 37, 2.676, 87, 1.923, 145, 1.36, 160, 1.2, 239, 3.05, 324, 2.487, 392, 1.413, 753, 1.888, 792, 3.037, 1353, 2.127, 1360, 1.99, 1368, 2.334, 1369, 2.334, 1370, 2.334, 1371, 2.334, 1372, 2.334, 1373, 2.334]], ["kind/runpod.cli.groups.project.functions.create_project_endpoint", [62, -1.166]], ["name/runpod.cli.groups.project.commands.project_cli", [1374, 34.496]], ["names/runpod.cli.groups.project.commands.project_cli", [50, 2.665, 87, 2.731]], ["qname/runpod.cli.groups.project.commands.project_cli", [1375, 11.499]], ["docstring/runpod.cli.groups.project.commands.project_cli", [0, 2.286, 87, 3.15, 792, 3.834, 945, 5.505]], ["kind/runpod.cli.groups.project.commands.project_cli", [62, -1.166]], ["name/runpod.cli.groups.project.commands.new_project_wizard", [1376, 34.496]], ["names/runpod.cli.groups.project.commands.new_project_wizard", [87, 2.253, 324, 2.915, 1377, 3.938]], ["qname/runpod.cli.groups.project.commands.new_project_wizard", [1378, 11.499]], ["docstring/runpod.cli.groups.project.commands.new_project_wizard", [87, 3.439, 324, 4.45, 792, 4.186]], ["kind/runpod.cli.groups.project.commands.new_project_wizard", [62, -1.166]], ["name/runpod.cli.groups.project.commands.start_project_pod", [1379, 34.496]], ["names/runpod.cli.groups.project.commands.start_project_pod", [34, 1.635, 87, 2.253, 152, 2.443]], ["qname/runpod.cli.groups.project.commands.start_project_pod", [1380, 11.499]], ["docstring/runpod.cli.groups.project.commands.start_project_pod", [34, 2.109, 87, 2.905, 152, 3.15, 857, 4.288, 1359, 5.426]], ["kind/runpod.cli.groups.project.commands.start_project_pod", [62, -1.166]], ["name/runpod.cli.groups.project.commands.deploy_project", [1381, 34.496]], ["names/runpod.cli.groups.project.commands.deploy_project", [87, 2.731, 1382, 5.599]], ["qname/runpod.cli.groups.project.commands.deploy_project", [1383, 11.499]], ["docstring/runpod.cli.groups.project.commands.deploy_project", [0, 2.496, 87, 3.439, 945, 6.01]], ["kind/runpod.cli.groups.project.commands.deploy_project", [62, -1.166]], ["name/runpod.cli.groups.config.commands.config_wizard", [1384, 34.496]], ["names/runpod.cli.groups.config.commands.config_wizard", [59, 3.264, 1377, 4.774]], ["qname/runpod.cli.groups.config.commands.config_wizard", [1385, 11.499]], ["docstring/runpod.cli.groups.config.commands.config_wizard", [0, 1.301, 38, 1.864, 50, 1.749, 68, 3.448, 70, 2.646, 152, 1.944, 255, 2.566, 1084, 2.972, 1087, 2.844, 1377, 3.133, 1386, 3.348, 1387, 3.675]], ["kind/runpod.cli.groups.config.commands.config_wizard", [62, -1.166]], ["name/runpod.cli.groups.ssh.commands.ssh_cli", [1388, 34.496]], ["names/runpod.cli.groups.ssh.commands.ssh_cli", [50, 2.665, 92, 2.439]], ["qname/runpod.cli.groups.ssh.commands.ssh_cli", [1389, 11.499]], ["docstring/runpod.cli.groups.ssh.commands.ssh_cli", [70, 4.649, 85, 5.505, 92, 2.812, 363, 3.909]], ["kind/runpod.cli.groups.ssh.commands.ssh_cli", [62, -1.166]], ["name/runpod.cli.groups.ssh.commands.list_keys", [1390, 34.496]], ["names/runpod.cli.groups.ssh.commands.list_keys", [110, 2.919, 1236, 5.101]], ["qname/runpod.cli.groups.ssh.commands.list_keys", [1391, 11.499]], ["docstring/runpod.cli.groups.ssh.commands.list_keys", [38, 3.021, 92, 2.594, 110, 3.105, 363, 3.605, 392, 3.605]], ["kind/runpod.cli.groups.ssh.commands.list_keys", [62, -1.166]], ["name/runpod.cli.groups.ssh.commands.add_key", [1392, 34.496]], ["names/runpod.cli.groups.ssh.commands.add_key", [398, 3.615, 1106, 3.801]], ["qname/runpod.cli.groups.ssh.commands.add_key", [1393, 11.499]], ["docstring/runpod.cli.groups.ssh.commands.add_key", [38, 2.176, 92, 1.869, 180, 2.996, 363, 3.879, 392, 2.598, 398, 2.771, 445, 3.321, 465, 2.416, 1246, 3.91]], ["kind/runpod.cli.groups.ssh.commands.add_key", [62, -1.166]], ["name/runpod.cli.groups.pod.commands.pod_cli", [1394, 34.496]], ["names/runpod.cli.groups.pod.commands.pod_cli", [34, 1.982, 50, 2.665]], ["qname/runpod.cli.groups.pod.commands.pod_cli", [1395, 11.499]], ["docstring/runpod.cli.groups.pod.commands.pod_cli", [34, 2.286, 50, 3.074, 62, 1.23, 67, 4.383]], ["kind/runpod.cli.groups.pod.commands.pod_cli", [62, -1.166]], ["name/runpod.cli.groups.pod.commands.list_pods", [1396, 34.496]], ["names/runpod.cli.groups.pod.commands.list_pods", [32, 4.171, 110, 2.919]], ["qname/runpod.cli.groups.pod.commands.list_pods", [1397, 11.499]], ["docstring/runpod.cli.groups.pod.commands.list_pods", [34, 2.286, 38, 3.275, 110, 3.366, 392, 3.909]], ["kind/runpod.cli.groups.pod.commands.list_pods", [62, -1.166]], ["name/runpod.cli.groups.pod.commands.create_new_pod", [1398, 34.496]], ["names/runpod.cli.groups.pod.commands.create_new_pod", [34, 1.635, 324, 2.915, 869, 3.225]], ["qname/runpod.cli.groups.pod.commands.create_new_pod", [1399, 11.499]], ["docstring/runpod.cli.groups.pod.commands.create_new_pod", [34, 2.748, 792, 4.609]], ["kind/runpod.cli.groups.pod.commands.create_new_pod", [62, -1.166]], ["name/runpod.cli.groups.pod.commands.connect_to_pod", [1400, 34.496]], ["names/runpod.cli.groups.pod.commands.connect_to_pod", [34, 1.635, 126, 3.326, 699, 4.208]], ["qname/runpod.cli.groups.pod.commands.connect_to_pod", [1401, 11.499]], ["docstring/runpod.cli.groups.pod.commands.connect_to_pod", [34, 2.748, 126, 5.589]], ["kind/runpod.cli.groups.pod.commands.connect_to_pod", [62, -1.166]], ["name/runpod.cli.groups.exec.functions.python_over_ssh", [1402, 34.496]], ["names/runpod.cli.groups.exec.functions.python_over_ssh", [92, 2.012, 128, 3.136, 138, 2.982]], ["qname/runpod.cli.groups.exec.functions.python_over_ssh", [1403, 11.499]], ["docstring/runpod.cli.groups.exec.functions.python_over_ssh", [72, 2.738, 92, 2.594, 127, 2.421, 128, 4.043, 138, 3.845]], ["kind/runpod.cli.groups.exec.functions.python_over_ssh", [62, -1.166]], ["name/runpod.cli.groups.exec.helpers.POD_ID_FILE", [1404, 34.496]], ["names/runpod.cli.groups.exec.helpers.POD_ID_FILE", [34, 1.635, 72, 2.123, 247, 2.1]], ["qname/runpod.cli.groups.exec.helpers.POD_ID_FILE", [1405, 11.499]], ["docstring/runpod.cli.groups.exec.helpers.POD_ID_FILE", []], ["kind/runpod.cli.groups.exec.helpers.POD_ID_FILE", [307, -2.441]], ["name/runpod.cli.groups.exec.helpers.get_session_pod", [1406, 34.496]], ["names/runpod.cli.groups.exec.helpers.get_session_pod", [34, 1.635, 241, 2.012, 447, 2.982]], ["qname/runpod.cli.groups.exec.helpers.get_session_pod", [1407, 11.499]], ["docstring/runpod.cli.groups.exec.helpers.get_session_pod", [14, 1.332, 34, 0.779, 38, 1.901, 68, 2.269, 72, 1.012, 77, 1.876, 109, 1.327, 118, 1.536, 127, 0.894, 160, 1.131, 392, 1.332, 447, 2.42, 667, 1.703, 760, 1.876, 996, 4.038, 1087, 1.703, 1386, 2.005, 1408, 2.2, 1409, 2.2, 1410, 2.2]], ["kind/runpod.cli.groups.exec.helpers.get_session_pod", [62, -1.166]], ["name/runpod.cli.groups.exec.commands.exec_cli", [1411, 34.496]], ["names/runpod.cli.groups.exec.commands.exec_cli", [50, 2.665, 75, 4.032]], ["qname/runpod.cli.groups.exec.commands.exec_cli", [1412, 11.499]], ["docstring/runpod.cli.groups.exec.commands.exec_cli", [50, 3.074, 62, 1.23, 67, 4.383, 75, 4.649]], ["kind/runpod.cli.groups.exec.commands.exec_cli", [62, -1.166]], ["name/runpod.cli.groups.exec.commands.remote_python", [1413, 34.496]], ["names/runpod.cli.groups.exec.commands.remote_python", [138, 3.615, 1414, 5.599]], ["qname/runpod.cli.groups.exec.commands.remote_python", [1415, 11.499]], ["docstring/runpod.cli.groups.exec.commands.remote_python", [118, 4.508, 127, 2.624, 138, 4.169, 1416, 6.456]], ["kind/runpod.cli.groups.exec.commands.remote_python", [62, -1.166]], ["name/runpod.cli.entry.runpod_cli", [1417, 34.496]], ["names/runpod.cli.entry.runpod_cli", [0, 1.982, 50, 2.665]], ["qname/runpod.cli.entry.runpod_cli", [1418, 11.499]], ["docstring/runpod.cli.entry.runpod_cli", [0, 2.286, 50, 3.074, 62, 1.23, 67, 4.383]], ["kind/runpod.cli.entry.runpod_cli", [62, -1.166]], ["name/runpod.serverless.utils.rp_cleanup.clean", [254, 27.905]], ["names/runpod.serverless.utils.rp_cleanup.clean", [254, 5.749]], ["qname/runpod.serverless.utils.rp_cleanup.clean", [1419, 11.499]], ["docstring/runpod.serverless.utils.rp_cleanup.clean", [270, 5.251, 403, 5.702, 1360, 6.01]], ["kind/runpod.serverless.utils.rp_cleanup.clean", [62, -1.166]], ["name/runpod.serverless.utils.rp_cuda.is_available", [1420, 34.496]], ["names/runpod.serverless.utils.rp_cuda.is_available", [357, 4.032, 1421, 5.599]], ["qname/runpod.serverless.utils.rp_cuda.is_available", [1422, 11.499]], ["docstring/runpod.serverless.utils.rp_cuda.is_available", [109, 1.957, 258, 5.036, 333, 3.859, 446, 5.036, 538, 4.278, 539, 4.278]], ["kind/runpod.serverless.utils.rp_cuda.is_available", [62, -1.166]], ["name/runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR", [1423, 34.496]], ["names/runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR", [139, 2.343, 273, 2.518, 1424, 4.208]], ["qname/runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR", [1425, 11.499]], ["docstring/runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR", []], ["kind/runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR", [307, -2.441]], ["name/runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR", [1426, 34.496]], ["names/runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR", [139, 2.343, 1427, 3.938, 1428, 4.208]], ["qname/runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR", [1429, 11.499]], ["docstring/runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR", []], ["kind/runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR", [307, -2.441]], ["name/runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR", [1430, 34.496]], ["names/runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR", [139, 2.343, 203, 3.326, 1427, 3.938]], ["qname/runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR", [1431, 11.499]], ["docstring/runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR", []], ["kind/runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR", [307, -2.441]], ["name/runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR", [1432, 34.496]], ["names/runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR", [139, 2.343, 675, 2.982, 1427, 3.938]], ["qname/runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR", [1433, 11.499]], ["docstring/runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR", []], ["kind/runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR", [307, -2.441]], ["name/runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR", [1434, 34.496]], ["names/runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR", [139, 2.343, 675, 2.982, 1153, 3.938]], ["qname/runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR", [1435, 11.499]], ["docstring/runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR", []], ["kind/runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR", [307, -2.441]], ["name/runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR", [1436, 34.496]], ["names/runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR", [139, 2.84, 1437, 5.599]], ["qname/runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR", [1438, 11.499]], ["docstring/runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR", []], ["kind/runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR", [307, -2.441]], ["name/runpod.serverless.utils.rp_validator.SCHEMA_ERROR", [1439, 34.496]], ["names/runpod.serverless.utils.rp_validator.SCHEMA_ERROR", [139, 2.84, 1440, 4.774]], ["qname/runpod.serverless.utils.rp_validator.SCHEMA_ERROR", [1441, 11.499]], ["docstring/runpod.serverless.utils.rp_validator.SCHEMA_ERROR", []], ["kind/runpod.serverless.utils.rp_validator.SCHEMA_ERROR", [307, -2.441]], ["name/runpod.serverless.utils.rp_validator._add_error", [1442, 34.496]], ["names/runpod.serverless.utils.rp_validator._add_error", [139, 2.84, 398, 3.615]], ["qname/runpod.serverless.utils.rp_validator._add_error", [1443, 11.499]], ["docstring/runpod.serverless.utils.rp_validator._add_error", []], ["kind/runpod.serverless.utils.rp_validator._add_error", [62, -1.166]], ["name/runpod.serverless.utils.rp_validator._check_for_unexpected_inputs", [1444, 34.496]], ["names/runpod.serverless.utils.rp_validator._check_for_unexpected_inputs", [314, 2.291, 1198, 3.581, 1424, 3.581, 1445, 3.581]], ["qname/runpod.serverless.utils.rp_validator._check_for_unexpected_inputs", [1446, 11.499]], ["docstring/runpod.serverless.utils.rp_validator._check_for_unexpected_inputs", []], ["kind/runpod.serverless.utils.rp_validator._check_for_unexpected_inputs", [62, -1.166]], ["name/runpod.serverless.utils.rp_validator._validate_and_transform_schema_items", [1447, 34.496]], ["names/runpod.serverless.utils.rp_validator._validate_and_transform_schema_items", [312, 2.463, 1440, 2.916, 1448, 3.117, 1449, 3.42, 1450, 3.42]], ["qname/runpod.serverless.utils.rp_validator._validate_and_transform_schema_items", [1451, 11.499]], ["docstring/runpod.serverless.utils.rp_validator._validate_and_transform_schema_items", []], ["kind/runpod.serverless.utils.rp_validator._validate_and_transform_schema_items", [62, -1.166]], ["name/runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults", [1452, 34.496]], ["names/runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults", [68, 1.833, 312, 2.18, 1428, 2.759, 1445, 2.759, 1448, 2.759, 1453, 3.028]], ["qname/runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults", [1454, 11.499]], ["docstring/runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults", []], ["kind/runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults", [62, -1.166]], ["name/runpod.serverless.utils.rp_validator._validate_input_against_schema", [1455, 34.496]], ["names/runpod.serverless.utils.rp_validator._validate_input_against_schema", [273, 2.143, 312, 2.83, 1440, 3.351, 1456, 3.93]], ["qname/runpod.serverless.utils.rp_validator._validate_input_against_schema", [1457, 11.499]], ["docstring/runpod.serverless.utils.rp_validator._validate_input_against_schema", []], ["kind/runpod.serverless.utils.rp_validator._validate_input_against_schema", [62, -1.166]], ["name/runpod.serverless.utils.rp_validator.validate", [312, 24.84]], ["names/runpod.serverless.utils.rp_validator.validate", [312, 5.118]], ["qname/runpod.serverless.utils.rp_validator.validate", [1458, 11.499]], ["docstring/runpod.serverless.utils.rp_validator.validate", [68, 1.059, 69, 2.379, 109, 0.619, 110, 0.912, 139, 1.559, 160, 0.899, 180, 2.146, 189, 1.303, 203, 1.259, 208, 1.594, 262, 1.594, 273, 3.07, 314, 1.791, 482, 2.8, 675, 1.129, 1361, 1.594, 1459, 1.749, 1460, 1.749, 1461, 1.749, 1462, 1.749, 1463, 1.749, 1464, 1.749, 1465, 1.749, 1466, 1.749, 1467, 1.749, 1468, 1.749, 1469, 1.749]], ["kind/runpod.serverless.utils.rp_validator.validate", [62, -1.166]]], "invertedIndex": [["\"8888/http,666/tcp\"", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1017}], ["\"runpod/stack\",", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1030}], ["#", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 730}], ["##", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 474}], ["'", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.user.generate_user_mutation": {}}, "kind": {}, "_index": 961}], ["(dict[str,", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.serverless.start": {}}, "kind": {}, "_index": 459}], ["(number/st", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.health": {}}, "kind": {}, "_index": 1177}], ["*", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "kind": {}, "_index": 343}], ["0", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 192}], ["1", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 197}], ["1234567890.123456", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 723}], ["1234567890.123456,", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 721}], ["2", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 204}], ["20mb", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_tips.check_return_size": {}}, "kind": {}, "_index": 420}], ["3", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 210}], ["3.8.5", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.user_agent.construct_user_agent": {}}, "kind": {}, "_index": 561}], ["3070", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}}, "kind": {}, "_index": 1034}], ["4", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 215}], ["401", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {}, "_index": 1131}], ["5.4.0", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.user_agent.construct_user_agent": {}}, "kind": {}, "_index": 557}], ["54", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.user_agent.construct_user_agent": {}}, "kind": {}, "_index": 558}], ["=", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 729}], [">>>", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 1028}], ["[", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 718}], ["]", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 726}], ["__call__", {"name": {"runpod.serverless.utils.rp_debugger.FunctionTimer.__call__": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 772}], ["__enter__", {"name": {"runpod.serverless.utils.rp_debugger.LineTimer.__enter__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__enter__": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 759}], ["__eq__", {"name": {"runpod.serverless.modules.worker_state.Job.__eq__": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 380}], ["__exit__", {"name": {"runpod.serverless.utils.rp_debugger.LineTimer.__exit__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__exit__": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 762}], ["__hash__", {"name": {"runpod.serverless.modules.worker_state.Job.__hash__": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 383}], ["__init__", {"name": {"runpod.serverless.modules.worker_state.Job.__init__": {}, "runpod.serverless.core.Hook.__init__": {}, "runpod.serverless.modules.rp_ping.Heartbeat.__init__": {}, "runpod.serverless.modules.rp_scale.JobScaler.__init__": {}, "runpod.serverless.utils.rp_debugger.LineTimer.__init__": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.__init__": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.error.RunPodError.__init__": {}, "runpod.error.QueryError.__init__": {}, "runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__init__": {}, "runpod.cli.utils.rp_sync.WatcherHandler.__init__": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 374}], ["__instance", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.__instance": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__instance": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 319}], ["__new__", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.__new__": {}, "runpod.serverless.modules.worker_state.Jobs.__new__": {}, "runpod.serverless.core.Hook.__new__": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__new__": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 323}], ["__str__", {"name": {"runpod.serverless.modules.worker_state.Job.__str__": {}, "runpod.serverless.core.CGetJobResult.__str__": {}, "runpod.error.RunPodError.__str__": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 386}], ["__version__", {"name": {"runpod.version.__version__": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 299}], ["_add_error", {"name": {"runpod.serverless.utils.rp_validator._add_error": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1442}], ["_async_progress_upd", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_progress._thread_target": {}}, "kind": {}, "_index": 879}], ["_async_progress_update", {"name": {"runpod.serverless.modules.rp_progress._async_progress_update": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 872}], ["_check_for_unexpected_inputs", {"name": {"runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1444}], ["_create_session_async", {"name": {"runpod.serverless.modules.rp_progress._create_session_async": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 868}], ["_credentials", {"name": {"runpod._credentials": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1222}], ["_default_concurrency_modifier", {"name": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 592}], ["_fetch_job", {"name": {"runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1149}], ["_fields_", {"name": {"runpod.serverless.core.CGetJobResult._fields_": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 485}], ["_finish_stream", {"name": {"runpod.serverless.core.Hook._finish_stream": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 504}], ["_get_auth_header", {"name": {"runpod.serverless.worker._get_auth_header": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 782}], ["_get_jobs", {"name": {"runpod.serverless.core.Hook._get_jobs": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 494}], ["_get_realtime_concurrency", {"name": {"runpod.serverless._get_realtime_concurrency": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 896}], ["_get_realtime_port", {"name": {"runpod.serverless._get_realtime_port": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 891}], ["_get_ssh_options", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1287}], ["_handle_result", {"name": {"runpod.serverless.modules.rp_http._handle_result": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 645}], ["_initialized", {"name": {"runpod.serverless.core.Hook._initialized": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 517}], ["_instance", {"name": {"runpod.serverless.modules.worker_state.Jobs._instance": {}, "runpod.serverless.core.Hook._instance": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 393}], ["_is_alive", {"name": {"runpod.serverless.modules.rp_scale.JobScaler._is_alive": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 616}], ["_is_local", {"name": {"runpod.serverless.worker._is_local": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 784}], ["_job_get_url", {"name": {"runpod.serverless.modules.rp_job._job_get_url": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 429}], ["_json_serialize_job_data", {"name": {"runpod.serverless.core.Hook._json_serialize_job_data": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 520}], ["_launch_dev_pod", {"name": {"runpod.cli.groups.project.functions._launch_dev_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1352}], ["_post_output", {"name": {"runpod.serverless.core.Hook._post_output": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 501}], ["_process_job", {"name": {"runpod.serverless.core._process_job": {}, "runpod.serverless.worker._process_job": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 542}], ["_progress_update", {"name": {"runpod.serverless.core.Hook._progress_update": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 496}], ["_realtime", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 850}], ["_request", {"name": {"runpod.endpoint.runner.RunPodClient._request": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1124}], ["_runpod_sls_get_job", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 473}], ["_send_ping", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 588}], ["_send_webhook", {"name": {"runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 836}], ["_session", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat._session": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 582}], ["_set_config_args", {"name": {"runpod.serverless._set_config_args": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 885}], ["_signal_handler", {"name": {"runpod.serverless._signal_handler": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 898}], ["_sim_run", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 854}], ["_sim_runsync", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 860}], ["_sim_status", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 864}], ["_sim_stream", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 862}], ["_stream_output", {"name": {"runpod.serverless.core.Hook._stream_output": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 499}], ["_thread_started", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat._thread_started": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 576}], ["_thread_target", {"name": {"runpod.serverless.modules.rp_progress._thread_target": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 875}], ["_transmit", {"name": {"runpod.serverless.modules.rp_http._transmit": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 641}], ["_validate_and_transform_schema_items", {"name": {"runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1447}], ["_validate_input_against_schema", {"name": {"runpod.serverless.utils.rp_validator._validate_input_against_schema": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1455}], ["_validate_log_level", {"name": {"runpod.serverless.modules.rp_logger._validate_log_level": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 311}], ["_validate_required_inputs_and_set_defaults", {"name": {"runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1452}], ["_wait_for_completion", {"name": {"runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1197}], ["abov", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_tips.check_return_size": {}}, "kind": {}, "_index": 419}], ["absolut", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_download.file": {}}, "kind": {}, "_index": 666}], ["accept", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}}, "kind": {}, "_index": 665}], ["access", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}}, "kind": {}, "_index": 1259}], ["account", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.groups.ssh.commands.add_key": {}}, "kind": {}, "_index": 1246}], ["action", {"name": {}, "names": {"runpod.cli.utils.rp_sync.WatcherHandler.action_function": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1334}], ["action_function", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler.action_function": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1333}], ["actual", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_progress._async_progress_update": {}}, "kind": {}, "_index": 874}], ["ad", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.LineTimer": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}}, "kind": {}, "_index": 755}], ["add", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.add": {}}, "names": {"runpod.serverless.modules.worker_state.Jobs.add_job": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.add": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.groups.ssh.commands.add_key": {}, "runpod.serverless.utils.rp_validator._add_error": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Jobs.add_job": {}, "runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.add": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.groups.ssh.commands.add_key": {}}, "kind": {}, "_index": 398}], ["add_job", {"name": {"runpod.serverless.modules.worker_state.Jobs.add_job": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 397}], ["add_key", {"name": {"runpod.cli.groups.ssh.commands.add_key": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1392}], ["add_ssh_key", {"name": {"runpod.cli.groups.ssh.functions.add_ssh_key": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1244}], ["again", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 1410}], ["against", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._validate_input_against_schema": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1456}], ["agent", {"name": {}, "names": {"runpod.user_agent": {}, "runpod.user_agent.construct_user_agent": {}, "runpod.user_agent.USER_AGENT": {}}, "qname": {}, "docstring": {"runpod.user_agent": {}, "runpod.user_agent.construct_user_agent": {}}, "kind": {}, "_index": 292}], ["ai", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.core.Hook.stream_output": {}, "runpod.serverless.core.Hook.post_output": {}}, "kind": {}, "_index": 529}], ["aiohttp", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_progress._create_session_async": {}}, "kind": {}, "_index": 449}], ["aliv", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}}, "kind": {}, "_index": 621}], ["alive", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler._is_alive": {}, "runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 617}], ["allow", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod": {}, "runpod.api": {}, "runpod.api.mutations": {}, "runpod.api.queries": {}, "runpod.cli": {}, "runpod.cli.groups": {}, "runpod.cli.groups.project": {}, "runpod.endpoint": {}, "runpod.serverless.modules": {}, "runpod.serverless.utils": {}}, "kind": {}, "_index": 1}], ["alreadi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.config.commands.config_wizard": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 1087}], ["and", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1448}], ["any", {"name": {}, "names": {"runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1342}], ["api", {"name": {"runpod.api": {}}, "names": {"runpod.api": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}, "runpod.api_key": {}, "runpod.api_url_base": {}}, "qname": {}, "docstring": {"runpod.api.ctl_commands": {}, "runpod.api.graphql": {}, "runpod.api.mutations": {}, "runpod.api.mutations.container_register_auth": {}, "runpod.api.mutations.endpoints": {}, "runpod.api.mutations.pods": {}, "runpod.api.mutations.templates": {}, "runpod.api.mutations.user": {}, "runpod.api.queries.gpus": {}, "runpod.api.queries.pods": {}, "runpod.api.queries.user": {}, "runpod.endpoint.helpers": {}, "runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.core.Hook.stream_output": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.worker._get_auth_header": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "kind": {}, "_index": 5}], ["api_kei", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.set_credentials": {}}, "kind": {}, "_index": 1090}], ["api_key", {"name": {"runpod.api_key": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1224}], ["api_key_not_set_msg", {"name": {"runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1105}], ["api_url_base", {"name": {"runpod.api_url_base": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1226}], ["api_wrapp", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api": {}}, "kind": {}, "_index": 7}], ["app", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 845}], ["append", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "kind": {}, "_index": 1243}], ["appropri", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}}, "kind": {}, "_index": 435}], ["arg", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.core.run": {}, "runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.__init__": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "kind": {}, "_index": 367}], ["args", {"name": {}, "names": {"runpod.serverless._set_config_args": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 886}], ["argument", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless": {}, "runpod.serverless._set_config_args": {}, "runpod.serverless.start": {}}, "kind": {}, "_index": 150}], ["around", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_progress._thread_target": {}}, "kind": {}, "_index": 878}], ["async", {"name": {}, "names": {"runpod.serverless.modules.rp_progress._create_session_async": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 870}], ["asynchron", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.asyncio.asyncio_runner": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}, "runpod.endpoint.asyncio.asyncio_runner.Job": {}}, "kind": {}, "_index": 135}], ["asyncio", {"name": {"runpod.endpoint.asyncio": {}}, "names": {"runpod.endpoint.asyncio": {}, "runpod.endpoint.asyncio.asyncio_runner": {}}, "qname": {}, "docstring": {"runpod.endpoint.asyncio": {}, "runpod.serverless.core.main": {}}, "kind": {}, "_index": 130}], ["asyncio_runner", {"name": {"runpod.endpoint.asyncio.asyncio_runner": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 132}], ["attach", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.resume_pod": {}}, "kind": {}, "_index": 1012}], ["attempt", {"name": {}, "names": {"runpod.cli.groups.project.helpers.attempt_pod_launch": {}}, "qname": {}, "docstring": {"runpod.cli.groups.project.helpers.attempt_pod_launch": {}}, "kind": {}, "_index": 1324}], ["attempt_pod_launch", {"name": {"runpod.cli.groups.project.helpers.attempt_pod_launch": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1323}], ["auth", {"name": {}, "names": {"runpod.api.mutations.container_register_auth": {}, "runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.worker._get_auth_header": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}}, "qname": {}, "docstring": {"runpod.api.mutations.container_register_auth": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 25}], ["authent", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.error.AuthenticationError": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}}, "kind": {}, "_index": 918}], ["authentication", {"name": {}, "names": {"runpod.error.AuthenticationError": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 915}], ["authenticationerror", {"name": {"runpod.error.AuthenticationError": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 914}], ["author", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.worker._get_auth_header": {}}, "kind": {}, "_index": 362}], ["avail", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.utils.rp_cuda.is_available": {}}, "kind": {}, "_index": 446}], ["available", {"name": {}, "names": {"runpod.serverless.utils.rp_cuda.is_available": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1421}], ["background", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 608}], ["background_get_job_tasks", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 607}], ["base", {"name": {}, "names": {"runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}, "runpod.api_url_base": {}, "runpod.endpoint_url_base": {}, "runpod.cli.BASE_DOCKER_IMAGE": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer": {}, "runpod.error.RunPodError": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "kind": {}, "_index": 659}], ["base_docker_image", {"name": {"runpod.cli.BASE_DOCKER_IMAGE": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1249}], ["bash", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}}, "kind": {}, "_index": 1294}], ["befor", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}}, "kind": {}, "_index": 1129}], ["behavior", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}}, "kind": {}, "_index": 859}], ["benchmark", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.FunctionTimer": {}}, "kind": {}, "_index": 768}], ["big", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1014}], ["bodi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_tips.check_return_size": {}}, "kind": {}, "_index": 418}], ["bool", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "kind": {}, "_index": 451}], ["boto", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.get_boto_client": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 684}], ["boto3", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_upload.get_boto_client": {}}, "kind": {}, "_index": 687}], ["bucket", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.bucket_upload": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_upload.get_boto_client": {}, "runpod.serverless.utils.rp_upload.upload_image": {}, "runpod.serverless.utils.rp_upload.bucket_upload": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "kind": {}, "_index": 689}], ["bucket_upload", {"name": {"runpod.serverless.utils.rp_upload.bucket_upload": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 696}], ["byte", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "kind": {}, "_index": 477}], ["calcul", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "kind": {}, "_index": 658}], ["calculate", {"name": {}, "names": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 655}], ["calculate_chunk_size", {"name": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 654}], ["call", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.FunctionTimer.__call__": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.worker": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "kind": {}, "_index": 253}], ["callabl", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.start": {}}, "kind": {}, "_index": 458}], ["cancel", {"name": {"runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}}, "names": {"runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}}, "qname": {}, "docstring": {"runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}}, "kind": {}, "_index": 1157}], ["censor", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "kind": {}, "_index": 336}], ["center", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 1008}], ["cget", {"name": {}, "names": {"runpod.serverless.core.CGetJobResult": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 471}], ["cgetjobresult", {"name": {"runpod.serverless.core.CGetJobResult": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 470}], ["cgetjobresult.status_cod", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 483}], ["chang", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_sync": {}, "runpod.cli.utils.rp_sync.WatcherHandler": {}}, "kind": {}, "_index": 117}], ["charact", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "kind": {}, "_index": 342}], ["check", {"name": {}, "names": {"runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.cli.groups.config.functions.check_credentials": {}, "runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.serverless.modules.rp_handler.is_generator": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.worker.main": {}, "runpod.cli.groups.config.functions.check_credentials": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 314}], ["check_credentials", {"name": {"runpod.cli.groups.config.functions.check_credentials": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1093}], ["check_return_size", {"name": {"runpod.serverless.modules.rp_tips.check_return_size": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 415}], ["checkpoint", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.add": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.start": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.stop": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.clear": {}, "runpod.serverless.utils.rp_debugger.LineTimer": {}}, "kind": {}, "_index": 715}], ["checkpoint_nam", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 720}], ["checkpoints", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints": {}, "runpod.serverless.utils.rp_debugger.LineTimer.checkpoints": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints": {}}, "names": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}, "runpod.serverless.utils.rp_debugger.LineTimer.checkpoints": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 713}], ["checkpoints.add('checkpoint_name')", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 731}], ["checkpoints.start('checkpoint_name')", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 732}], ["checkpoints.stop('checkpoint_name')", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 734}], ["chunk", {"name": {}, "names": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "kind": {}, "_index": 656}], ["class", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.error": {}, "runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_logger.RunPodLogger": {}, "runpod.serverless.core.Hook": {}, "runpod.serverless.modules.rp_ping.Heartbeat.__init__": {}, "runpod.serverless.modules.rp_scale.JobScaler": {}, "runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.error.RunPodError": {}, "runpod.endpoint.asyncio.asyncio_runner.Job": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint": {}}, "kind": {"runpod.serverless.modules.rp_logger.RunPodLogger": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.__instance": {}, "runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.worker_state.Jobs": {}, "runpod.serverless.modules.worker_state.Jobs._instance": {}, "runpod.serverless.modules.worker_state.Jobs.jobs": {}, "runpod.serverless.core.CGetJobResult": {}, "runpod.serverless.core.CGetJobResult._fields_": {}, "runpod.serverless.core.Hook": {}, "runpod.serverless.core.Hook._instance": {}, "runpod.serverless.modules.rp_ping.Heartbeat": {}, "runpod.serverless.modules.rp_ping.Heartbeat.PING_URL": {}, "runpod.serverless.modules.rp_ping.Heartbeat._thread_started": {}, "runpod.serverless.modules.rp_scale.JobScaler": {}, "runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__instance": {}, "runpod.serverless.utils.rp_debugger.LineTimer": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer": {}, "runpod.serverless.modules.rp_fastapi.Job": {}, "runpod.serverless.modules.rp_fastapi.Job.id": {}, "runpod.serverless.modules.rp_fastapi.Job.input": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}, "runpod.serverless.modules.rp_fastapi.TestJob.id": {}, "runpod.serverless.modules.rp_fastapi.TestJob.input": {}, "runpod.serverless.modules.rp_fastapi.TestJob.webhook": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.input": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook": {}, "runpod.serverless.modules.rp_fastapi.JobOutput": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.id": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.status": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.output": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.error": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.id": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.status": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.stream": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.error": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.endpoint.runner.Job": {}, "runpod.endpoint.runner.Endpoint": {}, "runpod.endpoint.asyncio.asyncio_runner.Job": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint": {}, "runpod.cli.utils.ssh_cmd.SSHConnection": {}, "runpod.cli.utils.rp_sync.WatcherHandler": {}}, "_index": 143}], ["clean", {"name": {"runpod.serverless.utils.rp_cleanup.clean": {}}, "names": {"runpod.serverless.utils.rp_cleanup.clean": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_download": {}}, "kind": {}, "_index": 254}], ["cleanup", {"name": {}, "names": {"runpod.serverless.utils.rp_cleanup": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 250}], ["cleanup.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_cleanup": {}}, "kind": {}, "_index": 252}], ["clear", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.clear": {}}, "names": {"runpod.serverless.utils.rp_debugger.Checkpoints.clear": {}, "runpod.serverless.utils.rp_debugger.clear_debugger_output": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints.clear": {}, "runpod.serverless.utils.rp_debugger.clear_debugger_output": {}}, "kind": {}, "_index": 747}], ["clear_debugger_output", {"name": {"runpod.serverless.utils.rp_debugger.clear_debugger_output": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 777}], ["cli", {"name": {"runpod.cli": {}}, "names": {"runpod.cli": {}, "runpod.cli.groups.project.commands.project_cli": {}, "runpod.cli.groups.ssh.commands.ssh_cli": {}, "runpod.cli.groups.pod.commands.pod_cli": {}, "runpod.cli.groups.exec.commands.exec_cli": {}, "runpod.cli.entry.runpod_cli": {}}, "qname": {}, "docstring": {"runpod.cli": {}, "runpod.cli.entry": {}, "runpod.cli.groups": {}, "runpod.cli.groups.config": {}, "runpod.cli.groups.config.functions": {}, "runpod.cli.groups.exec": {}, "runpod.cli.groups.exec.commands": {}, "runpod.cli.groups.exec.functions": {}, "runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.pod.commands": {}, "runpod.cli.groups.project.commands": {}, "runpod.cli.groups.project.functions": {}, "runpod.cli.groups.ssh": {}, "runpod.cli.groups.ssh.commands": {}, "runpod.cli.groups.ssh.functions": {}, "runpod.cli.utils": {}, "runpod.cli.utils.rp_info": {}, "runpod.cli.utils.rp_userspace": {}, "runpod.cli.utils.ssh_cmd": {}, "runpod.cli.groups.config.commands.config_wizard": {}, "runpod.cli.groups.pod.commands.pod_cli": {}, "runpod.cli.groups.exec.commands.exec_cli": {}, "runpod.cli.entry.runpod_cli": {}}, "kind": {}, "_index": 50}], ["client", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.get_boto_client": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.endpoint.runner.Job.rp_client": {}, "runpod.endpoint.runner.Endpoint.rp_client": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_upload.get_boto_client": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.endpoint.runner.Job.__init__": {}}, "kind": {}, "_index": 685}], ["clientsess", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}}, "kind": {}, "_index": 448}], ["close", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.close": {}}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection.close": {}}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd.SSHConnection.close": {}}, "kind": {}, "_index": 1311}], ["cloud", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 1005}], ["cloud_typ", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 1003}], ["cmd", {"name": {}, "names": {"runpod.cli.utils.ssh_cmd": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 124}], ["code", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.LineTimer": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 753}], ["collect", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions": {}, "runpod.cli.groups.exec": {}, "runpod.cli.groups.pod": {}, "runpod.cli.utils": {}, "runpod.cli.utils.rp_info": {}, "runpod.serverless.utils.rp_debugger": {}, "runpod.cli.groups.pod.commands.pod_cli": {}, "runpod.cli.groups.exec.commands.exec_cli": {}, "runpod.cli.entry.runpod_cli": {}}, "kind": {}, "_index": 67}], ["command", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands": {}, "runpod.cli.groups.config.commands": {}, "runpod.cli.groups.exec.commands": {}, "runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.pod": {}, "runpod.cli.groups.pod.commands": {}, "runpod.cli.groups.project.commands": {}, "runpod.cli.groups.project.helpers": {}, "runpod.cli.groups.ssh.commands": {}, "runpod.cli.utils.ssh_cmd": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.cli.utils.ssh_cmd.SSHConnection": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 14}], ["commands", {"name": {"runpod.cli.groups.config.commands": {}, "runpod.cli.groups.exec.commands": {}, "runpod.cli.groups.pod.commands": {}, "runpod.cli.groups.project.commands": {}, "runpod.cli.groups.ssh.commands": {}}, "names": {"runpod.api.ctl_commands": {}, "runpod.cli.groups.config.commands": {}, "runpod.cli.groups.exec.commands": {}, "runpod.cli.groups.pod.commands": {}, "runpod.cli.groups.project.commands": {}, "runpod.cli.groups.ssh.commands": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 10}], ["commit", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 1372}], ["commun", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 1006}], ["complet", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.core.Hook.finish_stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "kind": {}, "_index": 256}], ["completed", {"name": {}, "names": {"runpod.endpoint.helpers.is_completed": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1110}], ["completion", {"name": {}, "names": {"runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1199}], ["concurr", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_scale.JobScaler": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless._get_realtime_concurrency": {}, "runpod.serverless.start": {}}, "kind": {}, "_index": 596}], ["concurrency", {"name": {}, "names": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier": {}, "runpod.serverless.modules.rp_scale.JobScaler.current_concurrency": {}, "runpod.serverless._get_realtime_concurrency": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 593}], ["concurrency_modifier", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 605}], ["config", {"name": {"runpod.cli.groups.config": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.config": {}}, "names": {"runpod.cli.groups.config": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.config": {}, "runpod.serverless._set_config_args": {}, "runpod.cli.groups.project.helpers.load_project_config": {}, "runpod.cli.groups.config.commands.config_wizard": {}}, "qname": {}, "docstring": {"runpod.cli.groups.config": {}, "runpod.cli.groups.config.commands": {}, "runpod.serverless.core.run": {}, "runpod.serverless.utils.rp_upload.get_boto_client": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless._set_config_args": {}, "runpod.serverless.start": {}, "runpod.cli.groups.project.helpers.load_project_config": {}, "runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 59}], ["config.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions": {}}, "kind": {}, "_index": 66}], ["config[\"concurrency_modifier\"]", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.start": {}}, "kind": {}, "_index": 904}], ["config[\"handler\"]", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.start": {}}, "kind": {}, "_index": 903}], ["config[\"rp_args\"]", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.start": {}}, "kind": {}, "_index": 905}], ["config_wizard", {"name": {"runpod.cli.groups.config.commands.config_wizard": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1384}], ["configur", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions": {}, "runpod.serverless.modules.rp_logger": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.start": {}, "runpod.cli.groups.project.helpers.attempt_pod_launch": {}, "runpod.cli.groups.config.commands.config_wizard": {}, "runpod.cli.groups.ssh.commands.ssh_cli": {}}, "kind": {}, "_index": 70}], ["confirm", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 205}], ["connect", {"name": {}, "names": {"runpod.cli.groups.pod.commands.connect_to_pod": {}}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.close": {}, "runpod.cli.groups.pod.commands.connect_to_pod": {}}, "kind": {}, "_index": 126}], ["connect_to_pod", {"name": {"runpod.cli.groups.pod.commands.connect_to_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1400}], ["constant", {"name": {}, "names": {}, "qname": {}, "docstring": {}, "kind": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}, "runpod.serverless.modules.rp_logger.LOG_LEVELS": {}, "runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}, "runpod.serverless.modules.worker_state.WORKER_ID": {}, "runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}, "runpod.serverless.modules.rp_job.JOB_GET_URL": {}, "runpod.user_agent.USER_AGENT": {}, "runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}, "runpod.serverless.utils.rp_download.HEADERS": {}, "runpod.serverless.utils.rp_upload.FMT": {}, "runpod.serverless.utils.rp_debugger.OS_INFO": {}, "runpod.serverless.utils.rp_debugger.PYTHON_VERSION": {}, "runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}, "runpod.serverless.modules.rp_fastapi.TITLE": {}, "runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION": {}, "runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}, "runpod.api.queries.endpoints.QUERY_ENDPOINT": {}, "runpod.api.queries.gpus.QUERY_GPU_TYPES": {}, "runpod.api.queries.pods.QUERY_POD": {}, "runpod.api.queries.user.QUERY_USER": {}, "runpod.cli.groups.config.functions.CREDENTIAL_FILE": {}, "runpod.endpoint.helpers.FINAL_STATES": {}, "runpod.endpoint.helpers.UNAUTHORIZED_MSG": {}, "runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}, "runpod.SSH_KEY_PATH": {}, "runpod.cli.groups.ssh.functions.SSH_FILES": {}, "runpod.cli.STOP_EVENT": {}, "runpod.cli.BASE_DOCKER_IMAGE": {}, "runpod.cli.GPU_TYPES": {}, "runpod.cli.ENV_VARS": {}, "runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS": {}, "runpod.cli.groups.project.functions.STARTER_TEMPLATES": {}, "runpod.cli.groups.exec.helpers.POD_ID_FILE": {}, "runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}, "runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}, "runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR": {}, "runpod.serverless.utils.rp_validator.SCHEMA_ERROR": {}}, "_index": 307}], ["constraint", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1461}], ["constraints", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1437}], ["constraints_error", {"name": {"runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1436}], ["construct", {"name": {}, "names": {"runpod.user_agent.construct_user_agent": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.user_agent.construct_user_agent": {}}, "kind": {}, "_index": 434}], ["construct_user_agent", {"name": {"runpod.user_agent.construct_user_agent": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 552}], ["contain", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.container_register_auth": {}, "runpod.error": {}, "runpod.serverless": {}, "runpod.serverless.worker": {}, "runpod.serverless.core.run": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {}, "_index": 27}], ["container", {"name": {}, "names": {"runpod.api.mutations.container_register_auth": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 23}], ["container_disk_in_gb", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1047}], ["container_register_auth", {"name": {"runpod.api.mutations.container_register_auth": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 22}], ["content", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.file": {}}, "kind": {}, "_index": 671}], ["continu", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}}, "kind": {}, "_index": 442}], ["convert", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.worker": {}}, "kind": {}, "_index": 289}], ["copi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}, "runpod.cli.groups.project.helpers.copy_template_files": {}, "runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 1298}], ["copy", {"name": {}, "names": {"runpod.cli.groups.project.helpers.copy_template_files": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1320}], ["copy_template_files", {"name": {"runpod.cli.groups.project.helpers.copy_template_files": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1319}], ["core", {"name": {"runpod.serverless.core": {}}, "names": {"runpod.serverless.core": {}}, "qname": {}, "docstring": {"runpod.serverless.core": {}}, "kind": {}, "_index": 153}], ["correctli", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}}, "kind": {}, "_index": 437}], ["count", {"name": {}, "names": {"runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_count": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 351}], ["countri", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 1010}], ["country_cod", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 1009}], ["crate", {"name": {}, "names": {"runpod.serverless.core.Hook.rust_crate_version": {}}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 515}], ["creat", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.worker.main": {}, "runpod.serverless.modules.rp_progress._create_session_async": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}, "runpod.cli.groups.project.functions.create_new_project": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.cli.groups.project.commands.project_cli": {}, "runpod.cli.groups.project.commands.new_project_wizard": {}, "runpod.cli.groups.pod.commands.create_new_pod": {}}, "kind": {}, "_index": 792}], ["create", {"name": {}, "names": {"runpod.serverless.modules.rp_progress._create_session_async": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.cli.groups.project.functions.create_new_project": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.cli.groups.pod.commands.create_new_pod": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 869}], ["create_container_registry_auth", {"name": {"runpod.api.ctl_commands.create_container_registry_auth": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1074}], ["create_endpoint", {"name": {"runpod.api.ctl_commands.create_endpoint": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1056}], ["create_new_pod", {"name": {"runpod.cli.groups.pod.commands.create_new_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1398}], ["create_new_project", {"name": {"runpod.cli.groups.project.functions.create_new_project": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1355}], ["create_pod", {"name": {"runpod.api.ctl_commands.create_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 997}], ["create_project_endpoint", {"name": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1366}], ["create_template", {"name": {"runpod.api.ctl_commands.create_template": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1044}], ["creation", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations": {}}, "kind": {}, "_index": 20}], ["credenti", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.config.functions.check_credentials": {}, "runpod.cli.groups.config.functions.get_credentials": {}, "runpod.cli.groups.config.commands.config_wizard": {}}, "kind": {}, "_index": 1084}], ["credential", {"name": {}, "names": {"runpod.cli.groups.config.functions.CREDENTIAL_FILE": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1078}], ["credential_file", {"name": {"runpod.cli.groups.config.functions.CREDENTIAL_FILE": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1077}], ["credentials", {"name": {}, "names": {"runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.config.functions.check_credentials": {}, "runpod.cli.groups.config.functions.get_credentials": {}, "runpod._credentials": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1081}], ["ctl", {"name": {}, "names": {"runpod.api.ctl_commands": {}}, "qname": {}, "docstring": {"runpod.api.ctl_commands": {}}, "kind": {}, "_index": 9}], ["ctl_commands", {"name": {"runpod.api.ctl_commands": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 8}], ["cuda", {"name": {}, "names": {"runpod.serverless.utils.rp_cuda": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_cuda.is_available": {}}, "kind": {}, "_index": 258}], ["current", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler.current_concurrency": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Jobs": {}, "runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_progress.progress_update": {}, "runpod.api.ctl_commands.get_user": {}, "runpod.api.ctl_commands.update_user_settings": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}, "runpod.cli.groups.ssh.functions.get_user_pub_keys": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.cli.groups.ssh.commands.list_keys": {}, "runpod.cli.groups.ssh.commands.add_key": {}, "runpod.cli.groups.pod.commands.list_pods": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 392}], ["current_concurr", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}}, "kind": {}, "_index": 599}], ["current_concurrency", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.current_concurrency": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 614}], ["data", {"name": {}, "names": {"runpod.serverless.core.Hook._json_serialize_job_data": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.output": {}}, "kind": {}, "_index": 523}], ["data_center_id", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 1007}], ["debouncer", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler.debouncer": {}}, "names": {"runpod.cli.utils.rp_sync.WatcherHandler.debouncer": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1339}], ["debug", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.debug": {}}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.debug": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.utils.rp_debugger": {}, "runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.debug": {}}, "kind": {}, "_index": 196}], ["debugg", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.get_debugger_output": {}, "runpod.serverless.utils.rp_debugger.clear_debugger_output": {}}, "kind": {}, "_index": 776}], ["debugger", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger": {}, "runpod.serverless.utils.rp_debugger.get_debugger_output": {}, "runpod.serverless.utils.rp_debugger.clear_debugger_output": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 265}], ["decor", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.FunctionTimer": {}}, "kind": {}, "_index": 767}], ["default", {"name": {}, "names": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest": {}, "runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 203}], ["defaultrequest", {"name": {"runpod.serverless.modules.rp_fastapi.DefaultRequest": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 819}], ["defaults", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1453}], ["defin", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_ping": {}}, "kind": {}, "_index": 222}], ["demand", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.pods.generate_pod_deployment_mutation": {}}, "kind": {}, "_index": 946}], ["deploi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.cli.groups.project.commands.project_cli": {}, "runpod.cli.groups.project.commands.deploy_project": {}}, "kind": {}, "_index": 945}], ["deploy", {"name": {}, "names": {"runpod.cli.groups.project.commands.deploy_project": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1382}], ["deploy_project", {"name": {"runpod.cli.groups.project.commands.deploy_project": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1381}], ["deployment", {"name": {}, "names": {"runpod.api.mutations.pods.generate_pod_deployment_mutation": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 943}], ["descript", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 190}], ["description", {"name": {"runpod.serverless.modules.rp_fastapi.DESCRIPTION": {}}, "names": {"runpod.serverless.modules.rp_fastapi.DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 797}], ["destin", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.helpers.copy_template_files": {}}, "kind": {}, "_index": 1322}], ["detail", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}}, "kind": {}, "_index": 198}], ["dev", {"name": {}, "names": {"runpod.cli.groups.project.functions._launch_dev_pod": {}}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 1353}], ["develop", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}, "runpod.cli.groups.project.functions._launch_dev_pod": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.commands.start_project_pod": {}}, "kind": {}, "_index": 857}], ["diagnos", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 201}], ["dict", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_container_registry_auth": {}}, "kind": {}, "_index": 1076}], ["dict[str,", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.run_job": {}}, "kind": {}, "_index": 460}], ["dictionari", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.run": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}}, "kind": {}, "_index": 546}], ["diff", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 1373}], ["directori", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_sync": {}, "runpod.serverless.modules": {}, "runpod.serverless.utils": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}, "runpod.cli.groups.project.helpers.copy_template_files": {}, "runpod.cli.utils.rp_sync.WatcherHandler": {}, "runpod.cli.utils.rp_sync.sync_directory": {}}, "kind": {}, "_index": 116}], ["directory", {"name": {}, "names": {"runpod.cli.utils.rp_sync.sync_directory": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1347}], ["disabl", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 195}], ["disk", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_template": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "kind": {}, "_index": 1048}], ["disposit", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.file": {}}, "kind": {}, "_index": 672}], ["docker", {"name": {}, "names": {"runpod.cli.BASE_DOCKER_IMAGE": {}}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1000}], ["docker_start_cmd", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1046}], ["doesn't", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 1409}], ["done", {"name": {}, "names": {"runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 630}], ["download", {"name": {}, "names": {"runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_cleanup.clean": {}}, "kind": {}, "_index": 270}], ["download.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download": {}}, "kind": {}, "_index": 272}], ["download_files_from_urls", {"name": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 660}], ["downloaded_fil", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}}, "kind": {}, "_index": 668}], ["dst_buf", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 479}], ["duration_m", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 724}], ["eas", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}}, "kind": {}, "_index": 454}], ["edit", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.user.generate_user_mutation": {}}, "kind": {}, "_index": 962}], ["effect", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 194}], ["end", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 722}], ["endpoint", {"name": {"runpod.endpoint": {}, "runpod.endpoint.runner.Endpoint": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint": {}}, "names": {"runpod.endpoint": {}, "runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.queries.endpoints.QUERY_ENDPOINT": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}, "runpod.endpoint.runner.Job.endpoint_id": {}, "runpod.endpoint.runner.Endpoint": {}, "runpod.endpoint.runner.Endpoint.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url": {}, "runpod.endpoint_url_base": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}}, "qname": {}, "docstring": {"runpod.api.mutations.endpoints": {}, "runpod.api.queries.endpoints": {}, "runpod.endpoint": {}, "runpod.endpoint.asyncio": {}, "runpod.endpoint.asyncio.asyncio_runner": {}, "runpod.endpoint.helpers": {}, "runpod.endpoint.runner": {}, "runpod.serverless.utils.rp_upload.extract_region_from_url": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.ctl_commands.get_endpoints": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.RunPodClient.post": {}, "runpod.endpoint.runner.RunPodClient.get": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint": {}, "runpod.endpoint.runner.Endpoint.__init__": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.asyncio.asyncio_runner.Job": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 31}], ["endpoint'", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 941}], ["endpoint.run({\"your_model_input_key\":", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 1164}], ["endpoint_id", {"name": {"runpod.endpoint.runner.Job.endpoint_id": {}, "runpod.endpoint.runner.Endpoint.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id": {}}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 1069}], ["endpoint_input", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}}, "kind": {}, "_index": 1214}], ["endpoint_url", {"name": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1209}], ["endpoint_url_base", {"name": {"runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}, "runpod.endpoint_url_base": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1122}], ["endpoints", {"name": {"runpod.api.mutations.endpoints": {}, "runpod.api.queries.endpoints": {}}, "names": {"runpod.api.mutations.endpoints": {}, "runpod.api.queries.endpoints": {}, "runpod.api.ctl_commands.get_endpoints": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 29}], ["ensur", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}}, "kind": {}, "_index": 436}], ["enter", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.LineTimer.__enter__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__enter__": {}}, "qname": {}, "docstring": {"runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 760}], ["entri", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.entry": {}}, "kind": {}, "_index": 54}], ["entry", {"name": {"runpod.cli.entry": {}}, "names": {"runpod.cli.entry": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 52}], ["entrypoint", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless": {}}, "kind": {}, "_index": 148}], ["env", {"name": {}, "names": {"runpod.cli.ENV_VARS": {}}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1020}], ["env_vars", {"name": {"runpod.cli.ENV_VARS": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1253}], ["environ", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state": {}, "runpod.serverless._get_realtime_port": {}, "runpod.serverless._get_realtime_concurrency": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 243}], ["eq", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Job.__eq__": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 381}], ["error", {"name": {"runpod.error": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.error": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.error": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.error": {}}, "names": {"runpod.error": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.error": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.error": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.error": {}, "runpod.error.RunPodError": {}, "runpod.error.AuthenticationError": {}, "runpod.error.QueryError": {}, "runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}, "runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}, "runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR": {}, "runpod.serverless.utils.rp_validator.SCHEMA_ERROR": {}, "runpod.serverless.utils.rp_validator._add_error": {}}, "qname": {}, "docstring": {"runpod.error": {}, "runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.error": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}, "runpod.error.RunPodError": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 139}], ["error.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.error": {}}, "kind": {}, "_index": 142}], ["error1", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1463}], ["error2", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1464}], ["event", {"name": {}, "names": {"runpod.cli.STOP_EVENT": {}, "runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "qname": {}, "docstring": {"runpod.serverless.core.main": {}, "runpod.serverless.modules.rp_progress._thread_target": {}, "runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "kind": {}, "_index": 550}], ["everyth", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "kind": {}, "_index": 338}], ["exampl", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.user_agent.construct_user_agent": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 554}], ["example_var", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1024}], ["example_var2", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1025}], ["example_var2:\"example_valu", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1023}], ["except", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}, "runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "kind": {}, "_index": 339}], ["exception", {"name": {}, "names": {}, "qname": {}, "docstring": {}, "kind": {"runpod.error.RunPodError": {}, "runpod.error.AuthenticationError": {}, "runpod.error.QueryError": {}}, "_index": 910}], ["exclude", {"name": {}, "names": {"runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1265}], ["exclude_patterns", {"name": {"runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1264}], ["exec", {"name": {"runpod.cli.groups.exec": {}}, "names": {"runpod.cli.groups.exec": {}, "runpod.cli.groups.exec.commands.exec_cli": {}}, "qname": {}, "docstring": {"runpod.cli.groups.exec.commands": {}, "runpod.cli.groups.exec.functions": {}, "runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.exec.commands.exec_cli": {}}, "kind": {}, "_index": 75}], ["exec_cli", {"name": {"runpod.cli.groups.exec.commands.exec_cli": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1411}], ["execut", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.exec": {}, "runpod.serverless.utils.rp_debugger.LineTimer": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 77}], ["exist", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless._get_realtime_port": {}, "runpod.serverless._get_realtime_concurrency": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.config.functions.check_credentials": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 895}], ["exit", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.LineTimer.__exit__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__exit__": {}}, "qname": {}, "docstring": {"runpod.serverless.worker.main": {}}, "kind": {}, "_index": 763}], ["expect", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 208}], ["extract", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "kind": {}, "_index": 673}], ["extract_region_from_url", {"name": {"runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 680}], ["fail", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.error.AuthenticationError": {}, "runpod.error.QueryError": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "kind": {}, "_index": 919}], ["fals", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.worker._is_local": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.cli.utils.rp_runpodignore.should_ignore": {}, "runpod.serverless.utils.rp_cuda.is_available": {}}, "kind": {}, "_index": 538}], ["fastapi", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}}, "kind": {}, "_index": 158}], ["fetch", {"name": {}, "names": {"runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}}, "kind": {}, "_index": 1150}], ["field", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 475}], ["fields", {"name": {}, "names": {"runpod.serverless.core.CGetJobResult._fields_": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 486}], ["file", {"name": {"runpod.serverless.utils.rp_download.file": {}}, "names": {"runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.cli.groups.config.functions.CREDENTIAL_FILE": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}, "runpod.cli.groups.exec.helpers.POD_ID_FILE": {}}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions": {}, "runpod.cli.utils.rp_runpodignore": {}, "runpod.error": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_download.calculate_chunk_size": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_upload.upload_image": {}, "runpod.serverless.utils.rp_upload.files": {}, "runpod.serverless.utils.rp_upload.bucket_upload": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.config.functions.check_credentials": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.rp_runpodignore.should_ignore": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}, "runpod.cli.groups.project.helpers.copy_template_files": {}, "runpod.cli.groups.project.helpers.load_project_config": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.exec.functions.python_over_ssh": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 72}], ["filenam", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "kind": {}, "_index": 1242}], ["files", {"name": {"runpod.serverless.utils.rp_upload.files": {}}, "names": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_upload.files": {}, "runpod.cli.groups.ssh.functions.SSH_FILES": {}, "runpod.cli.groups.project.helpers.copy_template_files": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 661}], ["final", {"name": {}, "names": {"runpod.endpoint.helpers.FINAL_STATES": {}}, "qname": {}, "docstring": {"runpod.endpoint.helpers.is_completed": {}}, "kind": {}, "_index": 1099}], ["final_states", {"name": {"runpod.endpoint.helpers.FINAL_STATES": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1098}], ["find", {"name": {}, "names": {"runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "qname": {}, "docstring": {"runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "kind": {}, "_index": 1261}], ["find_ssh_key_file", {"name": {"runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1260}], ["fingerprint", {"name": {}, "names": {"runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}}, "qname": {}, "docstring": {"runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}}, "kind": {}, "_index": 1232}], ["finish", {"name": {}, "names": {"runpod.serverless.core.Hook._finish_stream": {}, "runpod.serverless.core.Hook.finish_stream": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 505}], ["finish_stream", {"name": {"runpod.serverless.core.Hook.finish_stream": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 540}], ["first", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "kind": {}, "_index": 340}], ["fmt", {"name": {"runpod.serverless.utils.rp_upload.FMT": {}}, "names": {"runpod.serverless.utils.rp_upload.FMT": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 678}], ["folder", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.serverless.utils.rp_cleanup.clean": {}}, "kind": {}, "_index": 1360}], ["follow", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.run": {}}, "kind": {}, "_index": 547}], ["for", {"name": {}, "names": {"runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}, "runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1198}], ["format", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 717}], ["from", {"name": {}, "names": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 662}], ["function", {"name": {"runpod.serverless.utils.rp_debugger.FunctionTimer.function": {}}, "names": {"runpod.serverless.utils.rp_debugger.FunctionTimer": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.function": {}, "runpod.cli.utils.rp_sync.WatcherHandler.action_function": {}}, "qname": {}, "docstring": {"runpod.cli.groups.config": {}, "runpod.cli.groups.config.functions": {}, "runpod.cli.groups.exec.functions": {}, "runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.project.functions": {}, "runpod.cli.groups.project.helpers": {}, "runpod.cli.groups.ssh": {}, "runpod.cli.groups.ssh.functions": {}, "runpod.cli.utils": {}, "runpod.cli.utils.rp_info": {}, "runpod.endpoint.helpers": {}, "runpod.serverless.core": {}, "runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_scale": {}, "runpod.serverless.utils.rp_cuda": {}, "runpod.serverless.utils.rp_debugger": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.core.run": {}, "runpod.serverless.modules.rp_handler.is_generator": {}, "runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_http._handle_result": {}, "runpod.serverless.utils.rp_upload.files": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}, "runpod.serverless.start": {}, "runpod.cli.groups.pod.commands.pod_cli": {}, "runpod.cli.groups.exec.commands.exec_cli": {}, "runpod.cli.entry.runpod_cli": {}}, "kind": {"runpod.version.get_version": {}, "runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.core._process_job": {}, "runpod.serverless.core.run": {}, "runpod.serverless.core.main": {}, "runpod.user_agent.construct_user_agent": {}, "runpod.serverless.modules.rp_local.run_local": {}, "runpod.serverless.modules.rp_handler.is_generator": {}, "runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_http._transmit": {}, "runpod.serverless.modules.rp_http._handle_result": {}, "runpod.serverless.modules.rp_http.send_result": {}, "runpod.serverless.modules.rp_http.stream_result": {}, "runpod.serverless.utils.rp_download.calculate_chunk_size": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_upload.extract_region_from_url": {}, "runpod.serverless.utils.rp_upload.get_boto_client": {}, "runpod.serverless.utils.rp_upload.upload_image": {}, "runpod.serverless.utils.rp_upload.files": {}, "runpod.serverless.utils.rp_upload.bucket_upload": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}, "runpod.serverless.utils.rp_debugger.get_debugger_output": {}, "runpod.serverless.utils.rp_debugger.clear_debugger_output": {}, "runpod.serverless.worker._get_auth_header": {}, "runpod.serverless.worker._is_local": {}, "runpod.serverless.worker._process_job": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.worker.main": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.serverless.modules.rp_progress._create_session_async": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}, "runpod.serverless.modules.rp_progress._thread_target": {}, "runpod.serverless.modules.rp_progress.progress_update": {}, "runpod.serverless._set_config_args": {}, "runpod.serverless._get_realtime_port": {}, "runpod.serverless._get_realtime_concurrency": {}, "runpod.serverless._signal_handler": {}, "runpod.serverless.start": {}, "runpod.api.graphql.run_graphql_query": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.mutations.user.generate_user_mutation": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.api.ctl_commands.get_user": {}, "runpod.api.ctl_commands.update_user_settings": {}, "runpod.api.ctl_commands.get_gpus": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.get_pods": {}, "runpod.api.ctl_commands.get_pod": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.get_endpoints": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.config.functions.check_credentials": {}, "runpod.cli.groups.config.functions.get_credentials": {}, "runpod.endpoint.helpers.is_completed": {}, "runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}, "runpod.cli.groups.ssh.functions.get_user_pub_keys": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.rp_runpodignore.should_ignore": {}, "runpod.cli.groups.project.helpers.validate_project_name": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.project.helpers.copy_template_files": {}, "runpod.cli.groups.project.helpers.attempt_pod_launch": {}, "runpod.cli.groups.project.helpers.load_project_config": {}, "runpod.cli.utils.rp_sync.start_watcher": {}, "runpod.cli.utils.rp_sync.sync_directory": {}, "runpod.cli.groups.project.functions._launch_dev_pod": {}, "runpod.cli.groups.project.functions.create_new_project": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.cli.groups.project.commands.project_cli": {}, "runpod.cli.groups.project.commands.new_project_wizard": {}, "runpod.cli.groups.project.commands.start_project_pod": {}, "runpod.cli.groups.project.commands.deploy_project": {}, "runpod.cli.groups.config.commands.config_wizard": {}, "runpod.cli.groups.ssh.commands.ssh_cli": {}, "runpod.cli.groups.ssh.commands.list_keys": {}, "runpod.cli.groups.ssh.commands.add_key": {}, "runpod.cli.groups.pod.commands.pod_cli": {}, "runpod.cli.groups.pod.commands.list_pods": {}, "runpod.cli.groups.pod.commands.create_new_pod": {}, "runpod.cli.groups.pod.commands.connect_to_pod": {}, "runpod.cli.groups.exec.functions.python_over_ssh": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}, "runpod.cli.groups.exec.commands.exec_cli": {}, "runpod.cli.groups.exec.commands.remote_python": {}, "runpod.cli.entry.runpod_cli": {}, "runpod.serverless.utils.rp_cleanup.clean": {}, "runpod.serverless.utils.rp_cuda.is_available": {}, "runpod.serverless.utils.rp_validator._add_error": {}, "runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}, "runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}, "runpod.serverless.utils.rp_validator._validate_input_against_schema": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "_index": 62}], ["functions", {"name": {"runpod.cli.groups.config.functions": {}, "runpod.cli.groups.exec.functions": {}, "runpod.cli.groups.project.functions": {}, "runpod.cli.groups.ssh.functions": {}}, "names": {"runpod.cli.groups.config.functions": {}, "runpod.cli.groups.exec.functions": {}, "runpod.cli.groups.project.functions": {}, "runpod.cli.groups.ssh.functions": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 64}], ["functiontimer", {"name": {"runpod.serverless.utils.rp_debugger.FunctionTimer": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 765}], ["geforc", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}}, "kind": {}, "_index": 1032}], ["gener", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.user_agent.construct_user_agent": {}, "runpod.serverless.modules.rp_handler.is_generator": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.mutations.user.generate_user_mutation": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.groups.ssh.commands.add_key": {}}, "kind": {}, "_index": 465}], ["generate", {"name": {}, "names": {"runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.mutations.user.generate_user_mutation": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 931}], ["generate_container_registry_auth", {"name": {"runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 930}], ["generate_endpoint_mutation", {"name": {"runpod.api.mutations.endpoints.generate_endpoint_mutation": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 936}], ["generate_gpu_query", {"name": {"runpod.api.queries.gpus.generate_gpu_query": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 968}], ["generate_pod_deployment_mutation", {"name": {"runpod.api.mutations.pods.generate_pod_deployment_mutation": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 942}], ["generate_pod_query", {"name": {"runpod.api.queries.pods.generate_pod_query": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 973}], ["generate_pod_resume_mutation", {"name": {"runpod.api.mutations.pods.generate_pod_resume_mutation": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 949}], ["generate_pod_stop_mutation", {"name": {"runpod.api.mutations.pods.generate_pod_stop_mutation": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 947}], ["generate_pod_template", {"name": {"runpod.api.mutations.templates.generate_pod_template": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 957}], ["generate_pod_terminate_mutation", {"name": {"runpod.api.mutations.pods.generate_pod_terminate_mutation": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 953}], ["generate_ssh_key_pair", {"name": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1238}], ["generate_user_mutation", {"name": {"runpod.api.mutations.user.generate_user_mutation": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 959}], ["generator", {"name": {}, "names": {"runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.modules.rp_handler.is_generator": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 463}], ["get", {"name": {"runpod.endpoint.runner.RunPodClient.get": {}}, "names": {"runpod.version.get_version": {}, "runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_count": {}, "runpod.serverless.modules.rp_job.JOB_GET_URL": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.core.Hook._get_jobs": {}, "runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.utils.rp_upload.get_boto_client": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}, "runpod.serverless.utils.rp_debugger.get_debugger_output": {}, "runpod.serverless.worker._get_auth_header": {}, "runpod.serverless._get_realtime_port": {}, "runpod.serverless._get_realtime_concurrency": {}, "runpod.api.ctl_commands.get_user": {}, "runpod.api.ctl_commands.get_gpus": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.get_pods": {}, "runpod.api.ctl_commands.get_pod": {}, "runpod.api.ctl_commands.get_endpoints": {}, "runpod.cli.groups.config.functions.get_credentials": {}, "runpod.endpoint.runner.RunPodClient.get": {}, "runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}, "runpod.cli.groups.ssh.functions.get_user_pub_keys": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}}, "kind": {}, "_index": 241}], ["get_auth_header", {"name": {"runpod.serverless.modules.worker_state.get_auth_header": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 359}], ["get_boto_client", {"name": {"runpod.serverless.utils.rp_upload.get_boto_client": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 683}], ["get_checkpoints", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 745}], ["get_credentials", {"name": {"runpod.cli.groups.config.functions.get_credentials": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1095}], ["get_debugger_output", {"name": {"runpod.serverless.utils.rp_debugger.get_debugger_output": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 774}], ["get_endpoints", {"name": {"runpod.api.ctl_commands.get_endpoints": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1054}], ["get_file", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1300}], ["get_gpu", {"name": {"runpod.api.ctl_commands.get_gpu": {}}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 987}], ["get_gpus", {"name": {"runpod.api.ctl_commands.get_gpus": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 985}], ["get_ignore_list", {"name": {"runpod.cli.utils.rp_runpodignore.get_ignore_list": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1268}], ["get_job", {"name": {"runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.rp_job.get_job": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 404}], ["get_job_count", {"name": {"runpod.serverless.modules.worker_state.Jobs.get_job_count": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 411}], ["get_job_list", {"name": {"runpod.serverless.modules.worker_state.Jobs.get_job_list": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 409}], ["get_jobs", {"name": {"runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 525}], ["get_pod", {"name": {"runpod.api.ctl_commands.get_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 994}], ["get_pod_ssh_ip_port", {"name": {"runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1256}], ["get_pods", {"name": {"runpod.api.ctl_commands.get_pods": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 992}], ["get_project_endpoint", {"name": {"runpod.cli.groups.project.helpers.get_project_endpoint": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1317}], ["get_project_pod", {"name": {"runpod.cli.groups.project.helpers.get_project_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1315}], ["get_session_pod", {"name": {"runpod.cli.groups.exec.helpers.get_session_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1406}], ["get_ssh_key_fingerprint", {"name": {"runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1231}], ["get_user", {"name": {"runpod.api.ctl_commands.get_user": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 977}], ["get_user_pub_keys", {"name": {"runpod.cli.groups.ssh.functions.get_user_pub_keys": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1234}], ["get_version", {"name": {"runpod.version.get_version": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 297}], ["git", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 1371}], ["give", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 1130}], ["given", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint.__init__": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}, "runpod.cli.groups.project.helpers.attempt_pod_launch": {}}, "kind": {}, "_index": 406}], ["global", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state": {}}, "kind": {}, "_index": 246}], ["gpu", {"name": {}, "names": {"runpod.api.queries.gpus.QUERY_GPU_TYPES": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.cli.GPU_TYPES": {}}, "qname": {}, "docstring": {"runpod.api.queries.gpus": {}, "runpod.api.queries.pods": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.api.ctl_commands.get_gpus": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 46}], ["gpu_count", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.resume_pod": {}}, "kind": {}, "_index": 1011}], ["gpu_id", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 989}], ["gpu_quant", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.get_gpu": {}}, "kind": {}, "_index": 990}], ["gpu_type_id", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 1001}], ["gpu_types", {"name": {"runpod.cli.GPU_TYPES": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1251}], ["gpus", {"name": {"runpod.api.queries.gpus": {}}, "names": {"runpod.api.queries.gpus": {}, "runpod.api.ctl_commands.get_gpus": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 44}], ["graphql", {"name": {"runpod.api.graphql": {}}, "names": {"runpod.api.graphql": {}, "runpod.api.graphql.run_graphql_query": {}}, "qname": {}, "docstring": {"runpod.api.graphql": {}, "runpod.api.mutations": {}, "runpod.api.queries.endpoints": {}, "runpod.error.QueryError": {}, "runpod.api.graphql.run_graphql_query": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}}, "kind": {}, "_index": 16}], ["group", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups": {}, "runpod.cli.groups.config.commands": {}, "runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.project.helpers": {}}, "kind": {}, "_index": 58}], ["groups", {"name": {"runpod.cli.groups": {}}, "names": {"runpod.cli.groups": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 56}], ["handl", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_http": {}, "runpod.serverless.modules.worker_state": {}, "runpod.serverless.modules.rp_http._handle_result": {}, "runpod.serverless.modules.rp_progress._thread_target": {}, "runpod.serverless._signal_handler": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}}, "kind": {}, "_index": 171}], ["handle", {"name": {}, "names": {"runpod.serverless.modules.rp_http._handle_result": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 646}], ["handler", {"name": {}, "names": {"runpod.serverless.modules.rp_handler": {}, "runpod.serverless._signal_handler": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}, "runpod.cli.utils.rp_sync.WatcherHandler": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_handler": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.core.run": {}, "runpod.serverless.modules.rp_handler.is_generator": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}, "runpod.serverless.start": {}}, "kind": {}, "_index": 166}], ["happen", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 214}], ["hash", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Job.__hash__": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 384}], ["header", {"name": {}, "names": {"runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.worker._get_auth_header": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.worker._get_auth_header": {}}, "kind": {}, "_index": 360}], ["headers", {"name": {"runpod.serverless.utils.rp_download.HEADERS": {}, "runpod.endpoint.runner.RunPodClient.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers": {}}, "names": {"runpod.serverless.utils.rp_download.HEADERS": {}, "runpod.endpoint.runner.RunPodClient.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 652}], ["health", {"name": {"runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}}, "names": {"runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}}, "kind": {}, "_index": 1175}], ["heartbeat", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat": {}, "runpod.serverless.worker.heartbeat": {}, "runpod.serverless.modules.rp_fastapi.heartbeat": {}}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat": {}, "runpod.serverless.worker.heartbeat": {}, "runpod.serverless.modules.rp_fastapi.heartbeat": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat": {}, "runpod.serverless.modules.rp_ping.Heartbeat.__init__": {}, "runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}, "runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}}, "kind": {}, "_index": 223}], ["help", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger": {}}, "kind": {}, "_index": 268}], ["helper", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.project.helpers": {}, "runpod.endpoint.helpers": {}, "runpod.serverless.modules.rp_job": {}, "runpod.serverless.modules.rp_http._handle_result": {}}, "kind": {}, "_index": 83}], ["helpers", {"name": {"runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.project.helpers": {}, "runpod.endpoint.helpers": {}}, "names": {"runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.project.helpers": {}, "runpod.endpoint.helpers": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 81}], ["history", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler.job_history": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 612}], ["hook", {"name": {"runpod.serverless.core.Hook": {}}, "names": {"runpod.serverless.core.Hook": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 489}], ["http", {"name": {}, "names": {"runpod.serverless.modules.rp_http": {}, "runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_http": {}, "runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {}, "_index": 169}], ["http_status_unauthorized", {"name": {"runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 925}], ["id", {"name": {"runpod.serverless.modules.worker_state.Job.id": {}, "runpod.serverless.modules.rp_fastapi.Job.id": {}, "runpod.serverless.modules.rp_fastapi.TestJob.id": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.id": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.id": {}}, "names": {"runpod.serverless.modules.worker_state.WORKER_ID": {}, "runpod.serverless.modules.worker_state.Job.id": {}, "runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}, "runpod.serverless.modules.rp_fastapi.Job.id": {}, "runpod.serverless.modules.rp_fastapi.TestJob.id": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.id": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.id": {}, "runpod.endpoint.runner.Job.endpoint_id": {}, "runpod.endpoint.runner.Job.job_id": {}, "runpod.endpoint.runner.Endpoint.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_id": {}, "runpod.cli.groups.exec.helpers.POD_ID_FILE": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state": {}, "runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.get_pod": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 247}], ["identifi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 1140}], ["idl", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1061}], ["idle_timeout", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1060}], ["ignor", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_runpodignore": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.rp_runpodignore.should_ignore": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "kind": {}, "_index": 111}], ["ignore", {"name": {}, "names": {"runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.rp_runpodignore.should_ignore": {}, "runpod.cli.utils.rp_sync.WatcherHandler.ignore_list": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1269}], ["ignore_list", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler.ignore_list": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1337}], ["imag", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 274}], ["image", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.upload_image": {}, "runpod.cli.BASE_DOCKER_IMAGE": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 691}], ["image_nam", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 999}], ["import", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod": {}, "runpod.api": {}, "runpod.api.queries": {}, "runpod.cli": {}, "runpod.cli.groups": {}, "runpod.cli.groups.project": {}, "runpod.endpoint": {}, "runpod.serverless.modules": {}, "runpod.serverless.utils": {}, "runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 2}], ["improv", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}}, "kind": {}, "_index": 455}], ["in", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 702}], ["in_progress", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.asyncio.asyncio_runner.Job.status": {}}, "kind": {}, "_index": 1196}], ["includ", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1459}], ["index", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints.add": {}}, "kind": {}, "_index": 742}], ["indic", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 211}], ["infer", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}}, "kind": {}, "_index": 853}], ["info", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.info": {}}, "names": {"runpod.cli.utils.rp_info": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.info": {}, "runpod.serverless.utils.rp_debugger.OS_INFO": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_handler": {}, "runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.info": {}}, "kind": {}, "_index": 101}], ["inform", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.queries.user": {}, "runpod.cli.utils.rp_info": {}, "runpod.serverless.modules.rp_logger": {}, "runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 49}], ["init", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Job.__init__": {}, "runpod.serverless.core.Hook.__init__": {}, "runpod.serverless.modules.rp_ping.Heartbeat.__init__": {}, "runpod.serverless.modules.rp_scale.JobScaler.__init__": {}, "runpod.serverless.utils.rp_debugger.LineTimer.__init__": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.__init__": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.error.RunPodError.__init__": {}, "runpod.error.QueryError.__init__": {}, "runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__init__": {}, "runpod.cli.utils.rp_sync.WatcherHandler.__init__": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 375}], ["initi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_ping.Heartbeat.__init__": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 581}], ["initialized", {"name": {}, "names": {"runpod.serverless.core.Hook._initialized": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 518}], ["inject", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1021}], ["input", {"name": {"runpod.serverless.modules.worker_state.Job.input": {}, "runpod.serverless.modules.rp_fastapi.Job.input": {}, "runpod.serverless.modules.rp_fastapi.TestJob.input": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.input": {}}, "names": {"runpod.serverless.modules.worker_state.Job.input": {}, "runpod.serverless.modules.rp_fastapi.Job.input": {}, "runpod.serverless.modules.rp_fastapi.TestJob.input": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.input": {}, "runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}, "runpod.serverless.utils.rp_validator._validate_input_against_schema": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 273}], ["input1", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1466}], ["input2", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1468}], ["input_object", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download": {}}, "kind": {}, "_index": 277}], ["inputs", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1445}], ["instal", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 1364}], ["instanc", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint.__init__": {}, "runpod.endpoint.runner.Endpoint.run": {}}, "kind": {}, "_index": 1117}], ["instance", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.__instance": {}, "runpod.serverless.modules.worker_state.Jobs._instance": {}, "runpod.serverless.core.Hook._instance": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__instance": {}}, "qname": {}, "docstring": {}, "kind": {"runpod.serverless.modules.rp_logger.RunPodLogger.level": {}, "runpod.serverless.modules.worker_state.Job.id": {}, "runpod.serverless.modules.worker_state.Job.input": {}, "runpod.serverless.modules.worker_state.Job.webhook": {}, "runpod.serverless.core.Hook._get_jobs": {}, "runpod.serverless.core.Hook._progress_update": {}, "runpod.serverless.core.Hook._stream_output": {}, "runpod.serverless.core.Hook._post_output": {}, "runpod.serverless.core.Hook._finish_stream": {}, "runpod.serverless.core.Hook.rust_so_path": {}, "runpod.serverless.core.Hook.rust_crate_version": {}, "runpod.serverless.core.Hook._initialized": {}, "runpod.serverless.modules.rp_ping.Heartbeat._session": {}, "runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier": {}, "runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}, "runpod.serverless.modules.rp_scale.JobScaler.job_history": {}, "runpod.serverless.modules.rp_scale.JobScaler.current_concurrency": {}, "runpod.serverless.modules.rp_scale.JobScaler._is_alive": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup": {}, "runpod.serverless.utils.rp_debugger.LineTimer.checkpoints": {}, "runpod.serverless.utils.rp_debugger.LineTimer.name": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.function": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.config": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app": {}, "runpod.error.RunPodError.message": {}, "runpod.error.QueryError.query": {}, "runpod.endpoint.runner.RunPodClient.rp_session": {}, "runpod.endpoint.runner.RunPodClient.headers": {}, "runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}, "runpod.endpoint.runner.Job.endpoint_id": {}, "runpod.endpoint.runner.Job.job_id": {}, "runpod.endpoint.runner.Job.rp_client": {}, "runpod.endpoint.runner.Job.job_status": {}, "runpod.endpoint.runner.Job.job_output": {}, "runpod.endpoint.runner.Endpoint.endpoint_id": {}, "runpod.endpoint.runner.Endpoint.rp_client": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.session": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_output": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.session": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_id": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_port": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.ssh": {}, "runpod.cli.utils.rp_sync.WatcherHandler.action_function": {}, "runpod.cli.utils.rp_sync.WatcherHandler.local_path": {}, "runpod.cli.utils.rp_sync.WatcherHandler.ignore_list": {}, "runpod.cli.utils.rp_sync.WatcherHandler.debouncer": {}}, "_index": 320}], ["instead", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.set_credentials": {}}, "kind": {}, "_index": 1089}], ["int", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}}, "kind": {}, "_index": 600}], ["interact", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.Hook": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}}, "kind": {}, "_index": 491}], ["interest", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 200}], ["interval", {"name": {}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 574}], ["invalid", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}}, "qname": {}, "docstring": {"runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "kind": {}, "_index": 1153}], ["invalid_type_error", {"name": {"runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1434}], ["ip", {"name": {}, "names": {"runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip": {}}, "qname": {}, "docstring": {"runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}}, "kind": {}, "_index": 1257}], ["is", {"name": {}, "names": {"runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}, "runpod.serverless.modules.rp_handler.is_generator": {}, "runpod.serverless.modules.rp_scale.JobScaler._is_alive": {}, "runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}, "runpod.serverless.worker._is_local": {}, "runpod.endpoint.helpers.is_completed": {}, "runpod.serverless.utils.rp_cuda.is_available": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 357}], ["is_alive", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 619}], ["is_available", {"name": {"runpod.serverless.utils.rp_cuda.is_available": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1420}], ["is_completed", {"name": {"runpod.endpoint.helpers.is_completed": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1109}], ["is_generator", {"name": {"runpod.serverless.modules.rp_handler.is_generator": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 566}], ["is_local_test", {"name": {"runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 356}], ["is_serverless", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1049}], ["items", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1450}], ["job", {"name": {"runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.rp_fastapi.Job": {}, "runpod.endpoint.runner.Job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job": {}}, "names": {"runpod.serverless.modules.rp_job": {}, "runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.worker_state.Jobs.add_job": {}, "runpod.serverless.modules.worker_state.Jobs.remove_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_count": {}, "runpod.serverless.modules.rp_job.JOB_GET_URL": {}, "runpod.serverless.modules.rp_job.job_list": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.core.CGetJobResult": {}, "runpod.serverless.core.Hook._json_serialize_job_data": {}, "runpod.serverless.core._process_job": {}, "runpod.serverless.modules.rp_scale.job_list": {}, "runpod.serverless.modules.rp_scale.JobScaler": {}, "runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}, "runpod.serverless.modules.rp_scale.JobScaler.job_history": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}, "runpod.serverless.modules.rp_http.job_list": {}, "runpod.serverless.worker.job_list": {}, "runpod.serverless.worker._process_job": {}, "runpod.serverless.modules.rp_fastapi.job_list": {}, "runpod.serverless.modules.rp_fastapi.Job": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}, "runpod.serverless.modules.rp_fastapi.JobOutput": {}, "runpod.endpoint.runner.Job": {}, "runpod.endpoint.runner.Job.job_id": {}, "runpod.endpoint.runner.Job.job_status": {}, "runpod.endpoint.runner.Job.job_output": {}, "runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job": {}, "runpod.serverless.modules.worker_state": {}, "runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.worker_state.Jobs": {}, "runpod.serverless.modules.worker_state.Jobs.add_job": {}, "runpod.serverless.modules.worker_state.Jobs.remove_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_count": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.core.Hook.finish_stream": {}, "runpod.serverless.core._process_job": {}, "runpod.serverless.core.run": {}, "runpod.serverless.modules.rp_scale.JobScaler": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.modules.rp_http.send_result": {}, "runpod.serverless.modules.rp_http.stream_result": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.worker.main": {}, "runpod.serverless.modules.rp_fastapi.Job": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}, "runpod.serverless.modules.rp_fastapi.JobOutput": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.serverless.modules.rp_progress.progress_update": {}, "runpod.endpoint.runner.Job": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Job.status": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}}, "kind": {}, "_index": 174}], ["job_done_url", {"name": {"runpod.serverless.modules.rp_http.JOB_DONE_URL": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 633}], ["job_done_url_template", {"name": {"runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 629}], ["job_get_url", {"name": {"runpod.serverless.modules.rp_job.JOB_GET_URL": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 423}], ["job_history", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.job_history": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 611}], ["job_id", {"name": {"runpod.endpoint.runner.Job.job_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_id": {}}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Job": {}, "runpod.endpoint.runner.Job.__init__": {}}, "kind": {}, "_index": 368}], ["job_input", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Job": {}}, "kind": {}, "_index": 371}], ["job_list", {"name": {"runpod.serverless.modules.rp_job.job_list": {}, "runpod.serverless.modules.rp_scale.job_list": {}, "runpod.serverless.modules.rp_http.job_list": {}, "runpod.serverless.worker.job_list": {}, "runpod.serverless.modules.rp_fastapi.job_list": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 427}], ["job_output", {"name": {"runpod.endpoint.runner.Job.job_output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_output": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1147}], ["job_status", {"name": {"runpod.endpoint.runner.Job.job_status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_status": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1145}], ["job_stream_url", {"name": {"runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 637}], ["job_stream_url_template", {"name": {"runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 635}], ["joboutput", {"name": {"runpod.serverless.modules.rp_fastapi.JobOutput": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 823}], ["jobs", {"name": {"runpod.serverless.modules.worker_state.Jobs": {}, "runpod.serverless.modules.worker_state.Jobs.jobs": {}, "runpod.serverless.modules.rp_ping.jobs": {}}, "names": {"runpod.serverless.modules.worker_state.Jobs": {}, "runpod.serverless.modules.worker_state.Jobs.jobs": {}, "runpod.serverless.core.Hook._get_jobs": {}, "runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.modules.rp_ping.jobs": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 389}], ["jobscaler", {"name": {"runpod.serverless.modules.rp_scale.JobScaler": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 601}], ["json", {"name": {}, "names": {"runpod.serverless.core.Hook._json_serialize_job_data": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "kind": {}, "_index": 521}], ["kei", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.core.run": {}, "runpod.serverless.worker._get_auth_header": {}, "runpod.api.ctl_commands.update_user_settings": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}, "runpod.cli.groups.ssh.functions.get_user_pub_keys": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.groups.ssh.commands.ssh_cli": {}, "runpod.cli.groups.ssh.commands.list_keys": {}, "runpod.cli.groups.ssh.commands.add_key": {}}, "kind": {}, "_index": 363}], ["key", {"name": {}, "names": {"runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}, "runpod.SSH_KEY_PATH": {}, "runpod.api_key": {}, "runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.key_file": {}, "runpod.cli.groups.ssh.commands.add_key": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1106}], ["key_file", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.key_file": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1282}], ["keyerror", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "kind": {}, "_index": 1202}], ["keys", {"name": {}, "names": {"runpod.cli.groups.ssh.functions.get_user_pub_keys": {}, "runpod.cli.groups.ssh.commands.list_keys": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1236}], ["kill", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}}, "kind": {}, "_index": 623}], ["kill_worker", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 622}], ["lambda", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1460}], ["language/python", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.user_agent.construct_user_agent": {}}, "kind": {}, "_index": 560}], ["last", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "kind": {}, "_index": 341}], ["launch", {"name": {}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}, "runpod.cli.groups.project.helpers.attempt_pod_launch": {}, "runpod.cli.groups.project.functions._launch_dev_pod": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}, "runpod.cli.groups.project.helpers.attempt_pod_launch": {}, "runpod.cli.groups.project.functions._launch_dev_pod": {}}, "kind": {}, "_index": 161}], ["launch_terminal", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1302}], ["length", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 305}], ["level", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.level": {}}, "names": {"runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}}, "kind": {}, "_index": 188}], ["levels", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.LOG_LEVELS": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 309}], ["line", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.LineTimer": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 750}], ["linetimer", {"name": {"runpod.serverless.utils.rp_debugger.LineTimer": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 749}], ["linux", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.user_agent.construct_user_agent": {}}, "kind": {}, "_index": 556}], ["list", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.serverless.modules.rp_job.job_list": {}, "runpod.serverless.modules.rp_scale.job_list": {}, "runpod.serverless.modules.rp_http.job_list": {}, "runpod.serverless.worker.job_list": {}, "runpod.serverless.modules.rp_fastapi.job_list": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.rp_sync.WatcherHandler.ignore_list": {}, "runpod.cli.groups.ssh.commands.list_keys": {}, "runpod.cli.groups.pod.commands.list_pods": {}}, "qname": {}, "docstring": {"runpod.cli.utils.rp_runpodignore": {}, "runpod.serverless.modules.worker_state.Jobs.add_job": {}, "runpod.serverless.modules.worker_state.Jobs.remove_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_upload.files": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}, "runpod.cli.groups.ssh.commands.list_keys": {}, "runpod.cli.groups.pod.commands.list_pods": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 110}], ["list[any]:", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}}, "kind": {}, "_index": 628}], ["list_keys", {"name": {"runpod.cli.groups.ssh.commands.list_keys": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1390}], ["list_pods", {"name": {"runpod.cli.groups.pod.commands.list_pods": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1396}], ["load", {"name": {}, "names": {"runpod.cli.groups.project.helpers.load_project_config": {}}, "qname": {}, "docstring": {"runpod.cli.groups.project.helpers.load_project_config": {}}, "kind": {}, "_index": 1327}], ["load_project_config", {"name": {"runpod.cli.groups.project.helpers.load_project_config": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1326}], ["local", {"name": {}, "names": {"runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}, "runpod.serverless.modules.rp_local.run_local": {}, "runpod.serverless.worker._is_local": {}, "runpod.cli.utils.rp_sync.WatcherHandler.local_path": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.rp_local.run_local": {}, "runpod.serverless.worker._is_local": {}, "runpod.serverless.worker.main": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}, "runpod.cli.utils.rp_sync.sync_directory": {}}, "kind": {}, "_index": 177}], ["local_path", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler.local_path": {}}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "kind": {}, "_index": 1309}], ["locat", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions": {}, "runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 73}], ["log", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.log": {}, "runpod.serverless.modules.rp_tips.log": {}, "runpod.serverless.modules.rp_job.log": {}, "runpod.serverless.core.log": {}, "runpod.serverless.modules.rp_local.log": {}, "runpod.serverless.modules.rp_ping.log": {}, "runpod.serverless.modules.rp_scale.log": {}, "runpod.serverless.modules.rp_http.log": {}, "runpod.serverless.worker.log": {}, "runpod.serverless.modules.rp_progress.log": {}, "runpod.serverless.log": {}}, "names": {"runpod.serverless.modules.rp_logger.LOG_LEVELS": {}, "runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.log": {}, "runpod.serverless.modules.rp_tips.log": {}, "runpod.serverless.modules.rp_job.log": {}, "runpod.serverless.core.log": {}, "runpod.serverless.modules.rp_local.log": {}, "runpod.serverless.modules.rp_ping.log": {}, "runpod.serverless.modules.rp_scale.log": {}, "runpod.serverless.modules.rp_http.log": {}, "runpod.serverless.worker.log": {}, "runpod.serverless.modules.rp_progress.log": {}, "runpod.serverless.log": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_logger.RunPodLogger": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.log": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.debug": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.info": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.warn": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.error": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.tip": {}}, "kind": {}, "_index": 187}], ["log_levels", {"name": {"runpod.serverless.modules.rp_logger.LOG_LEVELS": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 308}], ["logger", {"name": {"runpod.serverless.utils.rp_upload.logger": {}}, "names": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_logger.RunPodLogger": {}, "runpod.serverless.utils.rp_upload.logger": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 183}], ["logging.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 186}], ["lookup", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 738}], ["loop", {"name": {}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}}, "qname": {}, "docstring": {"runpod.serverless.core.main": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.worker.main": {}, "runpod.serverless.modules.rp_progress._thread_target": {}}, "kind": {}, "_index": 551}], ["machin", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}}, "kind": {}, "_index": 1299}], ["made", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {}, "_index": 1126}], ["main", {"name": {"runpod.serverless.core.main": {}, "runpod.serverless.worker.main": {}}, "names": {"runpod.serverless.core.main": {}, "runpod.serverless.worker.main": {}}, "qname": {}, "docstring": {"runpod.serverless": {}}, "kind": {}, "_index": 147}], ["main.py\")", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1053}], ["make", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.__init__": {}}, "kind": {}, "_index": 432}], ["manag", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.pod": {}, "runpod.endpoint.runner.Endpoint": {}, "runpod.cli.groups.ssh.commands.ssh_cli": {}}, "kind": {}, "_index": 85}], ["mani", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 991}], ["match", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.start_project": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1361}], ["max", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 303}], ["max_message_length", {"name": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 302}], ["maximum", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1068}], ["memori", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "kind": {}, "_index": 705}], ["memory", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 703}], ["mention", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1026}], ["messag", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.log": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}}, "kind": {}, "_index": 330}], ["message", {"name": {"runpod.error.RunPodError.message": {}}, "names": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}, "runpod.error.RunPodError.message": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 304}], ["method", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {"runpod.serverless.modules.rp_logger.RunPodLogger.__new__": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.log": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.debug": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.info": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.warn": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.error": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.tip": {}, "runpod.serverless.modules.worker_state.Job.__init__": {}, "runpod.serverless.modules.worker_state.Job.__eq__": {}, "runpod.serverless.modules.worker_state.Job.__hash__": {}, "runpod.serverless.modules.worker_state.Job.__str__": {}, "runpod.serverless.modules.worker_state.Jobs.__new__": {}, "runpod.serverless.modules.worker_state.Jobs.add_job": {}, "runpod.serverless.modules.worker_state.Jobs.remove_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_count": {}, "runpod.serverless.core.CGetJobResult.__str__": {}, "runpod.serverless.core.Hook.__new__": {}, "runpod.serverless.core.Hook.__init__": {}, "runpod.serverless.core.Hook._json_serialize_job_data": {}, "runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.core.Hook.stream_output": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.core.Hook.finish_stream": {}, "runpod.serverless.modules.rp_ping.Heartbeat.__init__": {}, "runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}, "runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}, "runpod.serverless.modules.rp_scale.JobScaler.__init__": {}, "runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}, "runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__new__": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.add": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.start": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.stop": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.clear": {}, "runpod.serverless.utils.rp_debugger.LineTimer.__init__": {}, "runpod.serverless.utils.rp_debugger.LineTimer.__enter__": {}, "runpod.serverless.utils.rp_debugger.LineTimer.__exit__": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.__init__": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.__call__": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}, "runpod.error.RunPodError.__init__": {}, "runpod.error.RunPodError.__str__": {}, "runpod.error.QueryError.__init__": {}, "runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.RunPodClient.post": {}, "runpod.endpoint.runner.RunPodClient.get": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.runner.Job.status": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.__init__": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__init__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__enter__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__exit__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.close": {}, "runpod.cli.utils.rp_sync.WatcherHandler.__init__": {}, "runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "_index": 326}], ["minimum", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1066}], ["missing", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1427}], ["missing_default_error", {"name": {"runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1430}], ["missing_required_error", {"name": {"runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1426}], ["missing_type_error", {"name": {"runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1432}], ["mode", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}}, "kind": {}, "_index": 164}], ["model", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}}, "kind": {}, "_index": 286}], ["modif", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}}, "kind": {}, "_index": 598}], ["modifi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.start": {}}, "kind": {}, "_index": 597}], ["modifier", {"name": {}, "names": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 594}], ["modul", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod": {}, "runpod.api": {}, "runpod.api.queries": {}, "runpod.cli": {}, "runpod.cli.groups": {}, "runpod.endpoint": {}, "runpod.endpoint.asyncio.asyncio_runner": {}, "runpod.serverless.modules": {}, "runpod.serverless.modules.rp_http": {}, "runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_progress": {}, "runpod.serverless.utils": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_upload": {}}, "kind": {}, "_index": 3}], ["module", {"name": {}, "names": {}, "qname": {}, "docstring": {}, "kind": {"runpod.api.ctl_commands": {}, "runpod.api.graphql": {}, "runpod.api.mutations.container_register_auth": {}, "runpod.api.mutations.endpoints": {}, "runpod.api.mutations.pods": {}, "runpod.api.mutations.templates": {}, "runpod.api.mutations.user": {}, "runpod.api.queries.endpoints": {}, "runpod.api.queries.gpus": {}, "runpod.api.queries.pods": {}, "runpod.api.queries.user": {}, "runpod.cli.entry": {}, "runpod.cli.groups.config.commands": {}, "runpod.cli.groups.config.functions": {}, "runpod.cli.groups.exec.commands": {}, "runpod.cli.groups.exec.functions": {}, "runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.pod.commands": {}, "runpod.cli.groups.project.commands": {}, "runpod.cli.groups.project.functions": {}, "runpod.cli.groups.project.helpers": {}, "runpod.cli.groups.ssh.commands": {}, "runpod.cli.groups.ssh.functions": {}, "runpod.cli.utils.rp_info": {}, "runpod.cli.utils.rp_runpodignore": {}, "runpod.cli.utils.rp_sync": {}, "runpod.cli.utils.rp_userspace": {}, "runpod.cli.utils.ssh_cmd": {}, "runpod.endpoint.asyncio.asyncio_runner": {}, "runpod.endpoint.helpers": {}, "runpod.endpoint.runner": {}, "runpod.error": {}, "runpod.serverless.core": {}, "runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_handler": {}, "runpod.serverless.modules.rp_http": {}, "runpod.serverless.modules.rp_job": {}, "runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_progress": {}, "runpod.serverless.modules.rp_scale": {}, "runpod.serverless.modules.rp_tips": {}, "runpod.serverless.modules.worker_state": {}, "runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_cuda": {}, "runpod.serverless.utils.rp_debugger": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_upload": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.serverless.worker": {}, "runpod.user_agent": {}, "runpod.version": {}}, "_index": 15}], ["modules", {"name": {"runpod.serverless.modules": {}}, "names": {"runpod.serverless.modules": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 155}], ["more", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 484}], ["mount", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1019}], ["move", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 1368}], ["msg", {"name": {}, "names": {"runpod.endpoint.helpers.UNAUTHORIZED_MSG": {}, "runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1103}], ["multi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.worker.run_worker": {}}, "kind": {}, "_index": 789}], ["multipl", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "kind": {}, "_index": 626}], ["mutat", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations": {}, "runpod.api.mutations.container_register_auth": {}, "runpod.api.mutations.endpoints": {}, "runpod.api.mutations.pods": {}, "runpod.api.mutations.templates": {}, "runpod.api.mutations.user": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.mutations.user.generate_user_mutation": {}}, "kind": {}, "_index": 21}], ["mutation", {"name": {}, "names": {"runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.mutations.user.generate_user_mutation": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 937}], ["mutations", {"name": {"runpod.api.mutations": {}}, "names": {"runpod.api.mutations": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 18}], ["name", {"name": {"runpod.serverless.utils.rp_debugger.LineTimer.name": {}}, "names": {"runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup": {}, "runpod.serverless.utils.rp_debugger.LineTimer.name": {}, "runpod.cli.groups.project.helpers.validate_project_name": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.cli.groups.project.helpers.validate_project_name": {}, "runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 315}], ["name_lookup", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 737}], ["network", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1059}], ["network_volume_id", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1058}], ["new", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.__new__": {}, "runpod.serverless.modules.worker_state.Jobs.__new__": {}, "runpod.serverless.core.Hook.__new__": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__new__": {}, "runpod.cli.groups.project.functions.create_new_project": {}, "runpod.cli.groups.project.commands.new_project_wizard": {}, "runpod.cli.groups.pod.commands.create_new_pod": {}}, "qname": {}, "docstring": {"runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.cli.groups.project.functions.create_new_project": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.cli.groups.project.commands.new_project_wizard": {}}, "kind": {}, "_index": 324}], ["new_project_wizard", {"name": {"runpod.cli.groups.project.commands.new_project_wizard": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1376}], ["newli", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}}, "kind": {}, "_index": 1215}], ["none", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}}, "kind": {}, "_index": 1263}], ["not", {"name": {}, "names": {"runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1107}], ["note", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}}, "kind": {}, "_index": 453}], ["notset", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 191}], ["number", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Jobs.get_job_count": {}, "runpod.serverless.core.CGetJobResult": {}, "runpod.serverless.modules.rp_scale.JobScaler": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 413}], ["number/st", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.health": {}}, "kind": {}, "_index": 1178}], ["nvidia", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}}, "kind": {}, "_index": 1031}], ["object", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}, "runpod.serverless.utils.rp_debugger.LineTimer": {}}, "kind": {}, "_index": 366}], ["on", {"name": {}, "names": {"runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}, "runpod.endpoint.helpers.is_completed": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.groups.ssh.commands.add_key": {}}, "kind": {}, "_index": 445}], ["on_any_event", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1341}], ["onc", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_upload.files": {}}, "kind": {}, "_index": 694}], ["open", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1016}], ["oper", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}}, "kind": {}, "_index": 1205}], ["option", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}}, "kind": {}, "_index": 1290}], ["options", {"name": {}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1288}], ["origin", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.file": {}}, "kind": {}, "_index": 676}], ["os", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.OS_INFO": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 707}], ["os_info", {"name": {"runpod.serverless.utils.rp_debugger.OS_INFO": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 706}], ["otherwis", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.worker._is_local": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.cli.utils.rp_runpodignore.should_ignore": {}, "runpod.serverless.utils.rp_cuda.is_available": {}}, "kind": {}, "_index": 539}], ["output", {"name": {"runpod.serverless.modules.rp_fastapi.JobOutput.output": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "names": {"runpod.serverless.core.Hook._stream_output": {}, "runpod.serverless.core.Hook._post_output": {}, "runpod.serverless.core.Hook.stream_output": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.utils.rp_debugger.get_debugger_output": {}, "runpod.serverless.utils.rp_debugger.clear_debugger_output": {}, "runpod.serverless.modules.rp_fastapi.JobOutput": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.output": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput": {}, "runpod.endpoint.runner.Job.job_output": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.utils.rp_debugger.get_debugger_output": {}, "runpod.serverless.utils.rp_debugger.clear_debugger_output": {}, "runpod.serverless.modules.rp_fastapi.JobOutput": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}}, "kind": {}, "_index": 373}], ["over", {"name": {}, "names": {"runpod.cli.groups.exec.functions.python_over_ssh": {}}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd": {}, "runpod.cli.utils.ssh_cmd.SSHConnection": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}, "runpod.cli.groups.exec.functions.python_over_ssh": {}}, "kind": {}, "_index": 128}], ["overwrit", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.commands.config_wizard": {}}, "kind": {}, "_index": 1387}], ["packag", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.error": {}}, "kind": {}, "_index": 144}], ["package", {"name": {}, "names": {}, "qname": {}, "docstring": {}, "kind": {"runpod": {}, "runpod.api": {}, "runpod.api.mutations": {}, "runpod.api.queries": {}, "runpod.cli": {}, "runpod.cli.groups": {}, "runpod.cli.groups.config": {}, "runpod.cli.groups.exec": {}, "runpod.cli.groups.pod": {}, "runpod.cli.groups.project": {}, "runpod.cli.groups.ssh": {}, "runpod.cli.utils": {}, "runpod.endpoint": {}, "runpod.endpoint.asyncio": {}, "runpod.serverless": {}, "runpod.serverless.modules": {}, "runpod.serverless.utils": {}}, "_index": 4}], ["pair", {"name": {}, "names": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "qname": {}, "docstring": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "kind": {}, "_index": 1239}], ["parallel", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.utils.rp_upload.files": {}}, "kind": {}, "_index": 627}], ["param", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.update_user_settings": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.get_pod": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}}, "kind": {}, "_index": 982}], ["paramet", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.worker.run_worker": {}, "runpod.serverless.start": {}}, "kind": {}, "_index": 790}], ["parser", {"name": {"runpod.serverless.parser": {}}, "names": {"runpod.serverless.parser": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 883}], ["part", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.Hook.stream_output": {}}, "kind": {}, "_index": 532}], ["partial", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.run_job_generator": {}}, "kind": {}, "_index": 468}], ["pass", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless": {}, "runpod.serverless.core.CGetJobResult": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}}, "kind": {}, "_index": 151}], ["password", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}}, "kind": {}, "_index": 935}], ["path", {"name": {}, "names": {"runpod.serverless.core.Hook.rust_so_path": {}, "runpod.SSH_KEY_PATH": {}, "runpod.cli.utils.rp_sync.WatcherHandler.local_path": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "kind": {}, "_index": 512}], ["patterns", {"name": {}, "names": {"runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1266}], ["payload", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {}, "_index": 838}], ["perform", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}}, "kind": {}, "_index": 218}], ["period", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_ping": {}}, "kind": {}, "_index": 226}], ["ping", {"name": {}, "names": {"runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.PING_URL": {}, "runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL": {}, "runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}, "runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}}, "kind": {}, "_index": 220}], ["ping_interval", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 573}], ["ping_loop", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 586}], ["ping_url", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat.PING_URL": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 571}], ["place", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "kind": {}, "_index": 1307}], ["platform", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.worker": {}}, "kind": {}, "_index": 290}], ["pod", {"name": {"runpod.cli.groups.pod": {}}, "names": {"runpod.cli.groups.pod": {}, "runpod.serverless.modules.rp_logger.RunPodLogger": {}, "runpod.error.RunPodError": {}, "runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.queries.pods.QUERY_POD": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.api.ctl_commands.get_pod": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_id": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_port": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.attempt_pod_launch": {}, "runpod.cli.groups.project.functions._launch_dev_pod": {}, "runpod.cli.groups.project.commands.start_project_pod": {}, "runpod.cli.groups.pod.commands.pod_cli": {}, "runpod.cli.groups.pod.commands.create_new_pod": {}, "runpod.cli.groups.pod.commands.connect_to_pod": {}, "runpod.cli.groups.exec.helpers.POD_ID_FILE": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "qname": {}, "docstring": {"runpod.api.mutations.pods": {}, "runpod.cli.groups.pod": {}, "runpod.cli.groups.pod.commands": {}, "runpod.cli.utils.rp_info": {}, "runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.worker": {}, "runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.ctl_commands.get_pods": {}, "runpod.api.ctl_commands.get_pod": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.attempt_pod_launch": {}, "runpod.cli.groups.project.functions._launch_dev_pod": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.commands.start_project_pod": {}, "runpod.cli.groups.pod.commands.pod_cli": {}, "runpod.cli.groups.pod.commands.list_pods": {}, "runpod.cli.groups.pod.commands.create_new_pod": {}, "runpod.cli.groups.pod.commands.connect_to_pod": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 34}], ["pod_cli", {"name": {"runpod.cli.groups.pod.commands.pod_cli": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1394}], ["pod_id", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_id": {}}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.get_pod": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 996}], ["pod_id_file", {"name": {"runpod.cli.groups.exec.helpers.POD_ID_FILE": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1404}], ["pod_ip", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1278}], ["pod_port", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_port": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1280}], ["pods", {"name": {"runpod.api.mutations.pods": {}, "runpod.api.queries.pods": {}}, "names": {"runpod.api.mutations.pods": {}, "runpod.api.queries.pods": {}, "runpod.api.ctl_commands.get_pods": {}, "runpod.cli.groups.pod.commands.list_pods": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 32}], ["podwork", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_upload": {}}, "kind": {}, "_index": 185}], ["point", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.entry": {}}, "kind": {}, "_index": 55}], ["popul", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.start": {}}, "kind": {}, "_index": 906}], ["port", {"name": {}, "names": {"runpod.serverless._get_realtime_port": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_port": {}}, "qname": {}, "docstring": {"runpod.serverless._get_realtime_port": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}}, "kind": {}, "_index": 892}], ["possibl", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.helpers.is_completed": {}}, "kind": {}, "_index": 1112}], ["post", {"name": {"runpod.endpoint.runner.RunPodClient.post": {}}, "names": {"runpod.serverless.core.Hook._post_output": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.endpoint.runner.RunPodClient.post": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_http._transmit": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.RunPodClient.post": {}}, "kind": {}, "_index": 502}], ["post_output", {"name": {"runpod.serverless.core.Hook.post_output": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 533}], ["prepar", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}}, "kind": {}, "_index": 431}], ["presign", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_upload.files": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "kind": {}, "_index": 695}], ["print(run_request.output())", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 1167}], ["print(run_request.status())", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 1166}], ["problem", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 202}], ["process", {"name": {}, "names": {"runpod.serverless.core._process_job": {}, "runpod.serverless.worker._process_job": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.core._process_job": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}}, "kind": {}, "_index": 439}], ["processor", {"name": {"runpod.serverless.utils.rp_debugger.PROCESSOR": {}}, "names": {"runpod.serverless.utils.rp_debugger.PROCESSOR": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 709}], ["prod", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 1369}], ["profil", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.config.functions.get_credentials": {}}, "kind": {}, "_index": 1086}], ["profile", {"name": {"runpod.profile": {}}, "names": {"runpod.profile": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1220}], ["progress", {"name": {}, "names": {"runpod.serverless.modules.rp_progress": {}, "runpod.serverless.core.Hook._progress_update": {}, "runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}, "runpod.serverless.modules.rp_progress.progress_update": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_progress": {}, "runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.modules.rp_progress.progress_update": {}}, "kind": {}, "_index": 228}], ["progress_update", {"name": {"runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.modules.rp_progress.progress_update": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 527}], ["project", {"name": {"runpod.cli.groups.project": {}}, "names": {"runpod.cli.groups.project": {}, "runpod.cli.groups.project.helpers.validate_project_name": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.project.helpers.load_project_config": {}, "runpod.cli.groups.project.functions.create_new_project": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.cli.groups.project.commands.project_cli": {}, "runpod.cli.groups.project.commands.new_project_wizard": {}, "runpod.cli.groups.project.commands.start_project_pod": {}, "runpod.cli.groups.project.commands.deploy_project": {}}, "qname": {}, "docstring": {"runpod.cli.groups.project": {}, "runpod.cli.groups.project.commands": {}, "runpod.cli.groups.project.functions": {}, "runpod.cli.groups.project.helpers": {}, "runpod.cli.groups.project.helpers.validate_project_name": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.project.helpers.load_project_config": {}, "runpod.cli.groups.project.functions.create_new_project": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.cli.groups.project.commands.project_cli": {}, "runpod.cli.groups.project.commands.new_project_wizard": {}, "runpod.cli.groups.project.commands.start_project_pod": {}, "runpod.cli.groups.project.commands.deploy_project": {}}, "kind": {}, "_index": 87}], ["project_cli", {"name": {"runpod.cli.groups.project.commands.project_cli": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1374}], ["prompt", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.commands.config_wizard": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 1386}], ["provid", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.rp_scale": {}, "runpod.serverless.utils.rp_cuda": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}, "runpod.cli.groups.ssh.commands.add_key": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 180}], ["pub", {"name": {}, "names": {"runpod.cli.groups.ssh.functions.get_user_pub_keys": {}}, "qname": {}, "docstring": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "kind": {}, "_index": 1235}], ["pubkei", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.update_user_settings": {}}, "kind": {}, "_index": 983}], ["public", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.update_user_settings": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}}, "kind": {}, "_index": 984}], ["purg", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 1182}], ["purge", {"name": {}, "names": {"runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1180}], ["purge_queue", {"name": {"runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1179}], ["put", {"name": {}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1296}], ["put_file", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1295}], ["python", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.PYTHON_VERSION": {}, "runpod.cli.groups.exec.functions.python_over_ssh": {}, "runpod.cli.groups.exec.commands.remote_python": {}}, "qname": {}, "docstring": {"runpod.endpoint.runner": {}, "runpod.user_agent": {}, "runpod.version": {}, "runpod.version.get_version": {}, "runpod.user_agent.construct_user_agent": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.exec.functions.python_over_ssh": {}, "runpod.cli.groups.exec.commands.remote_python": {}}, "kind": {}, "_index": 138}], ["python3", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1052}], ["python_over_ssh", {"name": {"runpod.cli.groups.exec.functions.python_over_ssh": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1402}], ["python_version", {"name": {"runpod.serverless.utils.rp_debugger.PYTHON_VERSION": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 711}], ["queri", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.queries": {}, "runpod.api.queries.endpoints": {}, "runpod.api.queries.gpus": {}, "runpod.api.queries.pods": {}, "runpod.api.queries.user": {}, "runpod.error.QueryError": {}, "runpod.api.graphql.run_graphql_query": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.queries.pods.generate_pod_query": {}}, "kind": {}, "_index": 42}], ["queries", {"name": {"runpod.api.queries": {}}, "names": {"runpod.api.queries": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 40}], ["query", {"name": {"runpod.error.QueryError.query": {}}, "names": {"runpod.error.QueryError": {}, "runpod.error.QueryError.query": {}, "runpod.api.graphql.run_graphql_query": {}, "runpod.api.queries.endpoints.QUERY_ENDPOINT": {}, "runpod.api.queries.gpus.QUERY_GPU_TYPES": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.queries.pods.QUERY_POD": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.api.queries.user.QUERY_USER": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 921}], ["query_endpoint", {"name": {"runpod.api.queries.endpoints.QUERY_ENDPOINT": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 963}], ["query_gpu_types", {"name": {"runpod.api.queries.gpus.QUERY_GPU_TYPES": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 965}], ["query_pod", {"name": {"runpod.api.queries.pods.QUERY_POD": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 971}], ["query_user", {"name": {"runpod.api.queries.user.QUERY_USER": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 975}], ["queryerror", {"name": {"runpod.error.QueryError": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 920}], ["queue", {"name": {}, "names": {"runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.core.Hook.finish_stream": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 441}], ["rais", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.error.AuthenticationError": {}, "runpod.error.QueryError": {}, "runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "kind": {}, "_index": 917}], ["random", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.file": {}}, "kind": {}, "_index": 670}], ["raw", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "kind": {}, "_index": 1152}], ["read", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_runpodignore": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}}, "kind": {}, "_index": 107}], ["reais", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "kind": {}, "_index": 1193}], ["realtim", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless._get_realtime_port": {}, "runpod.serverless._get_realtime_concurrency": {}}, "kind": {}, "_index": 894}], ["realtime", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}, "runpod.serverless._get_realtime_port": {}, "runpod.serverless._get_realtime_concurrency": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 851}], ["recogn", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless._set_config_args": {}}, "kind": {}, "_index": 889}], ["recommend", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_tips.check_return_size": {}}, "kind": {}, "_index": 421}], ["ref", {"name": {}, "names": {"runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 350}], ["ref_count_zero", {"name": {"runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 349}], ["region", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "kind": {}, "_index": 681}], ["register", {"name": {}, "names": {"runpod.api.mutations.container_register_auth": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 24}], ["registri", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.container_register_auth": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}}, "kind": {}, "_index": 28}], ["registry", {"name": {}, "names": {"runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 932}], ["registry_auth_id", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1050}], ["relat", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config": {}, "runpod.serverless.modules.rp_job": {}}, "kind": {}, "_index": 61}], ["remot", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_sync": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}, "runpod.cli.utils.rp_sync.WatcherHandler": {}, "runpod.cli.utils.rp_sync.sync_directory": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}, "runpod.cli.groups.exec.commands.remote_python": {}}, "kind": {}, "_index": 118}], ["remote", {"name": {}, "names": {"runpod.cli.groups.exec.commands.remote_python": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1414}], ["remote_path", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "kind": {}, "_index": 1310}], ["remote_python", {"name": {"runpod.cli.groups.exec.commands.remote_python": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1413}], ["remov", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Jobs.remove_job": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless._set_config_args": {}, "runpod.serverless.utils.rp_cleanup.clean": {}}, "kind": {}, "_index": 403}], ["remove", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Jobs.remove_job": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 401}], ["remove_job", {"name": {"runpod.serverless.modules.worker_state.Jobs.remove_job": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 400}], ["replac", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "kind": {}, "_index": 337}], ["repres", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.rp_fastapi.Job": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest": {}, "runpod.serverless.modules.rp_fastapi.JobOutput": {}, "runpod.endpoint.runner.Job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job": {}}, "kind": {}, "_index": 365}], ["represent", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi.StreamOutput": {}}, "kind": {}, "_index": 831}], ["request", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.DefaultRequest": {}, "runpod.endpoint.runner.RunPodClient._request": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_http": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_scale.JobScaler": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.endpoint.helpers.is_completed": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Job.status": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}}, "kind": {}, "_index": 172}], ["request_input", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}}, "kind": {}, "_index": 1171}], ["requests.httperror:", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {}, "_index": 1133}], ["requir", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_cuda": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 262}], ["required", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1428}], ["requirements.txt", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 1365}], ["res_len", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 476}], ["respond", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 1159}], ["respons", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_scale.JobScaler": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {}, "_index": 224}], ["result", {"name": {}, "names": {"runpod.serverless.core.CGetJobResult": {}, "runpod.serverless.modules.rp_http._handle_result": {}, "runpod.serverless.modules.rp_http.send_result": {}, "runpod.serverless.modules.rp_http.stream_result": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.core.CGetJobResult": {}, "runpod.serverless.core.Hook.stream_output": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.core.Hook.finish_stream": {}, "runpod.serverless.core.run": {}, "runpod.serverless.modules.rp_http._transmit": {}, "runpod.serverless.modules.rp_http._handle_result": {}, "runpod.serverless.modules.rp_http.send_result": {}, "runpod.serverless.modules.rp_http.stream_result": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 461}], ["resum", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.ctl_commands.resume_pod": {}}, "kind": {}, "_index": 952}], ["resume", {"name": {}, "names": {"runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.ctl_commands.resume_pod": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 950}], ["resume_pod", {"name": {"runpod.api.ctl_commands.resume_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1038}], ["retri", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}}, "kind": {}, "_index": 450}], ["retriev", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_info": {}, "runpod.serverless.modules.rp_handler": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 103}], ["return", {"name": {}, "names": {"runpod.serverless.modules.rp_tips.check_return_size": {}}, "qname": {}, "docstring": {"runpod.cli.utils.rp_runpodignore": {}, "runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_count": {}, "runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.core.run": {}, "runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.modules.rp_http.send_result": {}, "runpod.serverless.modules.rp_http.stream_result": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_upload.get_boto_client": {}, "runpod.serverless.utils.rp_upload.files": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.add": {}, "runpod.serverless.utils.rp_debugger.get_debugger_output": {}, "runpod.serverless.worker._get_auth_header": {}, "runpod.serverless.worker._is_local": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}, "runpod.serverless._set_config_args": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.cli.groups.config.functions.get_credentials": {}, "runpod.endpoint.helpers.is_completed": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.runner.Job.status": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.rp_runpodignore.should_ignore": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}, "runpod.serverless.utils.rp_cuda.is_available": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 109}], ["root", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "kind": {}, "_index": 1308}], ["rout", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}}, "kind": {}, "_index": 438}], ["rp", {"name": {}, "names": {"runpod.cli.utils.rp_info": {}, "runpod.cli.utils.rp_runpodignore": {}, "runpod.cli.utils.rp_sync": {}, "runpod.cli.utils.rp_userspace": {}, "runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_handler": {}, "runpod.serverless.modules.rp_http": {}, "runpod.serverless.modules.rp_job": {}, "runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_progress": {}, "runpod.serverless.modules.rp_scale": {}, "runpod.serverless.modules.rp_tips": {}, "runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_cuda": {}, "runpod.serverless.utils.rp_debugger": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_upload": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app": {}, "runpod.endpoint.runner.RunPodClient.rp_session": {}, "runpod.endpoint.runner.Job.rp_client": {}, "runpod.endpoint.runner.Endpoint.rp_client": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 100}], ["rp_app", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 844}], ["rp_arg", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless._set_config_args": {}}, "kind": {}, "_index": 888}], ["rp_cleanup", {"name": {"runpod.serverless.utils.rp_cleanup": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 249}], ["rp_client", {"name": {"runpod.endpoint.runner.Job.rp_client": {}, "runpod.endpoint.runner.Endpoint.rp_client": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1143}], ["rp_cuda", {"name": {"runpod.serverless.utils.rp_cuda": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 257}], ["rp_debugg", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 728}], ["rp_debugger", {"name": {"runpod.serverless.utils.rp_debugger": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 264}], ["rp_debugger.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger": {}}, "kind": {}, "_index": 267}], ["rp_download", {"name": {"runpod.serverless.utils.rp_download": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 269}], ["rp_fastapi", {"name": {"runpod.serverless.modules.rp_fastapi": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 157}], ["rp_fastapi.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Jobs.get_job": {}}, "kind": {}, "_index": 408}], ["rp_handler", {"name": {"runpod.serverless.modules.rp_handler": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 165}], ["rp_http", {"name": {"runpod.serverless.modules.rp_http": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 168}], ["rp_info", {"name": {"runpod.cli.utils.rp_info": {}}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_info": {}}, "kind": {}, "_index": 99}], ["rp_job", {"name": {"runpod.serverless.modules.rp_job": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 173}], ["rp_local", {"name": {"runpod.serverless.modules.rp_local": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 176}], ["rp_local.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_local": {}}, "kind": {}, "_index": 179}], ["rp_logger", {"name": {"runpod.serverless.modules.rp_logger": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 182}], ["rp_ping", {"name": {"runpod.serverless.modules.rp_ping": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 219}], ["rp_progress", {"name": {"runpod.serverless.modules.rp_progress": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 227}], ["rp_runpodignore", {"name": {"runpod.cli.utils.rp_runpodignore": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 104}], ["rp_scale", {"name": {"runpod.serverless.modules.rp_scale": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 230}], ["rp_scale.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale": {}}, "kind": {}, "_index": 233}], ["rp_session", {"name": {"runpod.endpoint.runner.RunPodClient.rp_session": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1119}], ["rp_sync", {"name": {"runpod.cli.utils.rp_sync": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 112}], ["rp_tips", {"name": {"runpod.serverless.modules.rp_tips": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 234}], ["rp_upload", {"name": {"runpod.serverless.utils.rp_upload": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 278}], ["rp_userspace", {"name": {"runpod.cli.utils.rp_userspace": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 119}], ["rp_validator", {"name": {"runpod.serverless.utils.rp_validator": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 282}], ["rsa", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "kind": {}, "_index": 1241}], ["rsync", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1305}], ["rtx", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}}, "kind": {}, "_index": 1033}], ["run", {"name": {"runpod.serverless.core.run": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.core.run": {}, "runpod.serverless.modules.rp_local.run_local": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}, "runpod.error.RunPodError": {}, "runpod.api.graphql.run_graphql_query": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}}, "qname": {}, "docstring": {"runpod.cli.utils.ssh_cmd": {}, "runpod.endpoint.asyncio.asyncio_runner": {}, "runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.core.run": {}, "runpod.serverless.core.main": {}, "runpod.serverless.modules.rp_local.run_local": {}, "runpod.serverless.worker._is_local": {}, "runpod.serverless.worker.main": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}, "runpod.serverless.modules.rp_progress.progress_update": {}, "runpod.serverless.start": {}, "runpod.api.graphql.run_graphql_query": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.endpoint.runner.Job": {}, "runpod.endpoint.runner.Endpoint": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}, "runpod.cli.utils.ssh_cmd.SSHConnection": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}, "runpod.cli.groups.exec.functions.python_over_ssh": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}, "runpod.cli.groups.exec.commands.remote_python": {}}, "kind": {}, "_index": 127}], ["run_commands", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1292}], ["run_description", {"name": {"runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 799}], ["run_graphql_query", {"name": {"runpod.api.graphql.run_graphql_query": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 928}], ["run_job", {"name": {"runpod.serverless.modules.rp_job.run_job": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 456}], ["run_job_generator", {"name": {"runpod.serverless.modules.rp_job.run_job_generator": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 462}], ["run_local", {"name": {"runpod.serverless.modules.rp_local.run_local": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 564}], ["run_request", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 1163}], ["run_sync", {"name": {"runpod.endpoint.runner.Endpoint.run_sync": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1172}], ["run_worker", {"name": {"runpod.serverless.worker.run_worker": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 787}], ["runner", {"name": {"runpod.endpoint.runner": {}}, "names": {"runpod.endpoint.asyncio.asyncio_runner": {}, "runpod.endpoint.runner": {}}, "qname": {}, "docstring": {"runpod.endpoint.runner": {}}, "kind": {}, "_index": 133}], ["runpd", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.error": {}}, "kind": {}, "_index": 141}], ["runpod", {"name": {"runpod": {}}, "names": {"runpod": {}, "runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}, "runpod.cli.entry.runpod_cli": {}}, "qname": {"runpod": {}}, "docstring": {"runpod": {}, "runpod.api.ctl_commands": {}, "runpod.api.graphql": {}, "runpod.api.mutations.container_register_auth": {}, "runpod.api.mutations.endpoints": {}, "runpod.api.mutations.pods": {}, "runpod.api.mutations.templates": {}, "runpod.api.mutations.user": {}, "runpod.api.queries.gpus": {}, "runpod.api.queries.pods": {}, "runpod.api.queries.user": {}, "runpod.cli.entry": {}, "runpod.cli.groups.config.functions": {}, "runpod.cli.groups.exec.commands": {}, "runpod.cli.groups.exec.functions": {}, "runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.pod.commands": {}, "runpod.cli.groups.project.commands": {}, "runpod.cli.groups.project.functions": {}, "runpod.cli.groups.ssh.commands": {}, "runpod.cli.groups.ssh.functions": {}, "runpod.cli.utils.rp_info": {}, "runpod.cli.utils.rp_userspace": {}, "runpod.cli.utils.ssh_cmd": {}, "runpod.endpoint.asyncio": {}, "runpod.endpoint.helpers": {}, "runpod.endpoint.runner": {}, "runpod.error": {}, "runpod.serverless": {}, "runpod.serverless.core": {}, "runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_progress": {}, "runpod.serverless.modules.rp_scale": {}, "runpod.serverless.modules.rp_tips": {}, "runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_debugger": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.serverless.worker": {}, "runpod.user_agent": {}, "runpod.version": {}, "runpod.version.get_version": {}, "runpod.user_agent.construct_user_agent": {}, "runpod.serverless.modules.rp_ping.Heartbeat": {}, "runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}, "runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}, "runpod.serverless.worker.main": {}, "runpod.error.RunPodError": {}, "runpod.endpoint.runner.Job": {}, "runpod.endpoint.runner.Endpoint": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.groups.project.commands.project_cli": {}, "runpod.cli.groups.project.commands.deploy_project": {}, "runpod.cli.groups.config.commands.config_wizard": {}, "runpod.cli.entry.runpod_cli": {}}, "kind": {}, "_index": 0}], ["runpod._credentials", {"name": {}, "names": {}, "qname": {"runpod._credentials": {}}, "docstring": {}, "kind": {}, "_index": 1223}], ["runpod.api", {"name": {}, "names": {}, "qname": {"runpod.api": {}}, "docstring": {}, "kind": {}, "_index": 6}], ["runpod.api.ctl_commands", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands": {}}, "docstring": {}, "kind": {}, "_index": 11}], ["runpod.api.ctl_commands.create_container_registry_auth", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.create_container_registry_auth": {}}, "docstring": {}, "kind": {}, "_index": 1075}], ["runpod.api.ctl_commands.create_endpoint", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.create_endpoint": {}}, "docstring": {}, "kind": {}, "_index": 1057}], ["runpod.api.ctl_commands.create_pod", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.create_pod": {}}, "docstring": {}, "kind": {}, "_index": 998}], ["runpod.api.ctl_commands.create_template", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.create_template": {}}, "docstring": {}, "kind": {}, "_index": 1045}], ["runpod.api.ctl_commands.get_endpoints", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_endpoints": {}}, "docstring": {}, "kind": {}, "_index": 1055}], ["runpod.api.ctl_commands.get_gpu", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_gpu": {}}, "docstring": {}, "kind": {}, "_index": 988}], ["runpod.api.ctl_commands.get_gpus", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_gpus": {}}, "docstring": {}, "kind": {}, "_index": 986}], ["runpod.api.ctl_commands.get_pod", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_pod": {}}, "docstring": {}, "kind": {}, "_index": 995}], ["runpod.api.ctl_commands.get_pods", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_pods": {}}, "docstring": {}, "kind": {}, "_index": 993}], ["runpod.api.ctl_commands.get_user", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_user": {}}, "docstring": {}, "kind": {}, "_index": 978}], ["runpod.api.ctl_commands.resume_pod", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.resume_pod": {}}, "docstring": {}, "kind": {}, "_index": 1039}], ["runpod.api.ctl_commands.stop_pod", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.stop_pod": {}}, "docstring": {}, "kind": {}, "_index": 1036}], ["runpod.api.ctl_commands.terminate_pod", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.terminate_pod": {}}, "docstring": {}, "kind": {}, "_index": 1042}], ["runpod.api.ctl_commands.update_endpoint_template", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.update_endpoint_template": {}}, "docstring": {}, "kind": {}, "_index": 1072}], ["runpod.api.ctl_commands.update_user_settings", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.update_user_settings": {}}, "docstring": {}, "kind": {}, "_index": 981}], ["runpod.api.graphql", {"name": {}, "names": {}, "qname": {"runpod.api.graphql": {}}, "docstring": {}, "kind": {}, "_index": 17}], ["runpod.api.graphql.http_status_unauthorized", {"name": {}, "names": {}, "qname": {"runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}}, "docstring": {}, "kind": {}, "_index": 927}], ["runpod.api.graphql.run_graphql_query", {"name": {}, "names": {}, "qname": {"runpod.api.graphql.run_graphql_query": {}}, "docstring": {}, "kind": {}, "_index": 929}], ["runpod.api.mutations", {"name": {}, "names": {}, "qname": {"runpod.api.mutations": {}}, "docstring": {}, "kind": {}, "_index": 19}], ["runpod.api.mutations.container_register_auth", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.container_register_auth": {}}, "docstring": {}, "kind": {}, "_index": 26}], ["runpod.api.mutations.container_register_auth.generate_container_registry_auth", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}}, "docstring": {}, "kind": {}, "_index": 933}], ["runpod.api.mutations.endpoints", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.endpoints": {}}, "docstring": {}, "kind": {}, "_index": 30}], ["runpod.api.mutations.endpoints.generate_endpoint_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.endpoints.generate_endpoint_mutation": {}}, "docstring": {}, "kind": {}, "_index": 938}], ["runpod.api.mutations.endpoints.update_endpoint_template_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}}, "docstring": {}, "kind": {}, "_index": 940}], ["runpod.api.mutations.pods", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.pods": {}}, "docstring": {}, "kind": {}, "_index": 33}], ["runpod.api.mutations.pods.generate_pod_deployment_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.pods.generate_pod_deployment_mutation": {}}, "docstring": {}, "kind": {}, "_index": 944}], ["runpod.api.mutations.pods.generate_pod_resume_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.pods.generate_pod_resume_mutation": {}}, "docstring": {}, "kind": {}, "_index": 951}], ["runpod.api.mutations.pods.generate_pod_stop_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.pods.generate_pod_stop_mutation": {}}, "docstring": {}, "kind": {}, "_index": 948}], ["runpod.api.mutations.pods.generate_pod_terminate_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.pods.generate_pod_terminate_mutation": {}}, "docstring": {}, "kind": {}, "_index": 955}], ["runpod.api.mutations.templates", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.templates": {}}, "docstring": {}, "kind": {}, "_index": 36}], ["runpod.api.mutations.templates.generate_pod_template", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.templates.generate_pod_template": {}}, "docstring": {}, "kind": {}, "_index": 958}], ["runpod.api.mutations.user", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.user": {}}, "docstring": {}, "kind": {}, "_index": 39}], ["runpod.api.mutations.user.generate_user_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.user.generate_user_mutation": {}}, "docstring": {}, "kind": {}, "_index": 960}], ["runpod.api.queries", {"name": {}, "names": {}, "qname": {"runpod.api.queries": {}}, "docstring": {}, "kind": {}, "_index": 41}], ["runpod.api.queries.endpoints", {"name": {}, "names": {}, "qname": {"runpod.api.queries.endpoints": {}}, "docstring": {}, "kind": {}, "_index": 43}], ["runpod.api.queries.endpoints.query_endpoint", {"name": {}, "names": {}, "qname": {"runpod.api.queries.endpoints.QUERY_ENDPOINT": {}}, "docstring": {}, "kind": {}, "_index": 964}], ["runpod.api.queries.gpus", {"name": {}, "names": {}, "qname": {"runpod.api.queries.gpus": {}}, "docstring": {}, "kind": {}, "_index": 45}], ["runpod.api.queries.gpus.generate_gpu_query", {"name": {}, "names": {}, "qname": {"runpod.api.queries.gpus.generate_gpu_query": {}}, "docstring": {}, "kind": {}, "_index": 969}], ["runpod.api.queries.gpus.query_gpu_types", {"name": {}, "names": {}, "qname": {"runpod.api.queries.gpus.QUERY_GPU_TYPES": {}}, "docstring": {}, "kind": {}, "_index": 967}], ["runpod.api.queries.pods", {"name": {}, "names": {}, "qname": {"runpod.api.queries.pods": {}}, "docstring": {}, "kind": {}, "_index": 47}], ["runpod.api.queries.pods.generate_pod_query", {"name": {}, "names": {}, "qname": {"runpod.api.queries.pods.generate_pod_query": {}}, "docstring": {}, "kind": {}, "_index": 974}], ["runpod.api.queries.pods.query_pod", {"name": {}, "names": {}, "qname": {"runpod.api.queries.pods.QUERY_POD": {}}, "docstring": {}, "kind": {}, "_index": 972}], ["runpod.api.queries.user", {"name": {}, "names": {}, "qname": {"runpod.api.queries.user": {}}, "docstring": {}, "kind": {}, "_index": 48}], ["runpod.api.queries.user.query_user", {"name": {}, "names": {}, "qname": {"runpod.api.queries.user.QUERY_USER": {}}, "docstring": {}, "kind": {}, "_index": 976}], ["runpod.api_key", {"name": {}, "names": {}, "qname": {"runpod.api_key": {}}, "docstring": {}, "kind": {}, "_index": 1225}], ["runpod.api_url_base", {"name": {}, "names": {}, "qname": {"runpod.api_url_base": {}}, "docstring": {}, "kind": {}, "_index": 1227}], ["runpod.cli", {"name": {}, "names": {}, "qname": {"runpod.cli": {}}, "docstring": {"runpod.cli.groups": {}}, "kind": {}, "_index": 51}], ["runpod.cli.base_docker_image", {"name": {}, "names": {}, "qname": {"runpod.cli.BASE_DOCKER_IMAGE": {}}, "docstring": {}, "kind": {}, "_index": 1250}], ["runpod.cli.entry", {"name": {}, "names": {}, "qname": {"runpod.cli.entry": {}}, "docstring": {}, "kind": {}, "_index": 53}], ["runpod.cli.entry.runpod_cli", {"name": {}, "names": {}, "qname": {"runpod.cli.entry.runpod_cli": {}}, "docstring": {}, "kind": {}, "_index": 1418}], ["runpod.cli.env_vars", {"name": {}, "names": {}, "qname": {"runpod.cli.ENV_VARS": {}}, "docstring": {}, "kind": {}, "_index": 1255}], ["runpod.cli.gpu_types", {"name": {}, "names": {}, "qname": {"runpod.cli.GPU_TYPES": {}}, "docstring": {}, "kind": {}, "_index": 1252}], ["runpod.cli.groups", {"name": {}, "names": {}, "qname": {"runpod.cli.groups": {}}, "docstring": {}, "kind": {}, "_index": 57}], ["runpod.cli.groups.config", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config": {}}, "docstring": {}, "kind": {}, "_index": 60}], ["runpod.cli.groups.config.commands", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.commands": {}}, "docstring": {}, "kind": {}, "_index": 63}], ["runpod.cli.groups.config.commands.config_wizard", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.commands.config_wizard": {}}, "docstring": {}, "kind": {}, "_index": 1385}], ["runpod.cli.groups.config.functions", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.functions": {}}, "docstring": {}, "kind": {}, "_index": 65}], ["runpod.cli.groups.config.functions.check_credentials", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.functions.check_credentials": {}}, "docstring": {}, "kind": {}, "_index": 1094}], ["runpod.cli.groups.config.functions.credential_file", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.functions.CREDENTIAL_FILE": {}}, "docstring": {}, "kind": {}, "_index": 1079}], ["runpod.cli.groups.config.functions.get_credentials", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.functions.get_credentials": {}}, "docstring": {}, "kind": {}, "_index": 1096}], ["runpod.cli.groups.config.functions.set_credentials", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.functions.set_credentials": {}}, "docstring": {}, "kind": {}, "_index": 1082}], ["runpod.cli.groups.exec", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec": {}}, "docstring": {}, "kind": {}, "_index": 76}], ["runpod.cli.groups.exec.commands", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.commands": {}}, "docstring": {}, "kind": {}, "_index": 79}], ["runpod.cli.groups.exec.commands.exec_cli", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.commands.exec_cli": {}}, "docstring": {}, "kind": {}, "_index": 1412}], ["runpod.cli.groups.exec.commands.remote_python", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.commands.remote_python": {}}, "docstring": {}, "kind": {}, "_index": 1415}], ["runpod.cli.groups.exec.functions", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.functions": {}}, "docstring": {}, "kind": {}, "_index": 80}], ["runpod.cli.groups.exec.functions.python_over_ssh", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.functions.python_over_ssh": {}}, "docstring": {}, "kind": {}, "_index": 1403}], ["runpod.cli.groups.exec.helpers", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.helpers": {}}, "docstring": {}, "kind": {}, "_index": 82}], ["runpod.cli.groups.exec.helpers.get_session_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.helpers.get_session_pod": {}}, "docstring": {}, "kind": {}, "_index": 1407}], ["runpod.cli.groups.exec.helpers.pod_id_file", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.helpers.POD_ID_FILE": {}}, "docstring": {}, "kind": {}, "_index": 1405}], ["runpod.cli.groups.pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod": {}}, "docstring": {}, "kind": {}, "_index": 84}], ["runpod.cli.groups.pod.commands", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod.commands": {}}, "docstring": {}, "kind": {}, "_index": 86}], ["runpod.cli.groups.pod.commands.connect_to_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod.commands.connect_to_pod": {}}, "docstring": {}, "kind": {}, "_index": 1401}], ["runpod.cli.groups.pod.commands.create_new_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod.commands.create_new_pod": {}}, "docstring": {}, "kind": {}, "_index": 1399}], ["runpod.cli.groups.pod.commands.list_pods", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod.commands.list_pods": {}}, "docstring": {}, "kind": {}, "_index": 1397}], ["runpod.cli.groups.pod.commands.pod_cli", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod.commands.pod_cli": {}}, "docstring": {}, "kind": {}, "_index": 1395}], ["runpod.cli.groups.project", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project": {}}, "docstring": {}, "kind": {}, "_index": 88}], ["runpod.cli.groups.project.commands", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.commands": {}}, "docstring": {}, "kind": {}, "_index": 89}], ["runpod.cli.groups.project.commands.deploy_project", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.commands.deploy_project": {}}, "docstring": {}, "kind": {}, "_index": 1383}], ["runpod.cli.groups.project.commands.new_project_wizard", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.commands.new_project_wizard": {}}, "docstring": {}, "kind": {}, "_index": 1378}], ["runpod.cli.groups.project.commands.project_cli", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.commands.project_cli": {}}, "docstring": {}, "kind": {}, "_index": 1375}], ["runpod.cli.groups.project.commands.start_project_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.commands.start_project_pod": {}}, "docstring": {}, "kind": {}, "_index": 1380}], ["runpod.cli.groups.project.functions", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions": {}}, "docstring": {}, "kind": {}, "_index": 90}], ["runpod.cli.groups.project.functions._launch_dev_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions._launch_dev_pod": {}}, "docstring": {}, "kind": {}, "_index": 1354}], ["runpod.cli.groups.project.functions.create_new_project", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions.create_new_project": {}}, "docstring": {}, "kind": {}, "_index": 1356}], ["runpod.cli.groups.project.functions.create_project_endpoint", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "docstring": {}, "kind": {}, "_index": 1367}], ["runpod.cli.groups.project.functions.start_project", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions.start_project": {}}, "docstring": {}, "kind": {}, "_index": 1358}], ["runpod.cli.groups.project.functions.starter_templates", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions.STARTER_TEMPLATES": {}}, "docstring": {}, "kind": {}, "_index": 1351}], ["runpod.cli.groups.project.helpers", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers": {}}, "docstring": {}, "kind": {}, "_index": 91}], ["runpod.cli.groups.project.helpers.attempt_pod_launch", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.attempt_pod_launch": {}}, "docstring": {}, "kind": {}, "_index": 1325}], ["runpod.cli.groups.project.helpers.copy_template_files", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.copy_template_files": {}}, "docstring": {}, "kind": {}, "_index": 1321}], ["runpod.cli.groups.project.helpers.get_project_endpoint", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.get_project_endpoint": {}}, "docstring": {}, "kind": {}, "_index": 1318}], ["runpod.cli.groups.project.helpers.get_project_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.get_project_pod": {}}, "docstring": {}, "kind": {}, "_index": 1316}], ["runpod.cli.groups.project.helpers.load_project_config", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.load_project_config": {}}, "docstring": {}, "kind": {}, "_index": 1328}], ["runpod.cli.groups.project.helpers.validate_project_name", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.validate_project_name": {}}, "docstring": {}, "kind": {}, "_index": 1314}], ["runpod.cli.groups.ssh", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh": {}}, "docstring": {}, "kind": {}, "_index": 93}], ["runpod.cli.groups.ssh.commands", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.commands": {}}, "docstring": {}, "kind": {}, "_index": 94}], ["runpod.cli.groups.ssh.commands.add_key", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.commands.add_key": {}}, "docstring": {}, "kind": {}, "_index": 1393}], ["runpod.cli.groups.ssh.commands.list_keys", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.commands.list_keys": {}}, "docstring": {}, "kind": {}, "_index": 1391}], ["runpod.cli.groups.ssh.commands.ssh_cli", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.commands.ssh_cli": {}}, "docstring": {}, "kind": {}, "_index": 1389}], ["runpod.cli.groups.ssh.functions", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions": {}}, "docstring": {}, "kind": {}, "_index": 95}], ["runpod.cli.groups.ssh.functions.add_ssh_key", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions.add_ssh_key": {}}, "docstring": {}, "kind": {}, "_index": 1245}], ["runpod.cli.groups.ssh.functions.generate_ssh_key_pair", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "docstring": {}, "kind": {}, "_index": 1240}], ["runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}}, "docstring": {}, "kind": {}, "_index": 1233}], ["runpod.cli.groups.ssh.functions.get_user_pub_keys", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions.get_user_pub_keys": {}}, "docstring": {}, "kind": {}, "_index": 1237}], ["runpod.cli.groups.ssh.functions.ssh_files", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions.SSH_FILES": {}}, "docstring": {}, "kind": {}, "_index": 1230}], ["runpod.cli.stop_event", {"name": {}, "names": {}, "qname": {"runpod.cli.STOP_EVENT": {}}, "docstring": {}, "kind": {}, "_index": 1248}], ["runpod.cli.utils", {"name": {}, "names": {}, "qname": {"runpod.cli.utils": {}}, "docstring": {}, "kind": {}, "_index": 97}], ["runpod.cli.utils.rp_info", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_info": {}}, "docstring": {}, "kind": {}, "_index": 102}], ["runpod.cli.utils.rp_info.get_pod_ssh_ip_port", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}}, "docstring": {}, "kind": {}, "_index": 1258}], ["runpod.cli.utils.rp_runpodignore", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_runpodignore": {}}, "docstring": {}, "kind": {}, "_index": 106}], ["runpod.cli.utils.rp_runpodignore.exclude_patterns", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS": {}}, "docstring": {}, "kind": {}, "_index": 1267}], ["runpod.cli.utils.rp_runpodignore.get_ignore_list", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_runpodignore.get_ignore_list": {}}, "docstring": {}, "kind": {}, "_index": 1270}], ["runpod.cli.utils.rp_runpodignore.should_ignore", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_runpodignore.should_ignore": {}}, "docstring": {}, "kind": {}, "_index": 1273}], ["runpod.cli.utils.rp_sync", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync": {}}, "docstring": {}, "kind": {}, "_index": 114}], ["runpod.cli.utils.rp_sync.start_watcher", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.start_watcher": {}}, "docstring": {}, "kind": {}, "_index": 1345}], ["runpod.cli.utils.rp_sync.sync_directory", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.sync_directory": {}}, "docstring": {}, "kind": {}, "_index": 1348}], ["runpod.cli.utils.rp_sync.watcherhandler", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler": {}}, "docstring": {}, "kind": {}, "_index": 1331}], ["runpod.cli.utils.rp_sync.watcherhandler.__init__", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.__init__": {}}, "docstring": {}, "kind": {}, "_index": 1332}], ["runpod.cli.utils.rp_sync.watcherhandler.action_function", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.action_function": {}}, "docstring": {}, "kind": {}, "_index": 1335}], ["runpod.cli.utils.rp_sync.watcherhandler.debouncer", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.debouncer": {}}, "docstring": {}, "kind": {}, "_index": 1340}], ["runpod.cli.utils.rp_sync.watcherhandler.ignore_list", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.ignore_list": {}}, "docstring": {}, "kind": {}, "_index": 1338}], ["runpod.cli.utils.rp_sync.watcherhandler.local_path", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.local_path": {}}, "docstring": {}, "kind": {}, "_index": 1336}], ["runpod.cli.utils.rp_sync.watcherhandler.on_any_event", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "docstring": {}, "kind": {}, "_index": 1343}], ["runpod.cli.utils.rp_userspace", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_userspace": {}}, "docstring": {}, "kind": {}, "_index": 121}], ["runpod.cli.utils.rp_userspace.find_ssh_key_file", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "docstring": {}, "kind": {}, "_index": 1262}], ["runpod.cli.utils.ssh_cmd", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd": {}}, "docstring": {}, "kind": {}, "_index": 125}], ["runpod.cli.utils.ssh_cmd.sshconnection", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection": {}}, "docstring": {}, "kind": {}, "_index": 1275}], ["runpod.cli.utils.ssh_cmd.sshconnection.__enter__", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.__enter__": {}}, "docstring": {}, "kind": {}, "_index": 1285}], ["runpod.cli.utils.ssh_cmd.sshconnection.__exit__", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.__exit__": {}}, "docstring": {}, "kind": {}, "_index": 1286}], ["runpod.cli.utils.ssh_cmd.sshconnection.__init__", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.__init__": {}}, "docstring": {}, "kind": {}, "_index": 1276}], ["runpod.cli.utils.ssh_cmd.sshconnection._get_ssh_options", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}}, "docstring": {}, "kind": {}, "_index": 1289}], ["runpod.cli.utils.ssh_cmd.sshconnection._signal_handler", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}}, "docstring": {}, "kind": {}, "_index": 1291}], ["runpod.cli.utils.ssh_cmd.sshconnection.close", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.close": {}}, "docstring": {}, "kind": {}, "_index": 1312}], ["runpod.cli.utils.ssh_cmd.sshconnection.get_file", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}}, "docstring": {}, "kind": {}, "_index": 1301}], ["runpod.cli.utils.ssh_cmd.sshconnection.key_file", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.key_file": {}}, "docstring": {}, "kind": {}, "_index": 1283}], ["runpod.cli.utils.ssh_cmd.sshconnection.launch_terminal", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}}, "docstring": {}, "kind": {}, "_index": 1304}], ["runpod.cli.utils.ssh_cmd.sshconnection.pod_id", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_id": {}}, "docstring": {}, "kind": {}, "_index": 1277}], ["runpod.cli.utils.ssh_cmd.sshconnection.pod_ip", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip": {}}, "docstring": {}, "kind": {}, "_index": 1279}], ["runpod.cli.utils.ssh_cmd.sshconnection.pod_port", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_port": {}}, "docstring": {}, "kind": {}, "_index": 1281}], ["runpod.cli.utils.ssh_cmd.sshconnection.put_file", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}}, "docstring": {}, "kind": {}, "_index": 1297}], ["runpod.cli.utils.ssh_cmd.sshconnection.rsync", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "docstring": {}, "kind": {}, "_index": 1306}], ["runpod.cli.utils.ssh_cmd.sshconnection.run_commands", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}}, "docstring": {}, "kind": {}, "_index": 1293}], ["runpod.cli.utils.ssh_cmd.sshconnection.ssh", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.ssh": {}}, "docstring": {}, "kind": {}, "_index": 1284}], ["runpod.create_endpoint(\"test\",", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1070}], ["runpod.create_pod(\"test\",", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}}, "kind": {}, "_index": 1029}], ["runpod.create_template(\"test\",", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1051}], ["runpod.endpoint", {"name": {}, "names": {}, "qname": {"runpod.endpoint": {}}, "docstring": {}, "kind": {}, "_index": 129}], ["runpod.endpoint(\"endpoint_id\")", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 1162}], ["runpod.endpoint.asyncio", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio": {}}, "docstring": {}, "kind": {}, "_index": 131}], ["runpod.endpoint.asyncio.asyncio_runner", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner": {}}, "docstring": {}, "kind": {}, "_index": 134}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint": {}}, "docstring": {}, "kind": {}, "_index": 1206}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.__init__", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__": {}}, "docstring": {}, "kind": {}, "_index": 1207}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.endpoint_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id": {}}, "docstring": {}, "kind": {}, "_index": 1208}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.endpoint_url", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url": {}}, "docstring": {}, "kind": {}, "_index": 1210}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.headers", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers": {}}, "docstring": {}, "kind": {}, "_index": 1211}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.health", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}}, "docstring": {}, "kind": {}, "_index": 1216}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.purge_queue", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "docstring": {}, "kind": {}, "_index": 1217}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.run", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}}, "docstring": {}, "kind": {}, "_index": 1213}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.session", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.session": {}}, "docstring": {}, "kind": {}, "_index": 1212}], ["runpod.endpoint.asyncio.asyncio_runner.job", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job": {}}, "docstring": {}, "kind": {}, "_index": 1183}], ["runpod.endpoint.asyncio.asyncio_runner.job.__init__", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.__init__": {}}, "docstring": {}, "kind": {}, "_index": 1184}], ["runpod.endpoint.asyncio.asyncio_runner.job._fetch_job", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "docstring": {}, "kind": {}, "_index": 1192}], ["runpod.endpoint.asyncio.asyncio_runner.job._wait_for_completion", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}}, "docstring": {}, "kind": {}, "_index": 1200}], ["runpod.endpoint.asyncio.asyncio_runner.job.cancel", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}}, "docstring": {}, "kind": {}, "_index": 1204}], ["runpod.endpoint.asyncio.asyncio_runner.job.endpoint_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id": {}}, "docstring": {}, "kind": {}, "_index": 1185}], ["runpod.endpoint.asyncio.asyncio_runner.job.endpoint_url_base", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}}, "docstring": {}, "kind": {}, "_index": 1189}], ["runpod.endpoint.asyncio.asyncio_runner.job.headers", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.headers": {}}, "docstring": {}, "kind": {}, "_index": 1187}], ["runpod.endpoint.asyncio.asyncio_runner.job.job_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.job_id": {}}, "docstring": {}, "kind": {}, "_index": 1186}], ["runpod.endpoint.asyncio.asyncio_runner.job.job_output", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.job_output": {}}, "docstring": {}, "kind": {}, "_index": 1191}], ["runpod.endpoint.asyncio.asyncio_runner.job.job_status", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.job_status": {}}, "docstring": {}, "kind": {}, "_index": 1190}], ["runpod.endpoint.asyncio.asyncio_runner.job.output", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "docstring": {}, "kind": {}, "_index": 1201}], ["runpod.endpoint.asyncio.asyncio_runner.job.session", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.session": {}}, "docstring": {}, "kind": {}, "_index": 1188}], ["runpod.endpoint.asyncio.asyncio_runner.job.status", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.status": {}}, "docstring": {}, "kind": {}, "_index": 1195}], ["runpod.endpoint.asyncio.asyncio_runner.job.stream", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}}, "docstring": {}, "kind": {}, "_index": 1203}], ["runpod.endpoint.helpers", {"name": {}, "names": {}, "qname": {"runpod.endpoint.helpers": {}}, "docstring": {}, "kind": {}, "_index": 136}], ["runpod.endpoint.helpers.api_key_not_set_msg", {"name": {}, "names": {}, "qname": {"runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}}, "docstring": {}, "kind": {}, "_index": 1108}], ["runpod.endpoint.helpers.final_states", {"name": {}, "names": {}, "qname": {"runpod.endpoint.helpers.FINAL_STATES": {}}, "docstring": {}, "kind": {}, "_index": 1101}], ["runpod.endpoint.helpers.is_completed", {"name": {}, "names": {}, "qname": {"runpod.endpoint.helpers.is_completed": {}}, "docstring": {}, "kind": {}, "_index": 1111}], ["runpod.endpoint.helpers.unauthorized_msg", {"name": {}, "names": {}, "qname": {"runpod.endpoint.helpers.UNAUTHORIZED_MSG": {}}, "docstring": {}, "kind": {}, "_index": 1104}], ["runpod.endpoint.runner", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner": {}}, "docstring": {}, "kind": {}, "_index": 137}], ["runpod.endpoint.runner.endpoint", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint": {}}, "docstring": {}, "kind": {}, "_index": 1160}], ["runpod.endpoint.runner.endpoint.__init__", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.__init__": {}}, "docstring": {}, "kind": {}, "_index": 1161}], ["runpod.endpoint.runner.endpoint.endpoint_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.endpoint_id": {}}, "docstring": {}, "kind": {}, "_index": 1168}], ["runpod.endpoint.runner.endpoint.health", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.health": {}}, "docstring": {}, "kind": {}, "_index": 1176}], ["runpod.endpoint.runner.endpoint.purge_queue", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.purge_queue": {}}, "docstring": {}, "kind": {}, "_index": 1181}], ["runpod.endpoint.runner.endpoint.rp_client", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.rp_client": {}}, "docstring": {}, "kind": {}, "_index": 1169}], ["runpod.endpoint.runner.endpoint.run", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.run": {}}, "docstring": {}, "kind": {}, "_index": 1170}], ["runpod.endpoint.runner.endpoint.run_sync", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.run_sync": {}}, "docstring": {}, "kind": {}, "_index": 1173}], ["runpod.endpoint.runner.job", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job": {}}, "docstring": {}, "kind": {}, "_index": 1137}], ["runpod.endpoint.runner.job.__init__", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.__init__": {}}, "docstring": {}, "kind": {}, "_index": 1139}], ["runpod.endpoint.runner.job._fetch_job", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job._fetch_job": {}}, "docstring": {}, "kind": {}, "_index": 1151}], ["runpod.endpoint.runner.job.cancel", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.cancel": {}}, "docstring": {}, "kind": {}, "_index": 1158}], ["runpod.endpoint.runner.job.endpoint_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.endpoint_id": {}}, "docstring": {}, "kind": {}, "_index": 1141}], ["runpod.endpoint.runner.job.job_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.job_id": {}}, "docstring": {}, "kind": {}, "_index": 1142}], ["runpod.endpoint.runner.job.job_output", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.job_output": {}}, "docstring": {}, "kind": {}, "_index": 1148}], ["runpod.endpoint.runner.job.job_status", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.job_status": {}}, "docstring": {}, "kind": {}, "_index": 1146}], ["runpod.endpoint.runner.job.output", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.output": {}}, "docstring": {}, "kind": {}, "_index": 1155}], ["runpod.endpoint.runner.job.rp_client", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.rp_client": {}}, "docstring": {}, "kind": {}, "_index": 1144}], ["runpod.endpoint.runner.job.status", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.status": {}}, "docstring": {}, "kind": {}, "_index": 1154}], ["runpod.endpoint.runner.job.stream", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.stream": {}}, "docstring": {}, "kind": {}, "_index": 1156}], ["runpod.endpoint.runner.runpodclient", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient": {}}, "docstring": {}, "kind": {}, "_index": 1114}], ["runpod.endpoint.runner.runpodclient.__init__", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.__init__": {}}, "docstring": {}, "kind": {}, "_index": 1115}], ["runpod.endpoint.runner.runpodclient._request", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient._request": {}}, "docstring": {}, "kind": {}, "_index": 1125}], ["runpod.endpoint.runner.runpodclient.endpoint_url_base", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}}, "docstring": {}, "kind": {}, "_index": 1123}], ["runpod.endpoint.runner.runpodclient.get", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.get": {}}, "docstring": {}, "kind": {}, "_index": 1136}], ["runpod.endpoint.runner.runpodclient.headers", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.headers": {}}, "docstring": {}, "kind": {}, "_index": 1121}], ["runpod.endpoint.runner.runpodclient.post", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.post": {}}, "docstring": {}, "kind": {}, "_index": 1135}], ["runpod.endpoint.runner.runpodclient.rp_session", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.rp_session": {}}, "docstring": {}, "kind": {}, "_index": 1120}], ["runpod.endpoint_url_base", {"name": {}, "names": {}, "qname": {"runpod.endpoint_url_base": {}}, "docstring": {}, "kind": {}, "_index": 1228}], ["runpod.error", {"name": {}, "names": {}, "qname": {"runpod.error": {}}, "docstring": {}, "kind": {}, "_index": 140}], ["runpod.error.authenticationerror", {"name": {}, "names": {}, "qname": {"runpod.error.AuthenticationError": {}}, "docstring": {}, "kind": {}, "_index": 916}], ["runpod.error.queryerror", {"name": {}, "names": {}, "qname": {"runpod.error.QueryError": {}}, "docstring": {}, "kind": {}, "_index": 922}], ["runpod.error.queryerror.__init__", {"name": {}, "names": {}, "qname": {"runpod.error.QueryError.__init__": {}}, "docstring": {}, "kind": {}, "_index": 923}], ["runpod.error.queryerror.query", {"name": {}, "names": {}, "qname": {"runpod.error.QueryError.query": {}}, "docstring": {}, "kind": {}, "_index": 924}], ["runpod.error.runpoderror", {"name": {}, "names": {}, "qname": {"runpod.error.RunPodError": {}}, "docstring": {}, "kind": {}, "_index": 909}], ["runpod.error.runpoderror.__init__", {"name": {}, "names": {}, "qname": {"runpod.error.RunPodError.__init__": {}}, "docstring": {}, "kind": {}, "_index": 911}], ["runpod.error.runpoderror.__str__", {"name": {}, "names": {}, "qname": {"runpod.error.RunPodError.__str__": {}}, "docstring": {}, "kind": {}, "_index": 913}], ["runpod.error.runpoderror.message", {"name": {}, "names": {}, "qname": {"runpod.error.RunPodError.message": {}}, "docstring": {}, "kind": {}, "_index": 912}], ["runpod.profile", {"name": {}, "names": {}, "qname": {"runpod.profile": {}}, "docstring": {}, "kind": {}, "_index": 1221}], ["runpod.resume_pod(pod_id)", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.resume_pod": {}}, "kind": {}, "_index": 1040}], ["runpod.serverless", {"name": {}, "names": {}, "qname": {"runpod.serverless": {}}, "docstring": {}, "kind": {}, "_index": 146}], ["runpod.serverless._get_realtime_concurrency", {"name": {}, "names": {}, "qname": {"runpod.serverless._get_realtime_concurrency": {}}, "docstring": {}, "kind": {}, "_index": 897}], ["runpod.serverless._get_realtime_port", {"name": {}, "names": {}, "qname": {"runpod.serverless._get_realtime_port": {}}, "docstring": {}, "kind": {}, "_index": 893}], ["runpod.serverless._set_config_args", {"name": {}, "names": {}, "qname": {"runpod.serverless._set_config_args": {}}, "docstring": {}, "kind": {}, "_index": 887}], ["runpod.serverless._signal_handler", {"name": {}, "names": {}, "qname": {"runpod.serverless._signal_handler": {}}, "docstring": {}, "kind": {}, "_index": 900}], ["runpod.serverless.core", {"name": {}, "names": {}, "qname": {"runpod.serverless.core": {}}, "docstring": {}, "kind": {}, "_index": 154}], ["runpod.serverless.core._process_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.core._process_job": {}}, "docstring": {}, "kind": {}, "_index": 543}], ["runpod.serverless.core.cgetjobresult", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.CGetJobResult": {}}, "docstring": {}, "kind": {}, "_index": 472}], ["runpod.serverless.core.cgetjobresult.__str__", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.CGetJobResult.__str__": {}}, "docstring": {}, "kind": {}, "_index": 488}], ["runpod.serverless.core.cgetjobresult._fields_", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.CGetJobResult._fields_": {}}, "docstring": {}, "kind": {}, "_index": 487}], ["runpod.serverless.core.hook", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook": {}}, "docstring": {}, "kind": {}, "_index": 490}], ["runpod.serverless.core.hook.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.__init__": {}}, "docstring": {}, "kind": {}, "_index": 508}], ["runpod.serverless.core.hook.__new__", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.__new__": {}}, "docstring": {}, "kind": {}, "_index": 507}], ["runpod.serverless.core.hook._finish_stream", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._finish_stream": {}}, "docstring": {}, "kind": {}, "_index": 506}], ["runpod.serverless.core.hook._get_jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._get_jobs": {}}, "docstring": {}, "kind": {}, "_index": 495}], ["runpod.serverless.core.hook._initialized", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._initialized": {}}, "docstring": {}, "kind": {}, "_index": 519}], ["runpod.serverless.core.hook._instance", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._instance": {}}, "docstring": {}, "kind": {}, "_index": 493}], ["runpod.serverless.core.hook._json_serialize_job_data", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._json_serialize_job_data": {}}, "docstring": {}, "kind": {}, "_index": 524}], ["runpod.serverless.core.hook._post_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._post_output": {}}, "docstring": {}, "kind": {}, "_index": 503}], ["runpod.serverless.core.hook._progress_update", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._progress_update": {}}, "docstring": {}, "kind": {}, "_index": 498}], ["runpod.serverless.core.hook._stream_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._stream_output": {}}, "docstring": {}, "kind": {}, "_index": 500}], ["runpod.serverless.core.hook.finish_stream", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.finish_stream": {}}, "docstring": {}, "kind": {}, "_index": 541}], ["runpod.serverless.core.hook.get_jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.get_jobs": {}}, "docstring": {}, "kind": {}, "_index": 526}], ["runpod.serverless.core.hook.post_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.post_output": {}}, "docstring": {}, "kind": {}, "_index": 534}], ["runpod.serverless.core.hook.progress_update", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.progress_update": {}}, "docstring": {}, "kind": {}, "_index": 528}], ["runpod.serverless.core.hook.rust_crate_version", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.rust_crate_version": {}}, "docstring": {}, "kind": {}, "_index": 516}], ["runpod.serverless.core.hook.rust_so_path", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.rust_so_path": {}}, "docstring": {}, "kind": {}, "_index": 513}], ["runpod.serverless.core.hook.stream_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.stream_output": {}}, "docstring": {}, "kind": {}, "_index": 531}], ["runpod.serverless.core.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.log": {}}, "docstring": {}, "kind": {}, "_index": 469}], ["runpod.serverless.core.main", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.main": {}}, "docstring": {}, "kind": {}, "_index": 549}], ["runpod.serverless.core.run", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.run": {}}, "docstring": {}, "kind": {}, "_index": 545}], ["runpod.serverless.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.log": {}}, "docstring": {}, "kind": {}, "_index": 882}], ["runpod.serverless.modules", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules": {}}, "docstring": {}, "kind": {}, "_index": 156}], ["runpod.serverless.modules.rp_fastapi", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi": {}}, "docstring": {}, "kind": {}, "_index": 159}], ["runpod.serverless.modules.rp_fastapi._send_webhook", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "docstring": {}, "kind": {}, "_index": 837}], ["runpod.serverless.modules.rp_fastapi.defaultrequest", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.DefaultRequest": {}}, "docstring": {}, "kind": {}, "_index": 820}], ["runpod.serverless.modules.rp_fastapi.defaultrequest.input", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.DefaultRequest.input": {}}, "docstring": {}, "kind": {}, "_index": 821}], ["runpod.serverless.modules.rp_fastapi.defaultrequest.webhook", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook": {}}, "docstring": {}, "kind": {}, "_index": 822}], ["runpod.serverless.modules.rp_fastapi.description", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.DESCRIPTION": {}}, "docstring": {}, "kind": {}, "_index": 798}], ["runpod.serverless.modules.rp_fastapi.heartbeat", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.heartbeat": {}}, "docstring": {}, "kind": {}, "_index": 810}], ["runpod.serverless.modules.rp_fastapi.job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.Job": {}}, "docstring": {}, "kind": {}, "_index": 811}], ["runpod.serverless.modules.rp_fastapi.job.id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.Job.id": {}}, "docstring": {}, "kind": {}, "_index": 812}], ["runpod.serverless.modules.rp_fastapi.job.input", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.Job.input": {}}, "docstring": {}, "kind": {}, "_index": 813}], ["runpod.serverless.modules.rp_fastapi.job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.job_list": {}}, "docstring": {}, "kind": {}, "_index": 809}], ["runpod.serverless.modules.rp_fastapi.joboutput", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.JobOutput": {}}, "docstring": {}, "kind": {}, "_index": 824}], ["runpod.serverless.modules.rp_fastapi.joboutput.error", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.JobOutput.error": {}}, "docstring": {}, "kind": {}, "_index": 828}], ["runpod.serverless.modules.rp_fastapi.joboutput.id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.JobOutput.id": {}}, "docstring": {}, "kind": {}, "_index": 825}], ["runpod.serverless.modules.rp_fastapi.joboutput.output", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.JobOutput.output": {}}, "docstring": {}, "kind": {}, "_index": 827}], ["runpod.serverless.modules.rp_fastapi.joboutput.status", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.JobOutput.status": {}}, "docstring": {}, "kind": {}, "_index": 826}], ["runpod.serverless.modules.rp_fastapi.run_description", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION": {}}, "docstring": {}, "kind": {}, "_index": 800}], ["runpod.serverless.modules.rp_fastapi.runpod_endpoint_id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}}, "docstring": {}, "kind": {}, "_index": 794}], ["runpod.serverless.modules.rp_fastapi.runsync_description", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION": {}}, "docstring": {}, "kind": {}, "_index": 803}], ["runpod.serverless.modules.rp_fastapi.status_description", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION": {}}, "docstring": {}, "kind": {}, "_index": 808}], ["runpod.serverless.modules.rp_fastapi.stream_description", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION": {}}, "docstring": {}, "kind": {}, "_index": 805}], ["runpod.serverless.modules.rp_fastapi.streamoutput", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.StreamOutput": {}}, "docstring": {}, "kind": {}, "_index": 830}], ["runpod.serverless.modules.rp_fastapi.streamoutput.error", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.StreamOutput.error": {}}, "docstring": {}, "kind": {}, "_index": 835}], ["runpod.serverless.modules.rp_fastapi.streamoutput.id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.StreamOutput.id": {}}, "docstring": {}, "kind": {}, "_index": 832}], ["runpod.serverless.modules.rp_fastapi.streamoutput.status", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.StreamOutput.status": {}}, "docstring": {}, "kind": {}, "_index": 833}], ["runpod.serverless.modules.rp_fastapi.streamoutput.stream", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.StreamOutput.stream": {}}, "docstring": {}, "kind": {}, "_index": 834}], ["runpod.serverless.modules.rp_fastapi.testjob", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.TestJob": {}}, "docstring": {}, "kind": {}, "_index": 815}], ["runpod.serverless.modules.rp_fastapi.testjob.id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.TestJob.id": {}}, "docstring": {}, "kind": {}, "_index": 816}], ["runpod.serverless.modules.rp_fastapi.testjob.input", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.TestJob.input": {}}, "docstring": {}, "kind": {}, "_index": 817}], ["runpod.serverless.modules.rp_fastapi.testjob.webhook", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.TestJob.webhook": {}}, "docstring": {}, "kind": {}, "_index": 818}], ["runpod.serverless.modules.rp_fastapi.title", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.TITLE": {}}, "docstring": {}, "kind": {}, "_index": 796}], ["runpod.serverless.modules.rp_fastapi.workerapi", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI": {}}, "docstring": {}, "kind": {}, "_index": 841}], ["runpod.serverless.modules.rp_fastapi.workerapi.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}}, "docstring": {}, "kind": {}, "_index": 842}], ["runpod.serverless.modules.rp_fastapi.workerapi._realtime", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}}, "docstring": {}, "kind": {}, "_index": 852}], ["runpod.serverless.modules.rp_fastapi.workerapi._sim_run", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}}, "docstring": {}, "kind": {}, "_index": 856}], ["runpod.serverless.modules.rp_fastapi.workerapi._sim_runsync", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}}, "docstring": {}, "kind": {}, "_index": 861}], ["runpod.serverless.modules.rp_fastapi.workerapi._sim_status", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}}, "docstring": {}, "kind": {}, "_index": 865}], ["runpod.serverless.modules.rp_fastapi.workerapi._sim_stream", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}}, "docstring": {}, "kind": {}, "_index": 863}], ["runpod.serverless.modules.rp_fastapi.workerapi.config", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.config": {}}, "docstring": {}, "kind": {}, "_index": 843}], ["runpod.serverless.modules.rp_fastapi.workerapi.rp_app", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app": {}}, "docstring": {}, "kind": {}, "_index": 846}], ["runpod.serverless.modules.rp_fastapi.workerapi.start_uvicorn", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}}, "docstring": {}, "kind": {}, "_index": 849}], ["runpod.serverless.modules.rp_handler", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_handler": {}}, "docstring": {}, "kind": {}, "_index": 167}], ["runpod.serverless.modules.rp_handler.is_generator", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_handler.is_generator": {}}, "docstring": {}, "kind": {}, "_index": 567}], ["runpod.serverless.modules.rp_http", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http": {}}, "docstring": {}, "kind": {}, "_index": 170}], ["runpod.serverless.modules.rp_http._handle_result", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http._handle_result": {}}, "docstring": {}, "kind": {}, "_index": 647}], ["runpod.serverless.modules.rp_http._transmit", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http._transmit": {}}, "docstring": {}, "kind": {}, "_index": 643}], ["runpod.serverless.modules.rp_http.job_done_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.JOB_DONE_URL": {}}, "docstring": {}, "kind": {}, "_index": 634}], ["runpod.serverless.modules.rp_http.job_done_url_template", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}}, "docstring": {}, "kind": {}, "_index": 632}], ["runpod.serverless.modules.rp_http.job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.job_list": {}}, "docstring": {}, "kind": {}, "_index": 640}], ["runpod.serverless.modules.rp_http.job_stream_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}}, "docstring": {}, "kind": {}, "_index": 638}], ["runpod.serverless.modules.rp_http.job_stream_url_template", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}}, "docstring": {}, "kind": {}, "_index": 636}], ["runpod.serverless.modules.rp_http.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.log": {}}, "docstring": {}, "kind": {}, "_index": 639}], ["runpod.serverless.modules.rp_http.send_result", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.send_result": {}}, "docstring": {}, "kind": {}, "_index": 649}], ["runpod.serverless.modules.rp_http.stream_result", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.stream_result": {}}, "docstring": {}, "kind": {}, "_index": 651}], ["runpod.serverless.modules.rp_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job": {}}, "docstring": {}, "kind": {}, "_index": 175}], ["runpod.serverless.modules.rp_job._job_get_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job._job_get_url": {}}, "docstring": {}, "kind": {}, "_index": 430}], ["runpod.serverless.modules.rp_job.get_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.get_job": {}}, "docstring": {}, "kind": {}, "_index": 440}], ["runpod.serverless.modules.rp_job.job_get_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.JOB_GET_URL": {}}, "docstring": {}, "kind": {}, "_index": 425}], ["runpod.serverless.modules.rp_job.job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.job_list": {}}, "docstring": {}, "kind": {}, "_index": 428}], ["runpod.serverless.modules.rp_job.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.log": {}}, "docstring": {}, "kind": {}, "_index": 426}], ["runpod.serverless.modules.rp_job.run_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.run_job": {}}, "docstring": {}, "kind": {}, "_index": 457}], ["runpod.serverless.modules.rp_job.run_job_generator", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.run_job_generator": {}}, "docstring": {}, "kind": {}, "_index": 464}], ["runpod.serverless.modules.rp_local", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_local": {}}, "docstring": {}, "kind": {}, "_index": 178}], ["runpod.serverless.modules.rp_local.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_local.log": {}}, "docstring": {}, "kind": {}, "_index": 563}], ["runpod.serverless.modules.rp_local.run_local", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_local.run_local": {}}, "docstring": {}, "kind": {}, "_index": 565}], ["runpod.serverless.modules.rp_logger", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger": {}}, "docstring": {}, "kind": {}, "_index": 184}], ["runpod.serverless.modules.rp_logger._validate_log_level", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger._validate_log_level": {}}, "docstring": {}, "kind": {}, "_index": 313}], ["runpod.serverless.modules.rp_logger.log_levels", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.LOG_LEVELS": {}}, "docstring": {}, "kind": {}, "_index": 310}], ["runpod.serverless.modules.rp_logger.max_message_length", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}}, "docstring": {}, "kind": {}, "_index": 306}], ["runpod.serverless.modules.rp_logger.runpodlogger", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger": {}}, "docstring": {}, "kind": {}, "_index": 317}], ["runpod.serverless.modules.rp_logger.runpodlogger.__instance", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.__instance": {}}, "docstring": {}, "kind": {}, "_index": 321}], ["runpod.serverless.modules.rp_logger.runpodlogger.__new__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.__new__": {}}, "docstring": {}, "kind": {}, "_index": 325}], ["runpod.serverless.modules.rp_logger.runpodlogger.debug", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.debug": {}}, "docstring": {}, "kind": {}, "_index": 344}], ["runpod.serverless.modules.rp_logger.runpodlogger.error", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.error": {}}, "docstring": {}, "kind": {}, "_index": 347}], ["runpod.serverless.modules.rp_logger.runpodlogger.info", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.info": {}}, "docstring": {}, "kind": {}, "_index": 345}], ["runpod.serverless.modules.rp_logger.runpodlogger.level", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.level": {}}, "docstring": {}, "kind": {}, "_index": 322}], ["runpod.serverless.modules.rp_logger.runpodlogger.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.log": {}}, "docstring": {}, "kind": {}, "_index": 329}], ["runpod.serverless.modules.rp_logger.runpodlogger.secret", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "docstring": {}, "kind": {}, "_index": 335}], ["runpod.serverless.modules.rp_logger.runpodlogger.set_level", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}}, "docstring": {}, "kind": {}, "_index": 328}], ["runpod.serverless.modules.rp_logger.runpodlogger.tip", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.tip": {}}, "docstring": {}, "kind": {}, "_index": 348}], ["runpod.serverless.modules.rp_logger.runpodlogger.warn", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.warn": {}}, "docstring": {}, "kind": {}, "_index": 346}], ["runpod.serverless.modules.rp_ping", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping": {}}, "docstring": {}, "kind": {}, "_index": 221}], ["runpod.serverless.modules.rp_ping.heartbeat", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat": {}}, "docstring": {}, "kind": {}, "_index": 570}], ["runpod.serverless.modules.rp_ping.heartbeat.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat.__init__": {}}, "docstring": {}, "kind": {}, "_index": 580}], ["runpod.serverless.modules.rp_ping.heartbeat._send_ping", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}}, "docstring": {}, "kind": {}, "_index": 589}], ["runpod.serverless.modules.rp_ping.heartbeat._session", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat._session": {}}, "docstring": {}, "kind": {}, "_index": 583}], ["runpod.serverless.modules.rp_ping.heartbeat._thread_started", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat._thread_started": {}}, "docstring": {}, "kind": {}, "_index": 579}], ["runpod.serverless.modules.rp_ping.heartbeat.ping_interval", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL": {}}, "docstring": {}, "kind": {}, "_index": 575}], ["runpod.serverless.modules.rp_ping.heartbeat.ping_loop", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}}, "docstring": {}, "kind": {}, "_index": 587}], ["runpod.serverless.modules.rp_ping.heartbeat.ping_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat.PING_URL": {}}, "docstring": {}, "kind": {}, "_index": 572}], ["runpod.serverless.modules.rp_ping.heartbeat.start_ping", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}}, "docstring": {}, "kind": {}, "_index": 585}], ["runpod.serverless.modules.rp_ping.jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.jobs": {}}, "docstring": {}, "kind": {}, "_index": 569}], ["runpod.serverless.modules.rp_ping.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.log": {}}, "docstring": {}, "kind": {}, "_index": 568}], ["runpod.serverless.modules.rp_progress", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress": {}}, "docstring": {}, "kind": {}, "_index": 229}], ["runpod.serverless.modules.rp_progress._async_progress_update", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress._async_progress_update": {}}, "docstring": {}, "kind": {}, "_index": 873}], ["runpod.serverless.modules.rp_progress._create_session_async", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress._create_session_async": {}}, "docstring": {}, "kind": {}, "_index": 871}], ["runpod.serverless.modules.rp_progress._thread_target", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress._thread_target": {}}, "docstring": {}, "kind": {}, "_index": 877}], ["runpod.serverless.modules.rp_progress.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress.log": {}}, "docstring": {}, "kind": {}, "_index": 867}], ["runpod.serverless.modules.rp_progress.progress_update", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress.progress_update": {}}, "docstring": {}, "kind": {}, "_index": 880}], ["runpod.serverless.modules.rp_scale", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale": {}}, "docstring": {}, "kind": {}, "_index": 232}], ["runpod.serverless.modules.rp_scale._default_concurrency_modifier", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}}, "docstring": {}, "kind": {}, "_index": 595}], ["runpod.serverless.modules.rp_scale.job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.job_list": {}}, "docstring": {}, "kind": {}, "_index": 591}], ["runpod.serverless.modules.rp_scale.jobscaler", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler": {}}, "docstring": {}, "kind": {}, "_index": 603}], ["runpod.serverless.modules.rp_scale.jobscaler.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.__init__": {}}, "docstring": {}, "kind": {}, "_index": 604}], ["runpod.serverless.modules.rp_scale.jobscaler._is_alive", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler._is_alive": {}}, "docstring": {}, "kind": {}, "_index": 618}], ["runpod.serverless.modules.rp_scale.jobscaler.background_get_job_tasks", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}}, "docstring": {}, "kind": {}, "_index": 610}], ["runpod.serverless.modules.rp_scale.jobscaler.concurrency_modifier", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier": {}}, "docstring": {}, "kind": {}, "_index": 606}], ["runpod.serverless.modules.rp_scale.jobscaler.current_concurrency", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.current_concurrency": {}}, "docstring": {}, "kind": {}, "_index": 615}], ["runpod.serverless.modules.rp_scale.jobscaler.get_jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}}, "docstring": {}, "kind": {}, "_index": 625}], ["runpod.serverless.modules.rp_scale.jobscaler.is_alive", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}}, "docstring": {}, "kind": {}, "_index": 620}], ["runpod.serverless.modules.rp_scale.jobscaler.job_history", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.job_history": {}}, "docstring": {}, "kind": {}, "_index": 613}], ["runpod.serverless.modules.rp_scale.jobscaler.kill_worker", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}}, "docstring": {}, "kind": {}, "_index": 624}], ["runpod.serverless.modules.rp_scale.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.log": {}}, "docstring": {}, "kind": {}, "_index": 590}], ["runpod.serverless.modules.rp_tips", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_tips": {}}, "docstring": {}, "kind": {}, "_index": 236}], ["runpod.serverless.modules.rp_tips.check_return_size", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_tips.check_return_size": {}}, "docstring": {}, "kind": {}, "_index": 417}], ["runpod.serverless.modules.rp_tips.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_tips.log": {}}, "docstring": {}, "kind": {}, "_index": 414}], ["runpod.serverless.modules.worker_state", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state": {}}, "docstring": {}, "kind": {}, "_index": 240}], ["runpod.serverless.modules.worker_state.get_auth_header", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.get_auth_header": {}}, "docstring": {}, "kind": {}, "_index": 361}], ["runpod.serverless.modules.worker_state.is_local_test", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}}, "docstring": {}, "kind": {}, "_index": 358}], ["runpod.serverless.modules.worker_state.job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job": {}}, "docstring": {}, "kind": {}, "_index": 364}], ["runpod.serverless.modules.worker_state.job.__eq__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.__eq__": {}}, "docstring": {}, "kind": {}, "_index": 382}], ["runpod.serverless.modules.worker_state.job.__hash__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.__hash__": {}}, "docstring": {}, "kind": {}, "_index": 385}], ["runpod.serverless.modules.worker_state.job.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.__init__": {}}, "docstring": {}, "kind": {}, "_index": 376}], ["runpod.serverless.modules.worker_state.job.__str__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.__str__": {}}, "docstring": {}, "kind": {}, "_index": 388}], ["runpod.serverless.modules.worker_state.job.id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.id": {}}, "docstring": {}, "kind": {}, "_index": 377}], ["runpod.serverless.modules.worker_state.job.input", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.input": {}}, "docstring": {}, "kind": {}, "_index": 378}], ["runpod.serverless.modules.worker_state.job.webhook", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.webhook": {}}, "docstring": {}, "kind": {}, "_index": 379}], ["runpod.serverless.modules.worker_state.jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs": {}}, "docstring": {}, "kind": {}, "_index": 390}], ["runpod.serverless.modules.worker_state.jobs.__new__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.__new__": {}}, "docstring": {}, "kind": {}, "_index": 396}], ["runpod.serverless.modules.worker_state.jobs._instance", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs._instance": {}}, "docstring": {}, "kind": {}, "_index": 394}], ["runpod.serverless.modules.worker_state.jobs.add_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.add_job": {}}, "docstring": {}, "kind": {}, "_index": 399}], ["runpod.serverless.modules.worker_state.jobs.get_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.get_job": {}}, "docstring": {}, "kind": {}, "_index": 405}], ["runpod.serverless.modules.worker_state.jobs.get_job_count", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.get_job_count": {}}, "docstring": {}, "kind": {}, "_index": 412}], ["runpod.serverless.modules.worker_state.jobs.get_job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.get_job_list": {}}, "docstring": {}, "kind": {}, "_index": 410}], ["runpod.serverless.modules.worker_state.jobs.jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.jobs": {}}, "docstring": {}, "kind": {}, "_index": 395}], ["runpod.serverless.modules.worker_state.jobs.remove_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.remove_job": {}}, "docstring": {}, "kind": {}, "_index": 402}], ["runpod.serverless.modules.worker_state.ref_count_zero", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}}, "docstring": {}, "kind": {}, "_index": 353}], ["runpod.serverless.modules.worker_state.worker_id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.WORKER_ID": {}}, "docstring": {}, "kind": {}, "_index": 355}], ["runpod.serverless.parser", {"name": {}, "names": {}, "qname": {"runpod.serverless.parser": {}}, "docstring": {}, "kind": {}, "_index": 884}], ["runpod.serverless.start", {"name": {}, "names": {}, "qname": {"runpod.serverless.start": {}}, "docstring": {}, "kind": {}, "_index": 902}], ["runpod.serverless.utils", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils": {}}, "docstring": {}, "kind": {}, "_index": 248}], ["runpod.serverless.utils.rp_cleanup", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_cleanup": {}}, "docstring": {}, "kind": {}, "_index": 251}], ["runpod.serverless.utils.rp_cleanup.clean", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_cleanup.clean": {}}, "docstring": {}, "kind": {}, "_index": 1419}], ["runpod.serverless.utils.rp_cuda", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_cuda": {}}, "docstring": {}, "kind": {}, "_index": 259}], ["runpod.serverless.utils.rp_cuda.is_available", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_cuda.is_available": {}}, "docstring": {}, "kind": {}, "_index": 1422}], ["runpod.serverless.utils.rp_debugger", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger": {}}, "docstring": {}, "kind": {}, "_index": 266}], ["runpod.serverless.utils.rp_debugger.checkpoints", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "docstring": {}, "kind": {}, "_index": 714}], ["runpod.serverless.utils.rp_debugger.checkpoints.__instance", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.__instance": {}}, "docstring": {}, "kind": {}, "_index": 735}], ["runpod.serverless.utils.rp_debugger.checkpoints.__new__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.__new__": {}}, "docstring": {}, "kind": {}, "_index": 740}], ["runpod.serverless.utils.rp_debugger.checkpoints.add", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.add": {}}, "docstring": {}, "kind": {}, "_index": 741}], ["runpod.serverless.utils.rp_debugger.checkpoints.checkpoints", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints": {}}, "docstring": {}, "kind": {}, "_index": 736}], ["runpod.serverless.utils.rp_debugger.checkpoints.clear", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.clear": {}}, "docstring": {}, "kind": {}, "_index": 748}], ["runpod.serverless.utils.rp_debugger.checkpoints.get_checkpoints", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}}, "docstring": {}, "kind": {}, "_index": 746}], ["runpod.serverless.utils.rp_debugger.checkpoints.name_lookup", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup": {}}, "docstring": {}, "kind": {}, "_index": 739}], ["runpod.serverless.utils.rp_debugger.checkpoints.start", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.start": {}}, "docstring": {}, "kind": {}, "_index": 743}], ["runpod.serverless.utils.rp_debugger.checkpoints.stop", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.stop": {}}, "docstring": {}, "kind": {}, "_index": 744}], ["runpod.serverless.utils.rp_debugger.clear_debugger_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.clear_debugger_output": {}}, "docstring": {}, "kind": {}, "_index": 778}], ["runpod.serverless.utils.rp_debugger.functiontimer", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.FunctionTimer": {}}, "docstring": {}, "kind": {}, "_index": 766}], ["runpod.serverless.utils.rp_debugger.functiontimer.__call__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.FunctionTimer.__call__": {}}, "docstring": {}, "kind": {}, "_index": 773}], ["runpod.serverless.utils.rp_debugger.functiontimer.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.FunctionTimer.__init__": {}}, "docstring": {}, "kind": {}, "_index": 769}], ["runpod.serverless.utils.rp_debugger.functiontimer.checkpoints", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints": {}}, "docstring": {}, "kind": {}, "_index": 771}], ["runpod.serverless.utils.rp_debugger.functiontimer.function", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.FunctionTimer.function": {}}, "docstring": {}, "kind": {}, "_index": 770}], ["runpod.serverless.utils.rp_debugger.get_debugger_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.get_debugger_output": {}}, "docstring": {}, "kind": {}, "_index": 775}], ["runpod.serverless.utils.rp_debugger.linetimer", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer": {}}, "docstring": {}, "kind": {}, "_index": 752}], ["runpod.serverless.utils.rp_debugger.linetimer.__enter__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer.__enter__": {}}, "docstring": {}, "kind": {}, "_index": 761}], ["runpod.serverless.utils.rp_debugger.linetimer.__exit__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer.__exit__": {}}, "docstring": {}, "kind": {}, "_index": 764}], ["runpod.serverless.utils.rp_debugger.linetimer.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer.__init__": {}}, "docstring": {}, "kind": {}, "_index": 756}], ["runpod.serverless.utils.rp_debugger.linetimer.checkpoints", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer.checkpoints": {}}, "docstring": {}, "kind": {}, "_index": 757}], ["runpod.serverless.utils.rp_debugger.linetimer.name", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer.name": {}}, "docstring": {}, "kind": {}, "_index": 758}], ["runpod.serverless.utils.rp_debugger.os_info", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.OS_INFO": {}}, "docstring": {}, "kind": {}, "_index": 708}], ["runpod.serverless.utils.rp_debugger.processor", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.PROCESSOR": {}}, "docstring": {}, "kind": {}, "_index": 710}], ["runpod.serverless.utils.rp_debugger.python_version", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.PYTHON_VERSION": {}}, "docstring": {}, "kind": {}, "_index": 712}], ["runpod.serverless.utils.rp_download", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_download": {}}, "docstring": {}, "kind": {}, "_index": 271}], ["runpod.serverless.utils.rp_download.calculate_chunk_size", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "docstring": {}, "kind": {}, "_index": 657}], ["runpod.serverless.utils.rp_download.download_files_from_urls", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}}, "docstring": {}, "kind": {}, "_index": 664}], ["runpod.serverless.utils.rp_download.file", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_download.file": {}}, "docstring": {}, "kind": {}, "_index": 669}], ["runpod.serverless.utils.rp_download.headers", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_download.HEADERS": {}}, "docstring": {}, "kind": {}, "_index": 653}], ["runpod.serverless.utils.rp_upload", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload": {}}, "docstring": {}, "kind": {}, "_index": 280}], ["runpod.serverless.utils.rp_upload.bucket_upload", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.bucket_upload": {}}, "docstring": {}, "kind": {}, "_index": 697}], ["runpod.serverless.utils.rp_upload.extract_region_from_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "docstring": {}, "kind": {}, "_index": 682}], ["runpod.serverless.utils.rp_upload.files", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.files": {}}, "docstring": {}, "kind": {}, "_index": 693}], ["runpod.serverless.utils.rp_upload.fmt", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.FMT": {}}, "docstring": {}, "kind": {}, "_index": 679}], ["runpod.serverless.utils.rp_upload.get_boto_client", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.get_boto_client": {}}, "docstring": {}, "kind": {}, "_index": 686}], ["runpod.serverless.utils.rp_upload.logger", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.logger": {}}, "docstring": {}, "kind": {}, "_index": 677}], ["runpod.serverless.utils.rp_upload.upload_file_to_bucket", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}}, "docstring": {}, "kind": {}, "_index": 700}], ["runpod.serverless.utils.rp_upload.upload_image", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.upload_image": {}}, "docstring": {}, "kind": {}, "_index": 692}], ["runpod.serverless.utils.rp_upload.upload_in_memory_object", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "docstring": {}, "kind": {}, "_index": 704}], ["runpod.serverless.utils.rp_validator", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator": {}}, "docstring": {}, "kind": {}, "_index": 284}], ["runpod.serverless.utils.rp_validator._add_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator._add_error": {}}, "docstring": {}, "kind": {}, "_index": 1443}], ["runpod.serverless.utils.rp_validator._check_for_unexpected_inputs", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}}, "docstring": {}, "kind": {}, "_index": 1446}], ["runpod.serverless.utils.rp_validator._validate_and_transform_schema_items", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}}, "docstring": {}, "kind": {}, "_index": 1451}], ["runpod.serverless.utils.rp_validator._validate_input_against_schema", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator._validate_input_against_schema": {}}, "docstring": {}, "kind": {}, "_index": 1457}], ["runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "docstring": {}, "kind": {}, "_index": 1454}], ["runpod.serverless.utils.rp_validator.constraints_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR": {}}, "docstring": {}, "kind": {}, "_index": 1438}], ["runpod.serverless.utils.rp_validator.invalid_type_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}}, "docstring": {}, "kind": {}, "_index": 1435}], ["runpod.serverless.utils.rp_validator.missing_default_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}}, "docstring": {}, "kind": {}, "_index": 1431}], ["runpod.serverless.utils.rp_validator.missing_required_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}}, "docstring": {}, "kind": {}, "_index": 1429}], ["runpod.serverless.utils.rp_validator.missing_type_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}}, "docstring": {}, "kind": {}, "_index": 1433}], ["runpod.serverless.utils.rp_validator.schema_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.SCHEMA_ERROR": {}}, "docstring": {}, "kind": {}, "_index": 1441}], ["runpod.serverless.utils.rp_validator.unexpected_input_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}}, "docstring": {}, "kind": {}, "_index": 1425}], ["runpod.serverless.utils.rp_validator.validate", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.validate": {}}, "docstring": {}, "kind": {}, "_index": 1458}], ["runpod.serverless.worker", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker": {}}, "docstring": {}, "kind": {}, "_index": 287}], ["runpod.serverless.worker._get_auth_header", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker._get_auth_header": {}}, "docstring": {}, "kind": {}, "_index": 783}], ["runpod.serverless.worker._is_local", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker._is_local": {}}, "docstring": {}, "kind": {}, "_index": 785}], ["runpod.serverless.worker._process_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker._process_job": {}}, "docstring": {}, "kind": {}, "_index": 786}], ["runpod.serverless.worker.heartbeat", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker.heartbeat": {}}, "docstring": {}, "kind": {}, "_index": 781}], ["runpod.serverless.worker.job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker.job_list": {}}, "docstring": {}, "kind": {}, "_index": 780}], ["runpod.serverless.worker.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker.log": {}}, "docstring": {}, "kind": {}, "_index": 779}], ["runpod.serverless.worker.main", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker.main": {}}, "docstring": {}, "kind": {}, "_index": 791}], ["runpod.serverless.worker.run_worker", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker.run_worker": {}}, "docstring": {}, "kind": {}, "_index": 788}], ["runpod.ssh_key_path", {"name": {}, "names": {}, "qname": {"runpod.SSH_KEY_PATH": {}}, "docstring": {}, "kind": {}, "_index": 1219}], ["runpod.stop_pod(pod_id)", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}}, "kind": {}, "_index": 1037}], ["runpod.terminate_pod(pod_id)", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.terminate_pod": {}}, "kind": {}, "_index": 1043}], ["runpod.toml", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.commands.start_project_pod": {}}, "kind": {}, "_index": 1359}], ["runpod.update_endpoint_template(\"test\",", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.update_endpoint_template": {}}, "kind": {}, "_index": 1073}], ["runpod.user_agent", {"name": {}, "names": {}, "qname": {"runpod.user_agent": {}}, "docstring": {}, "kind": {}, "_index": 293}], ["runpod.user_agent.construct_user_agent", {"name": {}, "names": {}, "qname": {"runpod.user_agent.construct_user_agent": {}}, "docstring": {}, "kind": {}, "_index": 553}], ["runpod.user_agent.user_agent", {"name": {}, "names": {}, "qname": {"runpod.user_agent.USER_AGENT": {}}, "docstring": {}, "kind": {}, "_index": 562}], ["runpod.version", {"name": {}, "names": {}, "qname": {"runpod.version": {}}, "docstring": {}, "kind": {}, "_index": 296}], ["runpod.version.__version__", {"name": {}, "names": {}, "qname": {"runpod.version.__version__": {}}, "docstring": {}, "kind": {}, "_index": 300}], ["runpod.version.get_version", {"name": {}, "names": {}, "qname": {"runpod.version.get_version": {}}, "docstring": {}, "kind": {}, "_index": 298}], ["runpod_api_kei", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.set_credentials": {}}, "kind": {}, "_index": 1092}], ["runpod_cli", {"name": {"runpod.cli.entry.runpod_cli": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1417}], ["runpod_debug", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.log": {}}, "kind": {}, "_index": 332}], ["runpod_endpoint_id", {"name": {"runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 793}], ["runpodcli", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.runner.Job.__init__": {}}, "kind": {}, "_index": 1116}], ["runpodclient", {"name": {"runpod.endpoint.runner.RunPodClient": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1113}], ["runpoderror", {"name": {"runpod.error.RunPodError": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 908}], ["runpodignor", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_runpodignore": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "kind": {}, "_index": 108}], ["runpodignore", {"name": {}, "names": {"runpod.cli.utils.rp_runpodignore": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 105}], ["runpodlogger", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 316}], ["runsync", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}}, "kind": {}, "_index": 802}], ["runsync_description", {"name": {"runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 801}], ["runtim", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.start": {}}, "kind": {}, "_index": 907}], ["runtimeerror", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {}, "_index": 1118}], ["rust", {"name": {}, "names": {"runpod.serverless.core.Hook.rust_so_path": {}, "runpod.serverless.core.Hook.rust_crate_version": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 510}], ["rust_crate_version", {"name": {"runpod.serverless.core.Hook.rust_crate_version": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 514}], ["rust_so_path", {"name": {"runpod.serverless.core.Hook.rust_so_path": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 509}], ["same", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.file": {}}, "kind": {}, "_index": 674}], ["save", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 667}], ["scale", {"name": {}, "names": {"runpod.serverless.modules.rp_scale": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale": {}, "runpod.serverless.modules.rp_scale.JobScaler": {}}, "kind": {}, "_index": 231}], ["scaler", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_scale.JobScaler": {}, "runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 602}], ["scaler_typ", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1063}], ["scaler_valu", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1064}], ["schema", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.SCHEMA_ERROR": {}, "runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}, "runpod.serverless.utils.rp_validator._validate_input_against_schema": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1440}], ["schema_error", {"name": {"runpod.serverless.utils.rp_validator.SCHEMA_ERROR": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1439}], ["script", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 1408}], ["sdk", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.user_agent": {}, "runpod.user_agent.construct_user_agent": {}}, "kind": {}, "_index": 294}], ["sdk/0.1.0", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.user_agent.construct_user_agent": {}}, "kind": {}, "_index": 555}], ["second", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 1127}], ["secret", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "kind": {}, "_index": 334}], ["secur", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 1004}], ["see", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 482}], ["send", {"name": {}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}, "runpod.serverless.modules.rp_http.send_result": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.core.Hook.stream_output": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.modules.rp_ping.Heartbeat": {}, "runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}, "runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}, "runpod.serverless.modules.rp_http._handle_result": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.output": {}}, "kind": {}, "_index": 225}], ["send_result", {"name": {"runpod.serverless.modules.rp_http.send_result": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 648}], ["separ", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_progress.progress_update": {}}, "kind": {}, "_index": 881}], ["serialize", {"name": {}, "names": {"runpod.serverless.core.Hook._json_serialize_job_data": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 522}], ["seriou", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 216}], ["server", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat": {}, "runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}, "runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 163}], ["serverless", {"name": {"runpod.serverless": {}}, "names": {"runpod.serverless": {}}, "qname": {}, "docstring": {"runpod.serverless": {}, "runpod.serverless.core": {}, "runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.rp_scale": {}, "runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_debugger": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.serverless.worker": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.start": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.endpoint.helpers.is_completed": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 145}], ["servic", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Job": {}, "runpod.endpoint.runner.Endpoint": {}}, "kind": {}, "_index": 1138}], ["session", {"name": {"runpod.endpoint.asyncio.asyncio_runner.Job.session": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.session": {}}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat._session": {}, "runpod.serverless.modules.rp_progress._create_session_async": {}, "runpod.endpoint.runner.RunPodClient.rp_session": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.session": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.session": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_progress._create_session_async": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 447}], ["set", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}, "runpod.serverless._set_config_args": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.serverless._set_config_args": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.config.commands.config_wizard": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 68}], ["set_credentials", {"name": {"runpod.cli.groups.config.functions.set_credentials": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1080}], ["set_level", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 327}], ["settings", {"name": {}, "names": {"runpod.api.ctl_commands.update_user_settings": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 980}], ["shell", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.exec.commands.remote_python": {}}, "kind": {}, "_index": 1416}], ["should", {"name": {}, "names": {"runpod.cli.utils.rp_runpodignore.should_ignore": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1272}], ["should_ignore", {"name": {"runpod.cli.utils.rp_runpodignore.should_ignore": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1271}], ["sigint", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless._signal_handler": {}}, "kind": {}, "_index": 901}], ["signal", {"name": {}, "names": {"runpod.serverless._signal_handler": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}}, "qname": {}, "docstring": {"runpod.serverless._signal_handler": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}}, "kind": {}, "_index": 899}], ["sim", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 855}], ["simul", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}}, "kind": {}, "_index": 858}], ["singl", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core._process_job": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_upload.upload_image": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}}, "kind": {}, "_index": 544}], ["singleton", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger": {}, "runpod.serverless.core.Hook": {}, "runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 318}], ["size", {"name": {}, "names": {"runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "kind": {}, "_index": 416}], ["sl", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.core.Hook.finish_stream": {}}, "kind": {}, "_index": 433}], ["sls_core.so", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.Hook": {}}, "kind": {}, "_index": 492}], ["so", {"name": {}, "names": {"runpod.serverless.core.Hook.rust_so_path": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 511}], ["softwar", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 217}], ["someth", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 212}], ["sourc", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "kind": {}, "_index": 1194}], ["specif", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.get_pod": {}}, "kind": {}, "_index": 970}], ["specifi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.get_credentials": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}, "runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 1097}], ["ssh", {"name": {"runpod.cli.groups.ssh": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.ssh": {}}, "names": {"runpod.cli.groups.ssh": {}, "runpod.cli.utils.ssh_cmd": {}, "runpod.SSH_KEY_PATH": {}, "runpod.cli.groups.ssh.functions.SSH_FILES": {}, "runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.ssh": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}, "runpod.cli.groups.ssh.commands.ssh_cli": {}, "runpod.cli.groups.exec.functions.python_over_ssh": {}}, "qname": {}, "docstring": {"runpod.cli.groups.ssh": {}, "runpod.cli.groups.ssh.commands": {}, "runpod.cli.groups.ssh.functions": {}, "runpod.cli.utils.ssh_cmd": {}, "runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}, "runpod.cli.groups.ssh.functions.get_user_pub_keys": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.close": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.ssh.commands.ssh_cli": {}, "runpod.cli.groups.ssh.commands.list_keys": {}, "runpod.cli.groups.ssh.commands.add_key": {}, "runpod.cli.groups.exec.functions.python_over_ssh": {}}, "kind": {}, "_index": 92}], ["ssh_cli", {"name": {"runpod.cli.groups.ssh.commands.ssh_cli": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1388}], ["ssh_cmd", {"name": {"runpod.cli.utils.ssh_cmd": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 123}], ["ssh_files", {"name": {"runpod.cli.groups.ssh.functions.SSH_FILES": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1229}], ["ssh_key_path", {"name": {"runpod.SSH_KEY_PATH": {}}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "kind": {}, "_index": 1218}], ["sshconnection", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection": {}}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1274}], ["start", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.start": {}, "runpod.serverless.start": {}}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.start": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}, "runpod.serverless.start": {}, "runpod.cli.utils.rp_sync.start_watcher": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.commands.start_project_pod": {}}, "qname": {}, "docstring": {"runpod.serverless": {}, "runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.start": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}, "runpod.serverless.start": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.cli.utils.rp_sync.start_watcher": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.commands.start_project_pod": {}, "runpod.cli.groups.config.commands.config_wizard": {}}, "kind": {}, "_index": 152}], ["start_ping", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 584}], ["start_project", {"name": {"runpod.cli.groups.project.functions.start_project": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1357}], ["start_project_pod", {"name": {"runpod.cli.groups.project.commands.start_project_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1379}], ["start_uvicorn", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 847}], ["start_watcher", {"name": {"runpod.cli.utils.rp_sync.start_watcher": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1344}], ["started", {"name": {}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat._thread_started": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 578}], ["starter", {"name": {}, "names": {"runpod.cli.groups.project.functions.STARTER_TEMPLATES": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1350}], ["starter_templates", {"name": {"runpod.cli.groups.project.functions.STARTER_TEMPLATES": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1349}], ["state", {"name": {}, "names": {"runpod.serverless.modules.worker_state": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state": {}, "runpod.serverless.modules.worker_state.Jobs": {}, "runpod.endpoint.helpers.is_completed": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 239}], ["statement", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.LineTimer": {}}, "kind": {}, "_index": 754}], ["states", {"name": {}, "names": {"runpod.endpoint.helpers.FINAL_STATES": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1100}], ["statu", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}, "runpod.endpoint.helpers.is_completed": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 866}], ["status", {"name": {"runpod.serverless.modules.rp_fastapi.JobOutput.status": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.status": {}, "runpod.endpoint.runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}}, "names": {"runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.status": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.status": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}, "runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}, "runpod.endpoint.runner.Job.job_status": {}, "runpod.endpoint.runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 807}], ["status_cod", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 480}], ["status_description", {"name": {"runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 806}], ["stdout", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.log": {}}, "kind": {}, "_index": 331}], ["stop", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.stop": {}}, "names": {"runpod.serverless.utils.rp_debugger.Checkpoints.stop": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.cli.STOP_EVENT": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.stop": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.ctl_commands.stop_pod": {}}, "kind": {}, "_index": 733}], ["stop_event", {"name": {"runpod.cli.STOP_EVENT": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1247}], ["stop_pod", {"name": {"runpod.api.ctl_commands.stop_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1035}], ["storag", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.serverless.utils.rp_upload.upload_image": {}, "runpod.serverless.utils.rp_upload.bucket_upload": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "kind": {}, "_index": 422}], ["store", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 537}], ["str", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Job.__str__": {}, "runpod.serverless.core.CGetJobResult.__str__": {}, "runpod.error.RunPodError.__str__": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "kind": {}, "_index": 387}], ["stream", {"name": {"runpod.serverless.modules.rp_fastapi.StreamOutput.stream": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}}, "names": {"runpod.serverless.core.Hook._stream_output": {}, "runpod.serverless.core.Hook._finish_stream": {}, "runpod.serverless.core.Hook.stream_output": {}, "runpod.serverless.core.Hook.finish_stream": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}, "runpod.serverless.modules.rp_http.stream_result": {}, "runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.stream": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.core.Hook.stream_output": {}, "runpod.serverless.core.Hook.finish_stream": {}, "runpod.serverless.modules.rp_http._handle_result": {}, "runpod.serverless.modules.rp_http.stream_result": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}}, "kind": {}, "_index": 466}], ["stream_description", {"name": {"runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 804}], ["stream_output", {"name": {"runpod.serverless.core.Hook.stream_output": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 530}], ["stream_result", {"name": {"runpod.serverless.modules.rp_http.stream_result": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 650}], ["streamoutput", {"name": {"runpod.serverless.modules.rp_fastapi.StreamOutput": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 829}], ["string", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.user_agent.construct_user_agent": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}}, "kind": {}, "_index": 370}], ["structur", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.set_credentials": {}}, "kind": {}, "_index": 1091}], ["stuff", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state": {}}, "kind": {}, "_index": 242}], ["success", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "kind": {}, "_index": 839}], ["successfulli", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.Hook.post_output": {}}, "kind": {}, "_index": 536}], ["sync", {"name": {}, "names": {"runpod.cli.utils.rp_sync": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}, "runpod.cli.utils.rp_sync.sync_directory": {}}, "qname": {}, "docstring": {"runpod.cli.utils.rp_sync": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}, "runpod.cli.utils.rp_sync.WatcherHandler": {}, "runpod.cli.utils.rp_sync.sync_directory": {}}, "kind": {}, "_index": 113}], ["sync_directory", {"name": {"runpod.cli.utils.rp_sync.sync_directory": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1346}], ["synchron", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.run_sync": {}}, "kind": {}, "_index": 1174}], ["sys.argv.", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless._set_config_args": {}}, "kind": {}, "_index": 890}], ["system", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 193}], ["take", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.run": {}}, "kind": {}, "_index": 548}], ["target", {"name": {}, "names": {"runpod.serverless.modules.rp_progress._thread_target": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 876}], ["task", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.Hook.post_output": {}}, "kind": {}, "_index": 535}], ["tasks", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 609}], ["tell", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}, "runpod.serverless.core.Hook.finish_stream": {}}, "kind": {}, "_index": 481}], ["templat", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.templates": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.cli.groups.project.helpers.copy_template_files": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 37}], ["template", {"name": {}, "names": {"runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.cli.groups.project.helpers.copy_template_files": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 631}], ["template_id", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}}, "kind": {}, "_index": 1027}], ["templates", {"name": {"runpod.api.mutations.templates": {}}, "names": {"runpod.api.mutations.templates": {}, "runpod.cli.groups.project.functions.STARTER_TEMPLATES": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 35}], ["temporari", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download": {}}, "kind": {}, "_index": 276}], ["termin", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}}, "kind": {}, "_index": 956}], ["terminal", {"name": {}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1303}], ["terminate", {"name": {}, "names": {"runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.ctl_commands.terminate_pod": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 954}], ["terminate_pod", {"name": {"runpod.api.ctl_commands.terminate_pod": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1041}], ["test", {"name": {}, "names": {"runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.worker.main": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest": {}}, "kind": {}, "_index": 181}], ["testjob", {"name": {"runpod.serverless.modules.rp_fastapi.TestJob": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 814}], ["thing", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 206}], ["thread", {"name": {}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat._thread_started": {}, "runpod.serverless.modules.rp_progress._thread_target": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.serverless.modules.rp_progress.progress_update": {}}, "kind": {}, "_index": 577}], ["time", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.LineTimer": {}}, "kind": {}, "_index": 716}], ["timeout", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}}, "kind": {}, "_index": 1062}], ["timer", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.LineTimer": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 751}], ["tip", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.tip": {}}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.tip": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_tips": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.tip": {}}, "kind": {}, "_index": 237}], ["tips", {"name": {}, "names": {"runpod.serverless.modules.rp_tips": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 235}], ["title", {"name": {"runpod.serverless.modules.rp_fastapi.TITLE": {}}, "names": {"runpod.serverless.modules.rp_fastapi.TITLE": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 795}], ["to", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.cli.groups.pod.commands.connect_to_pod": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 699}], ["todo", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "kind": {}, "_index": 1370}], ["toml", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions": {}}, "kind": {}, "_index": 71}], ["tool", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.exec": {}}, "kind": {}, "_index": 78}], ["torch", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_cuda": {}}, "kind": {}, "_index": 263}], ["torch.cuda", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_cuda": {}}, "kind": {}, "_index": 260}], ["track", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Jobs": {}}, "kind": {}, "_index": 391}], ["transfer", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_upload.get_boto_client": {}}, "kind": {}, "_index": 688}], ["transform", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1449}], ["transmit", {"name": {}, "names": {"runpod.serverless.modules.rp_http._transmit": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_http._transmit": {}}, "kind": {}, "_index": 642}], ["true", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger.RunPodLogger.log": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.worker._is_local": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.endpoint.helpers.is_completed": {}, "runpod.cli.utils.rp_runpodignore.should_ignore": {}, "runpod.serverless.utils.rp_cuda.is_available": {}}, "kind": {}, "_index": 333}], ["try", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "kind": {}, "_index": 443}], ["type", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}, "runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.api.ctl_commands.get_gpus": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 675}], ["types", {"name": {}, "names": {"runpod.api.queries.gpus.QUERY_GPU_TYPES": {}, "runpod.cli.GPU_TYPES": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 966}], ["typic", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 199}], ["unauthor", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {}, "_index": 1132}], ["unauthorized", {"name": {}, "names": {"runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}, "runpod.endpoint.helpers.UNAUTHORIZED_MSG": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 926}], ["unauthorized_msg", {"name": {"runpod.endpoint.helpers.UNAUTHORIZED_MSG": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1102}], ["under", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions": {}}, "kind": {}, "_index": 74}], ["unexpect", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}}, "kind": {}, "_index": 213}], ["unexpected", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}, "runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1424}], ["unexpected_input_error", {"name": {"runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1423}], ["uniqu", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Job": {}}, "kind": {}, "_index": 369}], ["unsuccess", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient._request": {}}, "kind": {}, "_index": 1134}], ["until", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}}, "kind": {}, "_index": 444}], ["up", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_download": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.cli.groups.config.commands.config_wizard": {}}, "kind": {}, "_index": 255}], ["updat", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state": {}, "runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}, "runpod.serverless.modules.rp_progress.progress_update": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.ctl_commands.update_user_settings": {}, "runpod.api.ctl_commands.update_endpoint_template": {}}, "kind": {}, "_index": 245}], ["update", {"name": {}, "names": {"runpod.serverless.core.Hook._progress_update": {}, "runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}, "runpod.serverless.modules.rp_progress.progress_update": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.ctl_commands.update_user_settings": {}, "runpod.api.ctl_commands.update_endpoint_template": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 497}], ["update_credenti", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.set_credentials": {}}, "kind": {}, "_index": 1088}], ["update_endpoint_template", {"name": {"runpod.api.ctl_commands.update_endpoint_template": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1071}], ["update_endpoint_template_mutation", {"name": {"runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 939}], ["update_user_settings", {"name": {"runpod.api.ctl_commands.update_user_settings": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 979}], ["upload", {"name": {}, "names": {"runpod.serverless.utils.rp_upload": {}, "runpod.serverless.utils.rp_upload.upload_image": {}, "runpod.serverless.utils.rp_upload.bucket_upload": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.serverless.utils.rp_upload.upload_image": {}, "runpod.serverless.utils.rp_upload.files": {}, "runpod.serverless.utils.rp_upload.bucket_upload": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "kind": {}, "_index": 279}], ["upload.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_upload": {}}, "kind": {}, "_index": 281}], ["upload_file_to_bucket", {"name": {"runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 698}], ["upload_image", {"name": {"runpod.serverless.utils.rp_upload.upload_image": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 690}], ["upload_in_memory_object", {"name": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 701}], ["url", {"name": {}, "names": {"runpod.serverless.modules.rp_job.JOB_GET_URL": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_ping.Heartbeat.PING_URL": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}, "runpod.serverless.utils.rp_upload.extract_region_from_url": {}, "runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url": {}, "runpod.api_url_base": {}, "runpod.endpoint_url_base": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_upload.extract_region_from_url": {}, "runpod.serverless.utils.rp_upload.files": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "kind": {}, "_index": 424}], ["urls", {"name": {}, "names": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 663}], ["us", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_http": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_debugger.LineTimer": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.endpoint.runner.RunPodClient._request": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 160}], ["usag", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 727}], ["user", {"name": {"runpod.api.mutations.user": {}, "runpod.api.queries.user": {}}, "names": {"runpod.api.mutations.user": {}, "runpod.api.queries.user": {}, "runpod.user_agent": {}, "runpod.user_agent.construct_user_agent": {}, "runpod.user_agent.USER_AGENT": {}, "runpod.api.mutations.user.generate_user_mutation": {}, "runpod.api.queries.user.QUERY_USER": {}, "runpod.api.ctl_commands.get_user": {}, "runpod.api.ctl_commands.update_user_settings": {}, "runpod.cli.groups.ssh.functions.get_user_pub_keys": {}}, "qname": {}, "docstring": {"runpod.api.mutations.user": {}, "runpod.api.queries.user": {}, "runpod.user_agent": {}, "runpod.user_agent.construct_user_agent": {}, "runpod.api.mutations.user.generate_user_mutation": {}, "runpod.api.ctl_commands.get_user": {}, "runpod.api.ctl_commands.update_user_settings": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.config.commands.config_wizard": {}, "runpod.cli.groups.ssh.commands.list_keys": {}, "runpod.cli.groups.ssh.commands.add_key": {}, "runpod.cli.groups.pod.commands.list_pods": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "kind": {}, "_index": 38}], ["user'", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.ssh.functions.get_user_pub_keys": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}}, "kind": {}, "_index": 1083}], ["user_agent", {"name": {"runpod.user_agent": {}, "runpod.user_agent.USER_AGENT": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 291}], ["usernam", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}}, "kind": {}, "_index": 934}], ["userspac", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_userspace": {}}, "kind": {}, "_index": 122}], ["userspace", {"name": {}, "names": {"runpod.cli.utils.rp_userspace": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 120}], ["util", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils": {}, "runpod.cli.utils.rp_info": {}, "runpod.cli.utils.rp_userspace": {}, "runpod.cli.utils.ssh_cmd": {}, "runpod.serverless.utils": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.serverless.utils.rp_debugger.LineTimer": {}}, "kind": {}, "_index": 98}], ["utils", {"name": {"runpod.cli.utils": {}, "runpod.serverless.utils": {}}, "names": {"runpod.cli.utils": {}, "runpod.serverless.utils": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 96}], ["uuid", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 1362}], ["uvicorn", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}}, "kind": {}, "_index": 848}], ["valid", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.cli.groups.config.functions.check_credentials": {}, "runpod.cli.groups.project.helpers.validate_project_name": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 69}], ["validate", {"name": {"runpod.serverless.utils.rp_validator.validate": {}}, "names": {"runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.cli.groups.project.helpers.validate_project_name": {}, "runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}, "runpod.serverless.utils.rp_validator._validate_input_against_schema": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 312}], ["validate_project_name", {"name": {"runpod.cli.groups.project.helpers.validate_project_name": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1313}], ["validated_input", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1465}], ["validated_job_input", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1462}], ["validator", {"name": {}, "names": {"runpod.serverless.utils.rp_validator": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 283}], ["validator.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator": {}}, "kind": {}, "_index": 285}], ["valu", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 189}], ["value1", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1467}], ["value2", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_validator.validate": {}}, "kind": {}, "_index": 1469}], ["variabl", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state": {}, "runpod.serverless._get_realtime_port": {}, "runpod.serverless._get_realtime_concurrency": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 244}], ["variable", {"name": {}, "names": {}, "qname": {}, "docstring": {}, "kind": {"runpod.version.__version__": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.__instance": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.level": {}, "runpod.serverless.modules.worker_state.Job.id": {}, "runpod.serverless.modules.worker_state.Job.input": {}, "runpod.serverless.modules.worker_state.Job.webhook": {}, "runpod.serverless.modules.worker_state.Jobs._instance": {}, "runpod.serverless.modules.worker_state.Jobs.jobs": {}, "runpod.serverless.modules.rp_tips.log": {}, "runpod.serverless.modules.rp_job.log": {}, "runpod.serverless.modules.rp_job.job_list": {}, "runpod.serverless.core.log": {}, "runpod.serverless.core.CGetJobResult._fields_": {}, "runpod.serverless.core.Hook._instance": {}, "runpod.serverless.core.Hook._get_jobs": {}, "runpod.serverless.core.Hook._progress_update": {}, "runpod.serverless.core.Hook._stream_output": {}, "runpod.serverless.core.Hook._post_output": {}, "runpod.serverless.core.Hook._finish_stream": {}, "runpod.serverless.core.Hook.rust_so_path": {}, "runpod.serverless.core.Hook.rust_crate_version": {}, "runpod.serverless.core.Hook._initialized": {}, "runpod.serverless.modules.rp_local.log": {}, "runpod.serverless.modules.rp_ping.log": {}, "runpod.serverless.modules.rp_ping.jobs": {}, "runpod.serverless.modules.rp_ping.Heartbeat.PING_URL": {}, "runpod.serverless.modules.rp_ping.Heartbeat._thread_started": {}, "runpod.serverless.modules.rp_ping.Heartbeat._session": {}, "runpod.serverless.modules.rp_scale.log": {}, "runpod.serverless.modules.rp_scale.job_list": {}, "runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier": {}, "runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}, "runpod.serverless.modules.rp_scale.JobScaler.job_history": {}, "runpod.serverless.modules.rp_scale.JobScaler.current_concurrency": {}, "runpod.serverless.modules.rp_scale.JobScaler._is_alive": {}, "runpod.serverless.modules.rp_http.log": {}, "runpod.serverless.modules.rp_http.job_list": {}, "runpod.serverless.utils.rp_upload.logger": {}, "runpod.serverless.utils.rp_debugger.PROCESSOR": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__instance": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup": {}, "runpod.serverless.utils.rp_debugger.LineTimer.checkpoints": {}, "runpod.serverless.utils.rp_debugger.LineTimer.name": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.function": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints": {}, "runpod.serverless.worker.log": {}, "runpod.serverless.worker.job_list": {}, "runpod.serverless.worker.heartbeat": {}, "runpod.serverless.modules.rp_fastapi.DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.job_list": {}, "runpod.serverless.modules.rp_fastapi.heartbeat": {}, "runpod.serverless.modules.rp_fastapi.Job.id": {}, "runpod.serverless.modules.rp_fastapi.Job.input": {}, "runpod.serverless.modules.rp_fastapi.TestJob.id": {}, "runpod.serverless.modules.rp_fastapi.TestJob.input": {}, "runpod.serverless.modules.rp_fastapi.TestJob.webhook": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.input": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.id": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.status": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.output": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.error": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.id": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.status": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.stream": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.error": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.config": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app": {}, "runpod.serverless.modules.rp_progress.log": {}, "runpod.serverless.log": {}, "runpod.serverless.parser": {}, "runpod.error.RunPodError.message": {}, "runpod.error.QueryError.query": {}, "runpod.endpoint.runner.RunPodClient.rp_session": {}, "runpod.endpoint.runner.RunPodClient.headers": {}, "runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}, "runpod.endpoint.runner.Job.endpoint_id": {}, "runpod.endpoint.runner.Job.job_id": {}, "runpod.endpoint.runner.Job.rp_client": {}, "runpod.endpoint.runner.Job.job_status": {}, "runpod.endpoint.runner.Job.job_output": {}, "runpod.endpoint.runner.Endpoint.endpoint_id": {}, "runpod.endpoint.runner.Endpoint.rp_client": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.session": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_output": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.session": {}, "runpod.profile": {}, "runpod._credentials": {}, "runpod.api_key": {}, "runpod.api_url_base": {}, "runpod.endpoint_url_base": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_id": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_port": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.ssh": {}, "runpod.cli.utils.rp_sync.WatcherHandler.action_function": {}, "runpod.cli.utils.rp_sync.WatcherHandler.local_path": {}, "runpod.cli.utils.rp_sync.WatcherHandler.ignore_list": {}, "runpod.cli.utils.rp_sync.WatcherHandler.debouncer": {}}, "_index": 301}], ["vars", {"name": {}, "names": {"runpod.cli.ENV_VARS": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1254}], ["version", {"name": {"runpod.version": {}}, "names": {"runpod.version": {}, "runpod.version.get_version": {}, "runpod.version.__version__": {}, "runpod.serverless.core.Hook.rust_crate_version": {}, "runpod.serverless.utils.rp_debugger.PYTHON_VERSION": {}}, "qname": {}, "docstring": {"runpod.version": {}, "runpod.version.get_version": {}, "runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 295}], ["via", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_http._transmit": {}}, "kind": {}, "_index": 644}], ["virtual", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 1363}], ["volum", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 1015}], ["volume_in_gb", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1013}], ["volume_mount_path", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1018}], ["wait", {"name": {}, "names": {"runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}}, "qname": {}, "docstring": {"runpod.endpoint.runner.RunPodClient._request": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "kind": {}, "_index": 1128}], ["want", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}}, "kind": {}, "_index": 1002}], ["warn", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.warn": {}}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.warn": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.warn": {}}, "kind": {}, "_index": 209}], ["watch", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.utils.rp_sync": {}, "runpod.cli.utils.rp_sync.WatcherHandler": {}}, "kind": {}, "_index": 115}], ["watcher", {"name": {}, "names": {"runpod.cli.utils.rp_sync.WatcherHandler": {}, "runpod.cli.utils.rp_sync.start_watcher": {}}, "qname": {}, "docstring": {"runpod.cli.utils.rp_sync.start_watcher": {}}, "kind": {}, "_index": 1330}], ["watcherhandler", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 1329}], ["web", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}}, "kind": {}, "_index": 162}], ["webhook", {"name": {"runpod.serverless.modules.worker_state.Job.webhook": {}, "runpod.serverless.modules.rp_fastapi.TestJob.webhook": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook": {}}, "names": {"runpod.serverless.modules.worker_state.Job.webhook": {}, "runpod.serverless.modules.rp_fastapi.TestJob.webhook": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "kind": {}, "_index": 372}], ["whether", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}, "runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}}, "kind": {}, "_index": 452}], ["within", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.cli.groups.project.functions.start_project": {}}, "kind": {}, "_index": 407}], ["without", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_cuda": {}, "runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}}, "kind": {}, "_index": 261}], ["wizard", {"name": {}, "names": {"runpod.cli.groups.project.commands.new_project_wizard": {}, "runpod.cli.groups.config.commands.config_wizard": {}}, "qname": {}, "docstring": {"runpod.cli.groups.config.commands.config_wizard": {}}, "kind": {}, "_index": 1377}], ["work", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_logger": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "kind": {}, "_index": 207}], ["worker", {"name": {"runpod.serverless.worker": {}}, "names": {"runpod.serverless.modules.worker_state": {}, "runpod.serverless.worker": {}, "runpod.serverless.modules.worker_state.WORKER_ID": {}, "runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}}, "qname": {}, "docstring": {"runpod.serverless": {}, "runpod.serverless.core": {}, "runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.rp_scale": {}, "runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.worker": {}, "runpod.serverless.core.run": {}, "runpod.serverless.core.main": {}, "runpod.serverless.modules.rp_local.run_local": {}, "runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}, "runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}, "runpod.serverless.worker._is_local": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.worker.main": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.serverless.start": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.endpoint.runner.Endpoint.health": {}}, "kind": {}, "_index": 149}], ["worker_id", {"name": {"runpod.serverless.modules.worker_state.WORKER_ID": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 354}], ["worker_loop.pi", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.worker": {}}, "kind": {}, "_index": 288}], ["worker_state", {"name": {"runpod.serverless.modules.worker_state": {}}, "names": {}, "qname": {}, "docstring": {}, "kind": {}, "_index": 238}], ["workerapi", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI": {}}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}}, "kind": {}, "_index": 840}], ["workers_max", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1067}], ["workers_min", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_endpoint": {}}, "kind": {}, "_index": 1065}], ["wrapper", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands": {}, "runpod.api.graphql": {}, "runpod.api.mutations.container_register_auth": {}, "runpod.api.mutations.endpoints": {}, "runpod.api.mutations.pods": {}, "runpod.api.mutations.templates": {}, "runpod.api.queries.pods": {}, "runpod.serverless.modules.rp_http._transmit": {}, "runpod.serverless.modules.rp_progress._thread_target": {}}, "kind": {}, "_index": 13}], ["written", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.core.CGetJobResult": {}}, "kind": {}, "_index": 478}], ["x86_64", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.user_agent.construct_user_agent": {}}, "kind": {}, "_index": 559}], ["yield", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}}, "kind": {}, "_index": 467}], ["your_model_input_valu", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.endpoint.runner.Endpoint.__init__": {}}, "kind": {}, "_index": 1165}], ["zero", {"name": {}, "names": {"runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}}, "qname": {}, "docstring": {}, "kind": {}, "_index": 352}], ["zip", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_download.file": {}}, "kind": {}, "_index": 275}], ["{", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 719}], ["{example_var:\"example_value\",", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}}, "kind": {}, "_index": 1022}], ["|", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.api.ctl_commands": {}, "runpod.api.graphql": {}, "runpod.api.mutations.container_register_auth": {}, "runpod.api.mutations.endpoints": {}, "runpod.api.mutations.pods": {}, "runpod.api.mutations.templates": {}, "runpod.api.mutations.user": {}, "runpod.api.queries.gpus": {}, "runpod.api.queries.pods": {}, "runpod.api.queries.user": {}, "runpod.cli.entry": {}, "runpod.cli.groups.config.functions": {}, "runpod.cli.groups.exec.commands": {}, "runpod.cli.groups.exec.functions": {}, "runpod.cli.groups.pod.commands": {}, "runpod.cli.groups.project.commands": {}, "runpod.cli.groups.project.functions": {}, "runpod.cli.groups.ssh.commands": {}, "runpod.cli.groups.ssh.functions": {}, "runpod.cli.utils.rp_info": {}, "runpod.cli.utils.rp_userspace": {}, "runpod.cli.utils.ssh_cmd": {}, "runpod.endpoint.runner": {}, "runpod.error": {}, "runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_scale": {}, "runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_debugger": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_upload": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.serverless.worker": {}}, "kind": {}, "_index": 12}], ["},", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "kind": {}, "_index": 725}], ["~/.runpod/config.toml", {"name": {}, "names": {}, "qname": {}, "docstring": {"runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.config.functions.get_credentials": {}}, "kind": {}, "_index": 1085}]], "pipeline": []} \ No newline at end of file diff --git a/docs/api/handling_errors.md b/docs/api/handling_errors.md deleted file mode 100644 index 055e11ed..00000000 --- a/docs/api/handling_errors.md +++ /dev/null @@ -1,10 +0,0 @@ -# Handling Errors - -```Python -import runpod - -try: - # Use runpod to make a request -except runpod.error.AuthenticationError as err: - # Authentication with the API failed -``` diff --git a/docs/api/index.html b/docs/api/index.html new file mode 100644 index 00000000..b8cd4071 --- /dev/null +++ b/docs/api/index.html @@ -0,0 +1,612 @@ + + + + + + + + runpod + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Allows runpod to be imported as a module.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageapiAllows api_wrapper to be imported as a module.
PackagecliAllows the CLI to be imported as a module.
PackageendpointAllows endpoints to be imported as a module.
Moduleerrorrunpd | error.py
PackageserverlessContains the main entrypoint for the RunPod Serverless Worker.
Moduleuser_agentUser-Agent for RunPod-Python-SDK
Moduleversionrunpod-python version
+ + +

From __init__.py:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConstantSSH_KEY_PATHUndocumented
Variableapi_keyUndocumented
Variableapi_url_baseUndocumented
Variableendpoint_url_baseUndocumented
VariableprofileUndocumented
Variable_credentialsUndocumented
+
+ +
+
+ + + + + + + + +
+ + SSH_KEY_PATH = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
os.path.expanduser('~/.runpod/ssh')
+
+
+ + + + + + + + +
+ + profile: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + _credentials = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + api_key = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + api_url_base: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + endpoint_url_base: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/lunr.js b/docs/api/lunr.js new file mode 100644 index 00000000..6768f2a3 --- /dev/null +++ b/docs/api/lunr.js @@ -0,0 +1,3475 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ + + ;(function(){ + + /** + * A convenience function for configuring and constructing + * a new lunr Index. + * + * A lunr.Builder instance is created and the pipeline setup + * with a trimmer, stop word filter and stemmer. + * + * This builder object is yielded to the configuration function + * that is passed as a parameter, allowing the list of fields + * and other builder parameters to be customised. + * + * All documents _must_ be added within the passed config function. + * + * @example + * var idx = lunr(function () { + * this.field('title') + * this.field('body') + * this.ref('id') + * + * documents.forEach(function (doc) { + * this.add(doc) + * }, this) + * }) + * + * @see {@link lunr.Builder} + * @see {@link lunr.Pipeline} + * @see {@link lunr.trimmer} + * @see {@link lunr.stopWordFilter} + * @see {@link lunr.stemmer} + * @namespace {function} lunr + */ + var lunr = function (config) { + var builder = new lunr.Builder + + builder.pipeline.add( + lunr.trimmer, + lunr.stopWordFilter, + lunr.stemmer + ) + + builder.searchPipeline.add( + lunr.stemmer + ) + + config.call(builder, builder) + return builder.build() + } + + lunr.version = "2.3.9" + /*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ + + /** + * A namespace containing utils for the rest of the lunr library + * @namespace lunr.utils + */ + lunr.utils = {} + + /** + * Print a warning message to the console. + * + * @param {String} message The message to be printed. + * @memberOf lunr.utils + * @function + */ + lunr.utils.warn = (function (global) { + /* eslint-disable no-console */ + return function (message) { + if (global.console && console.warn) { + console.warn(message) + } + } + /* eslint-enable no-console */ + })(this) + + /** + * Convert an object to a string. + * + * In the case of `null` and `undefined` the function returns + * the empty string, in all other cases the result of calling + * `toString` on the passed object is returned. + * + * @param {Any} obj The object to convert to a string. + * @return {String} string representation of the passed object. + * @memberOf lunr.utils + */ + lunr.utils.asString = function (obj) { + if (obj === void 0 || obj === null) { + return "" + } else { + return obj.toString() + } + } + + /** + * Clones an object. + * + * Will create a copy of an existing object such that any mutations + * on the copy cannot affect the original. + * + * Only shallow objects are supported, passing a nested object to this + * function will cause a TypeError. + * + * Objects with primitives, and arrays of primitives are supported. + * + * @param {Object} obj The object to clone. + * @return {Object} a clone of the passed object. + * @throws {TypeError} when a nested object is passed. + * @memberOf Utils + */ + lunr.utils.clone = function (obj) { + if (obj === null || obj === undefined) { + return obj + } + + var clone = Object.create(null), + keys = Object.keys(obj) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i], + val = obj[key] + + if (Array.isArray(val)) { + clone[key] = val.slice() + continue + } + + if (typeof val === 'string' || + typeof val === 'number' || + typeof val === 'boolean') { + clone[key] = val + continue + } + + throw new TypeError("clone is not deep and does not support nested objects") + } + + return clone + } + lunr.FieldRef = function (docRef, fieldName, stringValue) { + this.docRef = docRef + this.fieldName = fieldName + this._stringValue = stringValue + } + + lunr.FieldRef.joiner = "/" + + lunr.FieldRef.fromString = function (s) { + var n = s.indexOf(lunr.FieldRef.joiner) + + if (n === -1) { + throw "malformed field ref string" + } + + var fieldRef = s.slice(0, n), + docRef = s.slice(n + 1) + + return new lunr.FieldRef (docRef, fieldRef, s) + } + + lunr.FieldRef.prototype.toString = function () { + if (this._stringValue == undefined) { + this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef + } + + return this._stringValue + } + /*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ + + /** + * A lunr set. + * + * @constructor + */ + lunr.Set = function (elements) { + this.elements = Object.create(null) + + if (elements) { + this.length = elements.length + + for (var i = 0; i < this.length; i++) { + this.elements[elements[i]] = true + } + } else { + this.length = 0 + } + } + + /** + * A complete set that contains all elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ + lunr.Set.complete = { + intersect: function (other) { + return other + }, + + union: function () { + return this + }, + + contains: function () { + return true + } + } + + /** + * An empty set that contains no elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ + lunr.Set.empty = { + intersect: function () { + return this + }, + + union: function (other) { + return other + }, + + contains: function () { + return false + } + } + + /** + * Returns true if this set contains the specified object. + * + * @param {object} object - Object whose presence in this set is to be tested. + * @returns {boolean} - True if this set contains the specified object. + */ + lunr.Set.prototype.contains = function (object) { + return !!this.elements[object] + } + + /** + * Returns a new set containing only the elements that are present in both + * this set and the specified set. + * + * @param {lunr.Set} other - set to intersect with this set. + * @returns {lunr.Set} a new set that is the intersection of this and the specified set. + */ + + lunr.Set.prototype.intersect = function (other) { + var a, b, elements, intersection = [] + + if (other === lunr.Set.complete) { + return this + } + + if (other === lunr.Set.empty) { + return other + } + + if (this.length < other.length) { + a = this + b = other + } else { + a = other + b = this + } + + elements = Object.keys(a.elements) + + for (var i = 0; i < elements.length; i++) { + var element = elements[i] + if (element in b.elements) { + intersection.push(element) + } + } + + return new lunr.Set (intersection) + } + + /** + * Returns a new set combining the elements of this and the specified set. + * + * @param {lunr.Set} other - set to union with this set. + * @return {lunr.Set} a new set that is the union of this and the specified set. + */ + + lunr.Set.prototype.union = function (other) { + if (other === lunr.Set.complete) { + return lunr.Set.complete + } + + if (other === lunr.Set.empty) { + return this + } + + return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements))) + } + /** + * A function to calculate the inverse document frequency for + * a posting. This is shared between the builder and the index + * + * @private + * @param {object} posting - The posting for a given term + * @param {number} documentCount - The total number of documents. + */ + lunr.idf = function (posting, documentCount) { + var documentsWithTerm = 0 + + for (var fieldName in posting) { + if (fieldName == '_index') continue // Ignore the term index, its not a field + documentsWithTerm += Object.keys(posting[fieldName]).length + } + + var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) + + return Math.log(1 + Math.abs(x)) + } + + /** + * A token wraps a string representation of a token + * as it is passed through the text processing pipeline. + * + * @constructor + * @param {string} [str=''] - The string token being wrapped. + * @param {object} [metadata={}] - Metadata associated with this token. + */ + lunr.Token = function (str, metadata) { + this.str = str || "" + this.metadata = metadata || {} + } + + /** + * Returns the token string that is being wrapped by this object. + * + * @returns {string} + */ + lunr.Token.prototype.toString = function () { + return this.str + } + + /** + * A token update function is used when updating or optionally + * when cloning a token. + * + * @callback lunr.Token~updateFunction + * @param {string} str - The string representation of the token. + * @param {Object} metadata - All metadata associated with this token. + */ + + /** + * Applies the given function to the wrapped string token. + * + * @example + * token.update(function (str, metadata) { + * return str.toUpperCase() + * }) + * + * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. + * @returns {lunr.Token} + */ + lunr.Token.prototype.update = function (fn) { + this.str = fn(this.str, this.metadata) + return this + } + + /** + * Creates a clone of this token. Optionally a function can be + * applied to the cloned token. + * + * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. + * @returns {lunr.Token} + */ + lunr.Token.prototype.clone = function (fn) { + fn = fn || function (s) { return s } + return new lunr.Token (fn(this.str, this.metadata), this.metadata) + } + /*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ + + /** + * A function for splitting a string into tokens ready to be inserted into + * the search index. Uses `lunr.tokenizer.separator` to split strings, change + * the value of this property to change how strings are split into tokens. + * + * This tokenizer will convert its parameter to a string by calling `toString` and + * then will split this string on the character in `lunr.tokenizer.separator`. + * Arrays will have their elements converted to strings and wrapped in a lunr.Token. + * + * Optional metadata can be passed to the tokenizer, this metadata will be cloned and + * added as metadata to every token that is created from the object to be tokenized. + * + * @static + * @param {?(string|object|object[])} obj - The object to convert into tokens + * @param {?object} metadata - Optional metadata to associate with every token + * @returns {lunr.Token[]} + * @see {@link lunr.Pipeline} + */ + lunr.tokenizer = function (obj, metadata) { + if (obj == null || obj == undefined) { + return [] + } + + if (Array.isArray(obj)) { + return obj.map(function (t) { + return new lunr.Token( + lunr.utils.asString(t).toLowerCase(), + lunr.utils.clone(metadata) + ) + }) + } + + var str = obj.toString().toLowerCase(), + len = str.length, + tokens = [] + + for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { + var char = str.charAt(sliceEnd), + sliceLength = sliceEnd - sliceStart + + if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) { + + if (sliceLength > 0) { + var tokenMetadata = lunr.utils.clone(metadata) || {} + tokenMetadata["position"] = [sliceStart, sliceLength] + tokenMetadata["index"] = tokens.length + + tokens.push( + new lunr.Token ( + str.slice(sliceStart, sliceEnd), + tokenMetadata + ) + ) + } + + sliceStart = sliceEnd + 1 + } + + } + + return tokens + } + + /** + * The separator used to split a string into tokens. Override this property to change the behaviour of + * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. + * + * @static + * @see lunr.tokenizer + */ + lunr.tokenizer.separator = /[\s\-]+/ + /*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ + + /** + * lunr.Pipelines maintain an ordered list of functions to be applied to all + * tokens in documents entering the search index and queries being ran against + * the index. + * + * An instance of lunr.Index created with the lunr shortcut will contain a + * pipeline with a stop word filter and an English language stemmer. Extra + * functions can be added before or after either of these functions or these + * default functions can be removed. + * + * When run the pipeline will call each function in turn, passing a token, the + * index of that token in the original list of all tokens and finally a list of + * all the original tokens. + * + * The output of functions in the pipeline will be passed to the next function + * in the pipeline. To exclude a token from entering the index the function + * should return undefined, the rest of the pipeline will not be called with + * this token. + * + * For serialisation of pipelines to work, all functions used in an instance of + * a pipeline should be registered with lunr.Pipeline. Registered functions can + * then be loaded. If trying to load a serialised pipeline that uses functions + * that are not registered an error will be thrown. + * + * If not planning on serialising the pipeline then registering pipeline functions + * is not necessary. + * + * @constructor + */ + lunr.Pipeline = function () { + this._stack = [] + } + + lunr.Pipeline.registeredFunctions = Object.create(null) + + /** + * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token + * string as well as all known metadata. A pipeline function can mutate the token string + * or mutate (or add) metadata for a given token. + * + * A pipeline function can indicate that the passed token should be discarded by returning + * null, undefined or an empty string. This token will not be passed to any downstream pipeline + * functions and will not be added to the index. + * + * Multiple tokens can be returned by returning an array of tokens. Each token will be passed + * to any downstream pipeline functions and all will returned tokens will be added to the index. + * + * Any number of pipeline functions may be chained together using a lunr.Pipeline. + * + * @interface lunr.PipelineFunction + * @param {lunr.Token} token - A token from the document being processed. + * @param {number} i - The index of this token in the complete list of tokens for this document/field. + * @param {lunr.Token[]} tokens - All tokens for this document/field. + * @returns {(?lunr.Token|lunr.Token[])} + */ + + /** + * Register a function with the pipeline. + * + * Functions that are used in the pipeline should be registered if the pipeline + * needs to be serialised, or a serialised pipeline needs to be loaded. + * + * Registering a function does not add it to a pipeline, functions must still be + * added to instances of the pipeline for them to be used when running a pipeline. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @param {String} label - The label to register this function with + */ + lunr.Pipeline.registerFunction = function (fn, label) { + if (label in this.registeredFunctions) { + lunr.utils.warn('Overwriting existing registered function: ' + label) + } + + fn.label = label + lunr.Pipeline.registeredFunctions[fn.label] = fn + } + + /** + * Warns if the function is not registered as a Pipeline function. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @private + */ + lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { + var isRegistered = fn.label && (fn.label in this.registeredFunctions) + + if (!isRegistered) { + lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) + } + } + + /** + * Loads a previously serialised pipeline. + * + * All functions to be loaded must already be registered with lunr.Pipeline. + * If any function from the serialised data has not been registered then an + * error will be thrown. + * + * @param {Object} serialised - The serialised pipeline to load. + * @returns {lunr.Pipeline} + */ + lunr.Pipeline.load = function (serialised) { + var pipeline = new lunr.Pipeline + + serialised.forEach(function (fnName) { + var fn = lunr.Pipeline.registeredFunctions[fnName] + + if (fn) { + pipeline.add(fn) + } else { + throw new Error('Cannot load unregistered function: ' + fnName) + } + }) + + return pipeline + } + + /** + * Adds new functions to the end of the pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. + */ + lunr.Pipeline.prototype.add = function () { + var fns = Array.prototype.slice.call(arguments) + + fns.forEach(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + this._stack.push(fn) + }, this) + } + + /** + * Adds a single function after a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ + lunr.Pipeline.prototype.after = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos == -1) { + throw new Error('Cannot find existingFn') + } + + pos = pos + 1 + this._stack.splice(pos, 0, newFn) + } + + /** + * Adds a single function before a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ + lunr.Pipeline.prototype.before = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos == -1) { + throw new Error('Cannot find existingFn') + } + + this._stack.splice(pos, 0, newFn) + } + + /** + * Removes a function from the pipeline. + * + * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. + */ + lunr.Pipeline.prototype.remove = function (fn) { + var pos = this._stack.indexOf(fn) + if (pos == -1) { + return + } + + this._stack.splice(pos, 1) + } + + /** + * Runs the current list of functions that make up the pipeline against the + * passed tokens. + * + * @param {Array} tokens The tokens to run through the pipeline. + * @returns {Array} + */ + lunr.Pipeline.prototype.run = function (tokens) { + var stackLength = this._stack.length + + for (var i = 0; i < stackLength; i++) { + var fn = this._stack[i] + var memo = [] + + for (var j = 0; j < tokens.length; j++) { + var result = fn(tokens[j], j, tokens) + + if (result === null || result === void 0 || result === '') continue + + if (Array.isArray(result)) { + for (var k = 0; k < result.length; k++) { + memo.push(result[k]) + } + } else { + memo.push(result) + } + } + + tokens = memo + } + + return tokens + } + + /** + * Convenience method for passing a string through a pipeline and getting + * strings out. This method takes care of wrapping the passed string in a + * token and mapping the resulting tokens back to strings. + * + * @param {string} str - The string to pass through the pipeline. + * @param {?object} metadata - Optional metadata to associate with the token + * passed to the pipeline. + * @returns {string[]} + */ + lunr.Pipeline.prototype.runString = function (str, metadata) { + var token = new lunr.Token (str, metadata) + + return this.run([token]).map(function (t) { + return t.toString() + }) + } + + /** + * Resets the pipeline by removing any existing processors. + * + */ + lunr.Pipeline.prototype.reset = function () { + this._stack = [] + } + + /** + * Returns a representation of the pipeline ready for serialisation. + * + * Logs a warning if the function has not been registered. + * + * @returns {Array} + */ + lunr.Pipeline.prototype.toJSON = function () { + return this._stack.map(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + + return fn.label + }) + } + /*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ + + /** + * A vector is used to construct the vector space of documents and queries. These + * vectors support operations to determine the similarity between two documents or + * a document and a query. + * + * Normally no parameters are required for initializing a vector, but in the case of + * loading a previously dumped vector the raw elements can be provided to the constructor. + * + * For performance reasons vectors are implemented with a flat array, where an elements + * index is immediately followed by its value. E.g. [index, value, index, value]. This + * allows the underlying array to be as sparse as possible and still offer decent + * performance when being used for vector calculations. + * + * @constructor + * @param {Number[]} [elements] - The flat list of element index and element value pairs. + */ + lunr.Vector = function (elements) { + this._magnitude = 0 + this.elements = elements || [] + } + + + /** + * Calculates the position within the vector to insert a given index. + * + * This is used internally by insert and upsert. If there are duplicate indexes then + * the position is returned as if the value for that index were to be updated, but it + * is the callers responsibility to check whether there is a duplicate at that index + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @returns {Number} + */ + lunr.Vector.prototype.positionForIndex = function (index) { + // For an empty vector the tuple can be inserted at the beginning + if (this.elements.length == 0) { + return 0 + } + + var start = 0, + end = this.elements.length / 2, + sliceLength = end - start, + pivotPoint = Math.floor(sliceLength / 2), + pivotIndex = this.elements[pivotPoint * 2] + + while (sliceLength > 1) { + if (pivotIndex < index) { + start = pivotPoint + } + + if (pivotIndex > index) { + end = pivotPoint + } + + if (pivotIndex == index) { + break + } + + sliceLength = end - start + pivotPoint = start + Math.floor(sliceLength / 2) + pivotIndex = this.elements[pivotPoint * 2] + } + + if (pivotIndex == index) { + return pivotPoint * 2 + } + + if (pivotIndex > index) { + return pivotPoint * 2 + } + + if (pivotIndex < index) { + return (pivotPoint + 1) * 2 + } + } + + /** + * Inserts an element at an index within the vector. + * + * Does not allow duplicates, will throw an error if there is already an entry + * for this index. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + */ + lunr.Vector.prototype.insert = function (insertIdx, val) { + this.upsert(insertIdx, val, function () { + throw "duplicate index" + }) + } + + /** + * Inserts or updates an existing index within the vector. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + * @param {function} fn - A function that is called for updates, the existing value and the + * requested value are passed as arguments + */ + lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { + this._magnitude = 0 + var position = this.positionForIndex(insertIdx) + + if (this.elements[position] == insertIdx) { + this.elements[position + 1] = fn(this.elements[position + 1], val) + } else { + this.elements.splice(position, 0, insertIdx, val) + } + } + + /** + * Calculates the magnitude of this vector. + * + * @returns {Number} + */ + lunr.Vector.prototype.magnitude = function () { + if (this._magnitude) return this._magnitude + + var sumOfSquares = 0, + elementsLength = this.elements.length + + for (var i = 1; i < elementsLength; i += 2) { + var val = this.elements[i] + sumOfSquares += val * val + } + + return this._magnitude = Math.sqrt(sumOfSquares) + } + + /** + * Calculates the dot product of this vector and another vector. + * + * @param {lunr.Vector} otherVector - The vector to compute the dot product with. + * @returns {Number} + */ + lunr.Vector.prototype.dot = function (otherVector) { + var dotProduct = 0, + a = this.elements, b = otherVector.elements, + aLen = a.length, bLen = b.length, + aVal = 0, bVal = 0, + i = 0, j = 0 + + while (i < aLen && j < bLen) { + aVal = a[i], bVal = b[j] + if (aVal < bVal) { + i += 2 + } else if (aVal > bVal) { + j += 2 + } else if (aVal == bVal) { + dotProduct += a[i + 1] * b[j + 1] + i += 2 + j += 2 + } + } + + return dotProduct + } + + /** + * Calculates the similarity between this vector and another vector. + * + * @param {lunr.Vector} otherVector - The other vector to calculate the + * similarity with. + * @returns {Number} + */ + lunr.Vector.prototype.similarity = function (otherVector) { + return this.dot(otherVector) / this.magnitude() || 0 + } + + /** + * Converts the vector to an array of the elements within the vector. + * + * @returns {Number[]} + */ + lunr.Vector.prototype.toArray = function () { + var output = new Array (this.elements.length / 2) + + for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { + output[j] = this.elements[i] + } + + return output + } + + /** + * A JSON serializable representation of the vector. + * + * @returns {Number[]} + */ + lunr.Vector.prototype.toJSON = function () { + return this.elements + } + /* eslint-disable */ + /*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + + /** + * lunr.stemmer is an english language stemmer, this is a JavaScript + * implementation of the PorterStemmer taken from http://tartarus.org/~martin + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token - The string to stem + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + * @function + */ + lunr.stemmer = (function(){ + var step2list = { + "ational" : "ate", + "tional" : "tion", + "enci" : "ence", + "anci" : "ance", + "izer" : "ize", + "bli" : "ble", + "alli" : "al", + "entli" : "ent", + "eli" : "e", + "ousli" : "ous", + "ization" : "ize", + "ation" : "ate", + "ator" : "ate", + "alism" : "al", + "iveness" : "ive", + "fulness" : "ful", + "ousness" : "ous", + "aliti" : "al", + "iviti" : "ive", + "biliti" : "ble", + "logi" : "log" + }, + + step3list = { + "icate" : "ic", + "ative" : "", + "alize" : "al", + "iciti" : "ic", + "ical" : "ic", + "ful" : "", + "ness" : "" + }, + + c = "[^aeiou]", // consonant + v = "[aeiouy]", // vowel + C = c + "[^aeiouy]*", // consonant sequence + V = v + "[aeiou]*", // vowel sequence + + mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 + meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 + mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 + s_v = "^(" + C + ")?" + v; // vowel in stem + + var re_mgr0 = new RegExp(mgr0); + var re_mgr1 = new RegExp(mgr1); + var re_meq1 = new RegExp(meq1); + var re_s_v = new RegExp(s_v); + + var re_1a = /^(.+?)(ss|i)es$/; + var re2_1a = /^(.+?)([^s])s$/; + var re_1b = /^(.+?)eed$/; + var re2_1b = /^(.+?)(ed|ing)$/; + var re_1b_2 = /.$/; + var re2_1b_2 = /(at|bl|iz)$/; + var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); + var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var re_1c = /^(.+?[^aeiou])y$/; + var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + + var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + + var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + var re2_4 = /^(.+?)(s|t)(ion)$/; + + var re_5 = /^(.+?)e$/; + var re_5_1 = /ll$/; + var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var porterStemmer = function porterStemmer(w) { + var stem, + suffix, + firstch, + re, + re2, + re3, + re4; + + if (w.length < 3) { return w; } + + firstch = w.substr(0,1); + if (firstch == "y") { + w = firstch.toUpperCase() + w.substr(1); + } + + // Step 1a + re = re_1a + re2 = re2_1a; + + if (re.test(w)) { w = w.replace(re,"$1$2"); } + else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } + + // Step 1b + re = re_1b; + re2 = re2_1b; + if (re.test(w)) { + var fp = re.exec(w); + re = re_mgr0; + if (re.test(fp[1])) { + re = re_1b_2; + w = w.replace(re,""); + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = re_s_v; + if (re2.test(stem)) { + w = stem; + re2 = re2_1b_2; + re3 = re3_1b_2; + re4 = re4_1b_2; + if (re2.test(w)) { w = w + "e"; } + else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } + else if (re4.test(w)) { w = w + "e"; } + } + } + + // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) + re = re_1c; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem + "i"; + } + + // Step 2 + re = re_2; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step2list[suffix]; + } + } + + // Step 3 + re = re_3; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step3list[suffix]; + } + } + + // Step 4 + re = re_4; + re2 = re2_4; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + if (re.test(stem)) { + w = stem; + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = re_mgr1; + if (re2.test(stem)) { + w = stem; + } + } + + // Step 5 + re = re_5; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + re2 = re_meq1; + re3 = re3_5; + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { + w = stem; + } + } + + re = re_5_1; + re2 = re_mgr1; + if (re.test(w) && re2.test(w)) { + re = re_1b_2; + w = w.replace(re,""); + } + + // and turn initial Y back to y + + if (firstch == "y") { + w = firstch.toLowerCase() + w.substr(1); + } + + return w; + }; + + return function (token) { + return token.update(porterStemmer); + } + })(); + + lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') + /*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ + + /** + * lunr.generateStopWordFilter builds a stopWordFilter function from the provided + * list of stop words. + * + * The built in lunr.stopWordFilter is built using this generator and can be used + * to generate custom stopWordFilters for applications or non English languages. + * + * @function + * @param {Array} token The token to pass through the filter + * @returns {lunr.PipelineFunction} + * @see lunr.Pipeline + * @see lunr.stopWordFilter + */ + lunr.generateStopWordFilter = function (stopWords) { + var words = stopWords.reduce(function (memo, stopWord) { + memo[stopWord] = stopWord + return memo + }, {}) + + return function (token) { + if (token && words[token.toString()] !== token.toString()) return token + } + } + + /** + * lunr.stopWordFilter is an English language stop word list filter, any words + * contained in the list will not be passed through the filter. + * + * This is intended to be used in the Pipeline. If the token does not pass the + * filter then undefined will be returned. + * + * @function + * @implements {lunr.PipelineFunction} + * @params {lunr.Token} token - A token to check for being a stop word. + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + */ + lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'all', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'any', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'do', + 'does', + 'either', + 'else', + 'ever', + 'every', + 'for', + 'from', + 'get', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'in', + 'into', + 'is', + 'it', + 'its', + 'just', + 'least', + 'let', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'only', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'where', + 'which', + 'while', + 'who', + 'whom', + 'why', + 'will', + 'with', + 'would', + 'yet', + 'you', + 'your' + ]) + + lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') + /*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ + + /** + * lunr.trimmer is a pipeline function for trimming non word + * characters from the beginning and end of tokens before they + * enter the index. + * + * This implementation may not work correctly for non latin + * characters and should either be removed or adapted for use + * with languages with non-latin characters. + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token The token to pass through the filter + * @returns {lunr.Token} + * @see lunr.Pipeline + */ + lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^\W+/, '').replace(/\W+$/, '') + }) + } + + lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') + /*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ + + /** + * A token set is used to store the unique list of all tokens + * within an index. Token sets are also used to represent an + * incoming query to the index, this query token set and index + * token set are then intersected to find which tokens to look + * up in the inverted index. + * + * A token set can hold multiple tokens, as in the case of the + * index token set, or it can hold a single token as in the + * case of a simple query token set. + * + * Additionally token sets are used to perform wildcard matching. + * Leading, contained and trailing wildcards are supported, and + * from this edit distance matching can also be provided. + * + * Token sets are implemented as a minimal finite state automata, + * where both common prefixes and suffixes are shared between tokens. + * This helps to reduce the space used for storing the token set. + * + * @constructor + */ + lunr.TokenSet = function () { + this.final = false + this.edges = {} + this.id = lunr.TokenSet._nextId + lunr.TokenSet._nextId += 1 + } + + /** + * Keeps track of the next, auto increment, identifier to assign + * to a new tokenSet. + * + * TokenSets require a unique identifier to be correctly minimised. + * + * @private + */ + lunr.TokenSet._nextId = 1 + + /** + * Creates a TokenSet instance from the given sorted array of words. + * + * @param {String[]} arr - A sorted array of strings to create the set from. + * @returns {lunr.TokenSet} + * @throws Will throw an error if the input array is not sorted. + */ + lunr.TokenSet.fromArray = function (arr) { + var builder = new lunr.TokenSet.Builder + + for (var i = 0, len = arr.length; i < len; i++) { + builder.insert(arr[i]) + } + + builder.finish() + return builder.root + } + + /** + * Creates a token set from a query clause. + * + * @private + * @param {Object} clause - A single clause from lunr.Query. + * @param {string} clause.term - The query clause term. + * @param {number} [clause.editDistance] - The optional edit distance for the term. + * @returns {lunr.TokenSet} + */ + lunr.TokenSet.fromClause = function (clause) { + if ('editDistance' in clause) { + return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) + } else { + return lunr.TokenSet.fromString(clause.term) + } + } + + /** + * Creates a token set representing a single string with a specified + * edit distance. + * + * Insertions, deletions, substitutions and transpositions are each + * treated as an edit distance of 1. + * + * Increasing the allowed edit distance will have a dramatic impact + * on the performance of both creating and intersecting these TokenSets. + * It is advised to keep the edit distance less than 3. + * + * @param {string} str - The string to create the token set from. + * @param {number} editDistance - The allowed edit distance to match. + * @returns {lunr.Vector} + */ + lunr.TokenSet.fromFuzzyString = function (str, editDistance) { + var root = new lunr.TokenSet + + var stack = [{ + node: root, + editsRemaining: editDistance, + str: str + }] + + while (stack.length) { + var frame = stack.pop() + + // no edit + if (frame.str.length > 0) { + var char = frame.str.charAt(0), + noEditNode + + if (char in frame.node.edges) { + noEditNode = frame.node.edges[char] + } else { + noEditNode = new lunr.TokenSet + frame.node.edges[char] = noEditNode + } + + if (frame.str.length == 1) { + noEditNode.final = true + } + + stack.push({ + node: noEditNode, + editsRemaining: frame.editsRemaining, + str: frame.str.slice(1) + }) + } + + if (frame.editsRemaining == 0) { + continue + } + + // insertion + if ("*" in frame.node.edges) { + var insertionNode = frame.node.edges["*"] + } else { + var insertionNode = new lunr.TokenSet + frame.node.edges["*"] = insertionNode + } + + if (frame.str.length == 0) { + insertionNode.final = true + } + + stack.push({ + node: insertionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str + }) + + // deletion + // can only do a deletion if we have enough edits remaining + // and if there are characters left to delete in the string + if (frame.str.length > 1) { + stack.push({ + node: frame.node, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // deletion + // just removing the last character from the str + if (frame.str.length == 1) { + frame.node.final = true + } + + // substitution + // can only do a substitution if we have enough edits remaining + // and if there are characters left to substitute + if (frame.str.length >= 1) { + if ("*" in frame.node.edges) { + var substitutionNode = frame.node.edges["*"] + } else { + var substitutionNode = new lunr.TokenSet + frame.node.edges["*"] = substitutionNode + } + + if (frame.str.length == 1) { + substitutionNode.final = true + } + + stack.push({ + node: substitutionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // transposition + // can only do a transposition if there are edits remaining + // and there are enough characters to transpose + if (frame.str.length > 1) { + var charA = frame.str.charAt(0), + charB = frame.str.charAt(1), + transposeNode + + if (charB in frame.node.edges) { + transposeNode = frame.node.edges[charB] + } else { + transposeNode = new lunr.TokenSet + frame.node.edges[charB] = transposeNode + } + + if (frame.str.length == 1) { + transposeNode.final = true + } + + stack.push({ + node: transposeNode, + editsRemaining: frame.editsRemaining - 1, + str: charA + frame.str.slice(2) + }) + } + } + + return root + } + + /** + * Creates a TokenSet from a string. + * + * The string may contain one or more wildcard characters (*) + * that will allow wildcard matching when intersecting with + * another TokenSet. + * + * @param {string} str - The string to create a TokenSet from. + * @returns {lunr.TokenSet} + */ + lunr.TokenSet.fromString = function (str) { + var node = new lunr.TokenSet, + root = node + + /* + * Iterates through all characters within the passed string + * appending a node for each character. + * + * When a wildcard character is found then a self + * referencing edge is introduced to continually match + * any number of any characters. + */ + for (var i = 0, len = str.length; i < len; i++) { + var char = str[i], + final = (i == len - 1) + + if (char == "*") { + node.edges[char] = node + node.final = final + + } else { + var next = new lunr.TokenSet + next.final = final + + node.edges[char] = next + node = next + } + } + + return root + } + + /** + * Converts this TokenSet into an array of strings + * contained within the TokenSet. + * + * This is not intended to be used on a TokenSet that + * contains wildcards, in these cases the results are + * undefined and are likely to cause an infinite loop. + * + * @returns {string[]} + */ + lunr.TokenSet.prototype.toArray = function () { + var words = [] + + var stack = [{ + prefix: "", + node: this + }] + + while (stack.length) { + var frame = stack.pop(), + edges = Object.keys(frame.node.edges), + len = edges.length + + if (frame.node.final) { + /* In Safari, at this point the prefix is sometimes corrupted, see: + * https://github.com/olivernn/lunr.js/issues/279 Calling any + * String.prototype method forces Safari to "cast" this string to what + * it's supposed to be, fixing the bug. */ + frame.prefix.charAt(0) + words.push(frame.prefix) + } + + for (var i = 0; i < len; i++) { + var edge = edges[i] + + stack.push({ + prefix: frame.prefix.concat(edge), + node: frame.node.edges[edge] + }) + } + } + + return words + } + + /** + * Generates a string representation of a TokenSet. + * + * This is intended to allow TokenSets to be used as keys + * in objects, largely to aid the construction and minimisation + * of a TokenSet. As such it is not designed to be a human + * friendly representation of the TokenSet. + * + * @returns {string} + */ + lunr.TokenSet.prototype.toString = function () { + // NOTE: Using Object.keys here as this.edges is very likely + // to enter 'hash-mode' with many keys being added + // + // avoiding a for-in loop here as it leads to the function + // being de-optimised (at least in V8). From some simple + // benchmarks the performance is comparable, but allowing + // V8 to optimize may mean easy performance wins in the future. + + if (this._str) { + return this._str + } + + var str = this.final ? '1' : '0', + labels = Object.keys(this.edges).sort(), + len = labels.length + + for (var i = 0; i < len; i++) { + var label = labels[i], + node = this.edges[label] + + str = str + label + node.id + } + + return str + } + + /** + * Returns a new TokenSet that is the intersection of + * this TokenSet and the passed TokenSet. + * + * This intersection will take into account any wildcards + * contained within the TokenSet. + * + * @param {lunr.TokenSet} b - An other TokenSet to intersect with. + * @returns {lunr.TokenSet} + */ + lunr.TokenSet.prototype.intersect = function (b) { + var output = new lunr.TokenSet, + frame = undefined + + var stack = [{ + qNode: b, + output: output, + node: this + }] + + while (stack.length) { + frame = stack.pop() + + // NOTE: As with the #toString method, we are using + // Object.keys and a for loop instead of a for-in loop + // as both of these objects enter 'hash' mode, causing + // the function to be de-optimised in V8 + var qEdges = Object.keys(frame.qNode.edges), + qLen = qEdges.length, + nEdges = Object.keys(frame.node.edges), + nLen = nEdges.length + + for (var q = 0; q < qLen; q++) { + var qEdge = qEdges[q] + + for (var n = 0; n < nLen; n++) { + var nEdge = nEdges[n] + + if (nEdge == qEdge || qEdge == '*') { + var node = frame.node.edges[nEdge], + qNode = frame.qNode.edges[qEdge], + final = node.final && qNode.final, + next = undefined + + if (nEdge in frame.output.edges) { + // an edge already exists for this character + // no need to create a new node, just set the finality + // bit unless this node is already final + next = frame.output.edges[nEdge] + next.final = next.final || final + + } else { + // no edge exists yet, must create one + // set the finality bit and insert it + // into the output + next = new lunr.TokenSet + next.final = final + frame.output.edges[nEdge] = next + } + + stack.push({ + qNode: qNode, + output: next, + node: node + }) + } + } + } + } + + return output + } + lunr.TokenSet.Builder = function () { + this.previousWord = "" + this.root = new lunr.TokenSet + this.uncheckedNodes = [] + this.minimizedNodes = {} + } + + lunr.TokenSet.Builder.prototype.insert = function (word) { + var node, + commonPrefix = 0 + + if (word < this.previousWord) { + throw new Error ("Out of order word insertion") + } + + for (var i = 0; i < word.length && i < this.previousWord.length; i++) { + if (word[i] != this.previousWord[i]) break + commonPrefix++ + } + + this.minimize(commonPrefix) + + if (this.uncheckedNodes.length == 0) { + node = this.root + } else { + node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child + } + + for (var i = commonPrefix; i < word.length; i++) { + var nextNode = new lunr.TokenSet, + char = word[i] + + node.edges[char] = nextNode + + this.uncheckedNodes.push({ + parent: node, + char: char, + child: nextNode + }) + + node = nextNode + } + + node.final = true + this.previousWord = word + } + + lunr.TokenSet.Builder.prototype.finish = function () { + this.minimize(0) + } + + lunr.TokenSet.Builder.prototype.minimize = function (downTo) { + for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { + var node = this.uncheckedNodes[i], + childKey = node.child.toString() + + if (childKey in this.minimizedNodes) { + node.parent.edges[node.char] = this.minimizedNodes[childKey] + } else { + // Cache the key for this node since + // we know it can't change anymore + node.child._str = childKey + + this.minimizedNodes[childKey] = node.child + } + + this.uncheckedNodes.pop() + } + } + /*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ + + /** + * An index contains the built index of all documents and provides a query interface + * to the index. + * + * Usually instances of lunr.Index will not be created using this constructor, instead + * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be + * used to load previously built and serialized indexes. + * + * @constructor + * @param {Object} attrs - The attributes of the built search index. + * @param {Object} attrs.invertedIndex - An index of term/field to document reference. + * @param {Object} attrs.fieldVectors - Field vectors + * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. + * @param {string[]} attrs.fields - The names of indexed document fields. + * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. + */ + lunr.Index = function (attrs) { + this.invertedIndex = attrs.invertedIndex + this.fieldVectors = attrs.fieldVectors + this.tokenSet = attrs.tokenSet + this.fields = attrs.fields + this.pipeline = attrs.pipeline + } + + /** + * A result contains details of a document matching a search query. + * @typedef {Object} lunr.Index~Result + * @property {string} ref - The reference of the document this result represents. + * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. + * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. + */ + + /** + * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple + * query language which itself is parsed into an instance of lunr.Query. + * + * For programmatically building queries it is advised to directly use lunr.Query, the query language + * is best used for human entered text rather than program generated text. + * + * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported + * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' + * or 'world', though those that contain both will rank higher in the results. + * + * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can + * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding + * wildcards will increase the number of documents that will be found but can also have a negative + * impact on query performance, especially with wildcards at the beginning of a term. + * + * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term + * hello in the title field will match this query. Using a field not present in the index will lead + * to an error being thrown. + * + * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term + * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported + * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. + * Avoid large values for edit distance to improve query performance. + * + * Each term also supports a presence modifier. By default a term's presence in document is optional, however + * this can be changed to either required or prohibited. For a term's presence to be required in a document the + * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and + * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not + * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'. + * + * To escape special characters the backslash character '\' can be used, this allows searches to include + * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead + * of attempting to apply a boost of 2 to the search term "foo". + * + * @typedef {string} lunr.Index~QueryString + * @example Simple single term query + * hello + * @example Multiple term query + * hello world + * @example term scoped to a field + * title:hello + * @example term with a boost of 10 + * hello^10 + * @example term with an edit distance of 2 + * hello~2 + * @example terms with presence modifiers + * -foo +bar baz + */ + + /** + * Performs a search against the index using lunr query syntax. + * + * Results will be returned sorted by their score, the most relevant results + * will be returned first. For details on how the score is calculated, please see + * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}. + * + * For more programmatic querying use lunr.Index#query. + * + * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. + * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. + * @returns {lunr.Index~Result[]} + */ + lunr.Index.prototype.search = function (queryString) { + return this.query(function (query) { + var parser = new lunr.QueryParser(queryString, query) + parser.parse() + }) + } + + /** + * A query builder callback provides a query object to be used to express + * the query to perform on the index. + * + * @callback lunr.Index~queryBuilder + * @param {lunr.Query} query - The query object to build up. + * @this lunr.Query + */ + + /** + * Performs a query against the index using the yielded lunr.Query object. + * + * If performing programmatic queries against the index, this method is preferred + * over lunr.Index#search so as to avoid the additional query parsing overhead. + * + * A query object is yielded to the supplied function which should be used to + * express the query to be run against the index. + * + * Note that although this function takes a callback parameter it is _not_ an + * asynchronous operation, the callback is just yielded a query object to be + * customized. + * + * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. + * @returns {lunr.Index~Result[]} + */ + lunr.Index.prototype.query = function (fn) { + // for each query clause + // * process terms + // * expand terms from token set + // * find matching documents and metadata + // * get document vectors + // * score documents + + var query = new lunr.Query(this.fields), + matchingFields = Object.create(null), + queryVectors = Object.create(null), + termFieldCache = Object.create(null), + requiredMatches = Object.create(null), + prohibitedMatches = Object.create(null) + + /* + * To support field level boosts a query vector is created per + * field. An empty vector is eagerly created to support negated + * queries. + */ + for (var i = 0; i < this.fields.length; i++) { + queryVectors[this.fields[i]] = new lunr.Vector + } + + fn.call(query, query) + + for (var i = 0; i < query.clauses.length; i++) { + /* + * Unless the pipeline has been disabled for this term, which is + * the case for terms with wildcards, we need to pass the clause + * term through the search pipeline. A pipeline returns an array + * of processed terms. Pipeline functions may expand the passed + * term, which means we may end up performing multiple index lookups + * for a single query term. + */ + var clause = query.clauses[i], + terms = null, + clauseMatches = lunr.Set.empty + + if (clause.usePipeline) { + terms = this.pipeline.runString(clause.term, { + fields: clause.fields + }) + } else { + terms = [clause.term] + } + + for (var m = 0; m < terms.length; m++) { + var term = terms[m] + + /* + * Each term returned from the pipeline needs to use the same query + * clause object, e.g. the same boost and or edit distance. The + * simplest way to do this is to re-use the clause object but mutate + * its term property. + */ + clause.term = term + + /* + * From the term in the clause we create a token set which will then + * be used to intersect the indexes token set to get a list of terms + * to lookup in the inverted index + */ + var termTokenSet = lunr.TokenSet.fromClause(clause), + expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() + + /* + * If a term marked as required does not exist in the tokenSet it is + * impossible for the search to return any matches. We set all the field + * scoped required matches set to empty and stop examining any further + * clauses. + */ + if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = lunr.Set.empty + } + + break + } + + for (var j = 0; j < expandedTerms.length; j++) { + /* + * For each term get the posting and termIndex, this is required for + * building the query vector. + */ + var expandedTerm = expandedTerms[j], + posting = this.invertedIndex[expandedTerm], + termIndex = posting._index + + for (var k = 0; k < clause.fields.length; k++) { + /* + * For each field that this query term is scoped by (by default + * all fields are in scope) we need to get all the document refs + * that have this term in that field. + * + * The posting is the entry in the invertedIndex for the matching + * term from above. + */ + var field = clause.fields[k], + fieldPosting = posting[field], + matchingDocumentRefs = Object.keys(fieldPosting), + termField = expandedTerm + "/" + field, + matchingDocumentsSet = new lunr.Set(matchingDocumentRefs) + + /* + * if the presence of this term is required ensure that the matching + * documents are added to the set of required matches for this clause. + * + */ + if (clause.presence == lunr.Query.presence.REQUIRED) { + clauseMatches = clauseMatches.union(matchingDocumentsSet) + + if (requiredMatches[field] === undefined) { + requiredMatches[field] = lunr.Set.complete + } + } + + /* + * if the presence of this term is prohibited ensure that the matching + * documents are added to the set of prohibited matches for this field, + * creating that set if it does not yet exist. + */ + if (clause.presence == lunr.Query.presence.PROHIBITED) { + if (prohibitedMatches[field] === undefined) { + prohibitedMatches[field] = lunr.Set.empty + } + + prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet) + + /* + * Prohibited matches should not be part of the query vector used for + * similarity scoring and no metadata should be extracted so we continue + * to the next field + */ + continue + } + + /* + * The query field vector is populated using the termIndex found for + * the term and a unit value with the appropriate boost applied. + * Using upsert because there could already be an entry in the vector + * for the term we are working with. In that case we just add the scores + * together. + */ + queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b }) + + /** + * If we've already seen this term, field combo then we've already collected + * the matching documents and metadata, no need to go through all that again + */ + if (termFieldCache[termField]) { + continue + } + + for (var l = 0; l < matchingDocumentRefs.length; l++) { + /* + * All metadata for this term/field/document triple + * are then extracted and collected into an instance + * of lunr.MatchData ready to be returned in the query + * results + */ + var matchingDocumentRef = matchingDocumentRefs[l], + matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), + metadata = fieldPosting[matchingDocumentRef], + fieldMatch + + if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) { + matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata) + } else { + fieldMatch.add(expandedTerm, field, metadata) + } + + } + + termFieldCache[termField] = true + } + } + } + + /** + * If the presence was required we need to update the requiredMatches field sets. + * We do this after all fields for the term have collected their matches because + * the clause terms presence is required in _any_ of the fields not _all_ of the + * fields. + */ + if (clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = requiredMatches[field].intersect(clauseMatches) + } + } + } + + /** + * Need to combine the field scoped required and prohibited + * matching documents into a global set of required and prohibited + * matches + */ + var allRequiredMatches = lunr.Set.complete, + allProhibitedMatches = lunr.Set.empty + + for (var i = 0; i < this.fields.length; i++) { + var field = this.fields[i] + + if (requiredMatches[field]) { + allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field]) + } + + if (prohibitedMatches[field]) { + allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field]) + } + } + + var matchingFieldRefs = Object.keys(matchingFields), + results = [], + matches = Object.create(null) + + /* + * If the query is negated (contains only prohibited terms) + * we need to get _all_ fieldRefs currently existing in the + * index. This is only done when we know that the query is + * entirely prohibited terms to avoid any cost of getting all + * fieldRefs unnecessarily. + * + * Additionally, blank MatchData must be created to correctly + * populate the results. + */ + if (query.isNegated()) { + matchingFieldRefs = Object.keys(this.fieldVectors) + + for (var i = 0; i < matchingFieldRefs.length; i++) { + var matchingFieldRef = matchingFieldRefs[i] + var fieldRef = lunr.FieldRef.fromString(matchingFieldRef) + matchingFields[matchingFieldRef] = new lunr.MatchData + } + } + + for (var i = 0; i < matchingFieldRefs.length; i++) { + /* + * Currently we have document fields that match the query, but we + * need to return documents. The matchData and scores are combined + * from multiple fields belonging to the same document. + * + * Scores are calculated by field, using the query vectors created + * above, and combined into a final document score using addition. + */ + var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), + docRef = fieldRef.docRef + + if (!allRequiredMatches.contains(docRef)) { + continue + } + + if (allProhibitedMatches.contains(docRef)) { + continue + } + + var fieldVector = this.fieldVectors[fieldRef], + score = queryVectors[fieldRef.fieldName].similarity(fieldVector), + docMatch + + if ((docMatch = matches[docRef]) !== undefined) { + docMatch.score += score + docMatch.matchData.combine(matchingFields[fieldRef]) + } else { + var match = { + ref: docRef, + score: score, + matchData: matchingFields[fieldRef] + } + matches[docRef] = match + results.push(match) + } + } + + /* + * Sort the results objects by score, highest first. + */ + return results.sort(function (a, b) { + return b.score - a.score + }) + } + + /** + * Prepares the index for JSON serialization. + * + * The schema for this JSON blob will be described in a + * separate JSON schema file. + * + * @returns {Object} + */ + lunr.Index.prototype.toJSON = function () { + var invertedIndex = Object.keys(this.invertedIndex) + .sort() + .map(function (term) { + return [term, this.invertedIndex[term]] + }, this) + + var fieldVectors = Object.keys(this.fieldVectors) + .map(function (ref) { + return [ref, this.fieldVectors[ref].toJSON()] + }, this) + + return { + version: lunr.version, + fields: this.fields, + fieldVectors: fieldVectors, + invertedIndex: invertedIndex, + pipeline: this.pipeline.toJSON() + } + } + + /** + * Loads a previously serialized lunr.Index + * + * @param {Object} serializedIndex - A previously serialized lunr.Index + * @returns {lunr.Index} + */ + lunr.Index.load = function (serializedIndex) { + var attrs = {}, + fieldVectors = {}, + serializedVectors = serializedIndex.fieldVectors, + invertedIndex = Object.create(null), + serializedInvertedIndex = serializedIndex.invertedIndex, + tokenSetBuilder = new lunr.TokenSet.Builder, + pipeline = lunr.Pipeline.load(serializedIndex.pipeline) + + if (serializedIndex.version != lunr.version) { + lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") + } + + for (var i = 0; i < serializedVectors.length; i++) { + var tuple = serializedVectors[i], + ref = tuple[0], + elements = tuple[1] + + fieldVectors[ref] = new lunr.Vector(elements) + } + + for (var i = 0; i < serializedInvertedIndex.length; i++) { + var tuple = serializedInvertedIndex[i], + term = tuple[0], + posting = tuple[1] + + tokenSetBuilder.insert(term) + invertedIndex[term] = posting + } + + tokenSetBuilder.finish() + + attrs.fields = serializedIndex.fields + + attrs.fieldVectors = fieldVectors + attrs.invertedIndex = invertedIndex + attrs.tokenSet = tokenSetBuilder.root + attrs.pipeline = pipeline + + return new lunr.Index(attrs) + } + /*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ + + /** + * lunr.Builder performs indexing on a set of documents and + * returns instances of lunr.Index ready for querying. + * + * All configuration of the index is done via the builder, the + * fields to index, the document reference, the text processing + * pipeline and document scoring parameters are all set on the + * builder before indexing. + * + * @constructor + * @property {string} _ref - Internal reference to the document reference field. + * @property {string[]} _fields - Internal reference to the document fields to index. + * @property {object} invertedIndex - The inverted index maps terms to document fields. + * @property {object} documentTermFrequencies - Keeps track of document term frequencies. + * @property {object} documentLengths - Keeps track of the length of documents added to the index. + * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. + * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. + * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. + * @property {number} documentCount - Keeps track of the total number of documents indexed. + * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. + * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. + * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. + * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. + */ + lunr.Builder = function () { + this._ref = "id" + this._fields = Object.create(null) + this._documents = Object.create(null) + this.invertedIndex = Object.create(null) + this.fieldTermFrequencies = {} + this.fieldLengths = {} + this.tokenizer = lunr.tokenizer + this.pipeline = new lunr.Pipeline + this.searchPipeline = new lunr.Pipeline + this.documentCount = 0 + this._b = 0.75 + this._k1 = 1.2 + this.termIndex = 0 + this.metadataWhitelist = [] + } + + /** + * Sets the document field used as the document reference. Every document must have this field. + * The type of this field in the document should be a string, if it is not a string it will be + * coerced into a string by calling toString. + * + * The default ref is 'id'. + * + * The ref should _not_ be changed during indexing, it should be set before any documents are + * added to the index. Changing it during indexing can lead to inconsistent results. + * + * @param {string} ref - The name of the reference field in the document. + */ + lunr.Builder.prototype.ref = function (ref) { + this._ref = ref + } + + /** + * A function that is used to extract a field from a document. + * + * Lunr expects a field to be at the top level of a document, if however the field + * is deeply nested within a document an extractor function can be used to extract + * the right field for indexing. + * + * @callback fieldExtractor + * @param {object} doc - The document being added to the index. + * @returns {?(string|object|object[])} obj - The object that will be indexed for this field. + * @example Extracting a nested field + * function (doc) { return doc.nested.field } + */ + + /** + * Adds a field to the list of document fields that will be indexed. Every document being + * indexed should have this field. Null values for this field in indexed documents will + * not cause errors but will limit the chance of that document being retrieved by searches. + * + * All fields should be added before adding documents to the index. Adding fields after + * a document has been indexed will have no effect on already indexed documents. + * + * Fields can be boosted at build time. This allows terms within that field to have more + * importance when ranking search results. Use a field boost to specify that matches within + * one field are more important than other fields. + * + * @param {string} fieldName - The name of a field to index in all documents. + * @param {object} attributes - Optional attributes associated with this field. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this field. + * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document. + * @throws {RangeError} fieldName cannot contain unsupported characters '/' + */ + lunr.Builder.prototype.field = function (fieldName, attributes) { + if (/\//.test(fieldName)) { + throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'") + } + + this._fields[fieldName] = attributes || {} + } + + /** + * A parameter to tune the amount of field length normalisation that is applied when + * calculating relevance scores. A value of 0 will completely disable any normalisation + * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b + * will be clamped to the range 0 - 1. + * + * @param {number} number - The value to set for this tuning parameter. + */ + lunr.Builder.prototype.b = function (number) { + if (number < 0) { + this._b = 0 + } else if (number > 1) { + this._b = 1 + } else { + this._b = number + } + } + + /** + * A parameter that controls the speed at which a rise in term frequency results in term + * frequency saturation. The default value is 1.2. Setting this to a higher value will give + * slower saturation levels, a lower value will result in quicker saturation. + * + * @param {number} number - The value to set for this tuning parameter. + */ + lunr.Builder.prototype.k1 = function (number) { + this._k1 = number + } + + /** + * Adds a document to the index. + * + * Before adding fields to the index the index should have been fully setup, with the document + * ref and all fields to index already having been specified. + * + * The document must have a field name as specified by the ref (by default this is 'id') and + * it should have all fields defined for indexing, though null or undefined values will not + * cause errors. + * + * Entire documents can be boosted at build time. Applying a boost to a document indicates that + * this document should rank higher in search results than other documents. + * + * @param {object} doc - The document to add to the index. + * @param {object} attributes - Optional attributes associated with this document. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this document. + */ + lunr.Builder.prototype.add = function (doc, attributes) { + var docRef = doc[this._ref], + fields = Object.keys(this._fields) + + this._documents[docRef] = attributes || {} + this.documentCount += 1 + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i], + extractor = this._fields[fieldName].extractor, + field = extractor ? extractor(doc) : doc[fieldName], + tokens = this.tokenizer(field, { + fields: [fieldName] + }), + terms = this.pipeline.run(tokens), + fieldRef = new lunr.FieldRef (docRef, fieldName), + fieldTerms = Object.create(null) + + this.fieldTermFrequencies[fieldRef] = fieldTerms + this.fieldLengths[fieldRef] = 0 + + // store the length of this field for this document + this.fieldLengths[fieldRef] += terms.length + + // calculate term frequencies for this field + for (var j = 0; j < terms.length; j++) { + var term = terms[j] + + if (fieldTerms[term] == undefined) { + fieldTerms[term] = 0 + } + + fieldTerms[term] += 1 + + // add to inverted index + // create an initial posting if one doesn't exist + if (this.invertedIndex[term] == undefined) { + var posting = Object.create(null) + posting["_index"] = this.termIndex + this.termIndex += 1 + + for (var k = 0; k < fields.length; k++) { + posting[fields[k]] = Object.create(null) + } + + this.invertedIndex[term] = posting + } + + // add an entry for this term/fieldName/docRef to the invertedIndex + if (this.invertedIndex[term][fieldName][docRef] == undefined) { + this.invertedIndex[term][fieldName][docRef] = Object.create(null) + } + + // store all whitelisted metadata about this token in the + // inverted index + for (var l = 0; l < this.metadataWhitelist.length; l++) { + var metadataKey = this.metadataWhitelist[l], + metadata = term.metadata[metadataKey] + + if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { + this.invertedIndex[term][fieldName][docRef][metadataKey] = [] + } + + this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) + } + } + + } + } + + /** + * Calculates the average document length for this index + * + * @private + */ + lunr.Builder.prototype.calculateAverageFieldLengths = function () { + + var fieldRefs = Object.keys(this.fieldLengths), + numberOfFields = fieldRefs.length, + accumulator = {}, + documentsWithField = {} + + for (var i = 0; i < numberOfFields; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + field = fieldRef.fieldName + + documentsWithField[field] || (documentsWithField[field] = 0) + documentsWithField[field] += 1 + + accumulator[field] || (accumulator[field] = 0) + accumulator[field] += this.fieldLengths[fieldRef] + } + + var fields = Object.keys(this._fields) + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i] + accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName] + } + + this.averageFieldLength = accumulator + } + + /** + * Builds a vector space model of every document using lunr.Vector + * + * @private + */ + lunr.Builder.prototype.createFieldVectors = function () { + var fieldVectors = {}, + fieldRefs = Object.keys(this.fieldTermFrequencies), + fieldRefsLength = fieldRefs.length, + termIdfCache = Object.create(null) + + for (var i = 0; i < fieldRefsLength; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + fieldName = fieldRef.fieldName, + fieldLength = this.fieldLengths[fieldRef], + fieldVector = new lunr.Vector, + termFrequencies = this.fieldTermFrequencies[fieldRef], + terms = Object.keys(termFrequencies), + termsLength = terms.length + + + var fieldBoost = this._fields[fieldName].boost || 1, + docBoost = this._documents[fieldRef.docRef].boost || 1 + + for (var j = 0; j < termsLength; j++) { + var term = terms[j], + tf = termFrequencies[term], + termIndex = this.invertedIndex[term]._index, + idf, score, scoreWithPrecision + + if (termIdfCache[term] === undefined) { + idf = lunr.idf(this.invertedIndex[term], this.documentCount) + termIdfCache[term] = idf + } else { + idf = termIdfCache[term] + } + + score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf) + score *= fieldBoost + score *= docBoost + scoreWithPrecision = Math.round(score * 1000) / 1000 + // Converts 1.23456789 to 1.234. + // Reducing the precision so that the vectors take up less + // space when serialised. Doing it now so that they behave + // the same before and after serialisation. Also, this is + // the fastest approach to reducing a number's precision in + // JavaScript. + + fieldVector.insert(termIndex, scoreWithPrecision) + } + + fieldVectors[fieldRef] = fieldVector + } + + this.fieldVectors = fieldVectors + } + + /** + * Creates a token set of all tokens in the index using lunr.TokenSet + * + * @private + */ + lunr.Builder.prototype.createTokenSet = function () { + this.tokenSet = lunr.TokenSet.fromArray( + Object.keys(this.invertedIndex).sort() + ) + } + + /** + * Builds the index, creating an instance of lunr.Index. + * + * This completes the indexing process and should only be called + * once all documents have been added to the index. + * + * @returns {lunr.Index} + */ + lunr.Builder.prototype.build = function () { + this.calculateAverageFieldLengths() + this.createFieldVectors() + this.createTokenSet() + + return new lunr.Index({ + invertedIndex: this.invertedIndex, + fieldVectors: this.fieldVectors, + tokenSet: this.tokenSet, + fields: Object.keys(this._fields), + pipeline: this.searchPipeline + }) + } + + /** + * Applies a plugin to the index builder. + * + * A plugin is a function that is called with the index builder as its context. + * Plugins can be used to customise or extend the behaviour of the index + * in some way. A plugin is just a function, that encapsulated the custom + * behaviour that should be applied when building the index. + * + * The plugin function will be called with the index builder as its argument, additional + * arguments can also be passed when calling use. The function will be called + * with the index builder as its context. + * + * @param {Function} plugin The plugin to apply. + */ + lunr.Builder.prototype.use = function (fn) { + var args = Array.prototype.slice.call(arguments, 1) + args.unshift(this) + fn.apply(this, args) + } + /** + * Contains and collects metadata about a matching document. + * A single instance of lunr.MatchData is returned as part of every + * lunr.Index~Result. + * + * @constructor + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + * @property {object} metadata - A cloned collection of metadata associated with this document. + * @see {@link lunr.Index~Result} + */ + lunr.MatchData = function (term, field, metadata) { + var clonedMetadata = Object.create(null), + metadataKeys = Object.keys(metadata || {}) + + // Cloning the metadata to prevent the original + // being mutated during match data combination. + // Metadata is kept in an array within the inverted + // index so cloning the data can be done with + // Array#slice + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + clonedMetadata[key] = metadata[key].slice() + } + + this.metadata = Object.create(null) + + if (term !== undefined) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = clonedMetadata + } + } + + /** + * An instance of lunr.MatchData will be created for every term that matches a + * document. However only one instance is required in a lunr.Index~Result. This + * method combines metadata from another instance of lunr.MatchData with this + * objects metadata. + * + * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. + * @see {@link lunr.Index~Result} + */ + lunr.MatchData.prototype.combine = function (otherMatchData) { + var terms = Object.keys(otherMatchData.metadata) + + for (var i = 0; i < terms.length; i++) { + var term = terms[i], + fields = Object.keys(otherMatchData.metadata[term]) + + if (this.metadata[term] == undefined) { + this.metadata[term] = Object.create(null) + } + + for (var j = 0; j < fields.length; j++) { + var field = fields[j], + keys = Object.keys(otherMatchData.metadata[term][field]) + + if (this.metadata[term][field] == undefined) { + this.metadata[term][field] = Object.create(null) + } + + for (var k = 0; k < keys.length; k++) { + var key = keys[k] + + if (this.metadata[term][field][key] == undefined) { + this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] + } else { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) + } + + } + } + } + } + + /** + * Add metadata for a term/field pair to this instance of match data. + * + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + */ + lunr.MatchData.prototype.add = function (term, field, metadata) { + if (!(term in this.metadata)) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = metadata + return + } + + if (!(field in this.metadata[term])) { + this.metadata[term][field] = metadata + return + } + + var metadataKeys = Object.keys(metadata) + + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + + if (key in this.metadata[term][field]) { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key]) + } else { + this.metadata[term][field][key] = metadata[key] + } + } + } + /** + * A lunr.Query provides a programmatic way of defining queries to be performed + * against a {@link lunr.Index}. + * + * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method + * so the query object is pre-initialized with the right index fields. + * + * @constructor + * @property {lunr.Query~Clause[]} clauses - An array of query clauses. + * @property {string[]} allFields - An array of all available fields in a lunr.Index. + */ + lunr.Query = function (allFields) { + this.clauses = [] + this.allFields = allFields + } + + /** + * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. + * + * This allows wildcards to be added to the beginning and end of a term without having to manually do any string + * concatenation. + * + * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. + * + * @constant + * @default + * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour + * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists + * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example query term with trailing wildcard + * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) + * @example query term with leading and trailing wildcard + * query.term('foo', { + * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING + * }) + */ + + lunr.Query.wildcard = new String ("*") + lunr.Query.wildcard.NONE = 0 + lunr.Query.wildcard.LEADING = 1 + lunr.Query.wildcard.TRAILING = 2 + + /** + * Constants for indicating what kind of presence a term must have in matching documents. + * + * @constant + * @enum {number} + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example query term with required presence + * query.term('foo', { presence: lunr.Query.presence.REQUIRED }) + */ + lunr.Query.presence = { + /** + * Term's presence in a document is optional, this is the default value. + */ + OPTIONAL: 1, + + /** + * Term's presence in a document is required, documents that do not contain + * this term will not be returned. + */ + REQUIRED: 2, + + /** + * Term's presence in a document is prohibited, documents that do contain + * this term will not be returned. + */ + PROHIBITED: 3 + } + + /** + * A single clause in a {@link lunr.Query} contains a term and details on how to + * match that term against a {@link lunr.Index}. + * + * @typedef {Object} lunr.Query~Clause + * @property {string[]} fields - The fields in an index this clause should be matched against. + * @property {number} [boost=1] - Any boost that should be applied when matching this clause. + * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. + * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. + * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended. + * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents. + */ + + /** + * Adds a {@link lunr.Query~Clause} to this query. + * + * Unless the clause contains the fields to be matched all fields will be matched. In addition + * a default boost of 1 is applied to the clause. + * + * @param {lunr.Query~Clause} clause - The clause to add to this query. + * @see lunr.Query~Clause + * @returns {lunr.Query} + */ + lunr.Query.prototype.clause = function (clause) { + if (!('fields' in clause)) { + clause.fields = this.allFields + } + + if (!('boost' in clause)) { + clause.boost = 1 + } + + if (!('usePipeline' in clause)) { + clause.usePipeline = true + } + + if (!('wildcard' in clause)) { + clause.wildcard = lunr.Query.wildcard.NONE + } + + if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { + clause.term = "*" + clause.term + } + + if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { + clause.term = "" + clause.term + "*" + } + + if (!('presence' in clause)) { + clause.presence = lunr.Query.presence.OPTIONAL + } + + this.clauses.push(clause) + + return this + } + + /** + * A negated query is one in which every clause has a presence of + * prohibited. These queries require some special processing to return + * the expected results. + * + * @returns boolean + */ + lunr.Query.prototype.isNegated = function () { + for (var i = 0; i < this.clauses.length; i++) { + if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) { + return false + } + } + + return true + } + + /** + * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} + * to the list of clauses that make up this query. + * + * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion + * to a token or token-like string should be done before calling this method. + * + * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an + * array, each term in the array will share the same options. + * + * @param {object|object[]} term - The term(s) to add to the query. + * @param {object} [options] - Any additional properties to add to the query clause. + * @returns {lunr.Query} + * @see lunr.Query#clause + * @see lunr.Query~Clause + * @example adding a single term to a query + * query.term("foo") + * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard + * query.term("foo", { + * fields: ["title"], + * boost: 10, + * wildcard: lunr.Query.wildcard.TRAILING + * }) + * @example using lunr.tokenizer to convert a string to tokens before using them as terms + * query.term(lunr.tokenizer("foo bar")) + */ + lunr.Query.prototype.term = function (term, options) { + if (Array.isArray(term)) { + term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this) + return this + } + + var clause = options || {} + clause.term = term.toString() + + this.clause(clause) + + return this + } + lunr.QueryParseError = function (message, start, end) { + this.name = "QueryParseError" + this.message = message + this.start = start + this.end = end + } + + lunr.QueryParseError.prototype = new Error + lunr.QueryLexer = function (str) { + this.lexemes = [] + this.str = str + this.length = str.length + this.pos = 0 + this.start = 0 + this.escapeCharPositions = [] + } + + lunr.QueryLexer.prototype.run = function () { + var state = lunr.QueryLexer.lexText + + while (state) { + state = state(this) + } + } + + lunr.QueryLexer.prototype.sliceString = function () { + var subSlices = [], + sliceStart = this.start, + sliceEnd = this.pos + + for (var i = 0; i < this.escapeCharPositions.length; i++) { + sliceEnd = this.escapeCharPositions[i] + subSlices.push(this.str.slice(sliceStart, sliceEnd)) + sliceStart = sliceEnd + 1 + } + + subSlices.push(this.str.slice(sliceStart, this.pos)) + this.escapeCharPositions.length = 0 + + return subSlices.join('') + } + + lunr.QueryLexer.prototype.emit = function (type) { + this.lexemes.push({ + type: type, + str: this.sliceString(), + start: this.start, + end: this.pos + }) + + this.start = this.pos + } + + lunr.QueryLexer.prototype.escapeCharacter = function () { + this.escapeCharPositions.push(this.pos - 1) + this.pos += 1 + } + + lunr.QueryLexer.prototype.next = function () { + if (this.pos >= this.length) { + return lunr.QueryLexer.EOS + } + + var char = this.str.charAt(this.pos) + this.pos += 1 + return char + } + + lunr.QueryLexer.prototype.width = function () { + return this.pos - this.start + } + + lunr.QueryLexer.prototype.ignore = function () { + if (this.start == this.pos) { + this.pos += 1 + } + + this.start = this.pos + } + + lunr.QueryLexer.prototype.backup = function () { + this.pos -= 1 + } + + lunr.QueryLexer.prototype.acceptDigitRun = function () { + var char, charCode + + do { + char = this.next() + charCode = char.charCodeAt(0) + } while (charCode > 47 && charCode < 58) + + if (char != lunr.QueryLexer.EOS) { + this.backup() + } + } + + lunr.QueryLexer.prototype.more = function () { + return this.pos < this.length + } + + lunr.QueryLexer.EOS = 'EOS' + lunr.QueryLexer.FIELD = 'FIELD' + lunr.QueryLexer.TERM = 'TERM' + lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' + lunr.QueryLexer.BOOST = 'BOOST' + lunr.QueryLexer.PRESENCE = 'PRESENCE' + + lunr.QueryLexer.lexField = function (lexer) { + lexer.backup() + lexer.emit(lunr.QueryLexer.FIELD) + lexer.ignore() + return lunr.QueryLexer.lexText + } + + lunr.QueryLexer.lexTerm = function (lexer) { + if (lexer.width() > 1) { + lexer.backup() + lexer.emit(lunr.QueryLexer.TERM) + } + + lexer.ignore() + + if (lexer.more()) { + return lunr.QueryLexer.lexText + } + } + + lunr.QueryLexer.lexEditDistance = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) + return lunr.QueryLexer.lexText + } + + lunr.QueryLexer.lexBoost = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.BOOST) + return lunr.QueryLexer.lexText + } + + lunr.QueryLexer.lexEOS = function (lexer) { + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + } + + // This matches the separator used when tokenising fields + // within a document. These should match otherwise it is + // not possible to search for some tokens within a document. + // + // It is possible for the user to change the separator on the + // tokenizer so it _might_ clash with any other of the special + // characters already used within the search string, e.g. :. + // + // This means that it is possible to change the separator in + // such a way that makes some words unsearchable using a search + // string. + lunr.QueryLexer.termSeparator = lunr.tokenizer.separator + + lunr.QueryLexer.lexText = function (lexer) { + while (true) { + var char = lexer.next() + + if (char == lunr.QueryLexer.EOS) { + return lunr.QueryLexer.lexEOS + } + + // Escape character is '\' + if (char.charCodeAt(0) == 92) { + lexer.escapeCharacter() + continue + } + + if (char == ":") { + return lunr.QueryLexer.lexField + } + + if (char == "~") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexEditDistance + } + + if (char == "^") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexBoost + } + + // "+" indicates term presence is required + // checking for length to ensure that only + // leading "+" are considered + if (char == "+" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + // "-" indicates term presence is prohibited + // checking for length to ensure that only + // leading "-" are considered + if (char == "-" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + if (char.match(lunr.QueryLexer.termSeparator)) { + return lunr.QueryLexer.lexTerm + } + } + } + + lunr.QueryParser = function (str, query) { + this.lexer = new lunr.QueryLexer (str) + this.query = query + this.currentClause = {} + this.lexemeIdx = 0 + } + + lunr.QueryParser.prototype.parse = function () { + this.lexer.run() + this.lexemes = this.lexer.lexemes + + var state = lunr.QueryParser.parseClause + + while (state) { + state = state(this) + } + + return this.query + } + + lunr.QueryParser.prototype.peekLexeme = function () { + return this.lexemes[this.lexemeIdx] + } + + lunr.QueryParser.prototype.consumeLexeme = function () { + var lexeme = this.peekLexeme() + this.lexemeIdx += 1 + return lexeme + } + + lunr.QueryParser.prototype.nextClause = function () { + var completedClause = this.currentClause + this.query.clause(completedClause) + this.currentClause = {} + } + + lunr.QueryParser.parseClause = function (parser) { + var lexeme = parser.peekLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.type) { + case lunr.QueryLexer.PRESENCE: + return lunr.QueryParser.parsePresence + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expected either a field or a term, found " + lexeme.type + + if (lexeme.str.length >= 1) { + errorMessage += " with value '" + lexeme.str + "'" + } + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + } + + lunr.QueryParser.parsePresence = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.str) { + case "-": + parser.currentClause.presence = lunr.Query.presence.PROHIBITED + break + case "+": + parser.currentClause.presence = lunr.Query.presence.REQUIRED + break + default: + var errorMessage = "unrecognised presence operator'" + lexeme.str + "'" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term or field, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } + } + + lunr.QueryParser.parseField = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + if (parser.query.allFields.indexOf(lexeme.str) == -1) { + var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), + errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.fields = [lexeme.str] + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } + } + + lunr.QueryParser.parseTerm = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + parser.currentClause.term = lexeme.str.toLowerCase() + + if (lexeme.str.indexOf("*") != -1) { + parser.currentClause.usePipeline = false + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } + } + + lunr.QueryParser.parseEditDistance = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var editDistance = parseInt(lexeme.str, 10) + + if (isNaN(editDistance)) { + var errorMessage = "edit distance must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.editDistance = editDistance + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } + } + + lunr.QueryParser.parseBoost = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var boost = parseInt(lexeme.str, 10) + + if (isNaN(boost)) { + var errorMessage = "boost must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.boost = boost + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } + } + + /** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ + ;(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like enviroments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + root.lunr = factory() + } + }(this, function () { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + return lunr + })) + })(); diff --git a/docs/api/moduleIndex.html b/docs/api/moduleIndex.html new file mode 100644 index 00000000..954ec0f7 --- /dev/null +++ b/docs/api/moduleIndex.html @@ -0,0 +1,166 @@ + + + + + + + + Module Index + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + \ No newline at end of file diff --git a/docs/api/nameIndex.html b/docs/api/nameIndex.html new file mode 100644 index 00000000..f60ae4c4 --- /dev/null +++ b/docs/api/nameIndex.html @@ -0,0 +1,383 @@ + + + + + + + + Index of Names + + + + + + + + + + + + + + + + +
+ + + + + + + +

A

+ + + + + + +

B

+ + + + + + +

C

+ + + + + + +

D

+ + + + + + +

E

+ + + + + + +

F

+ + + + + + +

G

+ + + + + + +

H

+ + + + + + +

I

+ + + + + + +

J

+ + + + + + +

K

+ + + + + + +

L

+ + + + + + +

M

+ + + + + + +

N

+ + + + + + +

O

+ + + + + + +

P

+ + + + + + +

Q

+ + + + + + +

R

+ + + + + + +

S

+ + + + + + +

T

+ + + + + + +

U

+ + + + + + +

V

+ + + + + + +

W

+ + + + + + +

_

+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/docs/api/objects.inv b/docs/api/objects.inv new file mode 100644 index 00000000..701ec643 Binary files /dev/null and b/docs/api/objects.inv differ diff --git a/docs/api/pydoctor.js b/docs/api/pydoctor.js new file mode 100644 index 00000000..e75269cd --- /dev/null +++ b/docs/api/pydoctor.js @@ -0,0 +1,35 @@ +// Toogle private view + +function initPrivate() { + var params = (new URL(document.location)).searchParams; + if (!params || !parseInt(params.get('private'))) { + var show = false; + var hash = document.location.hash; + + if (hash != '') { + var anchor = document.querySelector('a[name="' + hash.substring(1) + '"]'); + show = anchor && anchor.parentNode.classList.contains('private'); + } + + if (!show) { + document.body.classList.add("private-hidden"); + } + } + updatePrivate(); +} + +function togglePrivate() { + document.body.classList.toggle("private-hidden"); + updatePrivate(); +} +function updatePrivate() { + var hidden = document.body.classList.contains('private-hidden'); + document.querySelector('#showPrivate button').innerText = + hidden ? 'Show Private API' : 'Hide Private API'; + if (history) { + var search = hidden ? document.location.pathname : '?private=1'; + history.replaceState(null, '', search + document.location.hash); + } +} + +initPrivate(); diff --git a/docs/api/queries.md b/docs/api/queries.md deleted file mode 100644 index dc26b350..00000000 --- a/docs/api/queries.md +++ /dev/null @@ -1,35 +0,0 @@ -## get_gpus - -```python -import runpod - -runpod.api_key = "your_runpod_api_key" - -gpus = runpod.get_gpus() - -for gpu in gpus: - print(gpu) -``` - -### get_gpus Output - -```json -{'id': 'NVIDIA A100 80GB PCIe', 'displayName': 'A100 80GB', 'memoryInGb': 80} -{'id': 'NVIDIA A100-SXM4-80GB', 'displayName': 'A100 SXM 80GB', 'memoryInGb': 80} -{'id': 'NVIDIA A30', 'displayName': 'A30', 'memoryInGb': 24} -``` - -## get_gpu - -```python -gpu_id = "NVIDIA A100 80GB PCIe" -gpu = runpod.get_gpu(gpu_id) - -print(gpu) -``` - -### get_gpu Output - -```json -{'id': 'NVIDIA A100 80GB PCIe', 'displayName': 'A100 80GB', 'memoryInGb': 80, 'secureCloud': True, 'communityCloud': True, 'lowestPrice': {'minimumBidPrice': 1.158, 'uninterruptablePrice': 1.89}} -``` diff --git a/docs/api/runpod.api.ctl_commands.html b/docs/api/runpod.api.ctl_commands.html new file mode 100644 index 00000000..2cd4415f --- /dev/null +++ b/docs/api/runpod.api.ctl_commands.html @@ -0,0 +1,1024 @@ + + + + + + + + runpod.api.ctl_commands + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | API Wrapper | CTL Commands

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Functioncreate_container_registry_authCreate a container registry authentication.
Functioncreate_endpointCreate an endpoint
Functioncreate_podCreate a pod
Functioncreate_templateCreate a template
Functionget_endpointsGet all endpoints
Functionget_gpuGet a specific GPU type
Functionget_gpusGet all GPU types
Functionget_podGet a specific pod
Functionget_podsGet all pods
Functionget_userGet the current user
Functionresume_podResume a pod
Functionstop_podStop a pod
Functionterminate_podTerminate a pod
Functionupdate_endpoint_templateUpdate an endpoint template
Functionupdate_user_settingsUpdate the current user
+ + + +
+ +
+
+ + + + + + + + +
+ + + def create_container_registry_auth(name: str, username: str, password: str): + + + (source) + + + + + ¶ + +
+
+ +

Create a container registry authentication. + +Args: + name (str): The name of the container registry. + username (str): The username for authentication. + password (str): The password for authentication. + +Returns: + dict: The response data containing the saved container registry authentication.

+
+
+ + + + + + + + +
+ + + def create_endpoint(name: str, template_id: str, gpu_ids: str = 'AMPERE_16', network_volume_id: str = None, locations: str = None, idle_timeout: int = 5, scaler_type: str = 'QUEUE_DELAY', scaler_value: int = 4, workers_min: int = 0, workers_max: int = 3, flashboot=False): + + + (source) + + + + + ¶ + +
+
+ +

Create an endpoint

+

:param name: the name of the endpoint :param template_id: the id of the template to use for the endpoint :param gpu_ids: the ids of the GPUs to use for the endpoint :param network_volume_id: the id of the network volume to use for the endpoint :param locations: the locations to use for the endpoint :param idle_timeout: the idle timeout for the endpoint :param scaler_type: the scaler type for the endpoint :param scaler_value: the scaler value for the endpoint :param workers_min: the minimum number of workers for the endpoint :param workers_max: the maximum number of workers for the endpoint

+

:example:

+
+>>> endpoint_id = runpod.create_endpoint("test", "template_id")
+
+
+ + + + + + + + +
+ + + def create_pod(name: str, image_name: str, gpu_type_id: str, cloud_type: str = 'ALL', support_public_ip: bool = True, start_ssh: bool = True, data_center_id: Optional[str] = None, country_code: Optional[str] = None, gpu_count: int = 1, volume_in_gb: int = 0, container_disk_in_gb: Optional[int] = None, min_vcpu_count: int = 1, min_memory_in_gb: int = 1, docker_args: str = '', ports: Optional[str] = None, volume_mount_path: str = '/runpod-volume', env: Optional[dict] = None, template_id: Optional[str] = None, network_volume_id: Optional[str] = None, allowed_cuda_versions: Optional[list] = None) -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Create a pod + +:param name: the name of the pod +:param image_name: the name of the docker image to be used by the pod +:param gpu_type_id: the gpu type wanted by the pod (retrievable by get_gpus) +:param cloud_type: if secure cloud, community cloud or all is wanted +:param data_center_id: the id of the data center +:param country_code: the code for country to start the pod in +:param gpu_count: how many gpus should be attached to the pod +:param volume_in_gb: how big should the pod volume be +:param ports: the ports to open in the pod, example format - "8888/http,666/tcp" +:param volume_mount_path: where to mount the volume? +:param env: the environment variables to inject into the pod, + for example {EXAMPLE_VAR:"example_value", EXAMPLE_VAR2:"example_value 2"}, will + inject EXAMPLE_VAR and EXAMPLE_VAR2 into the pod with the mentioned values +:param template_id: the id of the template to use for the pod + +:example: + +>>> pod_id = runpod.create_pod("test", "runpod/stack", "NVIDIA GeForce RTX 3070")

+
+
+ + + + + + + + +
+ + + def create_template(name: str, image_name: str, docker_start_cmd: str = None, container_disk_in_gb: int = 10, volume_in_gb: int = None, volume_mount_path: str = None, ports: str = None, env: dict = None, is_serverless: bool = False, registry_auth_id: str = None): + + + (source) + + + + + ¶ + +
+
+ +

Create a template + +:param name: the name of the template +:param image_name: the name of the docker image to be used by the template +:param docker_start_cmd: the command to start the docker container with +:param container_disk_in_gb: how big should the container disk be +:param volume_in_gb: how big should the volume be +:param ports: the ports to open in the pod, example format - "8888/http,666/tcp" +:param volume_mount_path: where to mount the volume? +:param env: the environment variables to inject into the pod, + for example {EXAMPLE_VAR:"example_value", EXAMPLE_VAR2:"example_value 2"}, will + inject EXAMPLE_VAR and EXAMPLE_VAR2 into the pod with the mentioned values +:param is_serverless: is the template serverless? +:param registry_auth_id: the id of the registry auth + +:example: + +>>> template_id = runpod.create_template("test", "runpod/stack", "python3 main.py")

+
+
+ + + + + + + + +
+ + + def get_endpoints() -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Get all endpoints

+
+
+ + + + + + + + +
+ + + def get_gpu(gpu_id: str, gpu_quantity: int = 1): + + + (source) + + + + + ¶ + +
+
+ +

Get a specific GPU type

+

:param gpu_id: the id of the gpu :param gpu_quantity: how many of the gpu should be returned

+
+
+
+ + + + + + + + +
+ + + def get_gpus() -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Get all GPU types

+
+
+ + + + + + + + +
+ + + def get_pod(pod_id: str): + + + (source) + + + + + ¶ + +
+
+ +

Get a specific pod

+

:param pod_id: the id of the pod

+
+
+
+ + + + + + + + +
+ + + def get_pods() -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Get all pods

+
+
+ + + + + + + + +
+ + + def get_user() -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Get the current user

+
+
+ + + + + + + + +
+ + + def resume_pod(pod_id: str, gpu_count: int): + + + (source) + + + + + ¶ + +
+
+ +

Resume a pod

+

:param pod_id: the id of the pod :param gpu_count: the number of GPUs to attach to the pod

+

:example:

+
+>>> pod_id = runpod.create_pod("test", "runpod/stack", "NVIDIA GeForce RTX 3070")
+>>> runpod.stop_pod(pod_id)
+>>> runpod.resume_pod(pod_id)
+
+
+ + + + + + + + +
+ + + def stop_pod(pod_id: str): + + + (source) + + + + + ¶ + +
+
+ +

Stop a pod

+

:param pod_id: the id of the pod

+

:example:

+
+>>> pod_id = runpod.create_pod("test", "runpod/stack", "NVIDIA GeForce RTX 3070")
+>>> runpod.stop_pod(pod_id)
+
+
+ + + + + + + + +
+ + + def terminate_pod(pod_id: str): + + + (source) + + + + + ¶ + +
+
+ +

Terminate a pod

+

:param pod_id: the id of the pod

+

:example:

+
+>>> pod_id = runpod.create_pod("test", "runpod/stack", "NVIDIA GeForce RTX 3070")
+>>> runpod.terminate_pod(pod_id)
+
+
+ + + + + + + + +
+ + + def update_endpoint_template(endpoint_id: str, template_id: str): + + + (source) + + + + + ¶ + +
+
+ +

Update an endpoint template

+

:param endpoint_id: the id of the endpoint :param template_id: the id of the template to use for the endpoint

+

:example:

+
+>>> endpoint_id = runpod.update_endpoint_template("test", "template_id")
+
+
+ + + + + + + + +
+ + + def update_user_settings(pubkey: str) -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Update the current user

+

:param pubkey: the public key of the user

+
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.graphql.html b/docs/api/runpod.api.graphql.html new file mode 100644 index 00000000..a6eca5fc --- /dev/null +++ b/docs/api/runpod.api.graphql.html @@ -0,0 +1,407 @@ + + + + + + + + runpod.api.graphql + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | API Wrapper | GraphQL

+
+ +
+ + + + + + + + + + + + + + +
Functionrun_graphql_queryRun a GraphQL query
ConstantHTTP_STATUS_UNAUTHORIZEDUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def run_graphql_query(query: str) -> Dict[str, Any]: + + + (source) + + + + + ¶ + +
+
+ +

Run a GraphQL query

+
+
+ + + + + + + + +
+ + HTTP_STATUS_UNAUTHORIZED: int = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
401
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.html b/docs/api/runpod.api.html new file mode 100644 index 00000000..83b20fc3 --- /dev/null +++ b/docs/api/runpod.api.html @@ -0,0 +1,473 @@ + + + + + + + + runpod.api + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Allows api_wrapper to be imported as a module.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Modulectl_commandsRunPod | API Wrapper | CTL Commands
ModulegraphqlRunPod | API Wrapper | GraphQL
PackagemutationsAllows for the creation of mutations in the GraphQL API.
PackagequeriesAllows queries to be imported as a module.
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.mutations.container_register_auth.html b/docs/api/runpod.api.mutations.container_register_auth.html new file mode 100644 index 00000000..3c2bc072 --- /dev/null +++ b/docs/api/runpod.api.mutations.container_register_auth.html @@ -0,0 +1,380 @@ + + + + + + + + runpod.api.mutations.container_register_auth + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | API Wrapper | Mutations | Container Registry Auth

+
+ +
+ + + + + + + + + +
Functiongenerate_container_registry_authGenerate a GraphQL mutation string to save container registry authentication details.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def generate_container_registry_auth(name: str, username: str, password: str): + + + (source) + + + + + ¶ + +
+
+ +

Generate a GraphQL mutation string to save container registry authentication details. + +Args: + name (str): The name of the container registry. + username (str): The username for authentication. + password (str): The password for authentication. + +Returns: + str: The GraphQL mutation string.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.mutations.endpoints.html b/docs/api/runpod.api.mutations.endpoints.html new file mode 100644 index 00000000..199e7e0c --- /dev/null +++ b/docs/api/runpod.api.mutations.endpoints.html @@ -0,0 +1,414 @@ + + + + + + + + runpod.api.mutations.endpoints + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | API Wrapper | Mutations | Endpoints

+
+ +
+ + + + + + + + + + + + + + +
Functiongenerate_endpoint_mutationGenerate a string for a GraphQL mutation to create a new endpoint.
Functionupdate_endpoint_template_mutationGenerate a string for a GraphQL mutation to update an existing endpoint's template.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def generate_endpoint_mutation(name: str, template_id: str, gpu_ids: str = 'AMPERE_16', network_volume_id: str = None, locations: str = None, idle_timeout: int = 5, scaler_type: str = 'QUEUE_DELAY', scaler_value: int = 4, workers_min: int = 0, workers_max: int = 3, flashboot=False): + + + (source) + + + + + ¶ + +
+
+ +

Generate a string for a GraphQL mutation to create a new endpoint.

+
+
+ + + + + + + + +
+ + + def update_endpoint_template_mutation(endpoint_id: str, template_id: str): + + + (source) + + + + + ¶ + +
+
+ +

Generate a string for a GraphQL mutation to update an existing endpoint's template.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.mutations.html b/docs/api/runpod.api.mutations.html new file mode 100644 index 00000000..4c574895 --- /dev/null +++ b/docs/api/runpod.api.mutations.html @@ -0,0 +1,395 @@ + + + + + + + + runpod.api.mutations + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Allows for the creation of mutations in the GraphQL API.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Modulecontainer_register_authRunPod | API Wrapper | Mutations | Container Registry Auth
ModuleendpointsRunPod | API Wrapper | Mutations | Endpoints
ModulepodsRunPod | API Wrapper | Mutations | Pods
ModuletemplatesRunPod | API Wrapper | Mutations | Templates
ModuleuserRunPod | API | Mutations | User
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.mutations.pods.html b/docs/api/runpod.api.mutations.pods.html new file mode 100644 index 00000000..987b2d55 --- /dev/null +++ b/docs/api/runpod.api.mutations.pods.html @@ -0,0 +1,498 @@ + + + + + + + + runpod.api.mutations.pods + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | API Wrapper | Mutations | Pods

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Functiongenerate_pod_deployment_mutationGenerates a mutation to deploy a pod on demand.
Functiongenerate_pod_resume_mutationGenerates a mutation to resume a pod.
Functiongenerate_pod_stop_mutationGenerates a mutation to stop a pod.
Functiongenerate_pod_terminate_mutationGenerates a mutation to terminate a pod.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def generate_pod_deployment_mutation(name: str, image_name: str, gpu_type_id: str, cloud_type: str = 'ALL', support_public_ip: bool = True, start_ssh: bool = True, data_center_id=None, country_code=None, gpu_count=None, volume_in_gb=None, container_disk_in_gb=None, min_vcpu_count=None, min_memory_in_gb=None, docker_args=None, ports=None, volume_mount_path=None, env: dict = None, template_id=None, network_volume_id=None, allowed_cuda_versions: Optional[List[str]] = None): + + + (source) + + + + + ¶ + +
+
+ +

Generates a mutation to deploy a pod on demand.

+
+
+ + + + + + + + +
+ + + def generate_pod_resume_mutation(pod_id: str, gpu_count: int) -> str: + + + (source) + + + + + ¶ + +
+
+ +

Generates a mutation to resume a pod.

+
+
+ + + + + + + + +
+ + + def generate_pod_stop_mutation(pod_id: str) -> str: + + + (source) + + + + + ¶ + +
+
+ +

Generates a mutation to stop a pod.

+
+
+ + + + + + + + +
+ + + def generate_pod_terminate_mutation(pod_id: str) -> str: + + + (source) + + + + + ¶ + +
+
+ +

Generates a mutation to terminate a pod.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.mutations.templates.html b/docs/api/runpod.api.mutations.templates.html new file mode 100644 index 00000000..c85ed9ea --- /dev/null +++ b/docs/api/runpod.api.mutations.templates.html @@ -0,0 +1,372 @@ + + + + + + + + runpod.api.mutations.templates + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | API Wrapper | Mutations | Templates

+
+ +
+ + + + + + + + + +
Functiongenerate_pod_templateGenerate a string for a GraphQL mutation to create a new pod template.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def generate_pod_template(name: str, image_name: str, docker_start_cmd: str = None, container_disk_in_gb: int = 10, volume_in_gb: int = None, volume_mount_path: str = None, ports: str = None, env: dict = None, is_serverless: bool = False, registry_auth_id: str = None): + + + (source) + + + + + ¶ + +
+
+ +

Generate a string for a GraphQL mutation to create a new pod template.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.mutations.user.html b/docs/api/runpod.api.mutations.user.html new file mode 100644 index 00000000..81b2efc7 --- /dev/null +++ b/docs/api/runpod.api.mutations.user.html @@ -0,0 +1,372 @@ + + + + + + + + runpod.api.mutations.user + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | API | Mutations | User

+
+ +
+ + + + + + + + + +
Functiongenerate_user_mutation' Generates a mutation to edit a user.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def generate_user_mutation(pubkey): + + + (source) + + + + + ¶ + +
+
+ +

' Generates a mutation to edit a user.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.queries.endpoints.html b/docs/api/runpod.api.queries.endpoints.html new file mode 100644 index 00000000..3677ca0e --- /dev/null +++ b/docs/api/runpod.api.queries.endpoints.html @@ -0,0 +1,369 @@ + + + + + + + + runpod.api.queries.endpoints + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

GraphQL queries for endpoints.

+
+ +
+ + + + + + + + + +
ConstantQUERY_ENDPOINTUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + QUERY_ENDPOINT: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'''
+query Query {
+  myself {
+    endpoints {
+      aiKey
+      gpuIds
+      id
+...
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.queries.gpus.html b/docs/api/runpod.api.queries.gpus.html new file mode 100644 index 00000000..f005842c --- /dev/null +++ b/docs/api/runpod.api.queries.gpus.html @@ -0,0 +1,414 @@ + + + + + + + + runpod.api.queries.gpus + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | API | Queries | GPUs

+
+ +
+ + + + + + + + + + + + + + +
Functiongenerate_gpu_queryGenerate a query for a specific GPU type
ConstantQUERY_GPU_TYPESUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def generate_gpu_query(gpu_id, gpu_count=1): + + + (source) + + + + + ¶ + +
+
+ +

Generate a query for a specific GPU type

+
+
+ + + + + + + + +
+ + QUERY_GPU_TYPES: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'''
+query GpuTypes {
+  gpuTypes {
+    id
+    displayName
+    memoryInGb
+  }
+...
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.queries.html b/docs/api/runpod.api.queries.html new file mode 100644 index 00000000..9dfe03de --- /dev/null +++ b/docs/api/runpod.api.queries.html @@ -0,0 +1,380 @@ + + + + + + + + runpod.api.queries + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Allows queries to be imported as a module.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ModuleendpointsGraphQL queries for endpoints.
ModulegpusRunPod | API | Queries | GPUs
ModulepodsRunPod | API Wrapper | Queries | GPUs
ModuleuserRunPod | API | Queries | User
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.queries.pods.html b/docs/api/runpod.api.queries.pods.html new file mode 100644 index 00000000..1e328f1d --- /dev/null +++ b/docs/api/runpod.api.queries.pods.html @@ -0,0 +1,414 @@ + + + + + + + + runpod.api.queries.pods + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | API Wrapper | Queries | GPUs

+
+ +
+ + + + + + + + + + + + + + +
Functiongenerate_pod_queryGenerate a query for a specific GPU type
ConstantQUERY_PODUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def generate_pod_query(pod_id): + + + (source) + + + + + ¶ + +
+
+ +

Generate a query for a specific GPU type

+
+
+ + + + + + + + +
+ + QUERY_POD: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'''
+query myPods {
+    myself {
+        pods {
+            id
+            containerDiskInGb
+            costPerHr
+...
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.api.queries.user.html b/docs/api/runpod.api.queries.user.html new file mode 100644 index 00000000..d8fe4c42 --- /dev/null +++ b/docs/api/runpod.api.queries.user.html @@ -0,0 +1,371 @@ + + + + + + + + runpod.api.queries.user + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | API | Queries | User

+

Query for user information.

+
+
+ +
+ + + + + + + + + +
ConstantQUERY_USERUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + QUERY_USER: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'''
+query myself {
+    myself {
+        id
+        pubKey
+        networkVolumes {
+            id
+...
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.entry.html b/docs/api/runpod.cli.entry.html new file mode 100644 index 00000000..6ec75d71 --- /dev/null +++ b/docs/api/runpod.cli.entry.html @@ -0,0 +1,397 @@ + + + + + + + + runpod.cli.entry + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | Entry

+

The entry point for the CLI.

+
+
+ +
+ + + + + + + + + +
Functionrunpod_cliA collection of CLI functions for RunPod.
+ + + +
+ +
+
+ + + + + + + + +
+ + @click.group()
+ def runpod_cli(): + + + (source) + + + + + ¶ + +
+
+ +

A collection of CLI functions for RunPod.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.config.commands.html b/docs/api/runpod.cli.groups.config.commands.html new file mode 100644 index 00000000..f974ef13 --- /dev/null +++ b/docs/api/runpod.cli.groups.config.commands.html @@ -0,0 +1,342 @@ + + + + + + + + runpod.cli.groups.config.commands + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Commands for the config command group

+
+ +
+ + + + + + + + + +
Functionconfig_wizardStarts the configuration wizard to set up the RunPod CLI. If credentials are already set, prompts the user to overwrite them.
+ + + +
+ +
+
+ + + + + + + + +
+ + @click.command('config', help='Configures the RunPod CLI with the user\'s API key.')
@click.argument('api-key', required=False, default=None)
@click.option('--profile', default='default', help='The profile to set the credentials for.')
@click.option('--check', is_flag=True, help='Check if credentials are already set.')
+ def config_wizard(api_key, profile, check): + + + (source) + + + + + ¶ + +
+
+ +

Starts the configuration wizard to set up the RunPod CLI. If credentials are already set, prompts the user to overwrite them.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.config.functions.html b/docs/api/runpod.cli.groups.config.functions.html new file mode 100644 index 00000000..8fa74bb2 --- /dev/null +++ b/docs/api/runpod.cli.groups.config.functions.html @@ -0,0 +1,483 @@ + + + + + + + + runpod.cli.groups.config.functions + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

runpod | cli | config.py

+

A collection of functions to set and validate configurations. Configurations are TOML files located under ~/.runpod/

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Functioncheck_credentialsChecks if the credentials file exists and is valid.
Functionget_credentialsReturns the credentials for the specified profile from ~/.runpod/config.toml
Functionset_credentialsSets the user's credentials in ~/.runpod/config.toml If profile already exists user must use `update_credentials` instead.
ConstantCREDENTIAL_FILEUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def check_credentials(profile: str = 'default'): + + + (source) + + + + + ¶ + +
+
+ +

Checks if the credentials file exists and is valid.

+
+
+ + + + + + + + +
+ + + def get_credentials(profile='default'): + + + (source) + + + + + ¶ + +
+
+ +

Returns the credentials for the specified profile from ~/.runpod/config.toml

+
+
+ + + + + + + + +
+ + + def set_credentials(api_key: str, profile: str = 'default', overwrite=False): + + + (source) + + + + + ¶ + +
+
+ +

Sets the user's credentials in ~/.runpod/config.toml +If profile already exists user must use `update_credentials` instead. + +Args: + api_key (str): The user's API key. + profile (str): The profile to set the credentials for. + +--- File Structure --- + +[default] +api_key = "RUNPOD_API_KEY"

+
+
+ + + + + + + + +
+ + CREDENTIAL_FILE = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
os.path.expanduser('~/.runpod/config.toml')
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.config.html b/docs/api/runpod.cli.groups.config.html new file mode 100644 index 00000000..03234b95 --- /dev/null +++ b/docs/api/runpod.cli.groups.config.html @@ -0,0 +1,360 @@ + + + + + + + + runpod.cli.groups.config + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Config related CLI functions.

+
+ +
+ + + + + + + + + + + + + + +
ModulecommandsCommands for the config command group
Modulefunctionsrunpod | cli | config.py
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.exec.commands.html b/docs/api/runpod.cli.groups.exec.commands.html new file mode 100644 index 00000000..edf826e3 --- /dev/null +++ b/docs/api/runpod.cli.groups.exec.commands.html @@ -0,0 +1,394 @@ + + + + + + + + runpod.cli.groups.exec.commands + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | Exec | Commands

+
+ +
+ + + + + + + + + + + + + + +
Functionexec_cliA collection of CLI functions for Exec.
Functionremote_pythonRuns a remote Python shell.
+ + + +
+ +
+
+ + + + + + + + +
+ + @click.group('exec', help='Execute commands in a pods.')
+ def exec_cli(): + + + (source) + + + + + ¶ + +
+
+ +

A collection of CLI functions for Exec.

+
+
+ + + + + + + + +
+ + @exec_cli.command('python')
@click.option('--pod_id', default=None, help='The pod ID to run the command on.')
@click.argument('file', type=click.Path(exists=True), required=True)
+ def remote_python(pod_id, file): + + + (source) + + + + + ¶ + +
+
+ +

Runs a remote Python shell.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.exec.functions.html b/docs/api/runpod.cli.groups.exec.functions.html new file mode 100644 index 00000000..d87ec5e6 --- /dev/null +++ b/docs/api/runpod.cli.groups.exec.functions.html @@ -0,0 +1,352 @@ + + + + + + + + runpod.cli.groups.exec.functions + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | Exec | Functions

+
+ +
+ + + + + + + + + +
Functionpython_over_sshRuns a Python file over SSH.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def python_over_ssh(pod_id, file): + + + (source) + + + + + ¶ + +
+
+ +

Runs a Python file over SSH.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.exec.helpers.html b/docs/api/runpod.cli.groups.exec.helpers.html new file mode 100644 index 00000000..29104102 --- /dev/null +++ b/docs/api/runpod.cli.groups.exec.helpers.html @@ -0,0 +1,403 @@ + + + + + + + + runpod.cli.groups.exec.helpers + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Helper functions for the runpod cli group exec command

+
+ +
+ + + + + + + + + + + + + + +
Functionget_session_podReturns the pod_id for the current session.
ConstantPOD_ID_FILEUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def get_session_pod(): + + + (source) + + + + + ¶ + +
+
+ +

Returns the pod_id for the current session. + +Session pod is used to execute commands and run scripts remotely. + +- If the pod_id is already set, return it. +- If the pod_id is not set, prompt the user for it. +- Save the pod_id to a file so that the user doesn't have to enter it again.

+
+
+ + + + + + + + +
+ + POD_ID_FILE = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
os.path.join(os.path.expanduser('~'), '.runpod', 'pod_id')
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.exec.html b/docs/api/runpod.cli.groups.exec.html new file mode 100644 index 00000000..6295fbdb --- /dev/null +++ b/docs/api/runpod.cli.groups.exec.html @@ -0,0 +1,375 @@ + + + + + + + + runpod.cli.groups.exec + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

A collection of CLI execution tools

+
+ +
+ + + + + + + + + + + + + + + + + + + +
ModulecommandsRunPod | CLI | Exec | Commands
ModulefunctionsRunPod | CLI | Exec | Functions
ModulehelpersHelper functions for the runpod cli group exec command
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.html b/docs/api/runpod.cli.groups.html new file mode 100644 index 00000000..a2a33d58 --- /dev/null +++ b/docs/api/runpod.cli.groups.html @@ -0,0 +1,428 @@ + + + + + + + + runpod.cli.groups + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Allow CLI groups to be imported from the runpod.cli module.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageconfigConfig related CLI functions.
PackageexecA collection of CLI execution tools
PackagepodA collection of commands for managing pods.
PackageprojectAllows project import
PackagesshCLI functions for SSH.
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.pod.commands.html b/docs/api/runpod.cli.groups.pod.commands.html new file mode 100644 index 00000000..fcfa2ca5 --- /dev/null +++ b/docs/api/runpod.cli.groups.pod.commands.html @@ -0,0 +1,458 @@ + + + + + + + + runpod.cli.groups.pod.commands + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | Pod | Commands

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Functionconnect_to_podConnects to a pod.
Functioncreate_new_podCreates a pod.
Functionlist_podsLists the pods for the current user.
Functionpod_cliA collection of CLI functions for Pod.
+ + + +
+ +
+
+ + + + + + + + +
+ + @pod_cli.command('connect')
@click.argument('pod_id')
+ def connect_to_pod(pod_id): + + + (source) + + + + + ¶ + +
+
+ +

Connects to a pod.

+
+
+ + + + + + + + +
+ + @pod_cli.command('create')
@click.argument('name', required=False)
@click.option('--image', default=None, help='The image to use for the pod.')
@click.option('--gpu-type', default=None, help='The GPU type to use for the pod.')
@click.option('--gpu-count', default=1, help='The number of GPUs to use for the pod.')
@click.option('--support-public-ip', default=True, help='Whether or not to support a public IP.')
+ def create_new_pod(name, image, gpu_type, gpu_count, support_public_ip): + + + (source) + + + + + ¶ + +
+
+ +

Creates a pod.

+
+
+ + + + + + + + +
+ + @pod_cli.command('list')
+ def list_pods(): + + + (source) + + + + + ¶ + +
+
+ +

Lists the pods for the current user.

+
+
+ + + + + + + + +
+ + @click.group('pod', help='Manage and interact with pods.')
+ def pod_cli(): + + + (source) + + + + + ¶ + +
+
+ +

A collection of CLI functions for Pod.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.pod.html b/docs/api/runpod.cli.groups.pod.html new file mode 100644 index 00000000..454ad5fc --- /dev/null +++ b/docs/api/runpod.cli.groups.pod.html @@ -0,0 +1,345 @@ + + + + + + + + runpod.cli.groups.pod + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

A collection of commands for managing pods.

+
+ +
+ + + + + + + + + +
ModulecommandsRunPod | CLI | Pod | Commands
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.project.commands.html b/docs/api/runpod.cli.groups.project.commands.html new file mode 100644 index 00000000..dfb3ef7b --- /dev/null +++ b/docs/api/runpod.cli.groups.project.commands.html @@ -0,0 +1,478 @@ + + + + + + + + runpod.cli.groups.project.commands + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | Project | Commands

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Functiondeploy_projectDeploy the project to RunPod.
Functionnew_project_wizardCreate a new project.
Functionproject_cliCreate and deploy projects on RunPod.
Functionstart_project_podStart the project development pod from runpod.toml
+ + + +
+ +
+
+ + + + + + + + +
+ + @project_cli.command('deploy')
+ def deploy_project(): + + + (source) + + + + + ¶ + +
+
+ +

Deploy the project to RunPod.

+
+
+ + + + + + + + +
+ + @project_cli.command('new')
@click.option('--name', '-n', 'project_name', type=str, default=None, help='The project name.')
@click.option('--type', '-t', 'model_type', type=click.Choice(['llama2'], case_sensitive=False), default=None, help='The type of Hugging Face model.')
@click.option('--model', '-m', 'model_name', type=str, default=None, help='The name of the Hugging Face model. (e.g. meta-llama/Llama-2-7b)')
@click.option('--init', '-i', 'init_current_dir', is_flag=True, default=False)
+ def new_project_wizard(project_name, model_type, model_name, init_current_dir): + + + (source) + + + + + ¶ + +
+
+ +

Create a new project.

+
+
+ + + + + + + + +
+ + @click.group('project', help='Create, deploy, and manage RunPod projects.')
+ def project_cli(): + + + (source) + + + + + ¶ + +
+
+ +

Create and deploy projects on RunPod.

+
+
+ + + + + + + + +
+ + @project_cli.command('start')
+ def start_project_pod(): + + + (source) + + + + + ¶ + +
+
+ +

Start the project development pod from runpod.toml

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.project.functions.html b/docs/api/runpod.cli.groups.project.functions.html new file mode 100644 index 00000000..ab18f262 --- /dev/null +++ b/docs/api/runpod.cli.groups.project.functions.html @@ -0,0 +1,536 @@ + + + + + + + + runpod.cli.groups.project.functions + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | Project | Functions

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Functioncreate_new_projectCreate a new project.
Functioncreate_project_endpointCreate a project endpoint.
Functionstart_projectStart the project development environment from runpod.toml
ConstantSTARTER_TEMPLATESUndocumented
Function_launch_dev_podLaunch a development pod.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def create_new_project(project_name, runpod_volume_id, cuda_version, python_version, model_type=None, model_name=None, init_current_dir=False): + + + (source) + + + + + ¶ + +
+
+ +

Create a new project.

+
+
+ + + + + + + + +
+ + + def create_project_endpoint(): + + + (source) + + + + + ¶ + +
+
+ +

Create a project endpoint.

+
    +
  • Move code in dev to prod folder
  • +
  • TODO: git commit the diff from current state to new state
  • +
  • Create a serverless template for the project
  • +
  • Create a new endpoint using the template
  • +
+
+
+
+ + + + + + + + +
+ + + def start_project(): + + + (source) + + + + + ¶ + +
+
+ +

Start the project development environment from runpod.toml

+
    +
  • Check if the project pod already exists.
  • +
  • If the project pod does not exist: # SSH into the pod and create a project folder within the volume # Create a folder in the volume for the project that matches the project uuid # Create a folder in the project folder that matches the project name # Copy the project files into the project folder # crate a virtual environment using the python version specified in the project config # install the requirements.txt file
  • +
  • If the project pod does exist:
  • +
+
+
+
+ + + + + + + + +
+ + STARTER_TEMPLATES = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
os.path.join(os.path.dirname(__file__), 'starter_templates')
+
+
+ + + + + + + + +
+ + + def _launch_dev_pod(): + + + (source) + + + + + ¶ + +
+
+ +

Launch a development pod.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.project.helpers.html b/docs/api/runpod.cli.groups.project.helpers.html new file mode 100644 index 00000000..a6e6dbcd --- /dev/null +++ b/docs/api/runpod.cli.groups.project.helpers.html @@ -0,0 +1,562 @@ + + + + + + + + runpod.cli.groups.project.helpers + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Helper functions for project group commands.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Functionattempt_pod_launchAttempt to launch a pod with the given configuration.
Functioncopy_template_filesCopy the template files to the destination directory.
Functionget_project_endpointCheck if a project endpoint exists. Return the endpoint if it exists, else return None.
Functionget_project_podCheck if a project pod exists. Return the pod_id if it exists, else return None.
Functionload_project_configLoad the project config file.
Functionvalidate_project_nameValidate the project name.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def attempt_pod_launch(config, environment_variables): + + + (source) + + + + + ¶ + +
+
+ +

Attempt to launch a pod with the given configuration.

+
+
+ + + + + + + + +
+ + + def copy_template_files(template_dir, destination): + + + (source) + + + + + ¶ + +
+
+ +

Copy the template files to the destination directory.

+
+
+ + + + + + + + +
+ + + def get_project_endpoint(project_id: str): + + + (source) + + + + + ¶ + +
+
+ +

Check if a project endpoint exists. Return the endpoint if it exists, else return None.

+
+
+ + + + + + + + +
+ + + def get_project_pod(project_id: str): + + + (source) + + + + + ¶ + +
+
+ +

Check if a project pod exists. Return the pod_id if it exists, else return None.

+
+
+ + + + + + + + +
+ + + def load_project_config(): + + + (source) + + + + + ¶ + +
+
+ +

Load the project config file.

+
+
+ + + + + + + + +
+ + + def validate_project_name(name): + + + (source) + + + + + ¶ + +
+
+ +

Validate the project name.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.project.html b/docs/api/runpod.cli.groups.project.html new file mode 100644 index 00000000..1ca1e50c --- /dev/null +++ b/docs/api/runpod.cli.groups.project.html @@ -0,0 +1,375 @@ + + + + + + + + runpod.cli.groups.project + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Allows project import

+
+ +
+ + + + + + + + + + + + + + + + + + + +
ModulecommandsRunPod | CLI | Project | Commands
ModulefunctionsRunPod | CLI | Project | Functions
ModulehelpersHelper functions for project group commands.
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.ssh.commands.html b/docs/api/runpod.cli.groups.ssh.commands.html new file mode 100644 index 00000000..f737815e --- /dev/null +++ b/docs/api/runpod.cli.groups.ssh.commands.html @@ -0,0 +1,426 @@ + + + + + + + + runpod.cli.groups.ssh.commands + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | SSH | Commands

+
+ +
+ + + + + + + + + + + + + + + + + + + +
Functionadd_keyAdds an SSH key to the current user account. If no key is provided, one will be generated.
Functionlist_keysLists the SSH keys for the current user.
Functionssh_cliManage and configure SSH keys.
+ + + +
+ +
+
+ + + + + + + + +
+ + @ssh_cli.command('add-key')
@click.option('--key', default=None, help='The public key to add.')
@click.option('--key-file', default=None, help='The file containing the public key to add.')
+ def add_key(key, key_file): + + + (source) + + + + + ¶ + +
+
+ +

Adds an SSH key to the current user account. If no key is provided, one will be generated.

+
+
+ + + + + + + + +
+ + @ssh_cli.command('list-keys')
+ def list_keys(): + + + (source) + + + + + ¶ + +
+
+ +

Lists the SSH keys for the current user.

+
+
+ + + + + + + + +
+ + @click.group('ssh', help='Manage and configure SSH keys for secure access to pods.')
+ def ssh_cli(): + + + (source) + + + + + ¶ + +
+
+ +

Manage and configure SSH keys.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.ssh.functions.html b/docs/api/runpod.cli.groups.ssh.functions.html new file mode 100644 index 00000000..9615d4b5 --- /dev/null +++ b/docs/api/runpod.cli.groups.ssh.functions.html @@ -0,0 +1,517 @@ + + + + + + + + runpod.cli.groups.ssh.functions + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | SSH | Functions

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Functionadd_ssh_keyAdd an SSH public key to the current user's RunPod account. Checks if the key already exists before adding it.
Functiongenerate_ssh_key_pairGenerate an RSA SSH key pair and save it to disk.
Functionget_ssh_key_fingerprintGet the fingerprint of an SSH key
Functionget_user_pub_keysGet the current user's SSH keys
ConstantSSH_FILESUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def add_ssh_key(public_key): + + + (source) + + + + + ¶ + +
+
+ +

Add an SSH public key to the current user's RunPod account. Checks if the key already exists before adding it.

+
+
+ + + + + + + + +
+ + + def generate_ssh_key_pair(filename): + + + (source) + + + + + ¶ + +
+
+ +

Generate an RSA SSH key pair and save it to disk. + +Args: +- filename (str): The base filename to save the key pair. + The public key will have '.pub' appended to it.

+
+
+ + + + + + + + +
+ + + def get_ssh_key_fingerprint(public_key): + + + (source) + + + + + ¶ + +
+
+ +

Get the fingerprint of an SSH key

+
+
+ + + + + + + + +
+ + + def get_user_pub_keys(): + + + (source) + + + + + ¶ + +
+
+ +

Get the current user's SSH keys

+
+
+ + + + + + + + +
+ + SSH_FILES = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
os.path.expanduser('~/.runpod/ssh')
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.groups.ssh.html b/docs/api/runpod.cli.groups.ssh.html new file mode 100644 index 00000000..60caaa8c --- /dev/null +++ b/docs/api/runpod.cli.groups.ssh.html @@ -0,0 +1,360 @@ + + + + + + + + runpod.cli.groups.ssh + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

CLI functions for SSH.

+
+ +
+ + + + + + + + + + + + + + +
ModulecommandsRunPod | CLI | SSH | Commands
ModulefunctionsRunPod | CLI | SSH | Functions
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.html b/docs/api/runpod.cli.html new file mode 100644 index 00000000..44208c43 --- /dev/null +++ b/docs/api/runpod.cli.html @@ -0,0 +1,639 @@ + + + + + + + + runpod.cli + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Allows the CLI to be imported as a module.

+
+ +
+ + + + + + + + + + + + + + + + + + + +
ModuleentryRunPod | CLI | Entry
PackagegroupsAllow CLI groups to be imported from the runpod.cli module.
PackageutilsCollection of utility functions for the CLI
+ + +

From __init__.py:

+ + + + + + + + + + + + + + + + + + + + + + + +
ConstantBASE_DOCKER_IMAGEUndocumented
ConstantENV_VARSUndocumented
ConstantGPU_TYPESUndocumented
ConstantSTOP_EVENTUndocumented
+
+ +
+
+ + + + + + + + +
+ + STOP_EVENT = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
threading.Event()
+
+
+ + + + + + + + +
+ + BASE_DOCKER_IMAGE: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'runpod/base:0.4.3-cuda{cuda_version}'
+
+
+ + + + + + + + +
+ + GPU_TYPES: list[str] = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
['NVIDIA RTX A4000',
+ 'NVIDIA RTX A4500',
+ 'NVIDIA RTX A5000',
+ 'NVIDIA GeForce RTX 3090',
+ 'NVIDIA RTX A6000']
+
+
+ + + + + + + + +
+ + ENV_VARS: dict[str, str] = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
{'POD_INACTIVITY_TIMEOUT': '120',
+ 'RUNPOD_DEBUG_LEVEL': 'debug',
+ 'UVICORN_LOG_LEVEL': 'warning'}
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.utils.html b/docs/api/runpod.cli.utils.html new file mode 100644 index 00000000..0d737651 --- /dev/null +++ b/docs/api/runpod.cli.utils.html @@ -0,0 +1,428 @@ + + + + + + + + runpod.cli.utils + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Collection of utility functions for the CLI

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Modulerp_infoRunPod | CLI | Utils | rp_info
Modulerp_runpodignoreReads the .runpodignore file and returns a list of files to ignore.
Modulerp_syncWatches a directory for changes and syncs them to a remote directory.
Modulerp_userspaceRunPod | CLI | Utils | Userspace
Modulessh_cmdRunPod | CLI | Utils | SSH Command
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.utils.rp_info.html b/docs/api/runpod.cli.utils.rp_info.html new file mode 100644 index 00000000..f0640263 --- /dev/null +++ b/docs/api/runpod.cli.utils.rp_info.html @@ -0,0 +1,374 @@ + + + + + + + + runpod.cli.utils.rp_info + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | Utils | rp_info

+

A collection of utility functions for retrieving information about pods.

+
+
+ +
+ + + + + + + + + +
Functionget_pod_ssh_ip_portReturns the IP and port for SSH access to a pod.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def get_pod_ssh_ip_port(pod_id, timeout=300): + + + (source) + + + + + ¶ + +
+
+ +

Returns the IP and port for SSH access to a pod.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.utils.rp_runpodignore.html b/docs/api/runpod.cli.utils.rp_runpodignore.html new file mode 100644 index 00000000..66658ab0 --- /dev/null +++ b/docs/api/runpod.cli.utils.rp_runpodignore.html @@ -0,0 +1,459 @@ + + + + + + + + runpod.cli.utils.rp_runpodignore + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Reads the .runpodignore file and returns a list of files to ignore.

+
+ +
+ + + + + + + + + + + + + + + + + + + +
Functionget_ignore_listReads the .runpodignore file and returns a list of files to ignore.
Functionshould_ignoreReturns True if the file should be ignored, False otherwise.
ConstantEXCLUDE_PATTERNSUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def get_ignore_list(): + + + (source) + + + + + ¶ + +
+
+ +

Reads the .runpodignore file and returns a list of files to ignore.

+
+
+ + + + + + + + +
+ + + def should_ignore(file_path, ignore_list=None): + + + (source) + + + + + ¶ + +
+
+ +

Returns True if the file should be ignored, False otherwise.

+
+
+ + + + + + + + +
+ + EXCLUDE_PATTERNS: list[str] = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
['__pycache__/', '*.pyc', '.*.swp', '.git/', '*.tmp', '*.log']
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.utils.rp_sync.WatcherHandler.html b/docs/api/runpod.cli.utils.rp_sync.WatcherHandler.html new file mode 100644 index 00000000..5d6aa278 --- /dev/null +++ b/docs/api/runpod.cli.utils.rp_sync.WatcherHandler.html @@ -0,0 +1,568 @@ + + + + + + + + runpod.cli.utils.rp_sync.WatcherHandler + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class WatcherHandler(FileSystemEventHandler): (source)

Constructor: WatcherHandler(action_function, local_path)

+

View In Hierarchy

+
+ +
+

Watches a directory for changes and syncs them to a remote directory.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Undocumented
Methodon_any_eventCalled on any event.
Instance Variableaction_functionUndocumented
Instance VariabledebouncerUndocumented
Instance Variableignore_listUndocumented
Instance Variablelocal_pathUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, action_function, local_path): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def on_any_event(self, event): + + + (source) + + + + + ¶ + +
+
+ +

Called on any event.

+
+
+ + + + + + + + +
+ + action_function = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + debouncer = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + ignore_list = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + local_path = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.utils.rp_sync.html b/docs/api/runpod.cli.utils.rp_sync.html new file mode 100644 index 00000000..1a1cab4b --- /dev/null +++ b/docs/api/runpod.cli.utils.rp_sync.html @@ -0,0 +1,432 @@ + + + + + + + + runpod.cli.utils.rp_sync + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Watches a directory for changes and syncs them to a remote directory.

+
+ +
+ + + + + + + + + + + + + + + + + + + +
ClassWatcherHandlerWatches a directory for changes and syncs them to a remote directory.
Functionstart_watcherStarts the watcher.
Functionsync_directorySyncs a local directory to a remote directory.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def start_watcher(action_function, local_path): + + + (source) + + + + + ¶ + +
+
+ +

Starts the watcher.

+
+
+ + + + + + + + +
+ + + def sync_directory(ssh_client, local_path, remote_path): + + + (source) + + + + + ¶ + +
+
+ +

Syncs a local directory to a remote directory.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.utils.rp_userspace.html b/docs/api/runpod.cli.utils.rp_userspace.html new file mode 100644 index 00000000..1a48158a --- /dev/null +++ b/docs/api/runpod.cli.utils.rp_userspace.html @@ -0,0 +1,377 @@ + + + + + + + + runpod.cli.utils.rp_userspace + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | Utils | Userspace

+
+ +
+ + + + + + + + + +
Functionfind_ssh_key_fileFind the SSH key file that can be used to connect to the pod.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def find_ssh_key_file(pod_ip, pod_port): + + + (source) + + + + + ¶ + +
+
+ +

Find the SSH key file that can be used to connect to the pod. + +- Try all the keys in the SSH_KEY_PATH directory +- If none of the keys work, return None +- If multiple keys work, return the first one that works +- Returns the path to the key file

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.utils.ssh_cmd.SSHConnection.html b/docs/api/runpod.cli.utils.ssh_cmd.SSHConnection.html new file mode 100644 index 00000000..99bd2630 --- /dev/null +++ b/docs/api/runpod.cli.utils.ssh_cmd.SSHConnection.html @@ -0,0 +1,972 @@ + + + + + + + + runpod.cli.utils.ssh_cmd.SSHConnection + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class SSHConnection: (source)

Constructor: SSHConnection(pod_id)

+

View In Hierarchy

+
+ +
+

Connect and run commands over SSH.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__enter__Undocumented
Method__exit__Undocumented
Method__init__Undocumented
MethodcloseClose the SSH connection.
Methodget_fileFetch a remote file to local machine over SSH.
Methodlaunch_terminalLaunch an interactive terminal over SSH.
Methodput_fileCopy local file to remote machine over SSH.
MethodrsyncSync a local directory to a remote directory over SSH.
Methodrun_commandsRuns a list of bash commands over SSH.
Instance Variablekey_fileUndocumented
Instance Variablepod_idUndocumented
Instance Variablepod_ipUndocumented
Instance Variablepod_portUndocumented
Instance VariablesshUndocumented
Method_get_ssh_optionsGet the SSH options for connecting to the pod.
Method_signal_handlerHandle signals.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __enter__(self): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def __exit__(self, exc_type, exc_value, traceback): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def __init__(self, pod_id): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def close(self): + + + (source) + + + + + ¶ + +
+
+ +

Close the SSH connection.

+
+
+ + + + + + + + +
+ + + def get_file(self, remote_path, local_path): + + + (source) + + + + + ¶ + +
+
+ +

Fetch a remote file to local machine over SSH.

+
+
+ + + + + + + + +
+ + + def launch_terminal(self): + + + (source) + + + + + ¶ + +
+
+ +

Launch an interactive terminal over SSH.

+
+
+ + + + + + + + +
+ + + def put_file(self, local_path, remote_path): + + + (source) + + + + + ¶ + +
+
+ +

Copy local file to remote machine over SSH.

+
+
+ + + + + + + + +
+ + + def rsync(self, local_path, remote_path, quiet=False): + + + (source) + + + + + ¶ + +
+
+ +

Sync a local directory to a remote directory over SSH. + +A .runpodignore file can be used to ignore files and directories. +This file should be placed in the root of the local directory to sync. + +Args: + local_path (str): The local directory to sync. + remote_path (str): The remote directory to sync.

+
+
+ + + + + + + + +
+ + + def run_commands(self, commands): + + + (source) + + + + + ¶ + +
+
+ +

Runs a list of bash commands over SSH.

+
+
+ + + + + + + + +
+ + key_file = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + pod_port = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + def _get_ssh_options(self): + + + (source) + + + + + ¶ + +
+
+ +

Get the SSH options for connecting to the pod.

+
+
+ + + + + + + + +
+ + + def _signal_handler(self, signum, frame): + + + (source) + + + + + ¶ + +
+
+ +

Handle signals.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.cli.utils.ssh_cmd.html b/docs/api/runpod.cli.utils.ssh_cmd.html new file mode 100644 index 00000000..8ec762b7 --- /dev/null +++ b/docs/api/runpod.cli.utils.ssh_cmd.html @@ -0,0 +1,347 @@ + + + + + + + + runpod.cli.utils.ssh_cmd + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | CLI | Utils | SSH Command

+

Connect and run commands over SSH.

+
+
+ +
+ + + + + + + + + +
ClassSSHConnectionConnect and run commands over SSH.
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.endpoint.asyncio.asyncio_runner.Endpoint.html b/docs/api/runpod.endpoint.asyncio.asyncio_runner.Endpoint.html new file mode 100644 index 00000000..91093524 --- /dev/null +++ b/docs/api/runpod.endpoint.asyncio.asyncio_runner.Endpoint.html @@ -0,0 +1,651 @@ + + + + + + + + runpod.endpoint.asyncio.asyncio_runner.Endpoint + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class Endpoint: (source)

Constructor: Endpoint(endpoint_id, session)

+

View In Hierarchy

+
+ +
+

Class for running endpoint

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Undocumented
Async MethodhealthChecks health of endpoint
Async Methodpurge_queuePurges queue of endpoint
Async MethodrunRuns endpoint with specified input
Instance Variableendpoint_idUndocumented
Instance Variableendpoint_urlUndocumented
Instance VariableheadersUndocumented
Instance VariablesessionUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, endpoint_id: str, session: aiohttp.ClientSession): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + async def health(self) -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Checks health of endpoint + +Returns: + Health of endpoint

+
+
+ + + + + + + + +
+ + + async def purge_queue(self) -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Purges queue of endpoint + +Returns: + Purge status

+
+
+ + + + + + + + +
+ + + async def run(self, endpoint_input: dict) -> Job: + + + (source) + + + + + ¶ + +
+
+ +

Runs endpoint with specified input + +Args: + endpoint_input: any dictionary with input + +Returns: + Newly created job

+
+
+ + + + + + + + +
+ + endpoint_id = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + endpoint_url = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + headers = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + session = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.endpoint.asyncio.asyncio_runner.Job.html b/docs/api/runpod.endpoint.asyncio.asyncio_runner.Job.html new file mode 100644 index 00000000..128afba5 --- /dev/null +++ b/docs/api/runpod.endpoint.asyncio.asyncio_runner.Job.html @@ -0,0 +1,905 @@ + + + + + + + + runpod.endpoint.asyncio.asyncio_runner.Job + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ + + +
+

Class representing a job for an asynchronous endpoint

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Undocumented
Async MethodcancelCancels current job
Async MethodoutputWaits for serverless API job to complete or fail
Async MethodstatusGets jobs' status
Async MethodstreamReturns a generator that yields the output of the job request.
Instance Variableendpoint_idUndocumented
Instance Variableendpoint_url_baseUndocumented
Instance VariableheadersUndocumented
Instance Variablejob_idUndocumented
Instance Variablejob_outputUndocumented
Instance Variablejob_statusUndocumented
Instance VariablesessionUndocumented
Async Method_fetch_jobReturns the raw json of the status, reaises an exception if invalid.
Async Method_wait_for_completionUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, endpoint_id: str, job_id: str, session: aiohttp.ClientSession): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + async def cancel(self) -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Cancels current job + +Returns: + Output of cancel operation

+
+
+ + + + + + + + +
+ + + async def output(self, timeout: int = 0) -> Any: + + + (source) + + + + + ¶ + +
+
+ +

Waits for serverless API job to complete or fail + +Returns: + Output of job +Raises: + KeyError if job Failed

+
+
+ + + + + + + + +
+ + + async def status(self) -> str: + + + (source) + + + + + ¶ + +
+
+ +

Gets jobs' status + +Returns: + COMPLETED, FAILED or IN_PROGRESS

+
+
+ + + + + + + + +
+ + + async def stream(self) -> Any: + + + (source) + + + + + ¶ + +
+
+ +

Returns a generator that yields the output of the job request.

+
+
+ + + + + + + + +
+ + endpoint_id = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + endpoint_url_base = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + headers = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + job_output = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + job_status = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + session = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + async def _fetch_job(self, source: str = 'status') -> Dict[str, Any]: + + + (source) + + + + + ¶ + +
+
+ +

Returns the raw json of the status, reaises an exception if invalid. + +Args: + source: The URL source path of the job status.

+
+
+ + + + + + + + +
+ + + async def _wait_for_completion(self): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.endpoint.asyncio.asyncio_runner.html b/docs/api/runpod.endpoint.asyncio.asyncio_runner.html new file mode 100644 index 00000000..0210b7e0 --- /dev/null +++ b/docs/api/runpod.endpoint.asyncio.asyncio_runner.html @@ -0,0 +1,320 @@ + + + + + + + + runpod.endpoint.asyncio.asyncio_runner + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Module for running endpoints asynchronously.

+
+ +
+ + + + + + + + + + + + + + +
ClassEndpointClass for running endpoint
ClassJobClass representing a job for an asynchronous endpoint
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.endpoint.asyncio.html b/docs/api/runpod.endpoint.asyncio.html new file mode 100644 index 00000000..68b99ddf --- /dev/null +++ b/docs/api/runpod.endpoint.asyncio.html @@ -0,0 +1,325 @@ + + + + + + + + runpod.endpoint.asyncio + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Asyncio endpoint for runpod.

+
+ +
+ + + + + + + + + +
Moduleasyncio_runnerModule for running endpoints asynchronously.
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.endpoint.helpers.html b/docs/api/runpod.endpoint.helpers.html new file mode 100644 index 00000000..3a7c34c8 --- /dev/null +++ b/docs/api/runpod.endpoint.helpers.html @@ -0,0 +1,483 @@ + + + + + + + + runpod.endpoint.helpers + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Helper functions for the RunPod Endpoint API.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Functionis_completedReturns true if status is one of the possible final states for a serverless request.
ConstantAPI_KEY_NOT_SET_MSGUndocumented
ConstantFINAL_STATESUndocumented
ConstantUNAUTHORIZED_MSGUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def is_completed(status: str) -> bool: + + + (source) + + + + + ¶ + +
+
+ +

Returns true if status is one of the possible final states for a serverless request.

+
+
+ + + + + + + + +
+ + API_KEY_NOT_SET_MSG: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'Expected `run_pod.api_key` to be initialized. You can solve this by setting `ru
+n_pod.api_key = \'your-key\'. An API key can be generated at https://runpod.io/c
+onsole/user/settings'
+
+
+ + + + + + + + +
+ + FINAL_STATES: list[str] = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
['COMPLETED', 'FAILED', 'TIMED_OUT']
+
+
+ + + + + + + + +
+ + UNAUTHORIZED_MSG: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'401 Unauthorized | Make sure Runpod API key is set and valid.'
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.endpoint.html b/docs/api/runpod.endpoint.html new file mode 100644 index 00000000..c893dc6c --- /dev/null +++ b/docs/api/runpod.endpoint.html @@ -0,0 +1,458 @@ + + + + + + + + runpod.endpoint + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Allows endpoints to be imported as a module.

+
+ +
+ + + + + + + + + + + + + + + + + + + +
PackageasyncioAsyncio endpoint for runpod.
ModulehelpersHelper functions for the RunPod Endpoint API.
ModulerunnerRunPod | Python | Endpoint Runner
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.endpoint.runner.Endpoint.html b/docs/api/runpod.endpoint.runner.Endpoint.html new file mode 100644 index 00000000..481bf302 --- /dev/null +++ b/docs/api/runpod.endpoint.runner.Endpoint.html @@ -0,0 +1,631 @@ + + + + + + + + runpod.endpoint.runner.Endpoint + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class Endpoint: (source)

Constructor: Endpoint(endpoint_id)

+

View In Hierarchy

+
+ +
+

Manages an endpoint to run jobs on the RunPod service.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Initialize an Endpoint instance with the given endpoint ID.
MethodhealthCheck the health of the endpoint (number/state of workers, number/state of requests).
Methodpurge_queuePurges the endpoint's job queue and returns the result of the purge request.
MethodrunRun the endpoint with the given input.
Methodrun_syncRun the endpoint with the given input synchronously.
Instance Variableendpoint_idUndocumented
Instance Variablerp_clientUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, endpoint_id: str): + + + (source) + + + + + ¶ + +
+
+ +

Initialize an Endpoint instance with the given endpoint ID. + +Args: + endpoint_id: The identifier for the endpoint. + +Example: + >>> endpoint = runpod.Endpoint("ENDPOINT_ID") + >>> run_request = endpoint.run({"your_model_input_key": "your_model_input_value"}) + >>> print(run_request.status()) + >>> print(run_request.output())

+
+
+ + + + + + + + +
+ + + def health(self, timeout: int = 3) -> Dict[str, Any]: + + + (source) + + + + + ¶ + +
+
+ +

Check the health of the endpoint (number/state of workers, number/state of requests). + +Args: + timeout: The number of seconds to wait for the server to respond before giving up.

+
+
+ + + + + + + + +
+ + + def purge_queue(self, timeout: int = 3) -> Dict[str, Any]: + + + (source) + + + + + ¶ + +
+
+ +

Purges the endpoint's job queue and returns the result of the purge request. + +Args: + timeout: The number of seconds to wait for the server to respond before giving up.

+
+
+ + + + + + + + +
+ + + def run(self, request_input: Dict[str, Any]) -> Job: + + + (source) + + + + + ¶ + +
+
+ +

Run the endpoint with the given input. + +Args: + request_input: The input to pass into the endpoint. + +Returns: + A Job instance for the run request.

+
+
+ + + + + + + + +
+ + + def run_sync(self, request_input: Dict[str, Any], timeout: int = 86400) -> Dict[str, Any]: + + + (source) + + + + + ¶ + +
+
+ +

Run the endpoint with the given input synchronously. + +Args: + request_input: The input to pass into the endpoint.

+
+
+ + + + + + + + +
+ + endpoint_id = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + rp_client = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.endpoint.runner.Job.html b/docs/api/runpod.endpoint.runner.Job.html new file mode 100644 index 00000000..c2db2478 --- /dev/null +++ b/docs/api/runpod.endpoint.runner.Job.html @@ -0,0 +1,786 @@ + + + + + + + + runpod.endpoint.runner.Job + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ + + +
+

Represents a job to be run on the RunPod service.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Initialize a Job instance with the given endpoint ID and job ID.
MethodcancelCancels the job and returns the result of the cancellation request.
MethodoutputReturns the output of the job request.
MethodstatusReturns the status of the job request.
MethodstreamReturns a generator that yields the output of the job request.
Instance Variableendpoint_idUndocumented
Instance Variablejob_idUndocumented
Instance Variablejob_outputUndocumented
Instance Variablejob_statusUndocumented
Instance Variablerp_clientUndocumented
Method_fetch_jobReturns the raw json of the status, raises an exception if invalid
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, endpoint_id: str, job_id: str, client: RunPodClient): + + + (source) + + + + + ¶ + +
+
+ +

Initialize a Job instance with the given endpoint ID and job ID. + +Args: + endpoint_id: The identifier for the endpoint. + job_id: The identifier for the job. + client: An instance of the RunPodClient to make requests with.

+
+
+ + + + + + + + +
+ + + def cancel(self, timeout: int = 3) -> Any: + + + (source) + + + + + ¶ + +
+
+ +

Cancels the job and returns the result of the cancellation request. + +Args: + timeout: The number of seconds to wait for the server to respond before giving up.

+
+
+ + + + + + + + +
+ + + def output(self, timeout: int = 0) -> Any: + + + (source) + + + + + ¶ + +
+
+ +

Returns the output of the job request. + +Args: + timeout: The number of seconds to wait for the server to send data before giving up.

+
+
+ + + + + + + + +
+ + + def status(self): + + + (source) + + + + + ¶ + +
+
+ +

Returns the status of the job request.

+
+
+ + + + + + + + +
+ + + def stream(self) -> Any: + + + (source) + + + + + ¶ + +
+
+ +

Returns a generator that yields the output of the job request.

+
+
+ + + + + + + + +
+ + endpoint_id = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + job_output = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + job_status = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + rp_client = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + def _fetch_job(self, source: str = 'status') -> Dict[str, Any]: + + + (source) + + + + + ¶ + +
+
+ +

Returns the raw json of the status, raises an exception if invalid

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.endpoint.runner.RunPodClient.html b/docs/api/runpod.endpoint.runner.RunPodClient.html new file mode 100644 index 00000000..dc39d753 --- /dev/null +++ b/docs/api/runpod.endpoint.runner.RunPodClient.html @@ -0,0 +1,623 @@ + + + + + + + + runpod.endpoint.runner.RunPodClient + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class RunPodClient: (source)

Constructor: RunPodClient()

+

View In Hierarchy

+
+ +
+

A client for running endpoint calls.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Initialize a RunPodClient instance.
MethodgetGet from the endpoint.
MethodpostPost to the endpoint.
Instance Variableendpoint_url_baseUndocumented
Instance VariableheadersUndocumented
Instance Variablerp_sessionUndocumented
Method_requestMake a request to the specified endpoint using the given HTTP method.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self): + + + (source) + + + + + ¶ + +
+
+ +

Initialize a RunPodClient instance. + +Raises: + RuntimeError: If the API key has not been initialized.

+
+
+ + + + + + + + +
+ + + def get(self, endpoint: str, timeout: int = 10): + + + (source) + + + + + ¶ + +
+
+ +

Get from the endpoint.

+
+
+ + + + + + + + +
+ + + def post(self, endpoint: str, data: dict, timeout: int = 10): + + + (source) + + + + + ¶ + +
+
+ +

Post to the endpoint.

+
+
+ + + + + + + + +
+ + endpoint_url_base = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + headers = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + rp_session = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + def _request(self, method: str, endpoint: str, data: Optional[dict] = None, timeout: int = 10): + + + (source) + + + + + ¶ + +
+
+ +

Make a request to the specified endpoint using the given HTTP method. + +Args: + method: The HTTP method to use ('GET' or 'POST'). + endpoint: The endpoint path to which the request will be made. + data: The JSON payload to send with the request. + timeout: The number of seconds to wait for the server to send data before giving up. + +Returns: + The JSON response from the server. + +Raises: + RuntimeError: If the response returns a 401 Unauthorized status. + requests.HTTPError: If the response contains an unsuccessful status code.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.endpoint.runner.html b/docs/api/runpod.endpoint.runner.html new file mode 100644 index 00000000..1e33719f --- /dev/null +++ b/docs/api/runpod.endpoint.runner.html @@ -0,0 +1,355 @@ + + + + + + + + runpod.endpoint.runner + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod | Python | Endpoint Runner

+
+ +
+ + + + + + + + + + + + + + + + + + + +
ClassEndpointManages an endpoint to run jobs on the RunPod service.
ClassJobRepresents a job to be run on the RunPod service.
ClassRunPodClientA client for running endpoint calls.
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.error.AuthenticationError.html b/docs/api/runpod.error.AuthenticationError.html new file mode 100644 index 00000000..c6a8fc0f --- /dev/null +++ b/docs/api/runpod.error.AuthenticationError.html @@ -0,0 +1,363 @@ + + + + + + + + runpod.error.AuthenticationError + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ exception documentation +
+ +
+

class AuthenticationError(RunPodError): (source)

Constructor: AuthenticationError(message)

+

View In Hierarchy

+
+ +
+

Raised when authentication fails

+
+ +
+ + +

+ Inherited from RunPodError: +

+ + + + + + + + + + + + + + + + + + + +
Method__init__Undocumented
Method__str__Undocumented
Instance VariablemessageUndocumented
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.error.QueryError.html b/docs/api/runpod.error.QueryError.html new file mode 100644 index 00000000..842c03d2 --- /dev/null +++ b/docs/api/runpod.error.QueryError.html @@ -0,0 +1,442 @@ + + + + + + + + runpod.error.QueryError + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ exception documentation +
+ +
+

class QueryError(RunPodError): (source)

Constructor: QueryError(message, query)

+

View In Hierarchy

+
+ +
+

Raised when a GraphQL query fails

+
+ +
+ + + + + + + + + + + + + + +
Method__init__Undocumented
Instance VariablequeryUndocumented
+ +

+ Inherited from RunPodError: +

+ + + + + + + + + + + + + + +
Method__str__Undocumented
Instance VariablemessageUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, message: Optional[str] = None, query: Optional[str] = None): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.error.RunPodError.html b/docs/api/runpod.error.RunPodError.html new file mode 100644 index 00000000..edaed977 --- /dev/null +++ b/docs/api/runpod.error.RunPodError.html @@ -0,0 +1,439 @@ + + + + + + + + runpod.error.RunPodError + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ exception documentation +
+ + + +
+

Base class for all runpod errors

+
+ +
+ + + + + + + + + + + + + + + + + + + +
Method__init__Undocumented
Method__str__Undocumented
Instance VariablemessageUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, message: Optional[str] = None): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def __str__(self): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + message = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.error.html b/docs/api/runpod.error.html new file mode 100644 index 00000000..605a765f --- /dev/null +++ b/docs/api/runpod.error.html @@ -0,0 +1,460 @@ + + + + + + + + runpod.error + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

runpd | error.py

+

This file contains the error classes for the runpod package.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
ExceptionAuthenticationErrorRaised when authentication fails
ExceptionQueryErrorRaised when a GraphQL query fails
ExceptionRunPodErrorBase class for all runpod errors
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.html b/docs/api/runpod.html new file mode 120000 index 00000000..64233a9e --- /dev/null +++ b/docs/api/runpod.html @@ -0,0 +1 @@ +index.html \ No newline at end of file diff --git a/docs/api/runpod.serverless.core.CGetJobResult.html b/docs/api/runpod.serverless.core.CGetJobResult.html new file mode 100644 index 00000000..5e639f1a --- /dev/null +++ b/docs/api/runpod.serverless.core.CGetJobResult.html @@ -0,0 +1,437 @@ + + + + + + + + runpod.serverless.core.CGetJobResult + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class CGetJobResult(ctypes.Structure): (source)

+

View In Hierarchy

+
+ +
+

result of _runpod_sls_get_jobs. +## fields +- `res_len` the number bytes were written to the `dst_buf` passed to _runpod_sls_get_jobs. +- `status_code` tells you what happened. +see CGetJobResult.status_code for more information.

+
+ +
+ + + + + + + + + + + + + + +
Method__str__Undocumented
Class Variable_fields_Undocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __str__(self) -> str: + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + _fields_ = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.core.Hook.html b/docs/api/runpod.serverless.core.Hook.html new file mode 100644 index 00000000..38a5e42c --- /dev/null +++ b/docs/api/runpod.serverless.core.Hook.html @@ -0,0 +1,1063 @@ + + + + + + + + runpod.serverless.core.Hook + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class Hook: (source)

+

View In Hierarchy

+
+ +
+

Singleton class for interacting with sls_core.so

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Undocumented
Method__new__Undocumented
Methodfinish_streamtell the SLS queue that the result of a streaming job is complete.
Methodget_jobsGet a job or jobs from the queue. The jobs are returned as a list of Job objects.
Methodpost_outputsend the result of a job to AI-API. Returns True if the task was successfully stored, False otherwise.
Methodprogress_updatesend a progress update to AI-API.
Async Methodstream_outputsend part of a streaming result to AI-API.
Instance Variablerust_crate_versionUndocumented
Instance Variablerust_so_pathUndocumented
Method_json_serialize_job_dataUndocumented
Class Variable_instanceUndocumented
Instance Variable_finish_streamUndocumented
Instance Variable_get_jobsUndocumented
Instance Variable_initializedUndocumented
Instance Variable_post_outputUndocumented
Instance Variable_progress_updateUndocumented
Instance Variable_stream_outputUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, rust_so_path: Optional[str] = None): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def __new__(cls): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def finish_stream(self, job_id: str) -> bool: + + + (source) + + + + + ¶ + +
+
+ +

tell the SLS queue that the result of a streaming job is complete.

+
+
+ + + + + + + + +
+ + + def get_jobs(self, max_concurrency: int, max_jobs: int) -> List[Dict[str, Any]]: + + + (source) + + + + + ¶ + +
+
+ +

Get a job or jobs from the queue. The jobs are returned as a list of Job objects.

+
+
+ + + + + + + + +
+ + + def post_output(self, job_id: str, job_output: bytes) -> bool: + + + (source) + + + + + ¶ + +
+
+ +

send the result of a job to AI-API. Returns True if the task was successfully stored, False otherwise.

+
+
+ + + + + + + + +
+ + + def progress_update(self, job_id: str, json_data: bytes) -> bool: + + + (source) + + + + + ¶ + +
+
+ +

send a progress update to AI-API.

+
+
+ + + + + + + + +
+ + + async def stream_output(self, job_id: str, job_output: bytes) -> bool: + + + (source) + + + + + ¶ + +
+
+ +

send part of a streaming result to AI-API.

+
+
+ + + + + + + + +
+ + rust_crate_version = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + rust_so_path = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + def _json_serialize_job_data(self, job_data: Any) -> bytes: + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + _instance = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + _finish_stream: Callable = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + _initialized: bool = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + _post_output: Callable = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + _progress_update: Callable = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + _stream_output: Callable = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.core.html b/docs/api/runpod.serverless.core.html new file mode 100644 index 00000000..a837addc --- /dev/null +++ b/docs/api/runpod.serverless.core.html @@ -0,0 +1,604 @@ + + + + + + + + runpod.serverless.core + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Core functionality for the runpod serverless worker.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassCGetJobResult result of _runpod_sls_get_jobs. ## fields - `res_len` the number bytes were written to the `dst_buf` passed to _runpod_sls_get_jobs. - `status_code` tells you what happened. see CGetJobResult.status_code for more information.
ClassHookSingleton class for interacting with sls_core.so
FunctionmainRun the worker in an asyncio event loop.
Async FunctionrunRun the worker.
VariablelogUndocumented
Async Function_process_jobProcess a single job.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def main(config: Dict[str, Any]): + + + (source) + + + + + ¶ + +
+
+ +

Run the worker in an asyncio event loop.

+
+
+ + + + + + + + +
+ + + async def run(config: Dict[str, Any]): + + + (source) + + + + + ¶ + +
+
+ +

Run the worker. + +Args: + config: A dictionary containing the following keys: + handler: A function that takes a job and returns a result.

+
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + async def _process_job(config: Dict[str, Any], job: Dict[str, Any], hook) -> Dict[str, Any]: + + + (source) + + + + + ¶ + +
+
+ +

Process a single job.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.html b/docs/api/runpod.serverless.html new file mode 100644 index 00000000..1e6e7b1c --- /dev/null +++ b/docs/api/runpod.serverless.html @@ -0,0 +1,783 @@ + + + + + + + + runpod.serverless + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Contains the main entrypoint for the RunPod Serverless Worker.

+

Arguments can be passed in when the worker is started, and will be passed to the worker.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ModulecoreCore functionality for the runpod serverless worker.
PackagemodulesAllows modules to be imported from the modules directory.
PackageutilsAllows for the import of all modules in the utils directory.
Moduleworkerrunpod | serverless | worker_loop.py Called to convert a container into a worker pod for the runpod serverless platform.
+ + +

From __init__.py:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionstartStarts the serverless worker.
VariablelogUndocumented
VariableparserUndocumented
Function_get_realtime_concurrencyGet the realtime concurrency from the environment variable if it exists.
Function_get_realtime_portGet the realtime port from the environment variable if it exists.
Function_set_config_argsSets the config rp_args, removing any recognized arguments from sys.argv. Returns: config
Function_signal_handlerHandles the SIGINT signal.
+
+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + def _set_config_args(config) -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Sets the config rp_args, removing any recognized arguments from sys.argv. Returns: config

+
+
+ + + + + + + + +
+ + + def _get_realtime_port() -> int: + + + (source) + + + + + ¶ + +
+
+ +

Get the realtime port from the environment variable if it exists.

+
+
+ + + + + + + + +
+ + + def _get_realtime_concurrency() -> int: + + + (source) + + + + + ¶ + +
+
+ +

Get the realtime concurrency from the environment variable if it exists.

+
+
+ + + + + + + + +
+ + + def _signal_handler(sig, frame): + + + (source) + + + + + ¶ + +
+
+ +

Handles the SIGINT signal.

+
+
+ + + + + + + + +
+ + + def start(config: Dict[str, Any]): + + + (source) + + + + + ¶ + +
+
+ +

Starts the serverless worker.

+

config (Dict[str, Any]): Configuration parameters for the worker.

+

config["handler"] (Callable): The handler function to run. config["concurrency_modifier"] (Callable): Concurrency modifier function to run.

+

config["rp_args"] (Dict[str, Any]): Arguments for the worker, populated by runtime arguments.

+
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.html b/docs/api/runpod.serverless.modules.html new file mode 100644 index 00000000..0fab3fb6 --- /dev/null +++ b/docs/api/runpod.serverless.modules.html @@ -0,0 +1,561 @@ + + + + + + + + runpod.serverless.modules + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Allows modules to be imported from the modules directory.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Modulerp_fastapiUsed to launch the FastAPI web server when worker is running in API mode.
Modulerp_handlerRetrieve handler info.
Modulerp_httpThis module is used to handle HTTP requests.
Modulerp_jobJob related helpers.
Modulerp_localrunpod | serverless | rp_local.py Provides the local testing functionality for runpod serverless worker.
Modulerp_loggerPodWorker | modules | logging.py
Modulerp_pingThis module defines the Heartbeat class. The heartbeat is responsible for sending periodic pings to the Runpod server.
Modulerp_progressRunPod Progress Module
Modulerp_scalerunpod | serverless | rp_scale.py Provides the functionality for scaling the runpod serverless worker.
Modulerp_tipsRunPod Tips
Moduleworker_stateHandles getting stuff from environment variables and updating the global state like job id.
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_fastapi.DefaultRequest.html b/docs/api/runpod.serverless.modules.rp_fastapi.DefaultRequest.html new file mode 100644 index 00000000..f907c48e --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_fastapi.DefaultRequest.html @@ -0,0 +1,530 @@ + + + + + + + + runpod.serverless.modules.rp_fastapi.DefaultRequest + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class DefaultRequest: (source)

+

View In Hierarchy

+
+ +
+

Represents a test input.

+
+ +
+ + + + + + + + + + + + + + +
Class VariableinputUndocumented
Class VariablewebhookUndocumented
+ + + +
+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_fastapi.Job.html b/docs/api/runpod.serverless.modules.rp_fastapi.Job.html new file mode 100644 index 00000000..8b466a5a --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_fastapi.Job.html @@ -0,0 +1,530 @@ + + + + + + + + runpod.serverless.modules.rp_fastapi.Job + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class Job: (source)

+

View In Hierarchy

+
+ +
+

Represents a job.

+
+ +
+ + + + + + + + + + + + + + +
Class VariableidUndocumented
Class VariableinputUndocumented
+ + + +
+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_fastapi.JobOutput.html b/docs/api/runpod.serverless.modules.rp_fastapi.JobOutput.html new file mode 100644 index 00000000..0d54c4b4 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_fastapi.JobOutput.html @@ -0,0 +1,614 @@ + + + + + + + + runpod.serverless.modules.rp_fastapi.JobOutput + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class JobOutput: (source)

+

View In Hierarchy

+
+ +
+

Represents the output of a job.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Class VariableerrorUndocumented
Class VariableidUndocumented
Class VariableoutputUndocumented
Class VariablestatusUndocumented
+ + + +
+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_fastapi.StreamOutput.html b/docs/api/runpod.serverless.modules.rp_fastapi.StreamOutput.html new file mode 100644 index 00000000..3d205232 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_fastapi.StreamOutput.html @@ -0,0 +1,614 @@ + + + + + + + + runpod.serverless.modules.rp_fastapi.StreamOutput + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class StreamOutput: (source)

+

View In Hierarchy

+
+ +
+

Stream representation of a job.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Class VariableerrorUndocumented
Class VariableidUndocumented
Class VariablestatusUndocumented
Class VariablestreamUndocumented
+ + + +
+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_fastapi.TestJob.html b/docs/api/runpod.serverless.modules.rp_fastapi.TestJob.html new file mode 100644 index 00000000..5449ccb7 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_fastapi.TestJob.html @@ -0,0 +1,572 @@ + + + + + + + + runpod.serverless.modules.rp_fastapi.TestJob + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class TestJob: (source)

+

View In Hierarchy

+
+ +
+

Represents a test job. input can be any type of data.

+
+ +
+ + + + + + + + + + + + + + + + + + + +
Class VariableidUndocumented
Class VariableinputUndocumented
Class VariablewebhookUndocumented
+ + + +
+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_fastapi.WorkerAPI.html b/docs/api/runpod.serverless.modules.rp_fastapi.WorkerAPI.html new file mode 100644 index 00000000..44f16374 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_fastapi.WorkerAPI.html @@ -0,0 +1,833 @@ + + + + + + + + runpod.serverless.modules.rp_fastapi.WorkerAPI + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class WorkerAPI: (source)

Constructor: WorkerAPI(config)

+

View In Hierarchy

+
+ +
+

Used to launch the FastAPI web server when the worker is running in API mode.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Initializes the WorkerAPI class.
Methodstart_uvicornStarts the Uvicorn server.
Instance VariableconfigUndocumented
Instance Variablerp_appUndocumented
Async Method_realtimePerforms model inference on the input data using the provided handler. If handler is not provided, returns an error message.
Async Method_sim_runDevelopment endpoint to simulate run behavior.
Async Method_sim_runsyncDevelopment endpoint to simulate runsync behavior.
Async Method_sim_statusDevelopment endpoint to simulate status behavior.
Async Method_sim_streamDevelopment endpoint to simulate stream behavior.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, config: Dict[str, Any]): + + + (source) + + + + + ¶ + +
+
+ +

Initializes the WorkerAPI class.

+
    +
  1. Starts the heartbeat thread.
  2. +
  3. Initializes the FastAPI web server.
  4. +
  5. Sets the handler for processing jobs.
  6. +
+
+
+
+ + + + + + + + +
+ + + def start_uvicorn(self, api_host='localhost', api_port=8000, api_concurrency=1): + + + (source) + + + + + ¶ + +
+
+ +

Starts the Uvicorn server.

+
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + async def _realtime(self, job: Job): + + + (source) + + + + + ¶ + +
+
+ +

Performs model inference on the input data using the provided handler. If handler is not provided, returns an error message.

+
+
+ + + + + + + + +
+ + + async def _sim_run(self, job_request: DefaultRequest) -> JobOutput: + + + (source) + + + + + ¶ + +
+
+ +

Development endpoint to simulate run behavior.

+
+
+ + + + + + + + +
+ + + async def _sim_runsync(self, job_request: DefaultRequest) -> JobOutput: + + + (source) + + + + + ¶ + +
+
+ +

Development endpoint to simulate runsync behavior.

+
+
+ + + + + + + + +
+ + + async def _sim_status(self, job_id: str) -> JobOutput: + + + (source) + + + + + ¶ + +
+
+ +

Development endpoint to simulate status behavior.

+
+
+ + + + + + + + +
+ + + async def _sim_stream(self, job_id: str) -> StreamOutput: + + + (source) + + + + + ¶ + +
+
+ +

Development endpoint to simulate stream behavior.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_fastapi.html b/docs/api/runpod.serverless.modules.rp_fastapi.html new file mode 100644 index 00000000..ecc811cd --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_fastapi.html @@ -0,0 +1,941 @@ + + + + + + + + runpod.serverless.modules.rp_fastapi + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Used to launch the FastAPI web server when worker is running in API mode.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassDefaultRequestRepresents a test input.
ClassJobRepresents a job.
ClassJobOutputRepresents the output of a job.
ClassStreamOutputStream representation of a job.
ClassTestJobRepresents a test job. input can be any type of data.
ClassWorkerAPIUsed to launch the FastAPI web server when the worker is running in API mode.
ConstantRUN_DESCRIPTIONUndocumented
ConstantRUNPOD_ENDPOINT_IDUndocumented
ConstantRUNSYNC_DESCRIPTIONUndocumented
ConstantSTATUS_DESCRIPTIONUndocumented
ConstantSTREAM_DESCRIPTIONUndocumented
ConstantTITLEUndocumented
VariableDESCRIPTIONUndocumented
VariableheartbeatUndocumented
Variablejob_listUndocumented
Function_send_webhookSends a webhook to the provided URL.
+ + + +
+ +
+
+ + + + + + + + +
+ + RUN_DESCRIPTION: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'''
+Initiates processing jobs, returning a unique job ID.
+
+**Parameters:**
+- **input** (string): The data to be processed by the worker. This could be a st
+ring, JSON object, etc., depending on the worker\'s requirements.
+- **webhook** (string, optional): A callback URL for result notification upon co
+...
+
+
+ + + + + + + + +
+ + RUNPOD_ENDPOINT_ID = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
os.environ.get('RUNPOD_ENDPOINT_ID', None)
+
+
+ + + + + + + + +
+ + RUNSYNC_DESCRIPTION: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'''
+Executes processing jobs synchronously, returning the job\'s output directly.
+
+This endpoint is ideal for tasks where immediate result retrieval is necessary,
+streamlining the execution process by eliminating the need for subsequent
+status or result checks.
+
+...
+
+
+ + + + + + + + +
+ + STATUS_DESCRIPTION: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'''
+Checks the completion status of a processing job and returns its output if the j
+ob is complete.
+
+This endpoint is invaluable for monitoring the progress of a job and obtaining t
+he output only after the job has fully completed. It simplifies the process of q
+uerying job completion and retrieving results, eliminating the need for continuo
+...
+
+
+ + + + + + + + +
+ + STREAM_DESCRIPTION: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'''
+Continuously aggregates the output of a processing job, returning the full outpu
+t once the job is complete.
+
+This endpoint is especially useful for jobs where the complete output needs to b
+e accessed at once. It provides a consolidated view of the results post-completi
+on, ensuring that users can retrieve the entire output without the need to poll 
+...
+
+
+ + + + + + + + + +
+ +

Undocumented

+
Value
'RunPod | Development Worker API'
+
+
+ + + + + + + + +
+ + DESCRIPTION = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + heartbeat = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + job_list = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + def _send_webhook(url: str, payload: Dict[str, Any]) -> bool: + + + (source) + + + + + ¶ + +
+
+ +

Sends a webhook to the provided URL. + +Args: + url (str): The URL to send the webhook to. + payload (Dict[str, Any]): The JSON payload to send. + +Returns: + bool: True if the request was successful, False otherwise.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_handler.html b/docs/api/runpod.serverless.modules.rp_handler.html new file mode 100644 index 00000000..9f759641 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_handler.html @@ -0,0 +1,432 @@ + + + + + + + + runpod.serverless.modules.rp_handler + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Retrieve handler info.

+
+ +
+ + + + + + + + + +
Functionis_generatorCheck if handler is a generator function.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def is_generator(handler: Callable) -> bool: + + + (source) + + + + + ¶ + +
+
+ +

Check if handler is a generator function.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_http.html b/docs/api/runpod.serverless.modules.rp_http.html new file mode 100644 index 00000000..e0487492 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_http.html @@ -0,0 +1,813 @@ + + + + + + + + runpod.serverless.modules.rp_http + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

This module is used to handle HTTP requests.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Async Functionsend_resultReturn the job results.
Async Functionstream_resultReturn the stream job results.
ConstantJOB_DONE_URLUndocumented
ConstantJOB_DONE_URL_TEMPLATEUndocumented
ConstantJOB_STREAM_URLUndocumented
ConstantJOB_STREAM_URL_TEMPLATEUndocumented
Variablejob_listUndocumented
VariablelogUndocumented
Async Function_handle_resultA helper function to handle the result, either for sending or streaming.
Async Function_transmitWrapper for transmitting results via POST.
+ + + +
+ +
+
+ + + + + + + + +
+ + + async def send_result(session, job_data, job, is_stream=False): + + + (source) + + + + + ¶ + +
+
+ +

Return the job results.

+
+
+ + + + + + + + +
+ + + async def stream_result(session, job_data, job): + + + (source) + + + + + ¶ + +
+
+ +

Return the stream job results.

+
+
+ + + + + + + + +
+ + JOB_DONE_URL = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
JOB_DONE_URL_TEMPLATE.replace('$RUNPOD_POD_ID', WORKER_ID)
+
+
+ + + + + + + + +
+ + JOB_DONE_URL_TEMPLATE = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
str(os.environ.get('RUNPOD_WEBHOOK_POST_OUTPUT', 'JOB_DONE_URL'))
+
+
+ + + + + + + + +
+ + JOB_STREAM_URL = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
JOB_STREAM_URL_TEMPLATE.replace('$RUNPOD_POD_ID', WORKER_ID)
+
+
+ + + + + + + + +
+ + JOB_STREAM_URL_TEMPLATE = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
str(os.environ.get('RUNPOD_WEBHOOK_POST_STREAM', 'JOB_STREAM_URL'))
+
+
+ + + + + + + + +
+ + job_list = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + async def _handle_result(session, job_data, job, url_template, log_message, is_stream=False): + + + (source) + + + + + ¶ + +
+
+ +

A helper function to handle the result, either for sending or streaming.

+
+
+ + + + + + + + +
+ + + async def _transmit(client_session, url, job_data): + + + (source) + + + + + ¶ + +
+
+ +

Wrapper for transmitting results via POST.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_job.html b/docs/api/runpod.serverless.modules.rp_job.html new file mode 100644 index 00000000..f16aa996 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_job.html @@ -0,0 +1,707 @@ + + + + + + + + runpod.serverless.modules.rp_job + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Job related helpers.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Async Functionget_jobGet the job from the queue. Will continue trying to get a job until one is available.
Async Functionrun_jobRun the job using the handler.
Async Functionrun_job_generatorRun generator job used to stream output. Yields output partials from the generator.
ConstantJOB_GET_URLUndocumented
Variablejob_listUndocumented
VariablelogUndocumented
Function_job_get_urlPrepare the URL for making a 'get' request to the serverless API (sls).
+ + + +
+ +
+
+ + + + + + + + +
+ + + async def get_job(session: ClientSession, retry=True) -> Optional[Dict[str, Any]]: + + + (source) + + + + + ¶ + +
+
+ +

Get the job from the queue. +Will continue trying to get a job until one is available. + +Args: + session (ClientSession): The aiohttp ClientSession to use for the request. + retry (bool): Whether to retry if no job is available. + +Note: Retry True just for ease of, if testing improved this can be removed.

+
+
+ + + + + + + + +
+ + + async def run_job(handler: Callable, job: Dict[str, Any]) -> Dict[str, Any]: + + + (source) + + + + + ¶ + +
+
+ +

Run the job using the handler. + +Args: + handler (Callable): The handler function to use. + job (Dict[str, Any]): The job to run. + +Returns: + Dict[str, Any]: The result of running the job.

+
+
+ + + + + + + + +
+ + + async def run_job_generator(handler: Callable, job: Dict[str, Any]) -> AsyncGenerator[Dict[str, Union[str, Any]], None]: + + + (source) + + + + + ¶ + +
+
+ +

Run generator job used to stream output. Yields output partials from the generator.

+
+
+ + + + + + + + +
+ + JOB_GET_URL = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
str(os.environ.get('RUNPOD_WEBHOOK_GET_JOB')).replace('$ID', WORKER_ID)
+
+
+ + + + + + + + +
+ + job_list = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + def _job_get_url(): + + + (source) + + + + + ¶ + +
+
+ +

Prepare the URL for making a 'get' request to the serverless API (sls). + +This function constructs the appropriate URL for sending a 'get' request to the serverless API, +ensuring that the request will be correctly routed and processed by the API. + +Returns: + str: The prepared URL for the 'get' request to the serverless API.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_local.html b/docs/api/runpod.serverless.modules.rp_local.html new file mode 100644 index 00000000..e4e56897 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_local.html @@ -0,0 +1,477 @@ + + + + + + + + runpod.serverless.modules.rp_local + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

runpod | serverless | rp_local.py Provides the local testing functionality for runpod serverless worker.

+
+ +
+ + + + + + + + + + + + + + +
Async Functionrun_localRuns the worker locally.
VariablelogUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + async def run_local(config: Dict[str, Any]): + + + (source) + + + + + ¶ + +
+
+ +

Runs the worker locally.

+
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_logger.RunPodLogger.html b/docs/api/runpod.serverless.modules.rp_logger.RunPodLogger.html new file mode 100644 index 00000000..54f85227 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_logger.RunPodLogger.html @@ -0,0 +1,791 @@ + + + + + + + + runpod.serverless.modules.rp_logger.RunPodLogger + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class RunPodLogger: (source)

+

View In Hierarchy

+
+ +
+

Singleton class for logging.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__new__Undocumented
Methoddebugdebug log
Methoderrorerror log
Methodinfoinfo log
MethodlogLog message to stdout if RUNPOD_DEBUG is true.
MethodsecretCensors secrets for logging. Replaces everything except the first and last characters with *
Methodset_levelSet the debug level for logging. Can be set to the name or value of the debug level.
Methodtiptip log
Methodwarnwarn log
Instance VariablelevelUndocumented
Class Variable__instanceUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __new__(cls): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def debug(self, message, request_id: Optional[str] = None): + + + (source) + + + + + ¶ + +
+
+ +

debug log

+
+
+ + + + + + + + +
+ + + def error(self, message, request_id: Optional[str] = None): + + + (source) + + + + + ¶ + +
+
+ +

error log

+
+
+ + + + + + + + +
+ + + def info(self, message, request_id: Optional[str] = None): + + + (source) + + + + + ¶ + +
+
+ +

info log

+
+
+ + + + + + + + +
+ + + def log(self, message, message_level='INFO', job_id=None): + + + (source) + + + + + ¶ + +
+
+ +

Log message to stdout if RUNPOD_DEBUG is true.

+
+
+ + + + + + + + +
+ + + def secret(self, secret_name, secret): + + + (source) + + + + + ¶ + +
+
+ +

Censors secrets for logging. Replaces everything except the first and last characters with *

+
+
+ + + + + + + + +
+ + + def set_level(self, new_level): + + + (source) + + + + + ¶ + +
+
+ +

Set the debug level for logging. Can be set to the name or value of the debug level.

+
+
+ + + + + + + + +
+ + + def tip(self, message): + + + (source) + + + + + ¶ + +
+
+ +

tip log

+
+
+ + + + + + + + +
+ + + def warn(self, message, request_id: Optional[str] = None): + + + (source) + + + + + ¶ + +
+
+ +

warn log

+
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + __instance = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_logger.html b/docs/api/runpod.serverless.modules.rp_logger.html new file mode 100644 index 00000000..cd85ef06 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_logger.html @@ -0,0 +1,540 @@ + + + + + + + + runpod.serverless.modules.rp_logger + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

PodWorker | modules | logging.py

+

Log Levels (Level - Value - Description)

+

NOTSET - 0 - No logging is configured, the logging system is effectively disabled. DEBUG - 1 - Detailed information, typically of interest only when diagnosing problems. (Default) INFO - 2 - Confirmation that things are working as expected. WARN - 3 - An indication that something unexpected happened. ERROR - 4 - Serious problem, the software has not been able to perform some function.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ClassRunPodLoggerSingleton class for logging.
ConstantLOG_LEVELSUndocumented
ConstantMAX_MESSAGE_LENGTHUndocumented
Function_validate_log_levelChecks the debug level and returns the debug level name.
+ + + +
+ +
+
+ + + + + + + + +
+ + LOG_LEVELS: list[str] = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
['NOTSET', 'DEBUG', 'INFO', 'WARN', 'ERROR']
+
+
+ + + + + + + + +
+ + MAX_MESSAGE_LENGTH: int = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
4096
+
+
+ + + + + + + + +
+ + + def _validate_log_level(log_level): + + + (source) + + + + + ¶ + +
+
+ +

Checks the debug level and returns the debug level name.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_ping.Heartbeat.html b/docs/api/runpod.serverless.modules.rp_ping.Heartbeat.html new file mode 100644 index 00000000..4e568283 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_ping.Heartbeat.html @@ -0,0 +1,652 @@ + + + + + + + + runpod.serverless.modules.rp_ping.Heartbeat + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ + + +
+

Sends heartbeats to the Runpod server.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Initializes the Heartbeat class.
Methodping_loopSends heartbeat pings to the Runpod server.
Methodstart_pingSends heartbeat pings to the Runpod server.
ConstantPING_INTERVALUndocumented
Class VariablePING_URLUndocumented
Method_send_pingSends a heartbeat to the Runpod server.
Class Variable_thread_startedUndocumented
Instance Variable_sessionUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, pool_connections=10, retries=3): + + + (source) + + + + + ¶ + +
+
+ +

Initializes the Heartbeat class.

+
+
+ + + + + + + + +
+ + + def ping_loop(self, test=False): + + + (source) + + + + + ¶ + +
+
+ +

Sends heartbeat pings to the Runpod server.

+
+
+ + + + + + + + +
+ + + def start_ping(self, test=False): + + + (source) + + + + + ¶ + +
+
+ +

Sends heartbeat pings to the Runpod server.

+
+
+ + + + + + + + +
+ + PING_INTERVAL = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
int(os.environ.get('RUNPOD_PING_INTERVAL', 10000))//1000
+
+
+ + + + + + + + +
+ + PING_URL = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + def _send_ping(self): + + + (source) + + + + + ¶ + +
+
+ +

Sends a heartbeat to the Runpod server.

+
+
+ + + + + + + + +
+ + _thread_started: bool = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + _session = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_ping.html b/docs/api/runpod.serverless.modules.rp_ping.html new file mode 100644 index 00000000..8915efd1 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_ping.html @@ -0,0 +1,492 @@ + + + + + + + + runpod.serverless.modules.rp_ping + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

This module defines the Heartbeat class. The heartbeat is responsible for sending periodic pings to the Runpod server.

+
+ +
+ + + + + + + + + + + + + + + + + + + +
ClassHeartbeatSends heartbeats to the Runpod server.
VariablejobsUndocumented
VariablelogUndocumented
+ + + +
+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_progress.html b/docs/api/runpod.serverless.modules.rp_progress.html new file mode 100644 index 00000000..c32f59d4 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_progress.html @@ -0,0 +1,603 @@ + + + + + + + + runpod.serverless.modules.rp_progress + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod Progress Module

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Functionprogress_updateUpdates the progress of a currently running job in a separate thread.
VariablelogUndocumented
Async Function_async_progress_updateThe actual asynchronous function that sends the update.
Async Function_create_session_asyncCreates an aiohttp session.
Function_thread_targetA wrapper around _async_progress_update to handle the event loop.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def progress_update(job: Dict[str, Any], progress: Any): + + + (source) + + + + + ¶ + +
+
+ +

Updates the progress of a currently running job in a separate thread.

+
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + async def _async_progress_update(session, job, progress): + + + (source) + + + + + ¶ + +
+
+ +

The actual asynchronous function that sends the update.

+
+
+ + + + + + + + +
+ + + async def _create_session_async(): + + + (source) + + + + + ¶ + +
+
+ +

Creates an aiohttp session.

+
+
+ + + + + + + + +
+ + + def _thread_target(job: Dict[str, Any], progress: Any): + + + (source) + + + + + ¶ + +
+
+ +

A wrapper around _async_progress_update to handle the event loop.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_scale.JobScaler.html b/docs/api/runpod.serverless.modules.rp_scale.JobScaler.html new file mode 100644 index 00000000..35ba095b --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_scale.JobScaler.html @@ -0,0 +1,710 @@ + + + + + + + + runpod.serverless.modules.rp_scale.JobScaler + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class JobScaler: (source)

Constructor: JobScaler(concurrency_modifier)

+

View In Hierarchy

+
+ +
+

Job Scaler. This class is responsible for scaling the number of concurrent requests.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Undocumented
Async Methodget_jobsRetrieve multiple jobs from the server in parallel using concurrent requests.
Methodis_aliveReturn whether the worker is alive or not.
Methodkill_workerWhether to kill the worker.
Instance Variablebackground_get_job_tasksUndocumented
Instance Variableconcurrency_modifierUndocumented
Instance Variablecurrent_concurrencyUndocumented
Instance Variablejob_historyUndocumented
Instance Variable_is_aliveUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __init__(self, concurrency_modifier: typing.Any): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + async def get_jobs(self, session): + + + (source) + + + + + ¶ + +
+
+ +

Retrieve multiple jobs from the server in parallel using concurrent requests. + +Returns: + List[Any]: A list of job data retrieved from the server.

+
+
+ + + + + + + + +
+ + + def is_alive(self): + + + (source) + + + + + ¶ + +
+
+ +

Return whether the worker is alive or not.

+
+
+ + + + + + + + +
+ + + def kill_worker(self): + + + (source) + + + + + ¶ + +
+
+ +

Whether to kill the worker.

+
+
+ + + + + + + + +
+ + background_get_job_tasks: set = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + concurrency_modifier = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + current_concurrency = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + job_history: list = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + _is_alive: bool = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_scale.html b/docs/api/runpod.serverless.modules.rp_scale.html new file mode 100644 index 00000000..709711b0 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_scale.html @@ -0,0 +1,545 @@ + + + + + + + + runpod.serverless.modules.rp_scale + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

runpod | serverless | rp_scale.py Provides the functionality for scaling the runpod serverless worker.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ClassJobScalerJob Scaler. This class is responsible for scaling the number of concurrent requests.
Variablejob_listUndocumented
VariablelogUndocumented
Function_default_concurrency_modifierDefault concurrency modifier.
+ + + +
+ +
+
+ + + + + + + + +
+ + job_list = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + def _default_concurrency_modifier(current_concurrency: int) -> int: + + + (source) + + + + + ¶ + +
+
+ +

Default concurrency modifier. + +This function returns the current concurrency without any modification. + +Args: + current_concurrency (int): The current concurrency. + +Returns: + int: The current concurrency.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.rp_tips.html b/docs/api/runpod.serverless.modules.rp_tips.html new file mode 100644 index 00000000..c4a907c3 --- /dev/null +++ b/docs/api/runpod.serverless.modules.rp_tips.html @@ -0,0 +1,477 @@ + + + + + + + + runpod.serverless.modules.rp_tips + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

RunPod Tips

+
+ +
+ + + + + + + + + + + + + + +
Functioncheck_return_sizeChecks the size of the return body. If the size is above 20MB, it will recommend using storage upload.
VariablelogUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def check_return_size(return_body): + + + (source) + + + + + ¶ + +
+
+ +

Checks the size of the return body. If the size is above 20MB, it will recommend using storage upload.

+
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.worker_state.Job.html b/docs/api/runpod.serverless.modules.worker_state.Job.html new file mode 100644 index 00000000..13f16c87 --- /dev/null +++ b/docs/api/runpod.serverless.modules.worker_state.Job.html @@ -0,0 +1,648 @@ + + + + + + + + runpod.serverless.modules.worker_state.Job + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ + + +
+

Represents a job object. + +Args: + job_id: The id of the job, a unique string. + job_input: The input to the job. + webhook: The webhook to send the job output to.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__eq__Undocumented
Method__hash__Undocumented
Method__init__Undocumented
Method__str__Undocumented
Instance VariableidUndocumented
Instance VariableinputUndocumented
Instance VariablewebhookUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __eq__(self, other: object) -> bool: + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def __hash__(self) -> int: + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def __init__(self, job_id: str, job_input: Optional[Dict[str, Any]] = None, webhook: Optional[str] = None): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def __str__(self) -> str: + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + webhook = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.worker_state.Jobs.html b/docs/api/runpod.serverless.modules.worker_state.Jobs.html new file mode 100644 index 00000000..74f53365 --- /dev/null +++ b/docs/api/runpod.serverless.modules.worker_state.Jobs.html @@ -0,0 +1,685 @@ + + + + + + + + runpod.serverless.modules.worker_state.Jobs + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class Jobs: (source)

+

View In Hierarchy

+
+ +
+

Track the state of current jobs.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__new__Undocumented
Methodadd_jobAdds a job to the list of jobs.
Methodget_jobReturns the job with the given id. Used within rp_fastapi.py for local testing.
Methodget_job_countReturns the number of jobs.
Methodget_job_listReturns the list of jobs as a string.
Methodremove_jobRemoves a job from the list of jobs.
Class VariablejobsUndocumented
Class Variable_instanceUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __new__(cls): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def add_job(self, job_id, job_input=None, webhook=None): + + + (source) + + + + + ¶ + +
+
+ +

Adds a job to the list of jobs.

+
+
+ + + + + + + + +
+ + + def get_job(self, job_id) -> Optional[Union[dict, list, str, int, float, bool]]: + + + (source) + + + + + ¶ + +
+
+ +

Returns the job with the given id. Used within rp_fastapi.py for local testing.

+
+
+ + + + + + + + +
+ + + def get_job_count(self): + + + (source) + + + + + ¶ + +
+
+ +

Returns the number of jobs.

+
+
+ + + + + + + + +
+ + + def get_job_list(self): + + + (source) + + + + + ¶ + +
+
+ +

Returns the list of jobs as a string.

+
+
+ + + + + + + + +
+ + + def remove_job(self, job_id): + + + (source) + + + + + ¶ + +
+
+ +

Removes a job from the list of jobs.

+
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + _instance = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.modules.worker_state.html b/docs/api/runpod.serverless.modules.worker_state.html new file mode 100644 index 00000000..8fa6365c --- /dev/null +++ b/docs/api/runpod.serverless.modules.worker_state.html @@ -0,0 +1,594 @@ + + + + + + + + runpod.serverless.modules.worker_state + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Handles getting stuff from environment variables and updating the global state like job id.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassJobRepresents a job object.
ClassJobsTrack the state of current jobs.
Functionget_auth_headerReturns the authorization header with the API key.
ConstantIS_LOCAL_TESTUndocumented
ConstantREF_COUNT_ZEROUndocumented
ConstantWORKER_IDUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def get_auth_header(): + + + (source) + + + + + ¶ + +
+
+ +

Returns the authorization header with the API key.

+
+
+ + + + + + + + +
+ + IS_LOCAL_TEST = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
(os.environ.get('RUNPOD_WEBHOOK_GET_JOB', None) is None)
+
+
+ + + + + + + + +
+ + REF_COUNT_ZERO = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
time.perf_counter()
+
+
+ + + + + + + + +
+ + WORKER_ID = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
os.environ.get('RUNPOD_POD_ID', str(uuid.uuid4()))
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.utils.html b/docs/api/runpod.serverless.utils.html new file mode 100644 index 00000000..1cc61c4c --- /dev/null +++ b/docs/api/runpod.serverless.utils.html @@ -0,0 +1,486 @@ + + + + + + + + runpod.serverless.utils + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ package documentation +
+ +
+ (source) +

+
+ +
+

Allows for the import of all modules in the utils directory.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Modulerp_cleanuprunpod | serverless | cleanup.py
Modulerp_cudaProvides some of the torch.cuda functionality without requiring torch.
Modulerp_debuggerrunpod | serverless | rp_debugger.py
Modulerp_downloadPodWorker | modules | download.py
Modulerp_uploadPodWorker | modules | upload.py
Modulerp_validatorrunpod | serverless | utils | validator.py Provides a function to validate the input to the model.
+ + + +
+ +
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.utils.rp_cleanup.html b/docs/api/runpod.serverless.utils.rp_cleanup.html new file mode 100644 index 00000000..0fa84053 --- /dev/null +++ b/docs/api/runpod.serverless.utils.rp_cleanup.html @@ -0,0 +1,384 @@ + + + + + + + + runpod.serverless.utils.rp_cleanup + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

runpod | serverless | cleanup.py

+

Called to clean up the worker pod after a job is completed.

+
+
+ +
+ + + + + + + + + +
FunctioncleanRemoves the downloads folder.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def clean(folder_list: List[str] = None): + + + (source) + + + + + ¶ + +
+
+ +

Removes the downloads folder.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.utils.rp_cuda.html b/docs/api/runpod.serverless.utils.rp_cuda.html new file mode 100644 index 00000000..6ccd2542 --- /dev/null +++ b/docs/api/runpod.serverless.utils.rp_cuda.html @@ -0,0 +1,382 @@ + + + + + + + + runpod.serverless.utils.rp_cuda + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

Provides some of the torch.cuda functionality without requiring torch.

+
+ +
+ + + + + + + + + +
Functionis_availableReturns True if CUDA is available, False otherwise.
+ + + +
+ +
+
+ + + + + + + + +
+ + + def is_available(): + + + (source) + + + + + ¶ + +
+
+ +

Returns True if CUDA is available, False otherwise.

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.utils.rp_debugger.Checkpoints.html b/docs/api/runpod.serverless.utils.rp_debugger.Checkpoints.html new file mode 100644 index 00000000..f38eeaf3 --- /dev/null +++ b/docs/api/runpod.serverless.utils.rp_debugger.Checkpoints.html @@ -0,0 +1,771 @@ + + + + + + + + runpod.serverless.utils.rp_debugger.Checkpoints + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class Checkpoints: (source)

+

View In Hierarchy

+
+ +
+

A singleton class to store checkpoint times. + +Format: +[ + { + 'name': 'checkpoint_name', + 'start': 1234567890.123456, + 'end': 1234567890.123456 + 'duration_ms': 1234567890.123456 + }, +] + +Usage: +from rp_debugger import Checkpoints + +checkpoints = Checkpoints() + +# Add a checkpoint +checkpoints.add('checkpoint_name') + +# Start a checkpoint +checkpoints.start('checkpoint_name') + +# Stop a checkpoint +checkpoints.stop('checkpoint_name')

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__new__Undocumented
MethodaddAdd a checkpoint. Returns the index of the checkpoint.
MethodclearClear the checkpoints.
Methodget_checkpointsGet the results of the checkpoints.
MethodstartStart a checkpoint.
MethodstopStop a checkpoint.
Instance VariablecheckpointsUndocumented
Instance Variablename_lookupUndocumented
Class Variable__instanceUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __new__(cls): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def add(self, name): + + + (source) + + + + + ¶ + +
+
+ +

Add a checkpoint. Returns the index of the checkpoint.

+
+
+ + + + + + + + +
+ + + def clear(self): + + + (source) + + + + + ¶ + +
+
+ +

Clear the checkpoints.

+
+
+ + + + + + + + +
+ + + def get_checkpoints(self): + + + (source) + + + + + ¶ + +
+
+ +

Get the results of the checkpoints.

+
+
+ + + + + + + + +
+ + + def start(self, name): + + + (source) + + + + + ¶ + +
+
+ +

Start a checkpoint.

+
+
+ + + + + + + + +
+ + + def stop(self, name): + + + (source) + + + + + ¶ + +
+
+ +

Stop a checkpoint.

+
+
+ + + + + + + + +
+ + checkpoints: list = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + name_lookup: dict = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + __instance = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.utils.rp_debugger.FunctionTimer.html b/docs/api/runpod.serverless.utils.rp_debugger.FunctionTimer.html new file mode 100644 index 00000000..7877db67 --- /dev/null +++ b/docs/api/runpod.serverless.utils.rp_debugger.FunctionTimer.html @@ -0,0 +1,537 @@ + + + + + + + + runpod.serverless.utils.rp_debugger.FunctionTimer + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class FunctionTimer: (source)

Constructor: FunctionTimer(function)

+

View In Hierarchy

+
+ +
+

A class-based decorator to benchmark a function.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Method__call__Undocumented
Method__init__Undocumented
Instance VariablecheckpointsUndocumented
Instance VariablefunctionUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __call__(self, *args, **kwargs): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def __init__(self, function): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + checkpoints = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + function = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.utils.rp_debugger.LineTimer.html b/docs/api/runpod.serverless.utils.rp_debugger.LineTimer.html new file mode 100644 index 00000000..b8eb2978 --- /dev/null +++ b/docs/api/runpod.serverless.utils.rp_debugger.LineTimer.html @@ -0,0 +1,579 @@ + + + + + + + + runpod.serverless.utils.rp_debugger.LineTimer + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ class documentation +
+ +
+

class LineTimer: (source)

Constructor: LineTimer(name)

+

View In Hierarchy

+
+ +
+

A utility that can be used to time code execution using the with statement. When used the times should be added to the checkpoints object.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__enter__Undocumented
Method__exit__Undocumented
Method__init__Undocumented
Instance VariablecheckpointsUndocumented
Instance VariablenameUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def __enter__(self): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def __exit__(self, *args): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def __init__(self, name): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + checkpoints = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.utils.rp_debugger.html b/docs/api/runpod.serverless.utils.rp_debugger.html new file mode 100644 index 00000000..bca0d982 --- /dev/null +++ b/docs/api/runpod.serverless.utils.rp_debugger.html @@ -0,0 +1,603 @@ + + + + + + + + runpod.serverless.utils.rp_debugger + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

runpod | serverless | rp_debugger.py

+

A collection of functions to help with debugging.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassCheckpointsA singleton class to store checkpoint times.
ClassFunctionTimerA class-based decorator to benchmark a function.
ClassLineTimerA utility that can be used to time code execution using the with statement. When used the times should be added to the checkpoints object.
Functionclear_debugger_outputClear the debugger output.
Functionget_debugger_outputReturn the debugger output.
ConstantOS_INFOUndocumented
ConstantPYTHON_VERSIONUndocumented
VariablePROCESSORUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def clear_debugger_output(): + + + (source) + + + + + ¶ + +
+
+ +

Clear the debugger output.

+
+
+ + + + + + + + +
+ + + def get_debugger_output(): + + + (source) + + + + + ¶ + +
+
+ +

Return the debugger output.

+
+
+ + + + + + + + +
+ + OS_INFO = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
f"""{platform.system()} {platform.release()}"""
+
+
+ + + + + + + + +
+ + PYTHON_VERSION = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
platform.python_version()
+
+
+ + + + + + + + +
+ + PROCESSOR = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.utils.rp_download.html b/docs/api/runpod.serverless.utils.rp_download.html new file mode 100644 index 00000000..7f6925f8 --- /dev/null +++ b/docs/api/runpod.serverless.utils.rp_download.html @@ -0,0 +1,520 @@ + + + + + + + + runpod.serverless.utils.rp_download + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

PodWorker | modules | download.py

+

Called when inputs are images or zip files. Downloads them into a temporary directory called "input_objects". This directory is cleaned up after the job is complete.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Functioncalculate_chunk_sizeCalculates the chunk size based on the file size.
Functiondownload_files_from_urlsAccepts a single URL or a list of URLs and downloads the files. Returns the list of downloaded file absolute paths. Saves the files in a directory called "downloaded_files" in the job directory.
FunctionfileDownloads a single file from a given URL, file is given a random name. First checks if the content-disposition header is set, if so, uses the file name from there. If the file is a zip file, it is extracted into a directory with the same name.
ConstantHEADERSUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def calculate_chunk_size(file_size: int) -> int: + + + (source) + + + + + ¶ + +
+
+ +

Calculates the chunk size based on the file size.

+
+
+ + + + + + + + +
+ + + def download_files_from_urls(job_id: str, urls: Union[str, List[str]]) -> List[str]: + + + (source) + + + + + ¶ + +
+
+ +

Accepts a single URL or a list of URLs and downloads the files. Returns the list of downloaded file absolute paths. Saves the files in a directory called "downloaded_files" in the job directory.

+
+
+ + + + + + + + +
+ + + def file(file_url: str) -> dict: + + + (source) + + + + + ¶ + +
+
+ +

Downloads a single file from a given URL, file is given a random name. +First checks if the content-disposition header is set, if so, uses the file name from there. +If the file is a zip file, it is extracted into a directory with the same name. + +Returns an object that contains: +- The absolute path to the downloaded file +- File type +- Original file name

+
+
+ + + + + + + + + +
+ +

Undocumented

+
Value
{'User-Agent': 'runpod-python/0.0.0 (https://runpod.io; support@runpod.io)'}
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.utils.rp_upload.html b/docs/api/runpod.serverless.utils.rp_upload.html new file mode 100644 index 00000000..c6bea6ea --- /dev/null +++ b/docs/api/runpod.serverless.utils.rp_upload.html @@ -0,0 +1,721 @@ + + + + + + + + runpod.serverless.utils.rp_upload + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

PodWorker | modules | upload.py

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Functionbucket_uploadUploads files to bucket storage.
Functionextract_region_from_urlExtracts the region from the endpoint URL.
FunctionfilesUploads a list of files in parallel. Once all files are uploaded, the function returns the presigned URLs list.
Functionget_boto_clientReturns a boto3 client and transfer config for the bucket.
Functionupload_file_to_bucketUploads a single file to bucket storage and returns a presigned URL.
Functionupload_imageUpload a single file to bucket storage.
Functionupload_in_memory_objectUploads an in-memory object (bytes) to bucket storage and returns a presigned URL.
ConstantFMTUndocumented
VariableloggerUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def bucket_upload(job_id, file_list, bucket_creds): + + + (source) + + + + + ¶ + +
+
+ +

Uploads files to bucket storage.

+
+
+ + + + + + + + +
+ + + def extract_region_from_url(endpoint_url): + + + (source) + + + + + ¶ + +
+
+ +

Extracts the region from the endpoint URL.

+
+
+ + + + + + + + +
+ + + def files(job_id, file_list): + + + (source) + + + + + ¶ + +
+
+ +

Uploads a list of files in parallel. Once all files are uploaded, the function returns the presigned URLs list.

+
+
+ + + + + + + + +
+ + + def get_boto_client(bucket_creds: Optional[dict] = None) -> Tuple[boto3.client, TransferConfig]: + + + (source) + + + + + ¶ + +
+
+ +

Returns a boto3 client and transfer config for the bucket.

+
+
+ + + + + + + + +
+ + + def upload_file_to_bucket(file_name: str, file_location: str, bucket_creds: Optional[dict] = None, bucket_name: Optional[str] = None, prefix: Optional[str] = None, extra_args: Optional[dict] = None) -> str: + + + (source) + + + + + ¶ + +
+
+ +

Uploads a single file to bucket storage and returns a presigned URL.

+
+
+ + + + + + + + +
+ + + def upload_image(job_id, image_location, result_index=0, results_list=None, bucket_name: Optional[str] = None): + + + (source) + + + + + ¶ + +
+
+ +

Upload a single file to bucket storage.

+
+
+ + + + + + + + +
+ + + def upload_in_memory_object(file_name: str, file_data: bytes, bucket_creds: Optional[dict] = None, bucket_name: Optional[str] = None, prefix: Optional[str] = None) -> str: + + + (source) + + + + + ¶ + +
+
+ +

Uploads an in-memory object (bytes) to bucket storage and returns a presigned URL.

+
+
+ + + + + + + + + +
+ +

Undocumented

+
Value
'%(filename)-20s:%(lineno)-4d %(asctime)s %(message)s'
+
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.utils.rp_validator.html b/docs/api/runpod.serverless.utils.rp_validator.html new file mode 100644 index 00000000..48254347 --- /dev/null +++ b/docs/api/runpod.serverless.utils.rp_validator.html @@ -0,0 +1,898 @@ + + + + + + + + runpod.serverless.utils.rp_validator + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

runpod | serverless | utils | validator.py Provides a function to validate the input to the model.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionvalidateValidates the input. Checks to see if the provided inputs match the expected types. Checks to see if the required inputs are included. Sets the default values for the inputs that are not provided. Validates the inputs using the lambda constraints.
ConstantCONSTRAINTS_ERRORUndocumented
ConstantINVALID_TYPE_ERRORUndocumented
ConstantMISSING_DEFAULT_ERRORUndocumented
ConstantMISSING_REQUIRED_ERRORUndocumented
ConstantMISSING_TYPE_ERRORUndocumented
ConstantSCHEMA_ERRORUndocumented
ConstantUNEXPECTED_INPUT_ERRORUndocumented
Function_add_errorUndocumented
Function_check_for_unexpected_inputsUndocumented
Function_validate_and_transform_schema_itemsUndocumented
Function_validate_input_against_schemaUndocumented
Function_validate_required_inputs_and_set_defaultsUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def validate(raw_input: Dict[str, Any], schema: Dict[str, Any]) -> Dict[str, Union[Dict[str, Any], List[str]]]: + + + (source) + + + + + ¶ + +
+
+ +

Validates the input. +Checks to see if the provided inputs match the expected types. +Checks to see if the required inputs are included. +Sets the default values for the inputs that are not provided. +Validates the inputs using the lambda constraints. + +Returns either the list of errors or a validated_job_input. +{"errors": ["error1", "error2"]} +or +{"validated_input": {"input1": "value1", "input2": "value2"}

+
+
+ + + + + + + + +
+ + CONSTRAINTS_ERROR: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'{} does not meet the constraints.'
+
+
+ + + + + + + + +
+ + INVALID_TYPE_ERROR: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'{} should be {} type, not {}.'
+
+
+ + + + + + + + +
+ + MISSING_DEFAULT_ERROR: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'Schema error, missing default value for {}.'
+
+
+ + + + + + + + +
+ + MISSING_REQUIRED_ERROR: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'{} is a required input.'
+
+
+ + + + + + + + +
+ + MISSING_TYPE_ERROR: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'Schema error, missing type for {}.'
+
+
+ + + + + + + + +
+ + SCHEMA_ERROR: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'Schema error, {} is not a dictionary.'
+
+
+ + + + + + + + +
+ + UNEXPECTED_INPUT_ERROR: str = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
'Unexpected input. {} is not a valid input option.'
+
+
+ + + + + + + + +
+ + + def _add_error(error_list: List[str], message: str): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def _check_for_unexpected_inputs(raw_input, schema, error_list): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def _validate_and_transform_schema_items(schema, error_list): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def _validate_input_against_schema(schema, validated_input, error_list): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+ + + + + + + + +
+ + + def _validate_required_inputs_and_set_defaults(raw_input, schema, validated_input, error_list): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.serverless.worker.html b/docs/api/runpod.serverless.worker.html new file mode 100644 index 00000000..e6195e04 --- /dev/null +++ b/docs/api/runpod.serverless.worker.html @@ -0,0 +1,738 @@ + + + + + + + + runpod.serverless.worker + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

runpod | serverless | worker_loop.py Called to convert a container into a worker pod for the runpod serverless platform.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionmainChecks if the worker is running locally or on RunPod. If running locally, the test job is run and the worker exits. If running on RunPod, the worker loop is created.
Async Functionrun_workerStarts the worker loop for multi-processing.
VariableheartbeatUndocumented
Variablejob_listUndocumented
VariablelogUndocumented
Function_get_auth_headerReturns the authorization header with the API key.
Function_is_localReturns True if the worker is running locally, False otherwise.
Async Function_process_jobUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def main(config: Dict[str, Any]): + + + (source) + + + + + ¶ + +
+
+ +

Checks if the worker is running locally or on RunPod. If running locally, the test job is run and the worker exits. If running on RunPod, the worker loop is created.

+
+
+ + + + + + + + +
+ + + async def run_worker(config: Dict[str, Any]): + + + (source) + + + + + ¶ + +
+
+ +

Starts the worker loop for multi-processing. + +Args: + config (Dict[str, Any]): Configuration parameters for the worker.

+
+
+ + + + + + + + +
+ + heartbeat = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + job_list = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+ + + + + + + + + +
+ +

Undocumented

+ +
+
+ + + + + + + + +
+ + + def _get_auth_header() -> Dict[str, str]: + + + (source) + + + + + ¶ + +
+
+ +

Returns the authorization header with the API key.

+
+
+ + + + + + + + +
+ + + def _is_local(config) -> bool: + + + (source) + + + + + ¶ + +
+
+ +

Returns True if the worker is running locally, False otherwise.

+
+
+ + + + + + + + +
+ + + async def _process_job(job, session, job_scaler, config): + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.user_agent.html b/docs/api/runpod.user_agent.html new file mode 100644 index 00000000..57694943 --- /dev/null +++ b/docs/api/runpod.user_agent.html @@ -0,0 +1,503 @@ + + + + + + + + runpod.user_agent + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

User-Agent for RunPod-Python-SDK

+
+ +
+ + + + + + + + + + + + + + +
Functionconstruct_user_agentConstructs the User-Agent string for the RunPod-Python-SDK
ConstantUSER_AGENTUndocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def construct_user_agent(): + + + (source) + + + + + ¶ + +
+
+ +

Constructs the User-Agent string for the RunPod-Python-SDK + +Example: + RunPod-Python-SDK/0.1.0 (Linux 5.4.0-54-generic; x86_64) Language/Python 3.8.5

+
+
+ + + + + + + + +
+ + USER_AGENT = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+
Value
construct_user_agent()
+
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/runpod.version.html b/docs/api/runpod.version.html new file mode 100644 index 00000000..12fd4406 --- /dev/null +++ b/docs/api/runpod.version.html @@ -0,0 +1,500 @@ + + + + + + + + runpod.version + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ module documentation +
+ +
+ (source) +

+
+ +
+

runpod-python version

+
+ +
+ + + + + + + + + + + + + + +
Functionget_versionGet the version of runpod-python
Variable__version__Undocumented
+ + + +
+ +
+
+ + + + + + + + +
+ + + def get_version(): + + + (source) + + + + + ¶ + +
+
+ +

Get the version of runpod-python

+
+
+ + + + + + + + +
+ + __version__ = + + + (source) + + + + + ¶ + +
+
+ +

Undocumented

+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/api/search.js b/docs/api/search.js new file mode 100644 index 00000000..7fb34200 --- /dev/null +++ b/docs/api/search.js @@ -0,0 +1,478 @@ +// This file contains the code that drives the search system UX. +// It's included in every HTML file. +// Depends on library files searchlib.js and ajax.js (and of course lunr.js) + +// Ideas for improvments: +// - Include filtering buttons: +// - search only in the current module +// - have a query frontend that helps build complex queries +// - Filter out results that have score > 0.001 by default and show them on demand. +// - Should we change the default term presence to be MUST and not SHOULD ? +// -> Hack something like 'name index -value' -> '+name +index -value' +// -> 'name ?index -value' -> '+name index -value' +// - Highlight can use https://github.com/bep/docuapi/blob/5bfdc7d366ef2de58dc4e52106ad474d06410907/assets/js/helpers/highlight.js#L1 +// Better: Add support for AND and OR with parenthesis, ajust this code https://stackoverflow.com/a/20374128 + +//////// GLOBAL VARS ///////// + +let input = document.getElementById('search-box'); +let results_container = document.getElementById('search-results-container'); +let results_list = document.getElementById('search-results'); +let searchInDocstringsButton = document.getElementById('search-docstrings-button'); +let searchInDocstringsCheckbox = document.getElementById('toggle-search-in-docstrings-checkbox'); +var isSearchReadyPromise = null; + +// setTimeout variable to warn when a search takes too long +var _setLongSearchInfosTimeout = null; + +//////// UI META INFORMATIONS FUNCTIONS ///////// + +// Taken from https://stackoverflow.com/a/14130005 +// For security. +function htmlEncode(str) { + return String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); +} + +function _setInfos(message, box_id, text_id) { + document.getElementById(text_id).textContent = message; + if (message.length>0){ + document.getElementById(box_id).style.display = 'block'; + } + else{ + document.getElementById(box_id).style.display = 'none'; + } +} + +/** + * Set the search status. + */ +function setStatus(message) { + document.getElementById('search-status').textContent = message; +} + +/** + * Show a warning, hide warning box if empty string. + */ +function setWarning(message) { + _setInfos(message, 'search-warn-box', 'search-warn'); +} + +/** + * Say that Something went wrong. + */ +function setErrorStatus() { + resetLongSearchTimerInfo() + setStatus("Something went wrong."); + setErrorInfos(); +} + +/** + * Show additional error infos (used to show query parser errors infos) or tell to go check the console. + * @param message: (optional) string + */ +function setErrorInfos(message) { + if (message != undefined){ + setWarning(message); + } + else{ + setWarning("Error: See development console for details."); + } +} + +/** + * Reset the long search timer warning. + */ +function resetLongSearchTimerInfo(){ + if (_setLongSearchInfosTimeout){ + clearTimeout(_setLongSearchInfosTimeout); + } +} +function launchLongSearchTimerInfo(){ + // After 10 seconds of searching, warn that this is taking more time than usual. + _setLongSearchInfosTimeout = setTimeout(setLongSearchInfos, 10000); +} + +/** + * Say that this search is taking longer than usual. + */ +function setLongSearchInfos(){ + setWarning("This is taking longer than usual... You can keep waiting for the search to complete, or retry the search with other terms."); +} + +//////// UI SHOW/HIDE FUNCTIONS ///////// + +function hideResultContainer(){ + results_container.style.display = 'none'; + if (!document.body.classList.contains("search-help-hidden")){ + document.body.classList.add("search-help-hidden"); + } +} + +function showResultContainer(){ + results_container.style.display = 'block'; + updateClearSearchBtn(); +} + +function toggleSearchHelpText() { + document.body.classList.toggle("search-help-hidden"); + if (document.body.classList.contains("search-help-hidden") && input.value.length==0){ + hideResultContainer(); + } + else{ + showResultContainer(); + } +} + +function resetResultList(){ + resetLongSearchTimerInfo(); + results_list.innerHTML = ''; + setWarning(''); + setStatus(''); +} + +function clearSearch(){ + stopSearching(); + + input.value = ''; + updateClearSearchBtn(); +} + +function stopSearching(){ + // UI + hideResultContainer(); + resetResultList(); + + // NOT UI + _stopSearchingProcess(); +} + +function _stopSearchingProcess(){ + abortSearch(); + restartSearchWorker(); +} + +/** + * Show and hide the (X) button depending on the current search input. + * We do not show the (X) button when there is no search going on. + */ + function updateClearSearchBtn(){ + + if (input.value.length>0){ + document.getElementById('search-clear-button').style.display = 'inline-block'; + } + else{ + document.getElementById('search-clear-button').style.display = 'none'; + } +} + +//////// SEARCH WARPPER FUNCTIONS ///////// + +// Values configuring the search-as-you-type feature. +var SEARCH_DEFAULT_DELAY = 100; // in miliseconds +var SEARCH_INCREASED_DELAY = 200; +var SEARCH_INDEX_SIZE_TRESH_INCREASE_DELAY = 10; // in MB +var SEARCH_INDEX_SIZE_TRESH_DISABLE_SEARCH_AS_YOU_TYPE = 20; +var SEARCH_AUTO_WILDCARD = true; + +// Search delay depends on index size. +function _getIndexSizePromise(indexURL){ + return httpGetPromise(indexURL).then((responseText) => { + if (responseText==null){ + return 0; + } + let indexSizeApprox = responseText.length / 1000000; // in MB + return indexSizeApprox; + }); +} +function _getSearchDelayPromise(indexURL){ // -> Promise of a Search delay number. + return _getIndexSizePromise(indexURL).then((size) => { + var searchDelay = SEARCH_DEFAULT_DELAY; + if (size===0){ + return searchDelay; + } + if (size>SEARCH_INDEX_SIZE_TRESH_INCREASE_DELAY){ + // For better UX + searchDelay = SEARCH_INCREASED_DELAY; // in miliseconds, this avoids searching several times when typing several leters very rapidly + } + return searchDelay; + }); +} + +function _getIsSearchReadyPromise(){ + return Promise.all([ + httpGetPromise("all-documents.html"), + httpGetPromise("searchindex.json"), + httpGetPromise("fullsearchindex.json"), + httpGetPromise("lunr.js"), + ]); +} + +// Launch search as user types if the size of the index is small enought, +// else say "Press 'Enter' to search". +function searchAsYouType(){ + if (input.value.length>0){ + showResultContainer(); + } + _getIndexSizePromise("searchindex.json").then((indexSizeApprox) => { + if (indexSizeApprox > SEARCH_INDEX_SIZE_TRESH_DISABLE_SEARCH_AS_YOU_TYPE){ + // Not searching as we type if "default" index size if greater than 20MB. + if (input.value.length===0){ // No actual query, this only resets some UI components. + launchSearch(); + } + else{ + setTimeout(() => { + _stopSearchingProcess(); + resetResultList(); + setStatus("Press 'Enter' to search."); + }); + } + } + else{ + launchSearch(); + } + }); +} + +searchEventsEnv.addEventListener("searchStarted", (ev) => { + setStatus("Searching..."); +}); + +var _lastSearchStartTime = null; +var _lastSearchInput = null; +/** + * Do the actual searching business + * Main entrypoint to [re]launch the search. + * Called everytime the search bar is edited. +*/ +function launchSearch(noDelay){ + let _searchStartTime = performance.now(); + + // Get the query terms + let _query = input.value; + + // In chrome, two events are triggered simultaneously for the input event. + // So we discard consecutive (within the same 0.001s) requests that have the same search query. + if (( + (_searchStartTime-_lastSearchStartTime) < (0.001*1000) + ) && (_query === _lastSearchInput) ){ + return; + } + + updateClearSearchBtn(); + + // Setup query meta infos. + _lastSearchStartTime = _searchStartTime + _lastSearchInput = _query; + + if (_query.length===0){ + stopSearching(); + return; + } + + if (!window.Worker) { + setStatus("Cannot search: JavaScript Worker API is not supported in your browser. "); + return; + } + + resetResultList(); + showResultContainer(); + setStatus("..."); + + // Determine indexURL + let indexURL = _isSearchInDocstringsEnabled() ? "fullsearchindex.json" : "searchindex.json"; + + // If search in docstring is enabled: + // -> customize query function to include docstring for clauses applicable for all fields + let _fields = _isSearchInDocstringsEnabled() ? ["name", "names", "qname", "docstring"] : ["name", "names", "qname"]; + + resetLongSearchTimerInfo(); + launchLongSearchTimerInfo(); + + // Get search delay, wait the all search resources to be cached and actually launch the search + return _getSearchDelayPromise(indexURL).then((searchDelay) => { + if (isSearchReadyPromise==null){ + isSearchReadyPromise = _getIsSearchReadyPromise() + } + return isSearchReadyPromise.then((r)=>{ + return lunrSearch(_query, indexURL, _fields, "lunr.js", !noDelay?searchDelay:0, SEARCH_AUTO_WILDCARD).then((lunrResults) => { + + // outdated query results + if (_searchStartTime != _lastSearchStartTime){return;} + + if (!lunrResults){ + setErrorStatus(); + throw new Error("No data to show"); + } + + if (lunrResults.length == 0){ + setStatus('No results matches "' + htmlEncode(_query) + '"'); + resetLongSearchTimerInfo(); + return; + } + + setStatus("One sec..."); + + // Get result data + return fetchResultsData(lunrResults, "all-documents.html").then((documentResults) => { + + // outdated query results + if (_searchStartTime != _lastSearchStartTime){return;} + + // Edit DOM + resetLongSearchTimerInfo(); + displaySearchResults(_query, documentResults, lunrResults) + + // Log stats + console.log('Search for "' + _query + '" took ' + + ((performance.now() - _searchStartTime)/1000).toString() + ' seconds.') + + // End + }) + }); // lunrResults promise resolved + }); + }).catch((err) => {_handleErr(err);}); + +} // end search() function + +function _handleErr(err){ + console.dir(err); + setStatus('') + if (err.message){ + resetLongSearchTimerInfo(); + setWarning(err.message) // Here we show the error because it's likely a query parser error. + } + else{ + setErrorStatus(); + } +} + +/** + * Given the query string, documentResults and lunrResults as used in search(), + * edit the DOM to add them in the search results list. + */ +function displaySearchResults(_query, documentResults, lunrResults){ + resetResultList(); + documentResults.forEach((dobj) => { + results_list.appendChild(buildSearchResult(dobj)); + }); + + if (lunrResults.length > 500){ + setWarning("Your search yielded a lot of results! Maybe try with other terms?"); + } + + let publicResults = documentResults.filter(function(value){ + return !value.querySelector('.privacy').innerHTML.includes("PRIVATE"); + }) + + if (publicResults.length==0){ + setStatus('No results matches "' + htmlEncode(_query) + '". Some private objects matches your search though.'); + } + else{ + setStatus( + 'Search for "' + htmlEncode(_query) + '" yielded ' + publicResults.length + ' ' + + (publicResults.length === 1 ? 'result' : 'results') + '.'); + } +} + +function _isSearchInDocstringsEnabled() { + return searchInDocstringsCheckbox.checked; +} + +function toggleSearchInDocstrings() { + if (searchInDocstringsCheckbox.checked){ + searchInDocstringsButton.classList.add('label-success') + } + else{ + if (searchInDocstringsButton.classList.contains('label-success')){ + searchInDocstringsButton.classList.remove('label-success') + } + } + if (input.value.length>0){ + launchSearch(true) + } +} + +////// SETUP ////// + +// Attach launchSearch() to search text field update events. + +input.oninput = (event) => { + setTimeout(() =>{ + searchAsYouType(); + }, 0); +}; +input.onkeyup = (event) => { + if (event.key === 'Enter') { + launchSearch(true); + } +}; +input.onfocus = (event) => { + // Ensure the search bar is set-up. + // Load fullsearchindex.json, searchindex.json and all-documents.html to have them in the cache asap. + isSearchReadyPromise = _getIsSearchReadyPromise(); +} +document.onload = (event) => { + // Set-up search bar. + setTimeout(() =>{ + isSearchReadyPromise = _getIsSearchReadyPromise(); + }, 500); +} + +// Close the dropdown if the user clicks on echap key +document.addEventListener('keyup', (evt) => { + evt = evt || window.event; + if (evt.key === "Escape" || evt.key === "Esc") { + hideResultContainer(); + } +}); + +// Init search and help text. +// search box is not visible by default because +// we don't want to show it if the browser do not support JS. +window.addEventListener('load', (event) => { + document.getElementById('search-box-container').style.display = 'block'; + document.getElementById('search-help-box').style.display = 'block'; + hideResultContainer(); +}); + +// This listener does 3 things. +window.addEventListener("click", (event) => { + if (event){ + // 1. Hide the dropdown if the user clicks outside of it + if (!event.target.closest('#search-results-container') + && !event.target.closest('#search-box') + && !event.target.closest('#search-help-button')){ + hideResultContainer(); + return; + } + + // 2. Show the dropdown if the user clicks inside the search box + if (event.target.closest('#search-box')){ + if (input.value.length>0){ + showResultContainer(); + return; + } + } + + // 3.Hide the dropdown if the user clicks on a link that brings them to the same page. + // This includes links in summaries. + link = event.target.closest('#search-results a') + if (link){ + page_parts = document.location.pathname.split('/') + current_page = page_parts[page_parts.length-1] + href = link.getAttribute("href"); + + if (!href.startsWith(current_page)){ + // The link points to something not in the same page, so don't hide the dropdown. + // The page will be reloaded anyway, but this ensure that if we go back, the dropdown will + // still be expanded. + return; + } + if (event.ctrlKey || event.shiftKey || event.metaKey){ + // The link is openned in a new window/tab so don't hide the dropdown. + return; + } + hideResultContainer(); + } + } +}); diff --git a/docs/api/searchindex.json b/docs/api/searchindex.json new file mode 100644 index 00000000..12f28cd6 --- /dev/null +++ b/docs/api/searchindex.json @@ -0,0 +1 @@ +{"version": "2.3.9", "fields": ["name", "names", "qname"], "fieldVectors": [["name/runpod", [0, 53.401]], ["names/runpod", [0, 11.003]], ["qname/runpod", [0, 17.8]], ["name/runpod.api", [1, 51.397]], ["names/runpod.api", [1, 10.59]], ["qname/runpod.api", [2, 22.998]], ["name/runpod.api.ctl_commands", [3, 68.993]], ["names/runpod.api.ctl_commands", [4, 11.198, 5, 7.068]], ["qname/runpod.api.ctl_commands", [6, 22.998]], ["name/runpod.api.graphql", [7, 58.825]], ["names/runpod.api.graphql", [7, 12.12]], ["qname/runpod.api.graphql", [8, 22.998]], ["name/runpod.api.mutations", [9, 62.863]], ["names/runpod.api.mutations", [9, 12.952]], ["qname/runpod.api.mutations", [10, 22.998]], ["name/runpod.api.mutations.container_register_auth", [11, 68.993]], ["names/runpod.api.mutations.container_register_auth", [12, 7.875, 13, 9.237, 14, 7.149]], ["qname/runpod.api.mutations.container_register_auth", [15, 22.998]], ["name/runpod.api.mutations.endpoints", [16, 53.401]], ["names/runpod.api.mutations.endpoints", [16, 11.003]], ["qname/runpod.api.mutations.endpoints", [17, 22.998]], ["name/runpod.api.mutations.pods", [18, 51.397]], ["names/runpod.api.mutations.pods", [18, 10.59]], ["qname/runpod.api.mutations.pods", [19, 22.998]], ["name/runpod.api.mutations.templates", [20, 58.825]], ["names/runpod.api.mutations.templates", [20, 12.12]], ["qname/runpod.api.mutations.templates", [21, 22.998]], ["name/runpod.api.mutations.user", [22, 43.55]], ["names/runpod.api.mutations.user", [22, 8.973]], ["qname/runpod.api.mutations.user", [23, 22.998]], ["name/runpod.api.queries", [24, 62.863]], ["names/runpod.api.queries", [24, 12.952]], ["qname/runpod.api.queries", [25, 22.998]], ["name/runpod.api.queries.endpoints", [16, 53.401]], ["names/runpod.api.queries.endpoints", [16, 11.003]], ["qname/runpod.api.queries.endpoints", [26, 22.998]], ["name/runpod.api.queries.gpus", [27, 58.825]], ["names/runpod.api.queries.gpus", [27, 12.12]], ["qname/runpod.api.queries.gpus", [28, 22.998]], ["name/runpod.api.queries.pods", [18, 51.397]], ["names/runpod.api.queries.pods", [18, 10.59]], ["qname/runpod.api.queries.pods", [29, 22.998]], ["name/runpod.api.queries.user", [22, 43.55]], ["names/runpod.api.queries.user", [22, 8.973]], ["qname/runpod.api.queries.user", [30, 22.998]], ["name/runpod.cli", [31, 49.679]], ["names/runpod.cli", [31, 10.236]], ["qname/runpod.cli", [32, 22.998]], ["name/runpod.cli.entry", [33, 62.863]], ["names/runpod.cli.entry", [33, 12.952]], ["qname/runpod.cli.entry", [34, 22.998]], ["name/runpod.cli.groups", [35, 62.863]], ["names/runpod.cli.groups", [35, 12.952]], ["qname/runpod.cli.groups", [36, 22.998]], ["name/runpod.cli.groups.config", [37, 49.679]], ["names/runpod.cli.groups.config", [37, 10.236]], ["qname/runpod.cli.groups.config", [38, 22.998]], ["name/runpod.cli.groups.config.commands", [5, 43.55]], ["names/runpod.cli.groups.config.commands", [5, 8.973]], ["qname/runpod.cli.groups.config.commands", [39, 22.998]], ["name/runpod.cli.groups.config.functions", [40, 48.178]], ["names/runpod.cli.groups.config.functions", [40, 9.926]], ["qname/runpod.cli.groups.config.functions", [41, 22.998]], ["name/runpod.cli.groups.exec", [42, 58.825]], ["names/runpod.cli.groups.exec", [42, 12.12]], ["qname/runpod.cli.groups.exec", [43, 22.998]], ["name/runpod.cli.groups.exec.commands", [5, 43.55]], ["names/runpod.cli.groups.exec.commands", [5, 8.973]], ["qname/runpod.cli.groups.exec.commands", [44, 22.998]], ["name/runpod.cli.groups.exec.functions", [40, 48.178]], ["names/runpod.cli.groups.exec.functions", [40, 9.926]], ["qname/runpod.cli.groups.exec.functions", [45, 22.998]], ["name/runpod.cli.groups.exec.helpers", [46, 51.397]], ["names/runpod.cli.groups.exec.helpers", [46, 10.59]], ["qname/runpod.cli.groups.exec.helpers", [47, 22.998]], ["name/runpod.cli.groups.pod", [48, 32.846]], ["names/runpod.cli.groups.pod", [48, 6.767]], ["qname/runpod.cli.groups.pod", [49, 22.998]], ["name/runpod.cli.groups.pod.commands", [5, 43.55]], ["names/runpod.cli.groups.pod.commands", [5, 8.973]], ["qname/runpod.cli.groups.pod.commands", [50, 22.998]], ["name/runpod.cli.groups.project", [51, 42.626]], ["names/runpod.cli.groups.project", [51, 8.783]], ["qname/runpod.cli.groups.project", [52, 22.998]], ["name/runpod.cli.groups.project.commands", [5, 43.55]], ["names/runpod.cli.groups.project.commands", [5, 8.973]], ["qname/runpod.cli.groups.project.commands", [53, 22.998]], ["name/runpod.cli.groups.project.functions", [40, 48.178]], ["names/runpod.cli.groups.project.functions", [40, 9.926]], ["qname/runpod.cli.groups.project.functions", [54, 22.998]], ["name/runpod.cli.groups.project.helpers", [46, 51.397]], ["names/runpod.cli.groups.project.helpers", [46, 10.59]], ["qname/runpod.cli.groups.project.helpers", [55, 22.998]], ["name/runpod.cli.groups.ssh", [56, 40.968]], ["names/runpod.cli.groups.ssh", [56, 8.441]], ["qname/runpod.cli.groups.ssh", [57, 22.998]], ["name/runpod.cli.groups.ssh.commands", [5, 43.55]], ["names/runpod.cli.groups.ssh.commands", [5, 8.973]], ["qname/runpod.cli.groups.ssh.commands", [58, 22.998]], ["name/runpod.cli.groups.ssh.functions", [40, 48.178]], ["names/runpod.cli.groups.ssh.functions", [40, 9.926]], ["qname/runpod.cli.groups.ssh.functions", [59, 22.998]], ["name/runpod.cli.utils", [60, 55.809]], ["names/runpod.cli.utils", [60, 11.499]], ["qname/runpod.cli.utils", [61, 22.998]], ["name/runpod.cli.utils.rp_info", [62, 68.993]], ["names/runpod.cli.utils.rp_info", [63, 5.757, 64, 9.058]], ["qname/runpod.cli.utils.rp_info", [65, 22.998]], ["name/runpod.cli.utils.rp_runpodignore", [66, 68.993]], ["names/runpod.cli.utils.rp_runpodignore", [63, 5.757, 67, 11.198]], ["qname/runpod.cli.utils.rp_runpodignore", [68, 22.998]], ["name/runpod.cli.utils.rp_sync", [69, 68.993]], ["names/runpod.cli.utils.rp_sync", [63, 5.757, 70, 9.547]], ["qname/runpod.cli.utils.rp_sync", [71, 22.998]], ["name/runpod.cli.utils.rp_userspace", [72, 68.993]], ["names/runpod.cli.utils.rp_userspace", [63, 5.757, 73, 11.198]], ["qname/runpod.cli.utils.rp_userspace", [74, 22.998]], ["name/runpod.cli.utils.ssh_cmd", [75, 68.993]], ["names/runpod.cli.utils.ssh_cmd", [56, 6.649, 76, 11.198]], ["qname/runpod.cli.utils.ssh_cmd", [77, 22.998]], ["name/runpod.endpoint", [78, 36.496]], ["names/runpod.endpoint", [78, 7.52]], ["qname/runpod.endpoint", [79, 22.998]], ["name/runpod.endpoint.asyncio", [80, 58.825]], ["names/runpod.endpoint.asyncio", [80, 12.12]], ["qname/runpod.endpoint.asyncio", [81, 22.998]], ["name/runpod.endpoint.asyncio.asyncio_runner", [82, 68.993]], ["names/runpod.endpoint.asyncio.asyncio_runner", [80, 9.547, 83, 9.547]], ["qname/runpod.endpoint.asyncio.asyncio_runner", [84, 22.998]], ["name/runpod.endpoint.helpers", [46, 51.397]], ["names/runpod.endpoint.helpers", [46, 10.59]], ["qname/runpod.endpoint.helpers", [85, 22.998]], ["name/runpod.endpoint.runner", [83, 58.825]], ["names/runpod.endpoint.runner", [83, 12.12]], ["qname/runpod.endpoint.runner", [86, 22.998]], ["name/runpod.error", [87, 38.213]], ["names/runpod.error", [87, 7.873]], ["qname/runpod.error", [88, 22.998]], ["name/runpod.serverless", [89, 62.863]], ["names/runpod.serverless", [89, 12.952]], ["qname/runpod.serverless", [90, 22.998]], ["name/runpod.serverless.core", [91, 62.863]], ["names/runpod.serverless.core", [91, 12.952]], ["qname/runpod.serverless.core", [92, 22.998]], ["name/runpod.serverless.modules", [93, 62.863]], ["names/runpod.serverless.modules", [93, 12.952]], ["qname/runpod.serverless.modules", [94, 22.998]], ["name/runpod.serverless.modules.rp_fastapi", [95, 68.993]], ["names/runpod.serverless.modules.rp_fastapi", [63, 5.757, 96, 11.198]], ["qname/runpod.serverless.modules.rp_fastapi", [97, 22.998]], ["name/runpod.serverless.modules.rp_handler", [98, 68.993]], ["names/runpod.serverless.modules.rp_handler", [63, 5.757, 99, 9.058]], ["qname/runpod.serverless.modules.rp_handler", [100, 22.998]], ["name/runpod.serverless.modules.rp_http", [101, 68.993]], ["names/runpod.serverless.modules.rp_http", [63, 5.757, 102, 10.203]], ["qname/runpod.serverless.modules.rp_http", [103, 22.998]], ["name/runpod.serverless.modules.rp_job", [104, 68.993]], ["names/runpod.serverless.modules.rp_job", [63, 5.757, 105, 4.552]], ["qname/runpod.serverless.modules.rp_job", [106, 22.998]], ["name/runpod.serverless.modules.rp_local", [107, 68.993]], ["names/runpod.serverless.modules.rp_local", [63, 5.757, 108, 8.667]], ["qname/runpod.serverless.modules.rp_local", [109, 22.998]], ["name/runpod.serverless.modules.rp_logger", [110, 68.993]], ["names/runpod.serverless.modules.rp_logger", [63, 5.757, 111, 9.058]], ["qname/runpod.serverless.modules.rp_logger", [112, 22.998]], ["name/runpod.serverless.modules.rp_ping", [113, 68.993]], ["names/runpod.serverless.modules.rp_ping", [63, 5.757, 114, 8.342]], ["qname/runpod.serverless.modules.rp_ping", [115, 22.998]], ["name/runpod.serverless.modules.rp_progress", [116, 68.993]], ["names/runpod.serverless.modules.rp_progress", [63, 5.757, 117, 8.667]], ["qname/runpod.serverless.modules.rp_progress", [118, 22.998]], ["name/runpod.serverless.modules.rp_scale", [119, 68.993]], ["names/runpod.serverless.modules.rp_scale", [63, 5.757, 120, 11.198]], ["qname/runpod.serverless.modules.rp_scale", [121, 22.998]], ["name/runpod.serverless.modules.rp_tips", [122, 68.993]], ["names/runpod.serverless.modules.rp_tips", [63, 5.757, 123, 11.198]], ["qname/runpod.serverless.modules.rp_tips", [124, 22.998]], ["name/runpod.serverless.modules.worker_state", [125, 68.993]], ["names/runpod.serverless.modules.worker_state", [126, 8.063, 127, 11.198]], ["qname/runpod.serverless.modules.worker_state", [128, 22.998]], ["name/runpod.serverless.utils", [60, 55.809]], ["names/runpod.serverless.utils", [60, 11.499]], ["qname/runpod.serverless.utils", [129, 22.998]], ["name/runpod.serverless.utils.rp_cleanup", [130, 68.993]], ["names/runpod.serverless.utils.rp_cleanup", [63, 5.757, 131, 11.198]], ["qname/runpod.serverless.utils.rp_cleanup", [132, 22.998]], ["name/runpod.serverless.utils.rp_cuda", [133, 68.993]], ["names/runpod.serverless.utils.rp_cuda", [63, 5.757, 134, 11.198]], ["qname/runpod.serverless.utils.rp_cuda", [135, 22.998]], ["name/runpod.serverless.utils.rp_debugger", [136, 68.993]], ["names/runpod.serverless.utils.rp_debugger", [63, 5.757, 137, 9.547]], ["qname/runpod.serverless.utils.rp_debugger", [138, 22.998]], ["name/runpod.serverless.utils.rp_download", [139, 68.993]], ["names/runpod.serverless.utils.rp_download", [63, 5.757, 140, 10.203]], ["qname/runpod.serverless.utils.rp_download", [141, 22.998]], ["name/runpod.serverless.utils.rp_upload", [142, 68.993]], ["names/runpod.serverless.utils.rp_upload", [63, 5.757, 143, 8.667]], ["qname/runpod.serverless.utils.rp_upload", [144, 22.998]], ["name/runpod.serverless.utils.rp_validator", [145, 68.993]], ["names/runpod.serverless.utils.rp_validator", [63, 5.757, 146, 11.198]], ["qname/runpod.serverless.utils.rp_validator", [147, 22.998]], ["name/runpod.serverless.worker", [126, 49.679]], ["names/runpod.serverless.worker", [126, 10.236]], ["qname/runpod.serverless.worker", [148, 22.998]], ["name/runpod.user_agent", [149, 62.863]], ["names/runpod.user_agent", [22, 7.068, 150, 9.547]], ["qname/runpod.user_agent", [151, 22.998]], ["name/runpod.version", [152, 51.397]], ["names/runpod.version", [152, 10.59]], ["qname/runpod.version", [153, 22.998]], ["name/runpod.version.get_version", [154, 34.496]], ["names/runpod.version.get_version", [152, 4.171, 155, 2.491]], ["qname/runpod.version.get_version", [156, 11.499]], ["name/runpod.version.__version__", [157, 34.496]], ["names/runpod.version.__version__", [152, 5.295]], ["qname/runpod.version.__version__", [158, 11.499]], ["name/runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH", [159, 34.496]], ["names/runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH", [160, 4.618, 161, 3.938, 162, 4.618]], ["qname/runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH", [163, 11.499]], ["name/runpod.serverless.modules.rp_logger.LOG_LEVELS", [164, 34.496]], ["names/runpod.serverless.modules.rp_logger.LOG_LEVELS", [165, 2.879, 166, 5.599]], ["qname/runpod.serverless.modules.rp_logger.LOG_LEVELS", [167, 11.499]], ["name/runpod.serverless.modules.rp_logger._validate_log_level", [168, 34.496]], ["names/runpod.serverless.modules.rp_logger._validate_log_level", [165, 2.375, 169, 3.326, 170, 3.736]], ["qname/runpod.serverless.modules.rp_logger._validate_log_level", [171, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger", [172, 68.993]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger", [48, 4.397, 111, 7.472, 173, 5.201]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger", [174, 22.998]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.__instance", [175, 31.431]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.__instance", [176, 5.749]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.__instance", [177, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.level", [170, 27.905]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.level", [170, 5.749]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.level", [178, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.__new__", [179, 27.905]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.__new__", [180, 5.118]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.__new__", [181, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.set_level", [182, 34.496]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.set_level", [170, 4.529, 183, 4.334]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.set_level", [184, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.log", [165, 17.737]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.log", [165, 3.655]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.log", [185, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.secret", [186, 31.431]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.secret", [186, 6.476]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.secret", [187, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.debug", [188, 31.431]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.debug", [188, 6.476]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.debug", [189, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.info", [64, 27.905]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.info", [64, 5.749]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.info", [190, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.warn", [191, 31.431]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.warn", [191, 6.476]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.warn", [192, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.error", [87, 19.107]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.error", [87, 3.937]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.error", [193, 11.499]], ["name/runpod.serverless.modules.rp_logger.RunPodLogger.tip", [194, 31.431]], ["names/runpod.serverless.modules.rp_logger.RunPodLogger.tip", [194, 6.476]], ["qname/runpod.serverless.modules.rp_logger.RunPodLogger.tip", [195, 11.499]], ["name/runpod.serverless.modules.worker_state.REF_COUNT_ZERO", [196, 34.496]], ["names/runpod.serverless.modules.worker_state.REF_COUNT_ZERO", [197, 4.618, 198, 4.208, 199, 4.618]], ["qname/runpod.serverless.modules.worker_state.REF_COUNT_ZERO", [200, 11.499]], ["name/runpod.serverless.modules.worker_state.WORKER_ID", [201, 34.496]], ["names/runpod.serverless.modules.worker_state.WORKER_ID", [126, 4.032, 202, 3.052]], ["qname/runpod.serverless.modules.worker_state.WORKER_ID", [203, 11.499]], ["name/runpod.serverless.modules.worker_state.IS_LOCAL_TEST", [204, 34.496]], ["names/runpod.serverless.modules.worker_state.IS_LOCAL_TEST", [108, 3.575, 205, 3.326, 206, 4.208]], ["qname/runpod.serverless.modules.worker_state.IS_LOCAL_TEST", [207, 11.499]], ["name/runpod.serverless.modules.worker_state.get_auth_header", [208, 34.496]], ["names/runpod.serverless.modules.worker_state.get_auth_header", [14, 3.575, 155, 2.054, 209, 4.208]], ["qname/runpod.serverless.modules.worker_state.get_auth_header", [210, 11.499]], ["name/runpod.serverless.modules.worker_state.Job", [105, 28.046]], ["names/runpod.serverless.modules.worker_state.Job", [105, 5.779]], ["qname/runpod.serverless.modules.worker_state.Job", [211, 22.998]], ["name/runpod.serverless.modules.worker_state.Job.__init__", [212, 20.109]], ["names/runpod.serverless.modules.worker_state.Job.__init__", [213, 4.143]], ["qname/runpod.serverless.modules.worker_state.Job.__init__", [214, 11.499]], ["name/runpod.serverless.modules.worker_state.Job.id", [202, 18.807]], ["names/runpod.serverless.modules.worker_state.Job.id", [202, 3.875]], ["qname/runpod.serverless.modules.worker_state.Job.id", [215, 11.499]], ["name/runpod.serverless.modules.worker_state.Job.input", [216, 22.821]], ["names/runpod.serverless.modules.worker_state.Job.input", [216, 4.702]], ["qname/runpod.serverless.modules.worker_state.Job.input", [217, 11.499]], ["name/runpod.serverless.modules.worker_state.Job.webhook", [218, 24.84]], ["names/runpod.serverless.modules.worker_state.Job.webhook", [218, 5.118]], ["qname/runpod.serverless.modules.worker_state.Job.webhook", [219, 11.499]], ["name/runpod.serverless.modules.worker_state.Job.__eq__", [220, 34.496]], ["names/runpod.serverless.modules.worker_state.Job.__eq__", [221, 7.108]], ["qname/runpod.serverless.modules.worker_state.Job.__eq__", [222, 11.499]], ["name/runpod.serverless.modules.worker_state.Job.__hash__", [223, 34.496]], ["names/runpod.serverless.modules.worker_state.Job.__hash__", [224, 7.108]], ["qname/runpod.serverless.modules.worker_state.Job.__hash__", [225, 11.499]], ["name/runpod.serverless.modules.worker_state.Job.__str__", [226, 29.413]], ["names/runpod.serverless.modules.worker_state.Job.__str__", [227, 6.06]], ["qname/runpod.serverless.modules.worker_state.Job.__str__", [228, 11.499]], ["name/runpod.serverless.modules.worker_state.Jobs", [229, 46.843]], ["names/runpod.serverless.modules.worker_state.Jobs", [229, 9.651]], ["qname/runpod.serverless.modules.worker_state.Jobs", [230, 22.998]], ["name/runpod.serverless.modules.worker_state.Jobs._instance", [231, 31.431]], ["names/runpod.serverless.modules.worker_state.Jobs._instance", [176, 5.749]], ["qname/runpod.serverless.modules.worker_state.Jobs._instance", [232, 11.499]], ["name/runpod.serverless.modules.worker_state.Jobs.jobs", [229, 23.421]], ["names/runpod.serverless.modules.worker_state.Jobs.jobs", [229, 4.826]], ["qname/runpod.serverless.modules.worker_state.Jobs.jobs", [233, 11.499]], ["name/runpod.serverless.modules.worker_state.Jobs.__new__", [179, 27.905]], ["names/runpod.serverless.modules.worker_state.Jobs.__new__", [180, 5.118]], ["qname/runpod.serverless.modules.worker_state.Jobs.__new__", [234, 11.499]], ["name/runpod.serverless.modules.worker_state.Jobs.add_job", [235, 34.496]], ["names/runpod.serverless.modules.worker_state.Jobs.add_job", [105, 2.276, 236, 4.171]], ["qname/runpod.serverless.modules.worker_state.Jobs.add_job", [237, 11.499]], ["name/runpod.serverless.modules.worker_state.Jobs.remove_job", [238, 34.496]], ["names/runpod.serverless.modules.worker_state.Jobs.remove_job", [105, 2.276, 239, 5.599]], ["qname/runpod.serverless.modules.worker_state.Jobs.remove_job", [240, 11.499]], ["name/runpod.serverless.modules.worker_state.Jobs.get_job", [241, 31.431]], ["names/runpod.serverless.modules.worker_state.Jobs.get_job", [105, 2.276, 155, 2.491]], ["qname/runpod.serverless.modules.worker_state.Jobs.get_job", [242, 11.499]], ["name/runpod.serverless.modules.worker_state.Jobs.get_job_list", [243, 34.496]], ["names/runpod.serverless.modules.worker_state.Jobs.get_job_list", [105, 1.877, 155, 2.054, 244, 3.055]], ["qname/runpod.serverless.modules.worker_state.Jobs.get_job_list", [245, 11.499]], ["name/runpod.serverless.modules.worker_state.Jobs.get_job_count", [246, 34.496]], ["names/runpod.serverless.modules.worker_state.Jobs.get_job_count", [105, 1.877, 155, 2.054, 198, 4.208]], ["qname/runpod.serverless.modules.worker_state.Jobs.get_job_count", [247, 11.499]], ["name/runpod.serverless.modules.rp_tips.log", [165, 17.737]], ["names/runpod.serverless.modules.rp_tips.log", [165, 3.655]], ["qname/runpod.serverless.modules.rp_tips.log", [248, 11.499]], ["name/runpod.serverless.modules.rp_tips.check_return_size", [249, 34.496]], ["names/runpod.serverless.modules.rp_tips.check_return_size", [250, 3.938, 251, 4.618, 252, 4.208]], ["qname/runpod.serverless.modules.rp_tips.check_return_size", [253, 11.499]], ["name/runpod.serverless.modules.rp_job.JOB_GET_URL", [254, 34.496]], ["names/runpod.serverless.modules.rp_job.JOB_GET_URL", [105, 1.877, 155, 2.054, 255, 2.853]], ["qname/runpod.serverless.modules.rp_job.JOB_GET_URL", [256, 11.499]], ["name/runpod.serverless.modules.rp_job.log", [165, 17.737]], ["names/runpod.serverless.modules.rp_job.log", [165, 3.655]], ["qname/runpod.serverless.modules.rp_job.log", [257, 11.499]], ["name/runpod.serverless.modules.rp_job.job_list", [258, 26.701]], ["names/runpod.serverless.modules.rp_job.job_list", [105, 2.276, 244, 3.704]], ["qname/runpod.serverless.modules.rp_job.job_list", [259, 11.499]], ["name/runpod.serverless.modules.rp_job._job_get_url", [260, 34.496]], ["names/runpod.serverless.modules.rp_job._job_get_url", [105, 1.877, 155, 2.054, 255, 2.853]], ["qname/runpod.serverless.modules.rp_job._job_get_url", [261, 11.499]], ["name/runpod.serverless.modules.rp_job.get_job", [241, 31.431]], ["names/runpod.serverless.modules.rp_job.get_job", [105, 2.276, 155, 2.491]], ["qname/runpod.serverless.modules.rp_job.get_job", [262, 11.499]], ["name/runpod.serverless.modules.rp_job.run_job", [263, 34.496]], ["names/runpod.serverless.modules.rp_job.run_job", [105, 2.276, 173, 3.152]], ["qname/runpod.serverless.modules.rp_job.run_job", [264, 11.499]], ["name/runpod.serverless.modules.rp_job.run_job_generator", [265, 34.496]], ["names/runpod.serverless.modules.rp_job.run_job_generator", [105, 1.877, 173, 2.6, 266, 4.208]], ["qname/runpod.serverless.modules.rp_job.run_job_generator", [267, 11.499]], ["name/runpod.serverless.core.log", [165, 17.737]], ["names/runpod.serverless.core.log", [165, 3.655]], ["qname/runpod.serverless.core.log", [268, 11.499]], ["name/runpod.serverless.core.CGetJobResult", [269, 68.993]], ["names/runpod.serverless.core.CGetJobResult", [105, 3.755, 270, 9.237, 271, 7.472]], ["qname/runpod.serverless.core.CGetJobResult", [272, 22.998]], ["name/runpod.serverless.core.CGetJobResult._fields_", [273, 34.496]], ["names/runpod.serverless.core.CGetJobResult._fields_", [274, 7.108]], ["qname/runpod.serverless.core.CGetJobResult._fields_", [275, 11.499]], ["name/runpod.serverless.core.CGetJobResult.__str__", [226, 29.413]], ["names/runpod.serverless.core.CGetJobResult.__str__", [227, 6.06]], ["qname/runpod.serverless.core.CGetJobResult.__str__", [276, 11.499]], ["name/runpod.serverless.core.Hook", [277, 62.863]], ["names/runpod.serverless.core.Hook", [277, 12.952]], ["qname/runpod.serverless.core.Hook", [278, 22.998]], ["name/runpod.serverless.core.Hook._instance", [231, 31.431]], ["names/runpod.serverless.core.Hook._instance", [176, 5.749]], ["qname/runpod.serverless.core.Hook._instance", [279, 11.499]], ["name/runpod.serverless.core.Hook._get_jobs", [280, 34.496]], ["names/runpod.serverless.core.Hook._get_jobs", [155, 2.491, 229, 3.801]], ["qname/runpod.serverless.core.Hook._get_jobs", [281, 11.499]], ["name/runpod.serverless.core.Hook._progress_update", [282, 34.496]], ["names/runpod.serverless.core.Hook._progress_update", [117, 4.334, 283, 4.032]], ["qname/runpod.serverless.core.Hook._progress_update", [284, 11.499]], ["name/runpod.serverless.core.Hook._stream_output", [285, 34.496]], ["names/runpod.serverless.core.Hook._stream_output", [286, 3.264, 287, 3.264]], ["qname/runpod.serverless.core.Hook._stream_output", [288, 11.499]], ["name/runpod.serverless.core.Hook._post_output", [289, 34.496]], ["names/runpod.serverless.core.Hook._post_output", [287, 3.264, 290, 4.529]], ["qname/runpod.serverless.core.Hook._post_output", [291, 11.499]], ["name/runpod.serverless.core.Hook._finish_stream", [292, 34.496]], ["names/runpod.serverless.core.Hook._finish_stream", [286, 3.264, 293, 5.101]], ["qname/runpod.serverless.core.Hook._finish_stream", [294, 11.499]], ["name/runpod.serverless.core.Hook.__new__", [179, 27.905]], ["names/runpod.serverless.core.Hook.__new__", [180, 5.118]], ["qname/runpod.serverless.core.Hook.__new__", [295, 11.499]], ["name/runpod.serverless.core.Hook.__init__", [212, 20.109]], ["names/runpod.serverless.core.Hook.__init__", [213, 4.143]], ["qname/runpod.serverless.core.Hook.__init__", [296, 11.499]], ["name/runpod.serverless.core.Hook.rust_so_path", [297, 34.496]], ["names/runpod.serverless.core.Hook.rust_so_path", [298, 4.208, 299, 4.618, 300, 3.938]], ["qname/runpod.serverless.core.Hook.rust_so_path", [301, 11.499]], ["name/runpod.serverless.core.Hook.rust_crate_version", [302, 34.496]], ["names/runpod.serverless.core.Hook.rust_crate_version", [152, 3.44, 298, 4.208, 303, 4.618]], ["qname/runpod.serverless.core.Hook.rust_crate_version", [304, 11.499]], ["name/runpod.serverless.core.Hook._initialized", [305, 34.496]], ["names/runpod.serverless.core.Hook._initialized", [306, 7.108]], ["qname/runpod.serverless.core.Hook._initialized", [307, 11.499]], ["name/runpod.serverless.core.Hook._json_serialize_job_data", [308, 34.496]], ["names/runpod.serverless.core.Hook._json_serialize_job_data", [105, 1.598, 309, 3.93, 310, 3.93, 311, 3.93]], ["qname/runpod.serverless.core.Hook._json_serialize_job_data", [312, 11.499]], ["name/runpod.serverless.core.Hook.get_jobs", [313, 31.431]], ["names/runpod.serverless.core.Hook.get_jobs", [155, 2.491, 229, 3.801]], ["qname/runpod.serverless.core.Hook.get_jobs", [314, 11.499]], ["name/runpod.serverless.core.Hook.progress_update", [315, 31.431]], ["names/runpod.serverless.core.Hook.progress_update", [117, 4.334, 283, 4.032]], ["qname/runpod.serverless.core.Hook.progress_update", [316, 11.499]], ["name/runpod.serverless.core.Hook.stream_output", [317, 34.496]], ["names/runpod.serverless.core.Hook.stream_output", [286, 3.264, 287, 3.264]], ["qname/runpod.serverless.core.Hook.stream_output", [318, 11.499]], ["name/runpod.serverless.core.Hook.post_output", [319, 34.496]], ["names/runpod.serverless.core.Hook.post_output", [287, 3.264, 290, 4.529]], ["qname/runpod.serverless.core.Hook.post_output", [320, 11.499]], ["name/runpod.serverless.core.Hook.finish_stream", [321, 34.496]], ["names/runpod.serverless.core.Hook.finish_stream", [286, 3.264, 293, 5.101]], ["qname/runpod.serverless.core.Hook.finish_stream", [322, 11.499]], ["name/runpod.serverless.core._process_job", [323, 31.431]], ["names/runpod.serverless.core._process_job", [105, 2.276, 324, 5.101]], ["qname/runpod.serverless.core._process_job", [325, 11.499]], ["name/runpod.serverless.core.run", [173, 19.423]], ["names/runpod.serverless.core.run", [173, 4.002]], ["qname/runpod.serverless.core.run", [326, 11.499]], ["name/runpod.serverless.core.main", [327, 27.905]], ["names/runpod.serverless.core.main", [327, 5.749]], ["qname/runpod.serverless.core.main", [328, 11.499]], ["name/runpod.user_agent.construct_user_agent", [329, 34.496]], ["names/runpod.user_agent.construct_user_agent", [22, 2.915, 150, 3.938, 330, 4.618]], ["qname/runpod.user_agent.construct_user_agent", [331, 11.499]], ["name/runpod.user_agent.USER_AGENT", [149, 31.431]], ["names/runpod.user_agent.USER_AGENT", [22, 3.534, 150, 4.774]], ["qname/runpod.user_agent.USER_AGENT", [332, 11.499]], ["name/runpod.serverless.modules.rp_local.log", [165, 17.737]], ["names/runpod.serverless.modules.rp_local.log", [165, 3.655]], ["qname/runpod.serverless.modules.rp_local.log", [333, 11.499]], ["name/runpod.serverless.modules.rp_local.run_local", [334, 34.496]], ["names/runpod.serverless.modules.rp_local.run_local", [108, 4.334, 173, 3.152]], ["qname/runpod.serverless.modules.rp_local.run_local", [335, 11.499]], ["name/runpod.serverless.modules.rp_handler.is_generator", [336, 34.496]], ["names/runpod.serverless.modules.rp_handler.is_generator", [205, 4.032, 266, 5.101]], ["qname/runpod.serverless.modules.rp_handler.is_generator", [337, 11.499]], ["name/runpod.serverless.modules.rp_ping.log", [165, 17.737]], ["names/runpod.serverless.modules.rp_ping.log", [165, 3.655]], ["qname/runpod.serverless.modules.rp_ping.log", [338, 11.499]], ["name/runpod.serverless.modules.rp_ping.jobs", [229, 23.421]], ["names/runpod.serverless.modules.rp_ping.jobs", [229, 4.826]], ["qname/runpod.serverless.modules.rp_ping.jobs", [339, 11.499]], ["name/runpod.serverless.modules.rp_ping.Heartbeat", [340, 51.397]], ["names/runpod.serverless.modules.rp_ping.Heartbeat", [340, 10.59]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat", [341, 22.998]], ["name/runpod.serverless.modules.rp_ping.Heartbeat.PING_URL", [342, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat.PING_URL", [114, 4.171, 255, 3.459]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat.PING_URL", [343, 11.499]], ["name/runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL", [344, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL", [114, 4.171, 345, 5.599]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL", [346, 11.499]], ["name/runpod.serverless.modules.rp_ping.Heartbeat._thread_started", [347, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat._thread_started", [348, 5.101, 349, 5.599]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat._thread_started", [350, 11.499]], ["name/runpod.serverless.modules.rp_ping.Heartbeat.__init__", [212, 20.109]], ["names/runpod.serverless.modules.rp_ping.Heartbeat.__init__", [213, 4.143]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat.__init__", [351, 11.499]], ["name/runpod.serverless.modules.rp_ping.Heartbeat._session", [352, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat._session", [353, 4.963]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat._session", [354, 11.499]], ["name/runpod.serverless.modules.rp_ping.Heartbeat.start_ping", [355, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat.start_ping", [114, 4.171, 356, 3.801]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat.start_ping", [357, 11.499]], ["name/runpod.serverless.modules.rp_ping.Heartbeat.ping_loop", [358, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat.ping_loop", [114, 4.171, 359, 5.599]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat.ping_loop", [360, 11.499]], ["name/runpod.serverless.modules.rp_ping.Heartbeat._send_ping", [361, 34.496]], ["names/runpod.serverless.modules.rp_ping.Heartbeat._send_ping", [114, 4.171, 362, 4.774]], ["qname/runpod.serverless.modules.rp_ping.Heartbeat._send_ping", [363, 11.499]], ["name/runpod.serverless.modules.rp_scale.log", [165, 17.737]], ["names/runpod.serverless.modules.rp_scale.log", [165, 3.655]], ["qname/runpod.serverless.modules.rp_scale.log", [364, 11.499]], ["name/runpod.serverless.modules.rp_scale.job_list", [258, 26.701]], ["names/runpod.serverless.modules.rp_scale.job_list", [105, 2.276, 244, 3.704]], ["qname/runpod.serverless.modules.rp_scale.job_list", [365, 11.499]], ["name/runpod.serverless.modules.rp_scale._default_concurrency_modifier", [366, 34.496]], ["names/runpod.serverless.modules.rp_scale._default_concurrency_modifier", [367, 3.938, 368, 3.736, 369, 4.208]], ["qname/runpod.serverless.modules.rp_scale._default_concurrency_modifier", [370, 11.499]], ["name/runpod.serverless.modules.rp_scale.JobScaler", [371, 68.993]], ["names/runpod.serverless.modules.rp_scale.JobScaler", [105, 4.552, 372, 11.198]], ["qname/runpod.serverless.modules.rp_scale.JobScaler", [373, 22.998]], ["name/runpod.serverless.modules.rp_scale.JobScaler.__init__", [212, 20.109]], ["names/runpod.serverless.modules.rp_scale.JobScaler.__init__", [213, 4.143]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.__init__", [374, 11.499]], ["name/runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier", [375, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier", [368, 4.529, 369, 5.101]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier", [376, 11.499]], ["name/runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks", [377, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks", [105, 1.598, 155, 1.748, 378, 3.93, 379, 3.93]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks", [380, 11.499]], ["name/runpod.serverless.modules.rp_scale.JobScaler.job_history", [381, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.job_history", [105, 2.276, 382, 5.599]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.job_history", [383, 11.499]], ["name/runpod.serverless.modules.rp_scale.JobScaler.current_concurrency", [384, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.current_concurrency", [368, 4.529, 385, 5.599]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.current_concurrency", [386, 11.499]], ["name/runpod.serverless.modules.rp_scale.JobScaler._is_alive", [387, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler._is_alive", [205, 4.032, 388, 5.101]], ["qname/runpod.serverless.modules.rp_scale.JobScaler._is_alive", [389, 11.499]], ["name/runpod.serverless.modules.rp_scale.JobScaler.is_alive", [390, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.is_alive", [205, 4.032, 388, 5.101]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.is_alive", [391, 11.499]], ["name/runpod.serverless.modules.rp_scale.JobScaler.kill_worker", [392, 34.496]], ["names/runpod.serverless.modules.rp_scale.JobScaler.kill_worker", [126, 4.032, 393, 5.599]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.kill_worker", [394, 11.499]], ["name/runpod.serverless.modules.rp_scale.JobScaler.get_jobs", [313, 31.431]], ["names/runpod.serverless.modules.rp_scale.JobScaler.get_jobs", [155, 2.491, 229, 3.801]], ["qname/runpod.serverless.modules.rp_scale.JobScaler.get_jobs", [395, 11.499]], ["name/runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE", [396, 34.496]], ["names/runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE", [105, 1.598, 255, 2.428, 397, 3.581, 398, 2.83]], ["qname/runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE", [399, 11.499]], ["name/runpod.serverless.modules.rp_http.JOB_DONE_URL", [400, 34.496]], ["names/runpod.serverless.modules.rp_http.JOB_DONE_URL", [105, 1.877, 255, 2.853, 397, 4.208]], ["qname/runpod.serverless.modules.rp_http.JOB_DONE_URL", [401, 11.499]], ["name/runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE", [402, 34.496]], ["names/runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE", [105, 1.598, 255, 2.428, 286, 2.291, 398, 2.83]], ["qname/runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE", [403, 11.499]], ["name/runpod.serverless.modules.rp_http.JOB_STREAM_URL", [404, 34.496]], ["names/runpod.serverless.modules.rp_http.JOB_STREAM_URL", [105, 1.877, 255, 2.853, 286, 2.692]], ["qname/runpod.serverless.modules.rp_http.JOB_STREAM_URL", [405, 11.499]], ["name/runpod.serverless.modules.rp_http.log", [165, 17.737]], ["names/runpod.serverless.modules.rp_http.log", [165, 3.655]], ["qname/runpod.serverless.modules.rp_http.log", [406, 11.499]], ["name/runpod.serverless.modules.rp_http.job_list", [258, 26.701]], ["names/runpod.serverless.modules.rp_http.job_list", [105, 2.276, 244, 3.704]], ["qname/runpod.serverless.modules.rp_http.job_list", [407, 11.499]], ["name/runpod.serverless.modules.rp_http._transmit", [408, 34.496]], ["names/runpod.serverless.modules.rp_http._transmit", [409, 7.108]], ["qname/runpod.serverless.modules.rp_http._transmit", [410, 11.499]], ["name/runpod.serverless.modules.rp_http._handle_result", [411, 34.496]], ["names/runpod.serverless.modules.rp_http._handle_result", [271, 4.529, 412, 5.599]], ["qname/runpod.serverless.modules.rp_http._handle_result", [413, 11.499]], ["name/runpod.serverless.modules.rp_http.send_result", [414, 34.496]], ["names/runpod.serverless.modules.rp_http.send_result", [271, 4.529, 362, 4.774]], ["qname/runpod.serverless.modules.rp_http.send_result", [415, 11.499]], ["name/runpod.serverless.modules.rp_http.stream_result", [416, 34.496]], ["names/runpod.serverless.modules.rp_http.stream_result", [271, 4.529, 286, 3.264]], ["qname/runpod.serverless.modules.rp_http.stream_result", [417, 11.499]], ["name/runpod.serverless.utils.rp_download.HEADERS", [418, 24.089]], ["names/runpod.serverless.utils.rp_download.HEADERS", [418, 4.963]], ["qname/runpod.serverless.utils.rp_download.HEADERS", [419, 11.499]], ["name/runpod.serverless.utils.rp_download.calculate_chunk_size", [420, 34.496]], ["names/runpod.serverless.utils.rp_download.calculate_chunk_size", [252, 4.208, 421, 4.618, 422, 4.618]], ["qname/runpod.serverless.utils.rp_download.calculate_chunk_size", [423, 11.499]], ["name/runpod.serverless.utils.rp_download.download_files_from_urls", [424, 34.496]], ["names/runpod.serverless.utils.rp_download.download_files_from_urls", [140, 3.581, 425, 3.042, 426, 3.581, 427, 3.93]], ["qname/runpod.serverless.utils.rp_download.download_files_from_urls", [428, 11.499]], ["name/runpod.serverless.utils.rp_download.file", [429, 23.421]], ["names/runpod.serverless.utils.rp_download.file", [429, 4.826]], ["qname/runpod.serverless.utils.rp_download.file", [430, 11.499]], ["name/runpod.serverless.utils.rp_upload.logger", [111, 27.905]], ["names/runpod.serverless.utils.rp_upload.logger", [111, 5.749]], ["qname/runpod.serverless.utils.rp_upload.logger", [431, 11.499]], ["name/runpod.serverless.utils.rp_upload.FMT", [432, 31.431]], ["names/runpod.serverless.utils.rp_upload.FMT", [432, 6.476]], ["qname/runpod.serverless.utils.rp_upload.FMT", [433, 11.499]], ["name/runpod.serverless.utils.rp_upload.extract_region_from_url", [434, 34.496]], ["names/runpod.serverless.utils.rp_upload.extract_region_from_url", [255, 2.428, 426, 3.581, 435, 3.93, 436, 3.93]], ["qname/runpod.serverless.utils.rp_upload.extract_region_from_url", [437, 11.499]], ["name/runpod.serverless.utils.rp_upload.get_boto_client", [438, 34.496]], ["names/runpod.serverless.utils.rp_upload.get_boto_client", [155, 2.054, 439, 4.618, 440, 3.736]], ["qname/runpod.serverless.utils.rp_upload.get_boto_client", [441, 11.499]], ["name/runpod.serverless.utils.rp_upload.upload_image", [442, 34.496]], ["names/runpod.serverless.utils.rp_upload.upload_image", [143, 4.334, 443, 5.101]], ["qname/runpod.serverless.utils.rp_upload.upload_image", [444, 11.499]], ["name/runpod.serverless.utils.rp_upload.files", [425, 26.701]], ["names/runpod.serverless.utils.rp_upload.files", [425, 5.501]], ["qname/runpod.serverless.utils.rp_upload.files", [445, 11.499]], ["name/runpod.serverless.utils.rp_upload.bucket_upload", [446, 34.496]], ["names/runpod.serverless.utils.rp_upload.bucket_upload", [143, 4.334, 447, 5.101]], ["qname/runpod.serverless.utils.rp_upload.bucket_upload", [448, 11.499]], ["name/runpod.serverless.utils.rp_upload.upload_file_to_bucket", [449, 34.496]], ["names/runpod.serverless.utils.rp_upload.upload_file_to_bucket", [143, 3.042, 429, 2.668, 447, 3.581, 450, 3.581]], ["qname/runpod.serverless.utils.rp_upload.upload_file_to_bucket", [451, 11.499]], ["name/runpod.serverless.utils.rp_upload.upload_in_memory_object", [452, 34.496]], ["names/runpod.serverless.utils.rp_upload.upload_in_memory_object", [143, 3.042, 453, 3.93, 454, 3.93, 455, 3.93]], ["qname/runpod.serverless.utils.rp_upload.upload_in_memory_object", [456, 11.499]], ["name/runpod.serverless.utils.rp_debugger.OS_INFO", [457, 34.496]], ["names/runpod.serverless.utils.rp_debugger.OS_INFO", [64, 4.529, 458, 5.599]], ["qname/runpod.serverless.utils.rp_debugger.OS_INFO", [459, 11.499]], ["name/runpod.serverless.utils.rp_debugger.PROCESSOR", [460, 31.431]], ["names/runpod.serverless.utils.rp_debugger.PROCESSOR", [460, 6.476]], ["qname/runpod.serverless.utils.rp_debugger.PROCESSOR", [461, 11.499]], ["name/runpod.serverless.utils.rp_debugger.PYTHON_VERSION", [462, 34.496]], ["names/runpod.serverless.utils.rp_debugger.PYTHON_VERSION", [152, 4.171, 463, 4.774]], ["qname/runpod.serverless.utils.rp_debugger.PYTHON_VERSION", [464, 11.499]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints", [465, 46.843]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints", [465, 9.651]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints", [466, 22.998]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.__instance", [175, 31.431]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.__instance", [176, 5.749]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.__instance", [467, 11.499]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints", [465, 23.421]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints", [465, 4.826]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints", [468, 11.499]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup", [469, 34.496]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup", [470, 4.529, 471, 5.599]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup", [472, 11.499]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.__new__", [179, 27.905]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.__new__", [180, 5.118]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.__new__", [473, 11.499]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.add", [236, 25.698]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.add", [236, 5.295]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.add", [474, 11.499]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.start", [356, 23.421]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.start", [356, 4.826]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.start", [475, 11.499]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.stop", [476, 26.701]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.stop", [476, 5.501]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.stop", [477, 11.499]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints", [478, 34.496]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints", [155, 2.491, 465, 3.801]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints", [479, 11.499]], ["name/runpod.serverless.utils.rp_debugger.Checkpoints.clear", [480, 29.413]], ["names/runpod.serverless.utils.rp_debugger.Checkpoints.clear", [480, 6.06]], ["qname/runpod.serverless.utils.rp_debugger.Checkpoints.clear", [481, 11.499]], ["name/runpod.serverless.utils.rp_debugger.LineTimer", [482, 68.993]], ["names/runpod.serverless.utils.rp_debugger.LineTimer", [483, 11.198, 484, 10.203]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer", [485, 22.998]], ["name/runpod.serverless.utils.rp_debugger.LineTimer.__init__", [212, 20.109]], ["names/runpod.serverless.utils.rp_debugger.LineTimer.__init__", [213, 4.143]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer.__init__", [486, 11.499]], ["name/runpod.serverless.utils.rp_debugger.LineTimer.checkpoints", [465, 23.421]], ["names/runpod.serverless.utils.rp_debugger.LineTimer.checkpoints", [465, 4.826]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer.checkpoints", [487, 11.499]], ["name/runpod.serverless.utils.rp_debugger.LineTimer.name", [470, 27.905]], ["names/runpod.serverless.utils.rp_debugger.LineTimer.name", [470, 5.749]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer.name", [488, 11.499]], ["name/runpod.serverless.utils.rp_debugger.LineTimer.__enter__", [489, 31.431]], ["names/runpod.serverless.utils.rp_debugger.LineTimer.__enter__", [490, 6.476]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer.__enter__", [491, 11.499]], ["name/runpod.serverless.utils.rp_debugger.LineTimer.__exit__", [492, 31.431]], ["names/runpod.serverless.utils.rp_debugger.LineTimer.__exit__", [493, 6.476]], ["qname/runpod.serverless.utils.rp_debugger.LineTimer.__exit__", [494, 11.499]], ["name/runpod.serverless.utils.rp_debugger.FunctionTimer", [495, 68.993]], ["names/runpod.serverless.utils.rp_debugger.FunctionTimer", [484, 10.203, 496, 9.058]], ["qname/runpod.serverless.utils.rp_debugger.FunctionTimer", [497, 22.998]], ["name/runpod.serverless.utils.rp_debugger.FunctionTimer.__init__", [212, 20.109]], ["names/runpod.serverless.utils.rp_debugger.FunctionTimer.__init__", [213, 4.143]], ["qname/runpod.serverless.utils.rp_debugger.FunctionTimer.__init__", [498, 11.499]], ["name/runpod.serverless.utils.rp_debugger.FunctionTimer.function", [496, 27.905]], ["names/runpod.serverless.utils.rp_debugger.FunctionTimer.function", [496, 5.749]], ["qname/runpod.serverless.utils.rp_debugger.FunctionTimer.function", [499, 11.499]], ["name/runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints", [465, 23.421]], ["names/runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints", [465, 4.826]], ["qname/runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints", [500, 11.499]], ["name/runpod.serverless.utils.rp_debugger.FunctionTimer.__call__", [501, 34.496]], ["names/runpod.serverless.utils.rp_debugger.FunctionTimer.__call__", [502, 7.108]], ["qname/runpod.serverless.utils.rp_debugger.FunctionTimer.__call__", [503, 11.499]], ["name/runpod.serverless.utils.rp_debugger.get_debugger_output", [504, 34.496]], ["names/runpod.serverless.utils.rp_debugger.get_debugger_output", [137, 3.938, 155, 2.054, 287, 2.692]], ["qname/runpod.serverless.utils.rp_debugger.get_debugger_output", [505, 11.499]], ["name/runpod.serverless.utils.rp_debugger.clear_debugger_output", [506, 34.496]], ["names/runpod.serverless.utils.rp_debugger.clear_debugger_output", [137, 3.938, 287, 2.692, 480, 3.938]], ["qname/runpod.serverless.utils.rp_debugger.clear_debugger_output", [507, 11.499]], ["name/runpod.serverless.worker.log", [165, 17.737]], ["names/runpod.serverless.worker.log", [165, 3.655]], ["qname/runpod.serverless.worker.log", [508, 11.499]], ["name/runpod.serverless.worker.job_list", [258, 26.701]], ["names/runpod.serverless.worker.job_list", [105, 2.276, 244, 3.704]], ["qname/runpod.serverless.worker.job_list", [509, 11.499]], ["name/runpod.serverless.worker.heartbeat", [340, 25.698]], ["names/runpod.serverless.worker.heartbeat", [340, 5.295]], ["qname/runpod.serverless.worker.heartbeat", [510, 11.499]], ["name/runpod.serverless.worker._get_auth_header", [511, 34.496]], ["names/runpod.serverless.worker._get_auth_header", [14, 3.575, 155, 2.054, 209, 4.208]], ["qname/runpod.serverless.worker._get_auth_header", [512, 11.499]], ["name/runpod.serverless.worker._is_local", [513, 34.496]], ["names/runpod.serverless.worker._is_local", [108, 4.334, 205, 4.032]], ["qname/runpod.serverless.worker._is_local", [514, 11.499]], ["name/runpod.serverless.worker._process_job", [323, 31.431]], ["names/runpod.serverless.worker._process_job", [105, 2.276, 324, 5.101]], ["qname/runpod.serverless.worker._process_job", [515, 11.499]], ["name/runpod.serverless.worker.run_worker", [516, 34.496]], ["names/runpod.serverless.worker.run_worker", [126, 4.032, 173, 3.152]], ["qname/runpod.serverless.worker.run_worker", [517, 11.499]], ["name/runpod.serverless.worker.main", [327, 27.905]], ["names/runpod.serverless.worker.main", [327, 5.749]], ["qname/runpod.serverless.worker.main", [518, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID", [519, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID", [0, 3.575, 78, 2.443, 202, 2.518]], ["qname/runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID", [520, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.TITLE", [521, 31.431]], ["names/runpod.serverless.modules.rp_fastapi.TITLE", [521, 6.476]], ["qname/runpod.serverless.modules.rp_fastapi.TITLE", [522, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.DESCRIPTION", [523, 25.698]], ["names/runpod.serverless.modules.rp_fastapi.DESCRIPTION", [523, 5.295]], ["qname/runpod.serverless.modules.rp_fastapi.DESCRIPTION", [524, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION", [525, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION", [173, 3.152, 523, 4.171]], ["qname/runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION", [526, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION", [527, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION", [523, 4.171, 528, 5.101]], ["qname/runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION", [529, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION", [530, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION", [286, 3.264, 523, 4.171]], ["qname/runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION", [531, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION", [532, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION", [523, 4.171, 533, 3.459]], ["qname/runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION", [534, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.job_list", [258, 26.701]], ["names/runpod.serverless.modules.rp_fastapi.job_list", [105, 2.276, 244, 3.704]], ["qname/runpod.serverless.modules.rp_fastapi.job_list", [535, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.heartbeat", [340, 25.698]], ["names/runpod.serverless.modules.rp_fastapi.heartbeat", [340, 5.295]], ["qname/runpod.serverless.modules.rp_fastapi.heartbeat", [536, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.Job", [105, 28.046]], ["names/runpod.serverless.modules.rp_fastapi.Job", [105, 5.779]], ["qname/runpod.serverless.modules.rp_fastapi.Job", [537, 22.998]], ["name/runpod.serverless.modules.rp_fastapi.Job.id", [202, 18.807]], ["names/runpod.serverless.modules.rp_fastapi.Job.id", [202, 3.875]], ["qname/runpod.serverless.modules.rp_fastapi.Job.id", [538, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.Job.input", [216, 22.821]], ["names/runpod.serverless.modules.rp_fastapi.Job.input", [216, 4.702]], ["qname/runpod.serverless.modules.rp_fastapi.Job.input", [539, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.TestJob", [540, 68.993]], ["names/runpod.serverless.modules.rp_fastapi.TestJob", [105, 4.552, 206, 10.203]], ["qname/runpod.serverless.modules.rp_fastapi.TestJob", [541, 22.998]], ["name/runpod.serverless.modules.rp_fastapi.TestJob.id", [202, 18.807]], ["names/runpod.serverless.modules.rp_fastapi.TestJob.id", [202, 3.875]], ["qname/runpod.serverless.modules.rp_fastapi.TestJob.id", [542, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.TestJob.input", [216, 22.821]], ["names/runpod.serverless.modules.rp_fastapi.TestJob.input", [216, 4.702]], ["qname/runpod.serverless.modules.rp_fastapi.TestJob.input", [543, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.TestJob.webhook", [218, 24.84]], ["names/runpod.serverless.modules.rp_fastapi.TestJob.webhook", [218, 5.118]], ["qname/runpod.serverless.modules.rp_fastapi.TestJob.webhook", [544, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.DefaultRequest", [545, 68.993]], ["names/runpod.serverless.modules.rp_fastapi.DefaultRequest", [367, 9.547, 546, 10.203]], ["qname/runpod.serverless.modules.rp_fastapi.DefaultRequest", [547, 22.998]], ["name/runpod.serverless.modules.rp_fastapi.DefaultRequest.input", [216, 22.821]], ["names/runpod.serverless.modules.rp_fastapi.DefaultRequest.input", [216, 4.702]], ["qname/runpod.serverless.modules.rp_fastapi.DefaultRequest.input", [548, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook", [218, 24.84]], ["names/runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook", [218, 5.118]], ["qname/runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook", [549, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.JobOutput", [550, 68.993]], ["names/runpod.serverless.modules.rp_fastapi.JobOutput", [105, 4.552, 287, 6.527]], ["qname/runpod.serverless.modules.rp_fastapi.JobOutput", [551, 22.998]], ["name/runpod.serverless.modules.rp_fastapi.JobOutput.id", [202, 18.807]], ["names/runpod.serverless.modules.rp_fastapi.JobOutput.id", [202, 3.875]], ["qname/runpod.serverless.modules.rp_fastapi.JobOutput.id", [552, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.JobOutput.status", [533, 21.313]], ["names/runpod.serverless.modules.rp_fastapi.JobOutput.status", [533, 4.391]], ["qname/runpod.serverless.modules.rp_fastapi.JobOutput.status", [553, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.JobOutput.output", [287, 20.109]], ["names/runpod.serverless.modules.rp_fastapi.JobOutput.output", [287, 4.143]], ["qname/runpod.serverless.modules.rp_fastapi.JobOutput.output", [554, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.JobOutput.error", [87, 19.107]], ["names/runpod.serverless.modules.rp_fastapi.JobOutput.error", [87, 3.937]], ["qname/runpod.serverless.modules.rp_fastapi.JobOutput.error", [555, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.StreamOutput", [556, 68.993]], ["names/runpod.serverless.modules.rp_fastapi.StreamOutput", [286, 6.527, 287, 6.527]], ["qname/runpod.serverless.modules.rp_fastapi.StreamOutput", [557, 22.998]], ["name/runpod.serverless.modules.rp_fastapi.StreamOutput.id", [202, 18.807]], ["names/runpod.serverless.modules.rp_fastapi.StreamOutput.id", [202, 3.875]], ["qname/runpod.serverless.modules.rp_fastapi.StreamOutput.id", [558, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.StreamOutput.status", [533, 21.313]], ["names/runpod.serverless.modules.rp_fastapi.StreamOutput.status", [533, 4.391]], ["qname/runpod.serverless.modules.rp_fastapi.StreamOutput.status", [559, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.StreamOutput.stream", [286, 20.109]], ["names/runpod.serverless.modules.rp_fastapi.StreamOutput.stream", [286, 4.143]], ["qname/runpod.serverless.modules.rp_fastapi.StreamOutput.stream", [560, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.StreamOutput.error", [87, 19.107]], ["names/runpod.serverless.modules.rp_fastapi.StreamOutput.error", [87, 3.937]], ["qname/runpod.serverless.modules.rp_fastapi.StreamOutput.error", [561, 11.499]], ["name/runpod.serverless.modules.rp_fastapi._send_webhook", [562, 34.496]], ["names/runpod.serverless.modules.rp_fastapi._send_webhook", [218, 4.032, 362, 4.774]], ["qname/runpod.serverless.modules.rp_fastapi._send_webhook", [563, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI", [564, 68.993]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI", [1, 8.342, 126, 8.063]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI", [565, 22.998]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__", [212, 20.109]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__", [213, 4.143]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__", [566, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI.config", [37, 24.84]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI.config", [37, 5.118]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI.config", [567, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app", [568, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app", [63, 2.879, 569, 5.599]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app", [570, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn", [571, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn", [356, 3.801, 572, 5.599]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn", [573, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime", [574, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime", [575, 6.06]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime", [576, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run", [577, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run", [173, 3.152, 578, 4.529]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run", [579, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync", [580, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync", [528, 5.101, 578, 4.529]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync", [581, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream", [582, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream", [286, 3.264, 578, 4.529]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream", [583, 11.499]], ["name/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status", [584, 34.496]], ["names/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status", [533, 3.459, 578, 4.529]], ["qname/runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status", [585, 11.499]], ["name/runpod.serverless.modules.rp_progress.log", [165, 17.737]], ["names/runpod.serverless.modules.rp_progress.log", [165, 3.655]], ["qname/runpod.serverless.modules.rp_progress.log", [586, 11.499]], ["name/runpod.serverless.modules.rp_progress._create_session_async", [587, 34.496]], ["names/runpod.serverless.modules.rp_progress._create_session_async", [353, 3.225, 588, 3.225, 589, 4.208]], ["qname/runpod.serverless.modules.rp_progress._create_session_async", [590, 11.499]], ["name/runpod.serverless.modules.rp_progress._async_progress_update", [591, 34.496]], ["names/runpod.serverless.modules.rp_progress._async_progress_update", [117, 3.575, 283, 3.326, 589, 4.208]], ["qname/runpod.serverless.modules.rp_progress._async_progress_update", [592, 11.499]], ["name/runpod.serverless.modules.rp_progress._thread_target", [593, 34.496]], ["names/runpod.serverless.modules.rp_progress._thread_target", [348, 5.101, 594, 5.599]], ["qname/runpod.serverless.modules.rp_progress._thread_target", [595, 11.499]], ["name/runpod.serverless.modules.rp_progress.progress_update", [315, 31.431]], ["names/runpod.serverless.modules.rp_progress.progress_update", [117, 4.334, 283, 4.032]], ["qname/runpod.serverless.modules.rp_progress.progress_update", [596, 11.499]], ["name/runpod.serverless.log", [165, 17.737]], ["names/runpod.serverless.log", [165, 3.655]], ["qname/runpod.serverless.log", [597, 11.499]], ["name/runpod.serverless.parser", [598, 31.431]], ["names/runpod.serverless.parser", [598, 6.476]], ["qname/runpod.serverless.parser", [599, 11.499]], ["name/runpod.serverless._set_config_args", [600, 34.496]], ["names/runpod.serverless._set_config_args", [37, 3.326, 183, 3.575, 601, 4.618]], ["qname/runpod.serverless._set_config_args", [602, 11.499]], ["name/runpod.serverless._get_realtime_port", [603, 34.496]], ["names/runpod.serverless._get_realtime_port", [155, 2.054, 575, 3.938, 604, 3.938]], ["qname/runpod.serverless._get_realtime_port", [605, 11.499]], ["name/runpod.serverless._get_realtime_concurrency", [606, 34.496]], ["names/runpod.serverless._get_realtime_concurrency", [155, 2.054, 368, 3.736, 575, 3.938]], ["qname/runpod.serverless._get_realtime_concurrency", [607, 11.499]], ["name/runpod.serverless._signal_handler", [608, 31.431]], ["names/runpod.serverless._signal_handler", [99, 4.529, 609, 5.101]], ["qname/runpod.serverless._signal_handler", [610, 11.499]], ["name/runpod.serverless.start", [356, 23.421]], ["names/runpod.serverless.start", [356, 4.826]], ["qname/runpod.serverless.start", [611, 11.499]], ["name/runpod.error.RunPodError", [612, 68.993]], ["names/runpod.error.RunPodError", [48, 4.397, 87, 5.116, 173, 5.201]], ["qname/runpod.error.RunPodError", [613, 22.998]], ["name/runpod.error.RunPodError.__init__", [212, 20.109]], ["names/runpod.error.RunPodError.__init__", [213, 4.143]], ["qname/runpod.error.RunPodError.__init__", [614, 11.499]], ["name/runpod.error.RunPodError.message", [161, 29.413]], ["names/runpod.error.RunPodError.message", [161, 6.06]], ["qname/runpod.error.RunPodError.message", [615, 11.499]], ["name/runpod.error.RunPodError.__str__", [226, 29.413]], ["names/runpod.error.RunPodError.__str__", [227, 6.06]], ["qname/runpod.error.RunPodError.__str__", [616, 11.499]], ["name/runpod.error.AuthenticationError", [617, 68.993]], ["names/runpod.error.AuthenticationError", [87, 6.202, 618, 11.198]], ["qname/runpod.error.AuthenticationError", [619, 22.998]], ["name/runpod.error.QueryError", [620, 68.993]], ["names/runpod.error.QueryError", [87, 6.202, 621, 7.408]], ["qname/runpod.error.QueryError", [622, 22.998]], ["name/runpod.error.QueryError.__init__", [212, 20.109]], ["names/runpod.error.QueryError.__init__", [213, 4.143]], ["qname/runpod.error.QueryError.__init__", [623, 11.499]], ["name/runpod.error.QueryError.query", [621, 22.821]], ["names/runpod.error.QueryError.query", [621, 4.702]], ["qname/runpod.error.QueryError.query", [624, 11.499]], ["name/runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED", [625, 34.496]], ["names/runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED", [102, 4.208, 533, 2.853, 626, 4.208]], ["qname/runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED", [627, 11.499]], ["name/runpod.api.graphql.run_graphql_query", [628, 34.496]], ["names/runpod.api.graphql.run_graphql_query", [7, 3.938, 173, 2.6, 621, 3.055]], ["qname/runpod.api.graphql.run_graphql_query", [629, 11.499]], ["name/runpod.api.mutations.container_register_auth.generate_container_registry_auth", [630, 34.496]], ["names/runpod.api.mutations.container_register_auth.generate_container_registry_auth", [12, 3.351, 14, 3.042, 631, 2.538, 632, 3.581]], ["qname/runpod.api.mutations.container_register_auth.generate_container_registry_auth", [633, 11.499]], ["name/runpod.api.mutations.endpoints.generate_endpoint_mutation", [634, 34.496]], ["names/runpod.api.mutations.endpoints.generate_endpoint_mutation", [78, 2.443, 631, 2.982, 635, 3.326]], ["qname/runpod.api.mutations.endpoints.generate_endpoint_mutation", [636, 11.499]], ["name/runpod.api.mutations.endpoints.update_endpoint_template_mutation", [637, 34.496]], ["names/runpod.api.mutations.endpoints.update_endpoint_template_mutation", [78, 2.079, 283, 2.83, 398, 2.83, 635, 2.83]], ["qname/runpod.api.mutations.endpoints.update_endpoint_template_mutation", [638, 11.499]], ["name/runpod.api.mutations.pods.generate_pod_deployment_mutation", [639, 34.496]], ["names/runpod.api.mutations.pods.generate_pod_deployment_mutation", [48, 1.871, 631, 2.538, 635, 2.83, 640, 3.93]], ["qname/runpod.api.mutations.pods.generate_pod_deployment_mutation", [641, 11.499]], ["name/runpod.api.mutations.pods.generate_pod_stop_mutation", [642, 34.496]], ["names/runpod.api.mutations.pods.generate_pod_stop_mutation", [48, 1.871, 476, 3.042, 631, 2.538, 635, 2.83]], ["qname/runpod.api.mutations.pods.generate_pod_stop_mutation", [643, 11.499]], ["name/runpod.api.mutations.pods.generate_pod_resume_mutation", [644, 34.496]], ["names/runpod.api.mutations.pods.generate_pod_resume_mutation", [48, 1.871, 631, 2.538, 635, 2.83, 645, 3.581]], ["qname/runpod.api.mutations.pods.generate_pod_resume_mutation", [646, 11.499]], ["name/runpod.api.mutations.pods.generate_pod_terminate_mutation", [647, 34.496]], ["names/runpod.api.mutations.pods.generate_pod_terminate_mutation", [48, 1.871, 631, 2.538, 635, 2.83, 648, 3.581]], ["qname/runpod.api.mutations.pods.generate_pod_terminate_mutation", [649, 11.499]], ["name/runpod.api.mutations.templates.generate_pod_template", [650, 34.496]], ["names/runpod.api.mutations.templates.generate_pod_template", [48, 2.199, 398, 3.326, 631, 2.982]], ["qname/runpod.api.mutations.templates.generate_pod_template", [651, 11.499]], ["name/runpod.api.mutations.user.generate_user_mutation", [652, 34.496]], ["names/runpod.api.mutations.user.generate_user_mutation", [22, 2.915, 631, 2.982, 635, 3.326]], ["qname/runpod.api.mutations.user.generate_user_mutation", [653, 11.499]], ["name/runpod.api.queries.endpoints.QUERY_ENDPOINT", [654, 34.496]], ["names/runpod.api.queries.endpoints.QUERY_ENDPOINT", [78, 2.962, 621, 3.704]], ["qname/runpod.api.queries.endpoints.QUERY_ENDPOINT", [655, 11.499]], ["name/runpod.api.queries.gpus.QUERY_GPU_TYPES", [656, 34.496]], ["names/runpod.api.queries.gpus.QUERY_GPU_TYPES", [621, 3.055, 657, 3.736, 658, 4.208]], ["qname/runpod.api.queries.gpus.QUERY_GPU_TYPES", [659, 11.499]], ["name/runpod.api.queries.gpus.generate_gpu_query", [660, 34.496]], ["names/runpod.api.queries.gpus.generate_gpu_query", [621, 3.055, 631, 2.982, 657, 3.736]], ["qname/runpod.api.queries.gpus.generate_gpu_query", [661, 11.499]], ["name/runpod.api.queries.pods.QUERY_POD", [662, 34.496]], ["names/runpod.api.queries.pods.QUERY_POD", [48, 2.665, 621, 3.704]], ["qname/runpod.api.queries.pods.QUERY_POD", [663, 11.499]], ["name/runpod.api.queries.pods.generate_pod_query", [664, 34.496]], ["names/runpod.api.queries.pods.generate_pod_query", [48, 2.199, 621, 3.055, 631, 2.982]], ["qname/runpod.api.queries.pods.generate_pod_query", [665, 11.499]], ["name/runpod.api.queries.user.QUERY_USER", [666, 34.496]], ["names/runpod.api.queries.user.QUERY_USER", [22, 3.534, 621, 3.704]], ["qname/runpod.api.queries.user.QUERY_USER", [667, 11.499]], ["name/runpod.api.ctl_commands.get_user", [668, 34.496]], ["names/runpod.api.ctl_commands.get_user", [22, 3.534, 155, 2.491]], ["qname/runpod.api.ctl_commands.get_user", [669, 11.499]], ["name/runpod.api.ctl_commands.update_user_settings", [670, 34.496]], ["names/runpod.api.ctl_commands.update_user_settings", [22, 2.915, 283, 3.326, 671, 4.618]], ["qname/runpod.api.ctl_commands.update_user_settings", [672, 11.499]], ["name/runpod.api.ctl_commands.get_gpus", [673, 34.496]], ["names/runpod.api.ctl_commands.get_gpus", [27, 4.774, 155, 2.491]], ["qname/runpod.api.ctl_commands.get_gpus", [674, 11.499]], ["name/runpod.api.ctl_commands.get_gpu", [675, 34.496]], ["names/runpod.api.ctl_commands.get_gpu", [155, 2.491, 657, 4.529]], ["qname/runpod.api.ctl_commands.get_gpu", [676, 11.499]], ["name/runpod.api.ctl_commands.get_pods", [677, 34.496]], ["names/runpod.api.ctl_commands.get_pods", [18, 4.171, 155, 2.491]], ["qname/runpod.api.ctl_commands.get_pods", [678, 11.499]], ["name/runpod.api.ctl_commands.get_pod", [679, 34.496]], ["names/runpod.api.ctl_commands.get_pod", [48, 2.665, 155, 2.491]], ["qname/runpod.api.ctl_commands.get_pod", [680, 11.499]], ["name/runpod.api.ctl_commands.create_pod", [681, 34.496]], ["names/runpod.api.ctl_commands.create_pod", [48, 2.665, 588, 3.91]], ["qname/runpod.api.ctl_commands.create_pod", [682, 11.499]], ["name/runpod.api.ctl_commands.stop_pod", [683, 34.496]], ["names/runpod.api.ctl_commands.stop_pod", [48, 2.665, 476, 4.334]], ["qname/runpod.api.ctl_commands.stop_pod", [684, 11.499]], ["name/runpod.api.ctl_commands.resume_pod", [685, 34.496]], ["names/runpod.api.ctl_commands.resume_pod", [48, 2.665, 645, 5.101]], ["qname/runpod.api.ctl_commands.resume_pod", [686, 11.499]], ["name/runpod.api.ctl_commands.terminate_pod", [687, 34.496]], ["names/runpod.api.ctl_commands.terminate_pod", [48, 2.665, 648, 5.101]], ["qname/runpod.api.ctl_commands.terminate_pod", [688, 11.499]], ["name/runpod.api.ctl_commands.create_template", [689, 34.496]], ["names/runpod.api.ctl_commands.create_template", [398, 4.032, 588, 3.91]], ["qname/runpod.api.ctl_commands.create_template", [690, 11.499]], ["name/runpod.api.ctl_commands.get_endpoints", [691, 34.496]], ["names/runpod.api.ctl_commands.get_endpoints", [16, 4.334, 155, 2.491]], ["qname/runpod.api.ctl_commands.get_endpoints", [692, 11.499]], ["name/runpod.api.ctl_commands.create_endpoint", [693, 34.496]], ["names/runpod.api.ctl_commands.create_endpoint", [78, 2.962, 588, 3.91]], ["qname/runpod.api.ctl_commands.create_endpoint", [694, 11.499]], ["name/runpod.api.ctl_commands.update_endpoint_template", [695, 34.496]], ["names/runpod.api.ctl_commands.update_endpoint_template", [78, 2.443, 283, 3.326, 398, 3.326]], ["qname/runpod.api.ctl_commands.update_endpoint_template", [696, 11.499]], ["name/runpod.api.ctl_commands.create_container_registry_auth", [697, 34.496]], ["names/runpod.api.ctl_commands.create_container_registry_auth", [12, 3.351, 14, 3.042, 588, 2.744, 632, 3.581]], ["qname/runpod.api.ctl_commands.create_container_registry_auth", [698, 11.499]], ["name/runpod.cli.groups.config.functions.CREDENTIAL_FILE", [699, 34.496]], ["names/runpod.cli.groups.config.functions.CREDENTIAL_FILE", [429, 3.801, 700, 5.599]], ["qname/runpod.cli.groups.config.functions.CREDENTIAL_FILE", [701, 11.499]], ["name/runpod.cli.groups.config.functions.set_credentials", [702, 34.496]], ["names/runpod.cli.groups.config.functions.set_credentials", [183, 4.334, 703, 4.529]], ["qname/runpod.cli.groups.config.functions.set_credentials", [704, 11.499]], ["name/runpod.cli.groups.config.functions.check_credentials", [705, 34.496]], ["names/runpod.cli.groups.config.functions.check_credentials", [250, 4.774, 703, 4.529]], ["qname/runpod.cli.groups.config.functions.check_credentials", [706, 11.499]], ["name/runpod.cli.groups.config.functions.get_credentials", [707, 34.496]], ["names/runpod.cli.groups.config.functions.get_credentials", [155, 2.491, 703, 4.529]], ["qname/runpod.cli.groups.config.functions.get_credentials", [708, 11.499]], ["name/runpod.endpoint.helpers.FINAL_STATES", [709, 34.496]], ["names/runpod.endpoint.helpers.FINAL_STATES", [710, 5.599, 711, 5.599]], ["qname/runpod.endpoint.helpers.FINAL_STATES", [712, 11.499]], ["name/runpod.endpoint.helpers.UNAUTHORIZED_MSG", [713, 34.496]], ["names/runpod.endpoint.helpers.UNAUTHORIZED_MSG", [626, 5.101, 714, 5.101]], ["qname/runpod.endpoint.helpers.UNAUTHORIZED_MSG", [715, 11.499]], ["name/runpod.endpoint.helpers.API_KEY_NOT_SET_MSG", [716, 34.496]], ["names/runpod.endpoint.helpers.API_KEY_NOT_SET_MSG", [1, 2.548, 183, 2.647, 714, 3.117, 717, 2.322, 718, 3.42]], ["qname/runpod.endpoint.helpers.API_KEY_NOT_SET_MSG", [719, 11.499]], ["name/runpod.endpoint.helpers.is_completed", [720, 34.496]], ["names/runpod.endpoint.helpers.is_completed", [205, 4.032, 721, 5.599]], ["qname/runpod.endpoint.helpers.is_completed", [722, 11.499]], ["name/runpod.endpoint.runner.RunPodClient", [723, 68.993]], ["names/runpod.endpoint.runner.RunPodClient", [48, 4.397, 173, 5.201, 440, 7.472]], ["qname/runpod.endpoint.runner.RunPodClient", [724, 22.998]], ["name/runpod.endpoint.runner.RunPodClient.__init__", [212, 20.109]], ["names/runpod.endpoint.runner.RunPodClient.__init__", [213, 4.143]], ["qname/runpod.endpoint.runner.RunPodClient.__init__", [725, 11.499]], ["name/runpod.endpoint.runner.RunPodClient.rp_session", [726, 34.496]], ["names/runpod.endpoint.runner.RunPodClient.rp_session", [63, 2.879, 353, 3.91]], ["qname/runpod.endpoint.runner.RunPodClient.rp_session", [727, 11.499]], ["name/runpod.endpoint.runner.RunPodClient.headers", [418, 24.089]], ["names/runpod.endpoint.runner.RunPodClient.headers", [418, 4.963]], ["qname/runpod.endpoint.runner.RunPodClient.headers", [728, 11.499]], ["name/runpod.endpoint.runner.RunPodClient.endpoint_url_base", [729, 29.413]], ["names/runpod.endpoint.runner.RunPodClient.endpoint_url_base", [78, 2.443, 255, 2.853, 730, 3.575]], ["qname/runpod.endpoint.runner.RunPodClient.endpoint_url_base", [731, 11.499]], ["name/runpod.endpoint.runner.RunPodClient._request", [732, 34.496]], ["names/runpod.endpoint.runner.RunPodClient._request", [546, 6.476]], ["qname/runpod.endpoint.runner.RunPodClient._request", [733, 11.499]], ["name/runpod.endpoint.runner.RunPodClient.post", [290, 27.905]], ["names/runpod.endpoint.runner.RunPodClient.post", [290, 5.749]], ["qname/runpod.endpoint.runner.RunPodClient.post", [734, 11.499]], ["name/runpod.endpoint.runner.RunPodClient.get", [155, 15.345]], ["names/runpod.endpoint.runner.RunPodClient.get", [155, 3.162]], ["qname/runpod.endpoint.runner.RunPodClient.get", [735, 11.499]], ["name/runpod.endpoint.runner.Job", [105, 28.046]], ["names/runpod.endpoint.runner.Job", [105, 5.779]], ["qname/runpod.endpoint.runner.Job", [736, 22.998]], ["name/runpod.endpoint.runner.Job.__init__", [212, 20.109]], ["names/runpod.endpoint.runner.Job.__init__", [213, 4.143]], ["qname/runpod.endpoint.runner.Job.__init__", [737, 11.499]], ["name/runpod.endpoint.runner.Job.endpoint_id", [738, 27.905]], ["names/runpod.endpoint.runner.Job.endpoint_id", [78, 2.962, 202, 3.052]], ["qname/runpod.endpoint.runner.Job.endpoint_id", [739, 11.499]], ["name/runpod.endpoint.runner.Job.job_id", [740, 31.431]], ["names/runpod.endpoint.runner.Job.job_id", [105, 2.276, 202, 3.052]], ["qname/runpod.endpoint.runner.Job.job_id", [741, 11.499]], ["name/runpod.endpoint.runner.Job.rp_client", [742, 31.431]], ["names/runpod.endpoint.runner.Job.rp_client", [63, 2.879, 440, 4.529]], ["qname/runpod.endpoint.runner.Job.rp_client", [743, 11.499]], ["name/runpod.endpoint.runner.Job.job_status", [744, 31.431]], ["names/runpod.endpoint.runner.Job.job_status", [105, 2.276, 533, 3.459]], ["qname/runpod.endpoint.runner.Job.job_status", [745, 11.499]], ["name/runpod.endpoint.runner.Job.job_output", [746, 31.431]], ["names/runpod.endpoint.runner.Job.job_output", [105, 2.276, 287, 3.264]], ["qname/runpod.endpoint.runner.Job.job_output", [747, 11.499]], ["name/runpod.endpoint.runner.Job._fetch_job", [748, 31.431]], ["names/runpod.endpoint.runner.Job._fetch_job", [105, 2.276, 749, 5.101]], ["qname/runpod.endpoint.runner.Job._fetch_job", [750, 11.499]], ["name/runpod.endpoint.runner.Job.status", [533, 21.313]], ["names/runpod.endpoint.runner.Job.status", [533, 4.391]], ["qname/runpod.endpoint.runner.Job.status", [751, 11.499]], ["name/runpod.endpoint.runner.Job.output", [287, 20.109]], ["names/runpod.endpoint.runner.Job.output", [287, 4.143]], ["qname/runpod.endpoint.runner.Job.output", [752, 11.499]], ["name/runpod.endpoint.runner.Job.stream", [286, 20.109]], ["names/runpod.endpoint.runner.Job.stream", [286, 4.143]], ["qname/runpod.endpoint.runner.Job.stream", [753, 11.499]], ["name/runpod.endpoint.runner.Job.cancel", [754, 27.905]], ["names/runpod.endpoint.runner.Job.cancel", [754, 5.749]], ["qname/runpod.endpoint.runner.Job.cancel", [755, 11.499]], ["name/runpod.endpoint.runner.Endpoint", [78, 36.496]], ["names/runpod.endpoint.runner.Endpoint", [78, 7.52]], ["qname/runpod.endpoint.runner.Endpoint", [756, 22.998]], ["name/runpod.endpoint.runner.Endpoint.__init__", [212, 20.109]], ["names/runpod.endpoint.runner.Endpoint.__init__", [213, 4.143]], ["qname/runpod.endpoint.runner.Endpoint.__init__", [757, 11.499]], ["name/runpod.endpoint.runner.Endpoint.endpoint_id", [738, 27.905]], ["names/runpod.endpoint.runner.Endpoint.endpoint_id", [78, 2.962, 202, 3.052]], ["qname/runpod.endpoint.runner.Endpoint.endpoint_id", [758, 11.499]], ["name/runpod.endpoint.runner.Endpoint.rp_client", [742, 31.431]], ["names/runpod.endpoint.runner.Endpoint.rp_client", [63, 2.879, 440, 4.529]], ["qname/runpod.endpoint.runner.Endpoint.rp_client", [759, 11.499]], ["name/runpod.endpoint.runner.Endpoint.run", [173, 19.423]], ["names/runpod.endpoint.runner.Endpoint.run", [173, 4.002]], ["qname/runpod.endpoint.runner.Endpoint.run", [760, 11.499]], ["name/runpod.endpoint.runner.Endpoint.run_sync", [761, 34.496]], ["names/runpod.endpoint.runner.Endpoint.run_sync", [70, 4.774, 173, 3.152]], ["qname/runpod.endpoint.runner.Endpoint.run_sync", [762, 11.499]], ["name/runpod.endpoint.runner.Endpoint.health", [763, 27.905]], ["names/runpod.endpoint.runner.Endpoint.health", [763, 5.749]], ["qname/runpod.endpoint.runner.Endpoint.health", [764, 11.499]], ["name/runpod.endpoint.runner.Endpoint.purge_queue", [765, 31.431]], ["names/runpod.endpoint.runner.Endpoint.purge_queue", [766, 5.101, 767, 5.101]], ["qname/runpod.endpoint.runner.Endpoint.purge_queue", [768, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job", [105, 28.046]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job", [105, 5.779]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job", [769, 22.998]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.__init__", [212, 20.109]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.__init__", [213, 4.143]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.__init__", [770, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id", [738, 27.905]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id", [78, 2.962, 202, 3.052]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id", [771, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.job_id", [740, 31.431]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.job_id", [105, 2.276, 202, 3.052]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.job_id", [772, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.headers", [418, 24.089]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.headers", [418, 4.963]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.headers", [773, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.session", [353, 24.089]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.session", [353, 4.963]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.session", [774, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base", [729, 29.413]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base", [78, 2.443, 255, 2.853, 730, 3.575]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base", [775, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.job_status", [744, 31.431]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.job_status", [105, 2.276, 533, 3.459]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.job_status", [776, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.job_output", [746, 31.431]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.job_output", [105, 2.276, 287, 3.264]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.job_output", [777, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job", [748, 31.431]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job", [105, 2.276, 749, 5.101]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job", [778, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.status", [533, 21.313]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.status", [533, 4.391]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.status", [779, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion", [780, 34.496]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion", [781, 4.618, 782, 4.208, 783, 4.618]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion", [784, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.output", [287, 20.109]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.output", [287, 4.143]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.output", [785, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.stream", [286, 20.109]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.stream", [286, 4.143]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.stream", [786, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Job.cancel", [754, 27.905]], ["names/runpod.endpoint.asyncio.asyncio_runner.Job.cancel", [754, 5.749]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Job.cancel", [787, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint", [78, 36.496]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint", [78, 7.52]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint", [788, 22.998]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__", [212, 20.109]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__", [213, 4.143]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__", [789, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id", [738, 27.905]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id", [78, 2.962, 202, 3.052]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id", [790, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url", [791, 34.496]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url", [78, 2.962, 255, 3.459]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url", [792, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers", [418, 24.089]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers", [418, 4.963]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers", [793, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.session", [353, 24.089]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.session", [353, 4.963]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.session", [794, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.run", [173, 19.423]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.run", [173, 4.002]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.run", [795, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.health", [763, 27.905]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.health", [763, 5.749]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.health", [796, 11.499]], ["name/runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue", [765, 31.431]], ["names/runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue", [766, 5.101, 767, 5.101]], ["qname/runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue", [797, 11.499]], ["name/runpod.SSH_KEY_PATH", [798, 34.496]], ["names/runpod.SSH_KEY_PATH", [56, 2.742, 300, 3.938, 717, 3.136]], ["qname/runpod.SSH_KEY_PATH", [799, 11.499]], ["name/runpod.profile", [800, 31.431]], ["names/runpod.profile", [800, 6.476]], ["qname/runpod.profile", [801, 11.499]], ["name/runpod._credentials", [802, 34.496]], ["names/runpod._credentials", [703, 5.749]], ["qname/runpod._credentials", [803, 11.499]], ["name/runpod.api_key", [804, 34.496]], ["names/runpod.api_key", [1, 4.171, 717, 3.801]], ["qname/runpod.api_key", [805, 11.499]], ["name/runpod.api_url_base", [806, 34.496]], ["names/runpod.api_url_base", [1, 3.44, 255, 2.853, 730, 3.575]], ["qname/runpod.api_url_base", [807, 11.499]], ["name/runpod.endpoint_url_base", [729, 29.413]], ["names/runpod.endpoint_url_base", [78, 2.443, 255, 2.853, 730, 3.575]], ["qname/runpod.endpoint_url_base", [808, 11.499]], ["name/runpod.cli.groups.ssh.functions.SSH_FILES", [809, 34.496]], ["names/runpod.cli.groups.ssh.functions.SSH_FILES", [56, 3.325, 425, 4.334]], ["qname/runpod.cli.groups.ssh.functions.SSH_FILES", [810, 11.499]], ["name/runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint", [811, 34.496]], ["names/runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint", [56, 2.334, 155, 1.748, 717, 2.668, 812, 3.93]], ["qname/runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint", [813, 11.499]], ["name/runpod.cli.groups.ssh.functions.get_user_pub_keys", [814, 34.496]], ["names/runpod.cli.groups.ssh.functions.get_user_pub_keys", [22, 2.481, 155, 1.748, 815, 3.93, 816, 3.581]], ["qname/runpod.cli.groups.ssh.functions.get_user_pub_keys", [817, 11.499]], ["name/runpod.cli.groups.ssh.functions.generate_ssh_key_pair", [818, 34.496]], ["names/runpod.cli.groups.ssh.functions.generate_ssh_key_pair", [56, 2.334, 631, 2.538, 717, 2.668, 819, 3.93]], ["qname/runpod.cli.groups.ssh.functions.generate_ssh_key_pair", [820, 11.499]], ["name/runpod.cli.groups.ssh.functions.add_ssh_key", [821, 34.496]], ["names/runpod.cli.groups.ssh.functions.add_ssh_key", [56, 2.742, 236, 3.44, 717, 3.136]], ["qname/runpod.cli.groups.ssh.functions.add_ssh_key", [822, 11.499]], ["name/runpod.cli.STOP_EVENT", [823, 34.496]], ["names/runpod.cli.STOP_EVENT", [476, 4.334, 824, 5.101]], ["qname/runpod.cli.STOP_EVENT", [825, 11.499]], ["name/runpod.cli.BASE_DOCKER_IMAGE", [826, 34.496]], ["names/runpod.cli.BASE_DOCKER_IMAGE", [443, 4.208, 730, 3.575, 827, 4.618]], ["qname/runpod.cli.BASE_DOCKER_IMAGE", [828, 11.499]], ["name/runpod.cli.GPU_TYPES", [829, 34.496]], ["names/runpod.cli.GPU_TYPES", [657, 4.529, 658, 5.101]], ["qname/runpod.cli.GPU_TYPES", [830, 11.499]], ["name/runpod.cli.ENV_VARS", [831, 34.496]], ["names/runpod.cli.ENV_VARS", [832, 5.599, 833, 5.599]], ["qname/runpod.cli.ENV_VARS", [834, 11.499]], ["name/runpod.cli.utils.rp_info.get_pod_ssh_ip_port", [835, 34.496]], ["names/runpod.cli.utils.rp_info.get_pod_ssh_ip_port", [48, 1.628, 56, 2.031, 155, 1.522, 604, 2.916, 836, 3.117]], ["qname/runpod.cli.utils.rp_info.get_pod_ssh_ip_port", [837, 11.499]], ["name/runpod.cli.utils.rp_userspace.find_ssh_key_file", [838, 34.496]], ["names/runpod.cli.utils.rp_userspace.find_ssh_key_file", [56, 2.334, 429, 2.668, 717, 2.668, 839, 3.93]], ["qname/runpod.cli.utils.rp_userspace.find_ssh_key_file", [840, 11.499]], ["name/runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS", [841, 34.496]], ["names/runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS", [842, 5.599, 843, 5.599]], ["qname/runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS", [844, 11.499]], ["name/runpod.cli.utils.rp_runpodignore.get_ignore_list", [845, 34.496]], ["names/runpod.cli.utils.rp_runpodignore.get_ignore_list", [155, 2.054, 244, 3.055, 846, 3.938]], ["qname/runpod.cli.utils.rp_runpodignore.get_ignore_list", [847, 11.499]], ["name/runpod.cli.utils.rp_runpodignore.should_ignore", [848, 34.496]], ["names/runpod.cli.utils.rp_runpodignore.should_ignore", [846, 4.774, 849, 5.599]], ["qname/runpod.cli.utils.rp_runpodignore.should_ignore", [850, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection", [851, 62.863]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection", [851, 12.952]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection", [852, 22.998]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.__init__", [212, 20.109]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.__init__", [213, 4.143]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.__init__", [853, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.pod_id", [854, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.pod_id", [48, 2.665, 202, 3.052]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.pod_id", [855, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip", [856, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip", [48, 2.665, 836, 5.101]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip", [857, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.pod_port", [858, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.pod_port", [48, 2.665, 604, 4.774]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.pod_port", [859, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.key_file", [860, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.key_file", [429, 3.801, 717, 3.801]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.key_file", [861, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.ssh", [56, 20.484]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.ssh", [56, 4.221]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.ssh", [862, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.__enter__", [489, 31.431]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.__enter__", [490, 6.476]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.__enter__", [863, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.__exit__", [492, 31.431]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.__exit__", [493, 6.476]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.__exit__", [864, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options", [865, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options", [56, 2.742, 155, 2.054, 866, 4.618]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options", [867, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler", [608, 31.431]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler", [99, 4.529, 609, 5.101]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler", [868, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.run_commands", [869, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.run_commands", [5, 3.534, 173, 3.152]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.run_commands", [870, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.put_file", [871, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.put_file", [429, 3.801, 872, 5.599]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.put_file", [873, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.get_file", [874, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.get_file", [155, 2.491, 429, 3.801]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.get_file", [875, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal", [876, 34.496]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal", [877, 4.774, 878, 5.599]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal", [879, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.rsync", [880, 31.431]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.rsync", [880, 6.476]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.rsync", [881, 11.499]], ["name/runpod.cli.utils.ssh_cmd.SSHConnection.close", [882, 31.431]], ["names/runpod.cli.utils.ssh_cmd.SSHConnection.close", [882, 6.476]], ["qname/runpod.cli.utils.ssh_cmd.SSHConnection.close", [883, 11.499]], ["name/runpod.cli.groups.project.helpers.validate_project_name", [884, 34.496]], ["names/runpod.cli.groups.project.helpers.validate_project_name", [51, 2.853, 169, 3.326, 470, 3.736]], ["qname/runpod.cli.groups.project.helpers.validate_project_name", [885, 11.499]], ["name/runpod.cli.groups.project.helpers.get_project_pod", [886, 34.496]], ["names/runpod.cli.groups.project.helpers.get_project_pod", [48, 2.199, 51, 2.853, 155, 2.054]], ["qname/runpod.cli.groups.project.helpers.get_project_pod", [887, 11.499]], ["name/runpod.cli.groups.project.helpers.get_project_endpoint", [888, 34.496]], ["names/runpod.cli.groups.project.helpers.get_project_endpoint", [51, 2.853, 78, 2.443, 155, 2.054]], ["qname/runpod.cli.groups.project.helpers.get_project_endpoint", [889, 11.499]], ["name/runpod.cli.groups.project.helpers.copy_template_files", [890, 34.496]], ["names/runpod.cli.groups.project.helpers.copy_template_files", [398, 3.326, 425, 3.575, 891, 4.618]], ["qname/runpod.cli.groups.project.helpers.copy_template_files", [892, 11.499]], ["name/runpod.cli.groups.project.helpers.attempt_pod_launch", [893, 34.496]], ["names/runpod.cli.groups.project.helpers.attempt_pod_launch", [48, 2.199, 877, 3.938, 894, 4.618]], ["qname/runpod.cli.groups.project.helpers.attempt_pod_launch", [895, 11.499]], ["name/runpod.cli.groups.project.helpers.load_project_config", [896, 34.496]], ["names/runpod.cli.groups.project.helpers.load_project_config", [37, 3.326, 51, 2.853, 897, 4.618]], ["qname/runpod.cli.groups.project.helpers.load_project_config", [898, 11.499]], ["name/runpod.cli.utils.rp_sync.WatcherHandler", [899, 68.993]], ["names/runpod.cli.utils.rp_sync.WatcherHandler", [99, 9.058, 900, 10.203]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler", [901, 22.998]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.__init__", [212, 20.109]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.__init__", [213, 4.143]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.__init__", [902, 11.499]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.action_function", [903, 34.496]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.action_function", [496, 4.529, 904, 5.599]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.action_function", [905, 11.499]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.local_path", [906, 34.496]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.local_path", [108, 4.334, 300, 4.774]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.local_path", [907, 11.499]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.ignore_list", [908, 34.496]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.ignore_list", [244, 3.704, 846, 4.774]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.ignore_list", [909, 11.499]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.debouncer", [910, 31.431]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.debouncer", [910, 6.476]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.debouncer", [911, 11.499]], ["name/runpod.cli.utils.rp_sync.WatcherHandler.on_any_event", [912, 34.496]], ["names/runpod.cli.utils.rp_sync.WatcherHandler.on_any_event", [824, 4.208, 913, 4.618, 914, 4.618]], ["qname/runpod.cli.utils.rp_sync.WatcherHandler.on_any_event", [915, 11.499]], ["name/runpod.cli.utils.rp_sync.start_watcher", [916, 34.496]], ["names/runpod.cli.utils.rp_sync.start_watcher", [356, 3.801, 900, 5.101]], ["qname/runpod.cli.utils.rp_sync.start_watcher", [917, 11.499]], ["name/runpod.cli.utils.rp_sync.sync_directory", [918, 34.496]], ["names/runpod.cli.utils.rp_sync.sync_directory", [70, 4.774, 919, 5.599]], ["qname/runpod.cli.utils.rp_sync.sync_directory", [920, 11.499]], ["name/runpod.cli.groups.project.functions.STARTER_TEMPLATES", [921, 34.496]], ["names/runpod.cli.groups.project.functions.STARTER_TEMPLATES", [20, 4.774, 922, 5.599]], ["qname/runpod.cli.groups.project.functions.STARTER_TEMPLATES", [923, 11.499]], ["name/runpod.cli.groups.project.functions._launch_dev_pod", [924, 34.496]], ["names/runpod.cli.groups.project.functions._launch_dev_pod", [48, 2.199, 877, 3.938, 925, 4.618]], ["qname/runpod.cli.groups.project.functions._launch_dev_pod", [926, 11.499]], ["name/runpod.cli.groups.project.functions.create_new_project", [927, 34.496]], ["names/runpod.cli.groups.project.functions.create_new_project", [51, 2.853, 180, 3.326, 588, 3.225]], ["qname/runpod.cli.groups.project.functions.create_new_project", [928, 11.499]], ["name/runpod.cli.groups.project.functions.start_project", [929, 34.496]], ["names/runpod.cli.groups.project.functions.start_project", [51, 3.459, 356, 3.801]], ["qname/runpod.cli.groups.project.functions.start_project", [930, 11.499]], ["name/runpod.cli.groups.project.functions.create_project_endpoint", [931, 34.496]], ["names/runpod.cli.groups.project.functions.create_project_endpoint", [51, 2.853, 78, 2.443, 588, 3.225]], ["qname/runpod.cli.groups.project.functions.create_project_endpoint", [932, 11.499]], ["name/runpod.cli.groups.project.commands.project_cli", [933, 34.496]], ["names/runpod.cli.groups.project.commands.project_cli", [31, 4.032, 51, 3.459]], ["qname/runpod.cli.groups.project.commands.project_cli", [934, 11.499]], ["name/runpod.cli.groups.project.commands.new_project_wizard", [935, 34.496]], ["names/runpod.cli.groups.project.commands.new_project_wizard", [51, 2.853, 180, 3.326, 936, 4.208]], ["qname/runpod.cli.groups.project.commands.new_project_wizard", [937, 11.499]], ["name/runpod.cli.groups.project.commands.start_project_pod", [938, 34.496]], ["names/runpod.cli.groups.project.commands.start_project_pod", [48, 2.199, 51, 2.853, 356, 3.136]], ["qname/runpod.cli.groups.project.commands.start_project_pod", [939, 11.499]], ["name/runpod.cli.groups.project.commands.deploy_project", [940, 34.496]], ["names/runpod.cli.groups.project.commands.deploy_project", [51, 3.459, 941, 5.599]], ["qname/runpod.cli.groups.project.commands.deploy_project", [942, 11.499]], ["name/runpod.cli.groups.config.commands.config_wizard", [943, 34.496]], ["names/runpod.cli.groups.config.commands.config_wizard", [37, 4.032, 936, 5.101]], ["qname/runpod.cli.groups.config.commands.config_wizard", [944, 11.499]], ["name/runpod.cli.groups.ssh.commands.ssh_cli", [945, 34.496]], ["names/runpod.cli.groups.ssh.commands.ssh_cli", [31, 4.032, 56, 3.325]], ["qname/runpod.cli.groups.ssh.commands.ssh_cli", [946, 11.499]], ["name/runpod.cli.groups.ssh.commands.list_keys", [947, 34.496]], ["names/runpod.cli.groups.ssh.commands.list_keys", [244, 3.704, 816, 5.101]], ["qname/runpod.cli.groups.ssh.commands.list_keys", [948, 11.499]], ["name/runpod.cli.groups.ssh.commands.add_key", [949, 34.496]], ["names/runpod.cli.groups.ssh.commands.add_key", [236, 4.171, 717, 3.801]], ["qname/runpod.cli.groups.ssh.commands.add_key", [950, 11.499]], ["name/runpod.cli.groups.pod.commands.pod_cli", [951, 34.496]], ["names/runpod.cli.groups.pod.commands.pod_cli", [31, 4.032, 48, 2.665]], ["qname/runpod.cli.groups.pod.commands.pod_cli", [952, 11.499]], ["name/runpod.cli.groups.pod.commands.list_pods", [953, 34.496]], ["names/runpod.cli.groups.pod.commands.list_pods", [18, 4.171, 244, 3.704]], ["qname/runpod.cli.groups.pod.commands.list_pods", [954, 11.499]], ["name/runpod.cli.groups.pod.commands.create_new_pod", [955, 34.496]], ["names/runpod.cli.groups.pod.commands.create_new_pod", [48, 2.199, 180, 3.326, 588, 3.225]], ["qname/runpod.cli.groups.pod.commands.create_new_pod", [956, 11.499]], ["name/runpod.cli.groups.pod.commands.connect_to_pod", [957, 34.496]], ["names/runpod.cli.groups.pod.commands.connect_to_pod", [48, 2.199, 450, 4.208, 958, 4.618]], ["qname/runpod.cli.groups.pod.commands.connect_to_pod", [959, 11.499]], ["name/runpod.cli.groups.exec.functions.python_over_ssh", [960, 34.496]], ["names/runpod.cli.groups.exec.functions.python_over_ssh", [56, 2.742, 463, 3.938, 961, 4.618]], ["qname/runpod.cli.groups.exec.functions.python_over_ssh", [962, 11.499]], ["name/runpod.cli.groups.exec.helpers.POD_ID_FILE", [963, 34.496]], ["names/runpod.cli.groups.exec.helpers.POD_ID_FILE", [48, 2.199, 202, 2.518, 429, 3.136]], ["qname/runpod.cli.groups.exec.helpers.POD_ID_FILE", [964, 11.499]], ["name/runpod.cli.groups.exec.helpers.get_session_pod", [965, 34.496]], ["names/runpod.cli.groups.exec.helpers.get_session_pod", [48, 2.199, 155, 2.054, 353, 3.225]], ["qname/runpod.cli.groups.exec.helpers.get_session_pod", [966, 11.499]], ["name/runpod.cli.groups.exec.commands.exec_cli", [967, 34.496]], ["names/runpod.cli.groups.exec.commands.exec_cli", [31, 4.032, 42, 4.774]], ["qname/runpod.cli.groups.exec.commands.exec_cli", [968, 11.499]], ["name/runpod.cli.groups.exec.commands.remote_python", [969, 34.496]], ["names/runpod.cli.groups.exec.commands.remote_python", [463, 4.774, 970, 5.599]], ["qname/runpod.cli.groups.exec.commands.remote_python", [971, 11.499]], ["name/runpod.cli.entry.runpod_cli", [972, 34.496]], ["names/runpod.cli.entry.runpod_cli", [0, 4.334, 31, 4.032]], ["qname/runpod.cli.entry.runpod_cli", [973, 11.499]], ["name/runpod.serverless.utils.rp_cleanup.clean", [974, 31.431]], ["names/runpod.serverless.utils.rp_cleanup.clean", [974, 6.476]], ["qname/runpod.serverless.utils.rp_cleanup.clean", [975, 11.499]], ["name/runpod.serverless.utils.rp_cuda.is_available", [976, 34.496]], ["names/runpod.serverless.utils.rp_cuda.is_available", [205, 4.032, 977, 5.599]], ["qname/runpod.serverless.utils.rp_cuda.is_available", [978, 11.499]], ["name/runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR", [979, 34.496]], ["names/runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR", [87, 2.558, 216, 3.055, 980, 4.208]], ["qname/runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR", [981, 11.499]], ["name/runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR", [982, 34.496]], ["names/runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR", [87, 2.558, 983, 3.938, 984, 4.208]], ["qname/runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR", [985, 11.499]], ["name/runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR", [986, 34.496]], ["names/runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR", [87, 2.558, 367, 3.938, 983, 3.938]], ["qname/runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR", [987, 11.499]], ["name/runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR", [988, 34.496]], ["names/runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR", [87, 2.558, 983, 3.938, 989, 4.208]], ["qname/runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR", [990, 11.499]], ["name/runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR", [991, 34.496]], ["names/runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR", [87, 2.558, 989, 4.208, 992, 4.618]], ["qname/runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR", [993, 11.499]], ["name/runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR", [994, 34.496]], ["names/runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR", [87, 3.101, 995, 5.599]], ["qname/runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR", [996, 11.499]], ["name/runpod.serverless.utils.rp_validator.SCHEMA_ERROR", [997, 34.496]], ["names/runpod.serverless.utils.rp_validator.SCHEMA_ERROR", [87, 3.101, 998, 4.774]], ["qname/runpod.serverless.utils.rp_validator.SCHEMA_ERROR", [999, 11.499]], ["name/runpod.serverless.utils.rp_validator._add_error", [1000, 34.496]], ["names/runpod.serverless.utils.rp_validator._add_error", [87, 3.101, 236, 4.171]], ["qname/runpod.serverless.utils.rp_validator._add_error", [1001, 11.499]], ["name/runpod.serverless.utils.rp_validator._check_for_unexpected_inputs", [1002, 34.496]], ["names/runpod.serverless.utils.rp_validator._check_for_unexpected_inputs", [250, 3.351, 782, 3.581, 980, 3.581, 1003, 3.581]], ["qname/runpod.serverless.utils.rp_validator._check_for_unexpected_inputs", [1004, 11.499]], ["name/runpod.serverless.utils.rp_validator._validate_and_transform_schema_items", [1005, 34.496]], ["names/runpod.serverless.utils.rp_validator._validate_and_transform_schema_items", [169, 2.463, 998, 2.916, 1006, 3.117, 1007, 3.42, 1008, 3.42]], ["qname/runpod.serverless.utils.rp_validator._validate_and_transform_schema_items", [1009, 11.499]], ["name/runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults", [1010, 34.496]], ["names/runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults", [169, 2.18, 183, 2.344, 984, 2.759, 1003, 2.759, 1006, 2.759, 1011, 3.028]], ["qname/runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults", [1012, 11.499]], ["name/runpod.serverless.utils.rp_validator._validate_input_against_schema", [1013, 34.496]], ["names/runpod.serverless.utils.rp_validator._validate_input_against_schema", [169, 2.83, 216, 2.6, 998, 3.351, 1014, 3.93]], ["qname/runpod.serverless.utils.rp_validator._validate_input_against_schema", [1015, 11.499]], ["name/runpod.serverless.utils.rp_validator.validate", [169, 24.84]], ["names/runpod.serverless.utils.rp_validator.validate", [169, 5.118]], ["qname/runpod.serverless.utils.rp_validator.validate", [1016, 11.499]]], "invertedIndex": [["__call__", {"name": {"runpod.serverless.utils.rp_debugger.FunctionTimer.__call__": {}}, "names": {}, "qname": {}, "_index": 501}], ["__enter__", {"name": {"runpod.serverless.utils.rp_debugger.LineTimer.__enter__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__enter__": {}}, "names": {}, "qname": {}, "_index": 489}], ["__eq__", {"name": {"runpod.serverless.modules.worker_state.Job.__eq__": {}}, "names": {}, "qname": {}, "_index": 220}], ["__exit__", {"name": {"runpod.serverless.utils.rp_debugger.LineTimer.__exit__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__exit__": {}}, "names": {}, "qname": {}, "_index": 492}], ["__hash__", {"name": {"runpod.serverless.modules.worker_state.Job.__hash__": {}}, "names": {}, "qname": {}, "_index": 223}], ["__init__", {"name": {"runpod.serverless.modules.worker_state.Job.__init__": {}, "runpod.serverless.core.Hook.__init__": {}, "runpod.serverless.modules.rp_ping.Heartbeat.__init__": {}, "runpod.serverless.modules.rp_scale.JobScaler.__init__": {}, "runpod.serverless.utils.rp_debugger.LineTimer.__init__": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.__init__": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.error.RunPodError.__init__": {}, "runpod.error.QueryError.__init__": {}, "runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__init__": {}, "runpod.cli.utils.rp_sync.WatcherHandler.__init__": {}}, "names": {}, "qname": {}, "_index": 212}], ["__instance", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.__instance": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__instance": {}}, "names": {}, "qname": {}, "_index": 175}], ["__new__", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.__new__": {}, "runpod.serverless.modules.worker_state.Jobs.__new__": {}, "runpod.serverless.core.Hook.__new__": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__new__": {}}, "names": {}, "qname": {}, "_index": 179}], ["__str__", {"name": {"runpod.serverless.modules.worker_state.Job.__str__": {}, "runpod.serverless.core.CGetJobResult.__str__": {}, "runpod.error.RunPodError.__str__": {}}, "names": {}, "qname": {}, "_index": 226}], ["__version__", {"name": {"runpod.version.__version__": {}}, "names": {}, "qname": {}, "_index": 157}], ["_add_error", {"name": {"runpod.serverless.utils.rp_validator._add_error": {}}, "names": {}, "qname": {}, "_index": 1000}], ["_async_progress_update", {"name": {"runpod.serverless.modules.rp_progress._async_progress_update": {}}, "names": {}, "qname": {}, "_index": 591}], ["_check_for_unexpected_inputs", {"name": {"runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}}, "names": {}, "qname": {}, "_index": 1002}], ["_create_session_async", {"name": {"runpod.serverless.modules.rp_progress._create_session_async": {}}, "names": {}, "qname": {}, "_index": 587}], ["_credentials", {"name": {"runpod._credentials": {}}, "names": {}, "qname": {}, "_index": 802}], ["_default_concurrency_modifier", {"name": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}}, "names": {}, "qname": {}, "_index": 366}], ["_fetch_job", {"name": {"runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "names": {}, "qname": {}, "_index": 748}], ["_fields_", {"name": {"runpod.serverless.core.CGetJobResult._fields_": {}}, "names": {}, "qname": {}, "_index": 273}], ["_finish_stream", {"name": {"runpod.serverless.core.Hook._finish_stream": {}}, "names": {}, "qname": {}, "_index": 292}], ["_get_auth_header", {"name": {"runpod.serverless.worker._get_auth_header": {}}, "names": {}, "qname": {}, "_index": 511}], ["_get_jobs", {"name": {"runpod.serverless.core.Hook._get_jobs": {}}, "names": {}, "qname": {}, "_index": 280}], ["_get_realtime_concurrency", {"name": {"runpod.serverless._get_realtime_concurrency": {}}, "names": {}, "qname": {}, "_index": 606}], ["_get_realtime_port", {"name": {"runpod.serverless._get_realtime_port": {}}, "names": {}, "qname": {}, "_index": 603}], ["_get_ssh_options", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}}, "names": {}, "qname": {}, "_index": 865}], ["_handle_result", {"name": {"runpod.serverless.modules.rp_http._handle_result": {}}, "names": {}, "qname": {}, "_index": 411}], ["_initialized", {"name": {"runpod.serverless.core.Hook._initialized": {}}, "names": {}, "qname": {}, "_index": 305}], ["_instance", {"name": {"runpod.serverless.modules.worker_state.Jobs._instance": {}, "runpod.serverless.core.Hook._instance": {}}, "names": {}, "qname": {}, "_index": 231}], ["_is_alive", {"name": {"runpod.serverless.modules.rp_scale.JobScaler._is_alive": {}}, "names": {}, "qname": {}, "_index": 387}], ["_is_local", {"name": {"runpod.serverless.worker._is_local": {}}, "names": {}, "qname": {}, "_index": 513}], ["_job_get_url", {"name": {"runpod.serverless.modules.rp_job._job_get_url": {}}, "names": {}, "qname": {}, "_index": 260}], ["_json_serialize_job_data", {"name": {"runpod.serverless.core.Hook._json_serialize_job_data": {}}, "names": {}, "qname": {}, "_index": 308}], ["_launch_dev_pod", {"name": {"runpod.cli.groups.project.functions._launch_dev_pod": {}}, "names": {}, "qname": {}, "_index": 924}], ["_post_output", {"name": {"runpod.serverless.core.Hook._post_output": {}}, "names": {}, "qname": {}, "_index": 289}], ["_process_job", {"name": {"runpod.serverless.core._process_job": {}, "runpod.serverless.worker._process_job": {}}, "names": {}, "qname": {}, "_index": 323}], ["_progress_update", {"name": {"runpod.serverless.core.Hook._progress_update": {}}, "names": {}, "qname": {}, "_index": 282}], ["_realtime", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}}, "names": {}, "qname": {}, "_index": 574}], ["_request", {"name": {"runpod.endpoint.runner.RunPodClient._request": {}}, "names": {}, "qname": {}, "_index": 732}], ["_send_ping", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}}, "names": {}, "qname": {}, "_index": 361}], ["_send_webhook", {"name": {"runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "names": {}, "qname": {}, "_index": 562}], ["_session", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat._session": {}}, "names": {}, "qname": {}, "_index": 352}], ["_set_config_args", {"name": {"runpod.serverless._set_config_args": {}}, "names": {}, "qname": {}, "_index": 600}], ["_signal_handler", {"name": {"runpod.serverless._signal_handler": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}}, "names": {}, "qname": {}, "_index": 608}], ["_sim_run", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}}, "names": {}, "qname": {}, "_index": 577}], ["_sim_runsync", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}}, "names": {}, "qname": {}, "_index": 580}], ["_sim_status", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}}, "names": {}, "qname": {}, "_index": 584}], ["_sim_stream", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}}, "names": {}, "qname": {}, "_index": 582}], ["_stream_output", {"name": {"runpod.serverless.core.Hook._stream_output": {}}, "names": {}, "qname": {}, "_index": 285}], ["_thread_started", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat._thread_started": {}}, "names": {}, "qname": {}, "_index": 347}], ["_thread_target", {"name": {"runpod.serverless.modules.rp_progress._thread_target": {}}, "names": {}, "qname": {}, "_index": 593}], ["_transmit", {"name": {"runpod.serverless.modules.rp_http._transmit": {}}, "names": {}, "qname": {}, "_index": 408}], ["_validate_and_transform_schema_items", {"name": {"runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}}, "names": {}, "qname": {}, "_index": 1005}], ["_validate_input_against_schema", {"name": {"runpod.serverless.utils.rp_validator._validate_input_against_schema": {}}, "names": {}, "qname": {}, "_index": 1013}], ["_validate_log_level", {"name": {"runpod.serverless.modules.rp_logger._validate_log_level": {}}, "names": {}, "qname": {}, "_index": 168}], ["_validate_required_inputs_and_set_defaults", {"name": {"runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "names": {}, "qname": {}, "_index": 1010}], ["_wait_for_completion", {"name": {"runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}}, "names": {}, "qname": {}, "_index": 780}], ["action", {"name": {}, "names": {"runpod.cli.utils.rp_sync.WatcherHandler.action_function": {}}, "qname": {}, "_index": 904}], ["action_function", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler.action_function": {}}, "names": {}, "qname": {}, "_index": 903}], ["add", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.add": {}}, "names": {"runpod.serverless.modules.worker_state.Jobs.add_job": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.add": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.groups.ssh.commands.add_key": {}, "runpod.serverless.utils.rp_validator._add_error": {}}, "qname": {}, "_index": 236}], ["add_job", {"name": {"runpod.serverless.modules.worker_state.Jobs.add_job": {}}, "names": {}, "qname": {}, "_index": 235}], ["add_key", {"name": {"runpod.cli.groups.ssh.commands.add_key": {}}, "names": {}, "qname": {}, "_index": 949}], ["add_ssh_key", {"name": {"runpod.cli.groups.ssh.functions.add_ssh_key": {}}, "names": {}, "qname": {}, "_index": 821}], ["against", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._validate_input_against_schema": {}}, "qname": {}, "_index": 1014}], ["agent", {"name": {}, "names": {"runpod.user_agent": {}, "runpod.user_agent.construct_user_agent": {}, "runpod.user_agent.USER_AGENT": {}}, "qname": {}, "_index": 150}], ["alive", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler._is_alive": {}, "runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}}, "qname": {}, "_index": 388}], ["and", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "qname": {}, "_index": 1006}], ["any", {"name": {}, "names": {"runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "qname": {}, "_index": 914}], ["api", {"name": {"runpod.api": {}}, "names": {"runpod.api": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}, "runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}, "runpod.api_key": {}, "runpod.api_url_base": {}}, "qname": {}, "_index": 1}], ["api_key", {"name": {"runpod.api_key": {}}, "names": {}, "qname": {}, "_index": 804}], ["api_key_not_set_msg", {"name": {"runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}}, "names": {}, "qname": {}, "_index": 716}], ["api_url_base", {"name": {"runpod.api_url_base": {}}, "names": {}, "qname": {}, "_index": 806}], ["app", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app": {}}, "qname": {}, "_index": 569}], ["args", {"name": {}, "names": {"runpod.serverless._set_config_args": {}}, "qname": {}, "_index": 601}], ["async", {"name": {}, "names": {"runpod.serverless.modules.rp_progress._create_session_async": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}}, "qname": {}, "_index": 589}], ["asyncio", {"name": {"runpod.endpoint.asyncio": {}}, "names": {"runpod.endpoint.asyncio": {}, "runpod.endpoint.asyncio.asyncio_runner": {}}, "qname": {}, "_index": 80}], ["asyncio_runner", {"name": {"runpod.endpoint.asyncio.asyncio_runner": {}}, "names": {}, "qname": {}, "_index": 82}], ["attempt", {"name": {}, "names": {"runpod.cli.groups.project.helpers.attempt_pod_launch": {}}, "qname": {}, "_index": 894}], ["attempt_pod_launch", {"name": {"runpod.cli.groups.project.helpers.attempt_pod_launch": {}}, "names": {}, "qname": {}, "_index": 893}], ["auth", {"name": {}, "names": {"runpod.api.mutations.container_register_auth": {}, "runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.worker._get_auth_header": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}}, "qname": {}, "_index": 14}], ["authentication", {"name": {}, "names": {"runpod.error.AuthenticationError": {}}, "qname": {}, "_index": 618}], ["authenticationerror", {"name": {"runpod.error.AuthenticationError": {}}, "names": {}, "qname": {}, "_index": 617}], ["available", {"name": {}, "names": {"runpod.serverless.utils.rp_cuda.is_available": {}}, "qname": {}, "_index": 977}], ["background", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}}, "qname": {}, "_index": 378}], ["background_get_job_tasks", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}}, "names": {}, "qname": {}, "_index": 377}], ["base", {"name": {}, "names": {"runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}, "runpod.api_url_base": {}, "runpod.endpoint_url_base": {}, "runpod.cli.BASE_DOCKER_IMAGE": {}}, "qname": {}, "_index": 730}], ["base_docker_image", {"name": {"runpod.cli.BASE_DOCKER_IMAGE": {}}, "names": {}, "qname": {}, "_index": 826}], ["boto", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.get_boto_client": {}}, "qname": {}, "_index": 439}], ["bucket", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.bucket_upload": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}}, "qname": {}, "_index": 447}], ["bucket_upload", {"name": {"runpod.serverless.utils.rp_upload.bucket_upload": {}}, "names": {}, "qname": {}, "_index": 446}], ["calculate", {"name": {}, "names": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "qname": {}, "_index": 421}], ["calculate_chunk_size", {"name": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "names": {}, "qname": {}, "_index": 420}], ["call", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.FunctionTimer.__call__": {}}, "qname": {}, "_index": 502}], ["cancel", {"name": {"runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}}, "names": {"runpod.endpoint.runner.Job.cancel": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}}, "qname": {}, "_index": 754}], ["cget", {"name": {}, "names": {"runpod.serverless.core.CGetJobResult": {}}, "qname": {}, "_index": 270}], ["cgetjobresult", {"name": {"runpod.serverless.core.CGetJobResult": {}}, "names": {}, "qname": {}, "_index": 269}], ["check", {"name": {}, "names": {"runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.cli.groups.config.functions.check_credentials": {}, "runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}}, "qname": {}, "_index": 250}], ["check_credentials", {"name": {"runpod.cli.groups.config.functions.check_credentials": {}}, "names": {}, "qname": {}, "_index": 705}], ["check_return_size", {"name": {"runpod.serverless.modules.rp_tips.check_return_size": {}}, "names": {}, "qname": {}, "_index": 249}], ["checkpoints", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints": {}, "runpod.serverless.utils.rp_debugger.LineTimer.checkpoints": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints": {}}, "names": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}, "runpod.serverless.utils.rp_debugger.LineTimer.checkpoints": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints": {}}, "qname": {}, "_index": 465}], ["chunk", {"name": {}, "names": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "qname": {}, "_index": 422}], ["clean", {"name": {"runpod.serverless.utils.rp_cleanup.clean": {}}, "names": {"runpod.serverless.utils.rp_cleanup.clean": {}}, "qname": {}, "_index": 974}], ["cleanup", {"name": {}, "names": {"runpod.serverless.utils.rp_cleanup": {}}, "qname": {}, "_index": 131}], ["clear", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.clear": {}}, "names": {"runpod.serverless.utils.rp_debugger.Checkpoints.clear": {}, "runpod.serverless.utils.rp_debugger.clear_debugger_output": {}}, "qname": {}, "_index": 480}], ["clear_debugger_output", {"name": {"runpod.serverless.utils.rp_debugger.clear_debugger_output": {}}, "names": {}, "qname": {}, "_index": 506}], ["cli", {"name": {"runpod.cli": {}}, "names": {"runpod.cli": {}, "runpod.cli.groups.project.commands.project_cli": {}, "runpod.cli.groups.ssh.commands.ssh_cli": {}, "runpod.cli.groups.pod.commands.pod_cli": {}, "runpod.cli.groups.exec.commands.exec_cli": {}, "runpod.cli.entry.runpod_cli": {}}, "qname": {}, "_index": 31}], ["client", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.get_boto_client": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.endpoint.runner.Job.rp_client": {}, "runpod.endpoint.runner.Endpoint.rp_client": {}}, "qname": {}, "_index": 440}], ["close", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.close": {}}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection.close": {}}, "qname": {}, "_index": 882}], ["cmd", {"name": {}, "names": {"runpod.cli.utils.ssh_cmd": {}}, "qname": {}, "_index": 76}], ["commands", {"name": {"runpod.cli.groups.config.commands": {}, "runpod.cli.groups.exec.commands": {}, "runpod.cli.groups.pod.commands": {}, "runpod.cli.groups.project.commands": {}, "runpod.cli.groups.ssh.commands": {}}, "names": {"runpod.api.ctl_commands": {}, "runpod.cli.groups.config.commands": {}, "runpod.cli.groups.exec.commands": {}, "runpod.cli.groups.pod.commands": {}, "runpod.cli.groups.project.commands": {}, "runpod.cli.groups.ssh.commands": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}}, "qname": {}, "_index": 5}], ["completed", {"name": {}, "names": {"runpod.endpoint.helpers.is_completed": {}}, "qname": {}, "_index": 721}], ["completion", {"name": {}, "names": {"runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}}, "qname": {}, "_index": 783}], ["concurrency", {"name": {}, "names": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier": {}, "runpod.serverless.modules.rp_scale.JobScaler.current_concurrency": {}, "runpod.serverless._get_realtime_concurrency": {}}, "qname": {}, "_index": 368}], ["concurrency_modifier", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier": {}}, "names": {}, "qname": {}, "_index": 375}], ["config", {"name": {"runpod.cli.groups.config": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.config": {}}, "names": {"runpod.cli.groups.config": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.config": {}, "runpod.serverless._set_config_args": {}, "runpod.cli.groups.project.helpers.load_project_config": {}, "runpod.cli.groups.config.commands.config_wizard": {}}, "qname": {}, "_index": 37}], ["config_wizard", {"name": {"runpod.cli.groups.config.commands.config_wizard": {}}, "names": {}, "qname": {}, "_index": 943}], ["connect", {"name": {}, "names": {"runpod.cli.groups.pod.commands.connect_to_pod": {}}, "qname": {}, "_index": 958}], ["connect_to_pod", {"name": {"runpod.cli.groups.pod.commands.connect_to_pod": {}}, "names": {}, "qname": {}, "_index": 957}], ["constraints", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR": {}}, "qname": {}, "_index": 995}], ["constraints_error", {"name": {"runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR": {}}, "names": {}, "qname": {}, "_index": 994}], ["construct", {"name": {}, "names": {"runpod.user_agent.construct_user_agent": {}}, "qname": {}, "_index": 330}], ["construct_user_agent", {"name": {"runpod.user_agent.construct_user_agent": {}}, "names": {}, "qname": {}, "_index": 329}], ["container", {"name": {}, "names": {"runpod.api.mutations.container_register_auth": {}, "runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}}, "qname": {}, "_index": 12}], ["container_register_auth", {"name": {"runpod.api.mutations.container_register_auth": {}}, "names": {}, "qname": {}, "_index": 11}], ["copy", {"name": {}, "names": {"runpod.cli.groups.project.helpers.copy_template_files": {}}, "qname": {}, "_index": 891}], ["copy_template_files", {"name": {"runpod.cli.groups.project.helpers.copy_template_files": {}}, "names": {}, "qname": {}, "_index": 890}], ["core", {"name": {"runpod.serverless.core": {}}, "names": {"runpod.serverless.core": {}}, "qname": {}, "_index": 91}], ["count", {"name": {}, "names": {"runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_count": {}}, "qname": {}, "_index": 198}], ["crate", {"name": {}, "names": {"runpod.serverless.core.Hook.rust_crate_version": {}}, "qname": {}, "_index": 303}], ["create", {"name": {}, "names": {"runpod.serverless.modules.rp_progress._create_session_async": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}, "runpod.cli.groups.project.functions.create_new_project": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.cli.groups.pod.commands.create_new_pod": {}}, "qname": {}, "_index": 588}], ["create_container_registry_auth", {"name": {"runpod.api.ctl_commands.create_container_registry_auth": {}}, "names": {}, "qname": {}, "_index": 697}], ["create_endpoint", {"name": {"runpod.api.ctl_commands.create_endpoint": {}}, "names": {}, "qname": {}, "_index": 693}], ["create_new_pod", {"name": {"runpod.cli.groups.pod.commands.create_new_pod": {}}, "names": {}, "qname": {}, "_index": 955}], ["create_new_project", {"name": {"runpod.cli.groups.project.functions.create_new_project": {}}, "names": {}, "qname": {}, "_index": 927}], ["create_pod", {"name": {"runpod.api.ctl_commands.create_pod": {}}, "names": {}, "qname": {}, "_index": 681}], ["create_project_endpoint", {"name": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "names": {}, "qname": {}, "_index": 931}], ["create_template", {"name": {"runpod.api.ctl_commands.create_template": {}}, "names": {}, "qname": {}, "_index": 689}], ["credential", {"name": {}, "names": {"runpod.cli.groups.config.functions.CREDENTIAL_FILE": {}}, "qname": {}, "_index": 700}], ["credential_file", {"name": {"runpod.cli.groups.config.functions.CREDENTIAL_FILE": {}}, "names": {}, "qname": {}, "_index": 699}], ["credentials", {"name": {}, "names": {"runpod.cli.groups.config.functions.set_credentials": {}, "runpod.cli.groups.config.functions.check_credentials": {}, "runpod.cli.groups.config.functions.get_credentials": {}, "runpod._credentials": {}}, "qname": {}, "_index": 703}], ["ctl", {"name": {}, "names": {"runpod.api.ctl_commands": {}}, "qname": {}, "_index": 4}], ["ctl_commands", {"name": {"runpod.api.ctl_commands": {}}, "names": {}, "qname": {}, "_index": 3}], ["cuda", {"name": {}, "names": {"runpod.serverless.utils.rp_cuda": {}}, "qname": {}, "_index": 134}], ["current", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler.current_concurrency": {}}, "qname": {}, "_index": 385}], ["current_concurrency", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.current_concurrency": {}}, "names": {}, "qname": {}, "_index": 384}], ["data", {"name": {}, "names": {"runpod.serverless.core.Hook._json_serialize_job_data": {}}, "qname": {}, "_index": 311}], ["debouncer", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler.debouncer": {}}, "names": {"runpod.cli.utils.rp_sync.WatcherHandler.debouncer": {}}, "qname": {}, "_index": 910}], ["debug", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.debug": {}}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.debug": {}}, "qname": {}, "_index": 188}], ["debugger", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger": {}, "runpod.serverless.utils.rp_debugger.get_debugger_output": {}, "runpod.serverless.utils.rp_debugger.clear_debugger_output": {}}, "qname": {}, "_index": 137}], ["default", {"name": {}, "names": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest": {}, "runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}}, "qname": {}, "_index": 367}], ["defaultrequest", {"name": {"runpod.serverless.modules.rp_fastapi.DefaultRequest": {}}, "names": {}, "qname": {}, "_index": 545}], ["defaults", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "qname": {}, "_index": 1011}], ["deploy", {"name": {}, "names": {"runpod.cli.groups.project.commands.deploy_project": {}}, "qname": {}, "_index": 941}], ["deploy_project", {"name": {"runpod.cli.groups.project.commands.deploy_project": {}}, "names": {}, "qname": {}, "_index": 940}], ["deployment", {"name": {}, "names": {"runpod.api.mutations.pods.generate_pod_deployment_mutation": {}}, "qname": {}, "_index": 640}], ["description", {"name": {"runpod.serverless.modules.rp_fastapi.DESCRIPTION": {}}, "names": {"runpod.serverless.modules.rp_fastapi.DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION": {}}, "qname": {}, "_index": 523}], ["dev", {"name": {}, "names": {"runpod.cli.groups.project.functions._launch_dev_pod": {}}, "qname": {}, "_index": 925}], ["directory", {"name": {}, "names": {"runpod.cli.utils.rp_sync.sync_directory": {}}, "qname": {}, "_index": 919}], ["docker", {"name": {}, "names": {"runpod.cli.BASE_DOCKER_IMAGE": {}}, "qname": {}, "_index": 827}], ["done", {"name": {}, "names": {"runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL": {}}, "qname": {}, "_index": 397}], ["download", {"name": {}, "names": {"runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_download.download_files_from_urls": {}}, "qname": {}, "_index": 140}], ["download_files_from_urls", {"name": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}}, "names": {}, "qname": {}, "_index": 424}], ["endpoint", {"name": {"runpod.endpoint": {}, "runpod.endpoint.runner.Endpoint": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint": {}}, "names": {"runpod.endpoint": {}, "runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.queries.endpoints.QUERY_ENDPOINT": {}, "runpod.api.ctl_commands.create_endpoint": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}, "runpod.endpoint.runner.Job.endpoint_id": {}, "runpod.endpoint.runner.Endpoint": {}, "runpod.endpoint.runner.Endpoint.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url": {}, "runpod.endpoint_url_base": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}}, "qname": {}, "_index": 78}], ["endpoint_id", {"name": {"runpod.endpoint.runner.Job.endpoint_id": {}, "runpod.endpoint.runner.Endpoint.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id": {}}, "names": {}, "qname": {}, "_index": 738}], ["endpoint_url", {"name": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url": {}}, "names": {}, "qname": {}, "_index": 791}], ["endpoint_url_base", {"name": {"runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}, "runpod.endpoint_url_base": {}}, "names": {}, "qname": {}, "_index": 729}], ["endpoints", {"name": {"runpod.api.mutations.endpoints": {}, "runpod.api.queries.endpoints": {}}, "names": {"runpod.api.mutations.endpoints": {}, "runpod.api.queries.endpoints": {}, "runpod.api.ctl_commands.get_endpoints": {}}, "qname": {}, "_index": 16}], ["enter", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.LineTimer.__enter__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__enter__": {}}, "qname": {}, "_index": 490}], ["entry", {"name": {"runpod.cli.entry": {}}, "names": {"runpod.cli.entry": {}}, "qname": {}, "_index": 33}], ["env", {"name": {}, "names": {"runpod.cli.ENV_VARS": {}}, "qname": {}, "_index": 832}], ["env_vars", {"name": {"runpod.cli.ENV_VARS": {}}, "names": {}, "qname": {}, "_index": 831}], ["eq", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Job.__eq__": {}}, "qname": {}, "_index": 221}], ["error", {"name": {"runpod.error": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.error": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.error": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.error": {}}, "names": {"runpod.error": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.error": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.error": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.error": {}, "runpod.error.RunPodError": {}, "runpod.error.AuthenticationError": {}, "runpod.error.QueryError": {}, "runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}, "runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}, "runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR": {}, "runpod.serverless.utils.rp_validator.SCHEMA_ERROR": {}, "runpod.serverless.utils.rp_validator._add_error": {}}, "qname": {}, "_index": 87}], ["event", {"name": {}, "names": {"runpod.cli.STOP_EVENT": {}, "runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "qname": {}, "_index": 824}], ["exclude", {"name": {}, "names": {"runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS": {}}, "qname": {}, "_index": 842}], ["exclude_patterns", {"name": {"runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS": {}}, "names": {}, "qname": {}, "_index": 841}], ["exec", {"name": {"runpod.cli.groups.exec": {}}, "names": {"runpod.cli.groups.exec": {}, "runpod.cli.groups.exec.commands.exec_cli": {}}, "qname": {}, "_index": 42}], ["exec_cli", {"name": {"runpod.cli.groups.exec.commands.exec_cli": {}}, "names": {}, "qname": {}, "_index": 967}], ["exit", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.LineTimer.__exit__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__exit__": {}}, "qname": {}, "_index": 493}], ["extract", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "qname": {}, "_index": 435}], ["extract_region_from_url", {"name": {"runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "names": {}, "qname": {}, "_index": 434}], ["fastapi", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi": {}}, "qname": {}, "_index": 96}], ["fetch", {"name": {}, "names": {"runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "qname": {}, "_index": 749}], ["fields", {"name": {}, "names": {"runpod.serverless.core.CGetJobResult._fields_": {}}, "qname": {}, "_index": 274}], ["file", {"name": {"runpod.serverless.utils.rp_download.file": {}}, "names": {"runpod.serverless.utils.rp_download.file": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.cli.groups.config.functions.CREDENTIAL_FILE": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}, "runpod.cli.groups.exec.helpers.POD_ID_FILE": {}}, "qname": {}, "_index": 429}], ["files", {"name": {"runpod.serverless.utils.rp_upload.files": {}}, "names": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_upload.files": {}, "runpod.cli.groups.ssh.functions.SSH_FILES": {}, "runpod.cli.groups.project.helpers.copy_template_files": {}}, "qname": {}, "_index": 425}], ["final", {"name": {}, "names": {"runpod.endpoint.helpers.FINAL_STATES": {}}, "qname": {}, "_index": 710}], ["final_states", {"name": {"runpod.endpoint.helpers.FINAL_STATES": {}}, "names": {}, "qname": {}, "_index": 709}], ["find", {"name": {}, "names": {"runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "qname": {}, "_index": 839}], ["find_ssh_key_file", {"name": {"runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "names": {}, "qname": {}, "_index": 838}], ["fingerprint", {"name": {}, "names": {"runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}}, "qname": {}, "_index": 812}], ["finish", {"name": {}, "names": {"runpod.serverless.core.Hook._finish_stream": {}, "runpod.serverless.core.Hook.finish_stream": {}}, "qname": {}, "_index": 293}], ["finish_stream", {"name": {"runpod.serverless.core.Hook.finish_stream": {}}, "names": {}, "qname": {}, "_index": 321}], ["fmt", {"name": {"runpod.serverless.utils.rp_upload.FMT": {}}, "names": {"runpod.serverless.utils.rp_upload.FMT": {}}, "qname": {}, "_index": 432}], ["for", {"name": {}, "names": {"runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}, "runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}}, "qname": {}, "_index": 782}], ["from", {"name": {}, "names": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}, "runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "qname": {}, "_index": 426}], ["function", {"name": {"runpod.serverless.utils.rp_debugger.FunctionTimer.function": {}}, "names": {"runpod.serverless.utils.rp_debugger.FunctionTimer": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.function": {}, "runpod.cli.utils.rp_sync.WatcherHandler.action_function": {}}, "qname": {}, "_index": 496}], ["functions", {"name": {"runpod.cli.groups.config.functions": {}, "runpod.cli.groups.exec.functions": {}, "runpod.cli.groups.project.functions": {}, "runpod.cli.groups.ssh.functions": {}}, "names": {"runpod.cli.groups.config.functions": {}, "runpod.cli.groups.exec.functions": {}, "runpod.cli.groups.project.functions": {}, "runpod.cli.groups.ssh.functions": {}}, "qname": {}, "_index": 40}], ["functiontimer", {"name": {"runpod.serverless.utils.rp_debugger.FunctionTimer": {}}, "names": {}, "qname": {}, "_index": 495}], ["generate", {"name": {}, "names": {"runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.mutations.user.generate_user_mutation": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "qname": {}, "_index": 631}], ["generate_container_registry_auth", {"name": {"runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}}, "names": {}, "qname": {}, "_index": 630}], ["generate_endpoint_mutation", {"name": {"runpod.api.mutations.endpoints.generate_endpoint_mutation": {}}, "names": {}, "qname": {}, "_index": 634}], ["generate_gpu_query", {"name": {"runpod.api.queries.gpus.generate_gpu_query": {}}, "names": {}, "qname": {}, "_index": 660}], ["generate_pod_deployment_mutation", {"name": {"runpod.api.mutations.pods.generate_pod_deployment_mutation": {}}, "names": {}, "qname": {}, "_index": 639}], ["generate_pod_query", {"name": {"runpod.api.queries.pods.generate_pod_query": {}}, "names": {}, "qname": {}, "_index": 664}], ["generate_pod_resume_mutation", {"name": {"runpod.api.mutations.pods.generate_pod_resume_mutation": {}}, "names": {}, "qname": {}, "_index": 644}], ["generate_pod_stop_mutation", {"name": {"runpod.api.mutations.pods.generate_pod_stop_mutation": {}}, "names": {}, "qname": {}, "_index": 642}], ["generate_pod_template", {"name": {"runpod.api.mutations.templates.generate_pod_template": {}}, "names": {}, "qname": {}, "_index": 650}], ["generate_pod_terminate_mutation", {"name": {"runpod.api.mutations.pods.generate_pod_terminate_mutation": {}}, "names": {}, "qname": {}, "_index": 647}], ["generate_ssh_key_pair", {"name": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "names": {}, "qname": {}, "_index": 818}], ["generate_user_mutation", {"name": {"runpod.api.mutations.user.generate_user_mutation": {}}, "names": {}, "qname": {}, "_index": 652}], ["generator", {"name": {}, "names": {"runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.modules.rp_handler.is_generator": {}}, "qname": {}, "_index": 266}], ["get", {"name": {"runpod.endpoint.runner.RunPodClient.get": {}}, "names": {"runpod.version.get_version": {}, "runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_count": {}, "runpod.serverless.modules.rp_job.JOB_GET_URL": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.core.Hook._get_jobs": {}, "runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}, "runpod.serverless.utils.rp_upload.get_boto_client": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}, "runpod.serverless.utils.rp_debugger.get_debugger_output": {}, "runpod.serverless.worker._get_auth_header": {}, "runpod.serverless._get_realtime_port": {}, "runpod.serverless._get_realtime_concurrency": {}, "runpod.api.ctl_commands.get_user": {}, "runpod.api.ctl_commands.get_gpus": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.api.ctl_commands.get_pods": {}, "runpod.api.ctl_commands.get_pod": {}, "runpod.api.ctl_commands.get_endpoints": {}, "runpod.cli.groups.config.functions.get_credentials": {}, "runpod.endpoint.runner.RunPodClient.get": {}, "runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}, "runpod.cli.groups.ssh.functions.get_user_pub_keys": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "qname": {}, "_index": 155}], ["get_auth_header", {"name": {"runpod.serverless.modules.worker_state.get_auth_header": {}}, "names": {}, "qname": {}, "_index": 208}], ["get_boto_client", {"name": {"runpod.serverless.utils.rp_upload.get_boto_client": {}}, "names": {}, "qname": {}, "_index": 438}], ["get_checkpoints", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}}, "names": {}, "qname": {}, "_index": 478}], ["get_credentials", {"name": {"runpod.cli.groups.config.functions.get_credentials": {}}, "names": {}, "qname": {}, "_index": 707}], ["get_debugger_output", {"name": {"runpod.serverless.utils.rp_debugger.get_debugger_output": {}}, "names": {}, "qname": {}, "_index": 504}], ["get_endpoints", {"name": {"runpod.api.ctl_commands.get_endpoints": {}}, "names": {}, "qname": {}, "_index": 691}], ["get_file", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}}, "names": {}, "qname": {}, "_index": 874}], ["get_gpu", {"name": {"runpod.api.ctl_commands.get_gpu": {}}, "names": {}, "qname": {}, "_index": 675}], ["get_gpus", {"name": {"runpod.api.ctl_commands.get_gpus": {}}, "names": {}, "qname": {}, "_index": 673}], ["get_ignore_list", {"name": {"runpod.cli.utils.rp_runpodignore.get_ignore_list": {}}, "names": {}, "qname": {}, "_index": 845}], ["get_job", {"name": {"runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.rp_job.get_job": {}}, "names": {}, "qname": {}, "_index": 241}], ["get_job_count", {"name": {"runpod.serverless.modules.worker_state.Jobs.get_job_count": {}}, "names": {}, "qname": {}, "_index": 246}], ["get_job_list", {"name": {"runpod.serverless.modules.worker_state.Jobs.get_job_list": {}}, "names": {}, "qname": {}, "_index": 243}], ["get_jobs", {"name": {"runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}}, "names": {}, "qname": {}, "_index": 313}], ["get_pod", {"name": {"runpod.api.ctl_commands.get_pod": {}}, "names": {}, "qname": {}, "_index": 679}], ["get_pod_ssh_ip_port", {"name": {"runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}}, "names": {}, "qname": {}, "_index": 835}], ["get_pods", {"name": {"runpod.api.ctl_commands.get_pods": {}}, "names": {}, "qname": {}, "_index": 677}], ["get_project_endpoint", {"name": {"runpod.cli.groups.project.helpers.get_project_endpoint": {}}, "names": {}, "qname": {}, "_index": 888}], ["get_project_pod", {"name": {"runpod.cli.groups.project.helpers.get_project_pod": {}}, "names": {}, "qname": {}, "_index": 886}], ["get_session_pod", {"name": {"runpod.cli.groups.exec.helpers.get_session_pod": {}}, "names": {}, "qname": {}, "_index": 965}], ["get_ssh_key_fingerprint", {"name": {"runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}}, "names": {}, "qname": {}, "_index": 811}], ["get_user", {"name": {"runpod.api.ctl_commands.get_user": {}}, "names": {}, "qname": {}, "_index": 668}], ["get_user_pub_keys", {"name": {"runpod.cli.groups.ssh.functions.get_user_pub_keys": {}}, "names": {}, "qname": {}, "_index": 814}], ["get_version", {"name": {"runpod.version.get_version": {}}, "names": {}, "qname": {}, "_index": 154}], ["gpu", {"name": {}, "names": {"runpod.api.queries.gpus.QUERY_GPU_TYPES": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.ctl_commands.get_gpu": {}, "runpod.cli.GPU_TYPES": {}}, "qname": {}, "_index": 657}], ["gpu_types", {"name": {"runpod.cli.GPU_TYPES": {}}, "names": {}, "qname": {}, "_index": 829}], ["gpus", {"name": {"runpod.api.queries.gpus": {}}, "names": {"runpod.api.queries.gpus": {}, "runpod.api.ctl_commands.get_gpus": {}}, "qname": {}, "_index": 27}], ["graphql", {"name": {"runpod.api.graphql": {}}, "names": {"runpod.api.graphql": {}, "runpod.api.graphql.run_graphql_query": {}}, "qname": {}, "_index": 7}], ["groups", {"name": {"runpod.cli.groups": {}}, "names": {"runpod.cli.groups": {}}, "qname": {}, "_index": 35}], ["handle", {"name": {}, "names": {"runpod.serverless.modules.rp_http._handle_result": {}}, "qname": {}, "_index": 412}], ["handler", {"name": {}, "names": {"runpod.serverless.modules.rp_handler": {}, "runpod.serverless._signal_handler": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}, "runpod.cli.utils.rp_sync.WatcherHandler": {}}, "qname": {}, "_index": 99}], ["hash", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Job.__hash__": {}}, "qname": {}, "_index": 224}], ["header", {"name": {}, "names": {"runpod.serverless.modules.worker_state.get_auth_header": {}, "runpod.serverless.worker._get_auth_header": {}}, "qname": {}, "_index": 209}], ["headers", {"name": {"runpod.serverless.utils.rp_download.HEADERS": {}, "runpod.endpoint.runner.RunPodClient.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers": {}}, "names": {"runpod.serverless.utils.rp_download.HEADERS": {}, "runpod.endpoint.runner.RunPodClient.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.headers": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers": {}}, "qname": {}, "_index": 418}], ["health", {"name": {"runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}}, "names": {"runpod.endpoint.runner.Endpoint.health": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}}, "qname": {}, "_index": 763}], ["heartbeat", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat": {}, "runpod.serverless.worker.heartbeat": {}, "runpod.serverless.modules.rp_fastapi.heartbeat": {}}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat": {}, "runpod.serverless.worker.heartbeat": {}, "runpod.serverless.modules.rp_fastapi.heartbeat": {}}, "qname": {}, "_index": 340}], ["helpers", {"name": {"runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.project.helpers": {}, "runpod.endpoint.helpers": {}}, "names": {"runpod.cli.groups.exec.helpers": {}, "runpod.cli.groups.project.helpers": {}, "runpod.endpoint.helpers": {}}, "qname": {}, "_index": 46}], ["history", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler.job_history": {}}, "qname": {}, "_index": 382}], ["hook", {"name": {"runpod.serverless.core.Hook": {}}, "names": {"runpod.serverless.core.Hook": {}}, "qname": {}, "_index": 277}], ["http", {"name": {}, "names": {"runpod.serverless.modules.rp_http": {}, "runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}}, "qname": {}, "_index": 102}], ["http_status_unauthorized", {"name": {"runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}}, "names": {}, "qname": {}, "_index": 625}], ["id", {"name": {"runpod.serverless.modules.worker_state.Job.id": {}, "runpod.serverless.modules.rp_fastapi.Job.id": {}, "runpod.serverless.modules.rp_fastapi.TestJob.id": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.id": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.id": {}}, "names": {"runpod.serverless.modules.worker_state.WORKER_ID": {}, "runpod.serverless.modules.worker_state.Job.id": {}, "runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}, "runpod.serverless.modules.rp_fastapi.Job.id": {}, "runpod.serverless.modules.rp_fastapi.TestJob.id": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.id": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.id": {}, "runpod.endpoint.runner.Job.endpoint_id": {}, "runpod.endpoint.runner.Job.job_id": {}, "runpod.endpoint.runner.Endpoint.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_id": {}, "runpod.cli.groups.exec.helpers.POD_ID_FILE": {}}, "qname": {}, "_index": 202}], ["ignore", {"name": {}, "names": {"runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.rp_runpodignore.should_ignore": {}, "runpod.cli.utils.rp_sync.WatcherHandler.ignore_list": {}}, "qname": {}, "_index": 846}], ["ignore_list", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler.ignore_list": {}}, "names": {}, "qname": {}, "_index": 908}], ["image", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.upload_image": {}, "runpod.cli.BASE_DOCKER_IMAGE": {}}, "qname": {}, "_index": 443}], ["in", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "qname": {}, "_index": 453}], ["info", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.info": {}}, "names": {"runpod.cli.utils.rp_info": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.info": {}, "runpod.serverless.utils.rp_debugger.OS_INFO": {}}, "qname": {}, "_index": 64}], ["init", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Job.__init__": {}, "runpod.serverless.core.Hook.__init__": {}, "runpod.serverless.modules.rp_ping.Heartbeat.__init__": {}, "runpod.serverless.modules.rp_scale.JobScaler.__init__": {}, "runpod.serverless.utils.rp_debugger.LineTimer.__init__": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer.__init__": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}, "runpod.error.RunPodError.__init__": {}, "runpod.error.QueryError.__init__": {}, "runpod.endpoint.runner.RunPodClient.__init__": {}, "runpod.endpoint.runner.Job.__init__": {}, "runpod.endpoint.runner.Endpoint.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.__init__": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.__init__": {}, "runpod.cli.utils.rp_sync.WatcherHandler.__init__": {}}, "qname": {}, "_index": 213}], ["initialized", {"name": {}, "names": {"runpod.serverless.core.Hook._initialized": {}}, "qname": {}, "_index": 306}], ["input", {"name": {"runpod.serverless.modules.worker_state.Job.input": {}, "runpod.serverless.modules.rp_fastapi.Job.input": {}, "runpod.serverless.modules.rp_fastapi.TestJob.input": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.input": {}}, "names": {"runpod.serverless.modules.worker_state.Job.input": {}, "runpod.serverless.modules.rp_fastapi.Job.input": {}, "runpod.serverless.modules.rp_fastapi.TestJob.input": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.input": {}, "runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}, "runpod.serverless.utils.rp_validator._validate_input_against_schema": {}}, "qname": {}, "_index": 216}], ["inputs", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "qname": {}, "_index": 1003}], ["instance", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.__instance": {}, "runpod.serverless.modules.worker_state.Jobs._instance": {}, "runpod.serverless.core.Hook._instance": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__instance": {}}, "qname": {}, "_index": 176}], ["interval", {"name": {}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL": {}}, "qname": {}, "_index": 345}], ["invalid", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}}, "qname": {}, "_index": 992}], ["invalid_type_error", {"name": {"runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}}, "names": {}, "qname": {}, "_index": 991}], ["ip", {"name": {}, "names": {"runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip": {}}, "qname": {}, "_index": 836}], ["is", {"name": {}, "names": {"runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}, "runpod.serverless.modules.rp_handler.is_generator": {}, "runpod.serverless.modules.rp_scale.JobScaler._is_alive": {}, "runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}, "runpod.serverless.worker._is_local": {}, "runpod.endpoint.helpers.is_completed": {}, "runpod.serverless.utils.rp_cuda.is_available": {}}, "qname": {}, "_index": 205}], ["is_alive", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}}, "names": {}, "qname": {}, "_index": 390}], ["is_available", {"name": {"runpod.serverless.utils.rp_cuda.is_available": {}}, "names": {}, "qname": {}, "_index": 976}], ["is_completed", {"name": {"runpod.endpoint.helpers.is_completed": {}}, "names": {}, "qname": {}, "_index": 720}], ["is_generator", {"name": {"runpod.serverless.modules.rp_handler.is_generator": {}}, "names": {}, "qname": {}, "_index": 336}], ["is_local_test", {"name": {"runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}}, "names": {}, "qname": {}, "_index": 204}], ["items", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}}, "qname": {}, "_index": 1008}], ["job", {"name": {"runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.rp_fastapi.Job": {}, "runpod.endpoint.runner.Job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job": {}}, "names": {"runpod.serverless.modules.rp_job": {}, "runpod.serverless.modules.worker_state.Job": {}, "runpod.serverless.modules.worker_state.Jobs.add_job": {}, "runpod.serverless.modules.worker_state.Jobs.remove_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.serverless.modules.worker_state.Jobs.get_job_count": {}, "runpod.serverless.modules.rp_job.JOB_GET_URL": {}, "runpod.serverless.modules.rp_job.job_list": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_job.get_job": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.core.CGetJobResult": {}, "runpod.serverless.core.Hook._json_serialize_job_data": {}, "runpod.serverless.core._process_job": {}, "runpod.serverless.modules.rp_scale.job_list": {}, "runpod.serverless.modules.rp_scale.JobScaler": {}, "runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}, "runpod.serverless.modules.rp_scale.JobScaler.job_history": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}, "runpod.serverless.modules.rp_http.job_list": {}, "runpod.serverless.worker.job_list": {}, "runpod.serverless.worker._process_job": {}, "runpod.serverless.modules.rp_fastapi.job_list": {}, "runpod.serverless.modules.rp_fastapi.Job": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}, "runpod.serverless.modules.rp_fastapi.JobOutput": {}, "runpod.endpoint.runner.Job": {}, "runpod.endpoint.runner.Job.job_id": {}, "runpod.endpoint.runner.Job.job_status": {}, "runpod.endpoint.runner.Job.job_output": {}, "runpod.endpoint.runner.Job._fetch_job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "qname": {}, "_index": 105}], ["job_done_url", {"name": {"runpod.serverless.modules.rp_http.JOB_DONE_URL": {}}, "names": {}, "qname": {}, "_index": 400}], ["job_done_url_template", {"name": {"runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}}, "names": {}, "qname": {}, "_index": 396}], ["job_get_url", {"name": {"runpod.serverless.modules.rp_job.JOB_GET_URL": {}}, "names": {}, "qname": {}, "_index": 254}], ["job_history", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.job_history": {}}, "names": {}, "qname": {}, "_index": 381}], ["job_id", {"name": {"runpod.endpoint.runner.Job.job_id": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_id": {}}, "names": {}, "qname": {}, "_index": 740}], ["job_list", {"name": {"runpod.serverless.modules.rp_job.job_list": {}, "runpod.serverless.modules.rp_scale.job_list": {}, "runpod.serverless.modules.rp_http.job_list": {}, "runpod.serverless.worker.job_list": {}, "runpod.serverless.modules.rp_fastapi.job_list": {}}, "names": {}, "qname": {}, "_index": 258}], ["job_output", {"name": {"runpod.endpoint.runner.Job.job_output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_output": {}}, "names": {}, "qname": {}, "_index": 746}], ["job_status", {"name": {"runpod.endpoint.runner.Job.job_status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_status": {}}, "names": {}, "qname": {}, "_index": 744}], ["job_stream_url", {"name": {"runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}}, "names": {}, "qname": {}, "_index": 404}], ["job_stream_url_template", {"name": {"runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}}, "names": {}, "qname": {}, "_index": 402}], ["joboutput", {"name": {"runpod.serverless.modules.rp_fastapi.JobOutput": {}}, "names": {}, "qname": {}, "_index": 550}], ["jobs", {"name": {"runpod.serverless.modules.worker_state.Jobs": {}, "runpod.serverless.modules.worker_state.Jobs.jobs": {}, "runpod.serverless.modules.rp_ping.jobs": {}}, "names": {"runpod.serverless.modules.worker_state.Jobs": {}, "runpod.serverless.modules.worker_state.Jobs.jobs": {}, "runpod.serverless.core.Hook._get_jobs": {}, "runpod.serverless.core.Hook.get_jobs": {}, "runpod.serverless.modules.rp_ping.jobs": {}, "runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}}, "qname": {}, "_index": 229}], ["jobscaler", {"name": {"runpod.serverless.modules.rp_scale.JobScaler": {}}, "names": {}, "qname": {}, "_index": 371}], ["json", {"name": {}, "names": {"runpod.serverless.core.Hook._json_serialize_job_data": {}}, "qname": {}, "_index": 309}], ["key", {"name": {}, "names": {"runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}, "runpod.SSH_KEY_PATH": {}, "runpod.api_key": {}, "runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.key_file": {}, "runpod.cli.groups.ssh.commands.add_key": {}}, "qname": {}, "_index": 717}], ["key_file", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.key_file": {}}, "names": {}, "qname": {}, "_index": 860}], ["keys", {"name": {}, "names": {"runpod.cli.groups.ssh.functions.get_user_pub_keys": {}, "runpod.cli.groups.ssh.commands.list_keys": {}}, "qname": {}, "_index": 816}], ["kill", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}}, "qname": {}, "_index": 393}], ["kill_worker", {"name": {"runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}}, "names": {}, "qname": {}, "_index": 392}], ["launch", {"name": {}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}, "runpod.cli.groups.project.helpers.attempt_pod_launch": {}, "runpod.cli.groups.project.functions._launch_dev_pod": {}}, "qname": {}, "_index": 877}], ["launch_terminal", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}}, "names": {}, "qname": {}, "_index": 876}], ["length", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}}, "qname": {}, "_index": 162}], ["level", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.level": {}}, "names": {"runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}}, "qname": {}, "_index": 170}], ["levels", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.LOG_LEVELS": {}}, "qname": {}, "_index": 166}], ["line", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.LineTimer": {}}, "qname": {}, "_index": 483}], ["linetimer", {"name": {"runpod.serverless.utils.rp_debugger.LineTimer": {}}, "names": {}, "qname": {}, "_index": 482}], ["list", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Jobs.get_job_list": {}, "runpod.serverless.modules.rp_job.job_list": {}, "runpod.serverless.modules.rp_scale.job_list": {}, "runpod.serverless.modules.rp_http.job_list": {}, "runpod.serverless.worker.job_list": {}, "runpod.serverless.modules.rp_fastapi.job_list": {}, "runpod.cli.utils.rp_runpodignore.get_ignore_list": {}, "runpod.cli.utils.rp_sync.WatcherHandler.ignore_list": {}, "runpod.cli.groups.ssh.commands.list_keys": {}, "runpod.cli.groups.pod.commands.list_pods": {}}, "qname": {}, "_index": 244}], ["list_keys", {"name": {"runpod.cli.groups.ssh.commands.list_keys": {}}, "names": {}, "qname": {}, "_index": 947}], ["list_pods", {"name": {"runpod.cli.groups.pod.commands.list_pods": {}}, "names": {}, "qname": {}, "_index": 953}], ["load", {"name": {}, "names": {"runpod.cli.groups.project.helpers.load_project_config": {}}, "qname": {}, "_index": 897}], ["load_project_config", {"name": {"runpod.cli.groups.project.helpers.load_project_config": {}}, "names": {}, "qname": {}, "_index": 896}], ["local", {"name": {}, "names": {"runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}, "runpod.serverless.modules.rp_local.run_local": {}, "runpod.serverless.worker._is_local": {}, "runpod.cli.utils.rp_sync.WatcherHandler.local_path": {}}, "qname": {}, "_index": 108}], ["local_path", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler.local_path": {}}, "names": {}, "qname": {}, "_index": 906}], ["log", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.log": {}, "runpod.serverless.modules.rp_tips.log": {}, "runpod.serverless.modules.rp_job.log": {}, "runpod.serverless.core.log": {}, "runpod.serverless.modules.rp_local.log": {}, "runpod.serverless.modules.rp_ping.log": {}, "runpod.serverless.modules.rp_scale.log": {}, "runpod.serverless.modules.rp_http.log": {}, "runpod.serverless.worker.log": {}, "runpod.serverless.modules.rp_progress.log": {}, "runpod.serverless.log": {}}, "names": {"runpod.serverless.modules.rp_logger.LOG_LEVELS": {}, "runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.serverless.modules.rp_logger.RunPodLogger.log": {}, "runpod.serverless.modules.rp_tips.log": {}, "runpod.serverless.modules.rp_job.log": {}, "runpod.serverless.core.log": {}, "runpod.serverless.modules.rp_local.log": {}, "runpod.serverless.modules.rp_ping.log": {}, "runpod.serverless.modules.rp_scale.log": {}, "runpod.serverless.modules.rp_http.log": {}, "runpod.serverless.worker.log": {}, "runpod.serverless.modules.rp_progress.log": {}, "runpod.serverless.log": {}}, "qname": {}, "_index": 165}], ["log_levels", {"name": {"runpod.serverless.modules.rp_logger.LOG_LEVELS": {}}, "names": {}, "qname": {}, "_index": 164}], ["logger", {"name": {"runpod.serverless.utils.rp_upload.logger": {}}, "names": {"runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_logger.RunPodLogger": {}, "runpod.serverless.utils.rp_upload.logger": {}}, "qname": {}, "_index": 111}], ["lookup", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup": {}}, "qname": {}, "_index": 471}], ["loop", {"name": {}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}}, "qname": {}, "_index": 359}], ["main", {"name": {"runpod.serverless.core.main": {}, "runpod.serverless.worker.main": {}}, "names": {"runpod.serverless.core.main": {}, "runpod.serverless.worker.main": {}}, "qname": {}, "_index": 327}], ["max", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}}, "qname": {}, "_index": 160}], ["max_message_length", {"name": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}}, "names": {}, "qname": {}, "_index": 159}], ["memory", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "qname": {}, "_index": 454}], ["message", {"name": {"runpod.error.RunPodError.message": {}}, "names": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}, "runpod.error.RunPodError.message": {}}, "qname": {}, "_index": 161}], ["missing", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}, "runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}}, "qname": {}, "_index": 983}], ["missing_default_error", {"name": {"runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}}, "names": {}, "qname": {}, "_index": 986}], ["missing_required_error", {"name": {"runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}}, "names": {}, "qname": {}, "_index": 982}], ["missing_type_error", {"name": {"runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}}, "names": {}, "qname": {}, "_index": 988}], ["modifier", {"name": {}, "names": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}, "runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier": {}}, "qname": {}, "_index": 369}], ["modules", {"name": {"runpod.serverless.modules": {}}, "names": {"runpod.serverless.modules": {}}, "qname": {}, "_index": 93}], ["msg", {"name": {}, "names": {"runpod.endpoint.helpers.UNAUTHORIZED_MSG": {}, "runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}}, "qname": {}, "_index": 714}], ["mutation", {"name": {}, "names": {"runpod.api.mutations.endpoints.generate_endpoint_mutation": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.mutations.user.generate_user_mutation": {}}, "qname": {}, "_index": 635}], ["mutations", {"name": {"runpod.api.mutations": {}}, "names": {"runpod.api.mutations": {}}, "qname": {}, "_index": 9}], ["name", {"name": {"runpod.serverless.utils.rp_debugger.LineTimer.name": {}}, "names": {"runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup": {}, "runpod.serverless.utils.rp_debugger.LineTimer.name": {}, "runpod.cli.groups.project.helpers.validate_project_name": {}}, "qname": {}, "_index": 470}], ["name_lookup", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup": {}}, "names": {}, "qname": {}, "_index": 469}], ["new", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.__new__": {}, "runpod.serverless.modules.worker_state.Jobs.__new__": {}, "runpod.serverless.core.Hook.__new__": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.__new__": {}, "runpod.cli.groups.project.functions.create_new_project": {}, "runpod.cli.groups.project.commands.new_project_wizard": {}, "runpod.cli.groups.pod.commands.create_new_pod": {}}, "qname": {}, "_index": 180}], ["new_project_wizard", {"name": {"runpod.cli.groups.project.commands.new_project_wizard": {}}, "names": {}, "qname": {}, "_index": 935}], ["not", {"name": {}, "names": {"runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}}, "qname": {}, "_index": 718}], ["object", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "qname": {}, "_index": 455}], ["on", {"name": {}, "names": {"runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "qname": {}, "_index": 913}], ["on_any_event", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "names": {}, "qname": {}, "_index": 912}], ["options", {"name": {}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}}, "qname": {}, "_index": 866}], ["os", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.OS_INFO": {}}, "qname": {}, "_index": 458}], ["os_info", {"name": {"runpod.serverless.utils.rp_debugger.OS_INFO": {}}, "names": {}, "qname": {}, "_index": 457}], ["output", {"name": {"runpod.serverless.modules.rp_fastapi.JobOutput.output": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "names": {"runpod.serverless.core.Hook._stream_output": {}, "runpod.serverless.core.Hook._post_output": {}, "runpod.serverless.core.Hook.stream_output": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.serverless.utils.rp_debugger.get_debugger_output": {}, "runpod.serverless.utils.rp_debugger.clear_debugger_output": {}, "runpod.serverless.modules.rp_fastapi.JobOutput": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.output": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput": {}, "runpod.endpoint.runner.Job.job_output": {}, "runpod.endpoint.runner.Job.output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_output": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "qname": {}, "_index": 287}], ["over", {"name": {}, "names": {"runpod.cli.groups.exec.functions.python_over_ssh": {}}, "qname": {}, "_index": 961}], ["pair", {"name": {}, "names": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "qname": {}, "_index": 819}], ["parser", {"name": {"runpod.serverless.parser": {}}, "names": {"runpod.serverless.parser": {}}, "qname": {}, "_index": 598}], ["path", {"name": {}, "names": {"runpod.serverless.core.Hook.rust_so_path": {}, "runpod.SSH_KEY_PATH": {}, "runpod.cli.utils.rp_sync.WatcherHandler.local_path": {}}, "qname": {}, "_index": 300}], ["patterns", {"name": {}, "names": {"runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS": {}}, "qname": {}, "_index": 843}], ["ping", {"name": {}, "names": {"runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.PING_URL": {}, "runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL": {}, "runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}, "runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}, "runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}}, "qname": {}, "_index": 114}], ["ping_interval", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL": {}}, "names": {}, "qname": {}, "_index": 344}], ["ping_loop", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}}, "names": {}, "qname": {}, "_index": 358}], ["ping_url", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat.PING_URL": {}}, "names": {}, "qname": {}, "_index": 342}], ["pod", {"name": {"runpod.cli.groups.pod": {}}, "names": {"runpod.cli.groups.pod": {}, "runpod.serverless.modules.rp_logger.RunPodLogger": {}, "runpod.error.RunPodError": {}, "runpod.api.mutations.pods.generate_pod_deployment_mutation": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.queries.pods.QUERY_POD": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.api.ctl_commands.get_pod": {}, "runpod.api.ctl_commands.create_pod": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.api.ctl_commands.resume_pod": {}, "runpod.api.ctl_commands.terminate_pod": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_id": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_port": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.attempt_pod_launch": {}, "runpod.cli.groups.project.functions._launch_dev_pod": {}, "runpod.cli.groups.project.commands.start_project_pod": {}, "runpod.cli.groups.pod.commands.pod_cli": {}, "runpod.cli.groups.pod.commands.create_new_pod": {}, "runpod.cli.groups.pod.commands.connect_to_pod": {}, "runpod.cli.groups.exec.helpers.POD_ID_FILE": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "qname": {}, "_index": 48}], ["pod_cli", {"name": {"runpod.cli.groups.pod.commands.pod_cli": {}}, "names": {}, "qname": {}, "_index": 951}], ["pod_id", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_id": {}}, "names": {}, "qname": {}, "_index": 854}], ["pod_id_file", {"name": {"runpod.cli.groups.exec.helpers.POD_ID_FILE": {}}, "names": {}, "qname": {}, "_index": 963}], ["pod_ip", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip": {}}, "names": {}, "qname": {}, "_index": 856}], ["pod_port", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_port": {}}, "names": {}, "qname": {}, "_index": 858}], ["pods", {"name": {"runpod.api.mutations.pods": {}, "runpod.api.queries.pods": {}}, "names": {"runpod.api.mutations.pods": {}, "runpod.api.queries.pods": {}, "runpod.api.ctl_commands.get_pods": {}, "runpod.cli.groups.pod.commands.list_pods": {}}, "qname": {}, "_index": 18}], ["port", {"name": {}, "names": {"runpod.serverless._get_realtime_port": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.pod_port": {}}, "qname": {}, "_index": 604}], ["post", {"name": {"runpod.endpoint.runner.RunPodClient.post": {}}, "names": {"runpod.serverless.core.Hook._post_output": {}, "runpod.serverless.core.Hook.post_output": {}, "runpod.endpoint.runner.RunPodClient.post": {}}, "qname": {}, "_index": 290}], ["post_output", {"name": {"runpod.serverless.core.Hook.post_output": {}}, "names": {}, "qname": {}, "_index": 319}], ["process", {"name": {}, "names": {"runpod.serverless.core._process_job": {}, "runpod.serverless.worker._process_job": {}}, "qname": {}, "_index": 324}], ["processor", {"name": {"runpod.serverless.utils.rp_debugger.PROCESSOR": {}}, "names": {"runpod.serverless.utils.rp_debugger.PROCESSOR": {}}, "qname": {}, "_index": 460}], ["profile", {"name": {"runpod.profile": {}}, "names": {"runpod.profile": {}}, "qname": {}, "_index": 800}], ["progress", {"name": {}, "names": {"runpod.serverless.modules.rp_progress": {}, "runpod.serverless.core.Hook._progress_update": {}, "runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}, "runpod.serverless.modules.rp_progress.progress_update": {}}, "qname": {}, "_index": 117}], ["progress_update", {"name": {"runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.modules.rp_progress.progress_update": {}}, "names": {}, "qname": {}, "_index": 315}], ["project", {"name": {"runpod.cli.groups.project": {}}, "names": {"runpod.cli.groups.project": {}, "runpod.cli.groups.project.helpers.validate_project_name": {}, "runpod.cli.groups.project.helpers.get_project_pod": {}, "runpod.cli.groups.project.helpers.get_project_endpoint": {}, "runpod.cli.groups.project.helpers.load_project_config": {}, "runpod.cli.groups.project.functions.create_new_project": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.functions.create_project_endpoint": {}, "runpod.cli.groups.project.commands.project_cli": {}, "runpod.cli.groups.project.commands.new_project_wizard": {}, "runpod.cli.groups.project.commands.start_project_pod": {}, "runpod.cli.groups.project.commands.deploy_project": {}}, "qname": {}, "_index": 51}], ["project_cli", {"name": {"runpod.cli.groups.project.commands.project_cli": {}}, "names": {}, "qname": {}, "_index": 933}], ["pub", {"name": {}, "names": {"runpod.cli.groups.ssh.functions.get_user_pub_keys": {}}, "qname": {}, "_index": 815}], ["purge", {"name": {}, "names": {"runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "qname": {}, "_index": 766}], ["purge_queue", {"name": {"runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "names": {}, "qname": {}, "_index": 765}], ["put", {"name": {}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}}, "qname": {}, "_index": 872}], ["put_file", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}}, "names": {}, "qname": {}, "_index": 871}], ["python", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.PYTHON_VERSION": {}, "runpod.cli.groups.exec.functions.python_over_ssh": {}, "runpod.cli.groups.exec.commands.remote_python": {}}, "qname": {}, "_index": 463}], ["python_over_ssh", {"name": {"runpod.cli.groups.exec.functions.python_over_ssh": {}}, "names": {}, "qname": {}, "_index": 960}], ["python_version", {"name": {"runpod.serverless.utils.rp_debugger.PYTHON_VERSION": {}}, "names": {}, "qname": {}, "_index": 462}], ["queries", {"name": {"runpod.api.queries": {}}, "names": {"runpod.api.queries": {}}, "qname": {}, "_index": 24}], ["query", {"name": {"runpod.error.QueryError.query": {}}, "names": {"runpod.error.QueryError": {}, "runpod.error.QueryError.query": {}, "runpod.api.graphql.run_graphql_query": {}, "runpod.api.queries.endpoints.QUERY_ENDPOINT": {}, "runpod.api.queries.gpus.QUERY_GPU_TYPES": {}, "runpod.api.queries.gpus.generate_gpu_query": {}, "runpod.api.queries.pods.QUERY_POD": {}, "runpod.api.queries.pods.generate_pod_query": {}, "runpod.api.queries.user.QUERY_USER": {}}, "qname": {}, "_index": 621}], ["query_endpoint", {"name": {"runpod.api.queries.endpoints.QUERY_ENDPOINT": {}}, "names": {}, "qname": {}, "_index": 654}], ["query_gpu_types", {"name": {"runpod.api.queries.gpus.QUERY_GPU_TYPES": {}}, "names": {}, "qname": {}, "_index": 656}], ["query_pod", {"name": {"runpod.api.queries.pods.QUERY_POD": {}}, "names": {}, "qname": {}, "_index": 662}], ["query_user", {"name": {"runpod.api.queries.user.QUERY_USER": {}}, "names": {}, "qname": {}, "_index": 666}], ["queryerror", {"name": {"runpod.error.QueryError": {}}, "names": {}, "qname": {}, "_index": 620}], ["queue", {"name": {}, "names": {"runpod.endpoint.runner.Endpoint.purge_queue": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "qname": {}, "_index": 767}], ["realtime", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}, "runpod.serverless._get_realtime_port": {}, "runpod.serverless._get_realtime_concurrency": {}}, "qname": {}, "_index": 575}], ["ref", {"name": {}, "names": {"runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}}, "qname": {}, "_index": 197}], ["ref_count_zero", {"name": {"runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}}, "names": {}, "qname": {}, "_index": 196}], ["region", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "qname": {}, "_index": 436}], ["register", {"name": {}, "names": {"runpod.api.mutations.container_register_auth": {}}, "qname": {}, "_index": 13}], ["registry", {"name": {}, "names": {"runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}, "runpod.api.ctl_commands.create_container_registry_auth": {}}, "qname": {}, "_index": 632}], ["remote", {"name": {}, "names": {"runpod.cli.groups.exec.commands.remote_python": {}}, "qname": {}, "_index": 970}], ["remote_python", {"name": {"runpod.cli.groups.exec.commands.remote_python": {}}, "names": {}, "qname": {}, "_index": 969}], ["remove", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Jobs.remove_job": {}}, "qname": {}, "_index": 239}], ["remove_job", {"name": {"runpod.serverless.modules.worker_state.Jobs.remove_job": {}}, "names": {}, "qname": {}, "_index": 238}], ["request", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.DefaultRequest": {}, "runpod.endpoint.runner.RunPodClient._request": {}}, "qname": {}, "_index": 546}], ["required", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "qname": {}, "_index": 984}], ["result", {"name": {}, "names": {"runpod.serverless.core.CGetJobResult": {}, "runpod.serverless.modules.rp_http._handle_result": {}, "runpod.serverless.modules.rp_http.send_result": {}, "runpod.serverless.modules.rp_http.stream_result": {}}, "qname": {}, "_index": 271}], ["resume", {"name": {}, "names": {"runpod.api.mutations.pods.generate_pod_resume_mutation": {}, "runpod.api.ctl_commands.resume_pod": {}}, "qname": {}, "_index": 645}], ["resume_pod", {"name": {"runpod.api.ctl_commands.resume_pod": {}}, "names": {}, "qname": {}, "_index": 685}], ["return", {"name": {}, "names": {"runpod.serverless.modules.rp_tips.check_return_size": {}}, "qname": {}, "_index": 251}], ["rp", {"name": {}, "names": {"runpod.cli.utils.rp_info": {}, "runpod.cli.utils.rp_runpodignore": {}, "runpod.cli.utils.rp_sync": {}, "runpod.cli.utils.rp_userspace": {}, "runpod.serverless.modules.rp_fastapi": {}, "runpod.serverless.modules.rp_handler": {}, "runpod.serverless.modules.rp_http": {}, "runpod.serverless.modules.rp_job": {}, "runpod.serverless.modules.rp_local": {}, "runpod.serverless.modules.rp_logger": {}, "runpod.serverless.modules.rp_ping": {}, "runpod.serverless.modules.rp_progress": {}, "runpod.serverless.modules.rp_scale": {}, "runpod.serverless.modules.rp_tips": {}, "runpod.serverless.utils.rp_cleanup": {}, "runpod.serverless.utils.rp_cuda": {}, "runpod.serverless.utils.rp_debugger": {}, "runpod.serverless.utils.rp_download": {}, "runpod.serverless.utils.rp_upload": {}, "runpod.serverless.utils.rp_validator": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app": {}, "runpod.endpoint.runner.RunPodClient.rp_session": {}, "runpod.endpoint.runner.Job.rp_client": {}, "runpod.endpoint.runner.Endpoint.rp_client": {}}, "qname": {}, "_index": 63}], ["rp_app", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app": {}}, "names": {}, "qname": {}, "_index": 568}], ["rp_cleanup", {"name": {"runpod.serverless.utils.rp_cleanup": {}}, "names": {}, "qname": {}, "_index": 130}], ["rp_client", {"name": {"runpod.endpoint.runner.Job.rp_client": {}, "runpod.endpoint.runner.Endpoint.rp_client": {}}, "names": {}, "qname": {}, "_index": 742}], ["rp_cuda", {"name": {"runpod.serverless.utils.rp_cuda": {}}, "names": {}, "qname": {}, "_index": 133}], ["rp_debugger", {"name": {"runpod.serverless.utils.rp_debugger": {}}, "names": {}, "qname": {}, "_index": 136}], ["rp_download", {"name": {"runpod.serverless.utils.rp_download": {}}, "names": {}, "qname": {}, "_index": 139}], ["rp_fastapi", {"name": {"runpod.serverless.modules.rp_fastapi": {}}, "names": {}, "qname": {}, "_index": 95}], ["rp_handler", {"name": {"runpod.serverless.modules.rp_handler": {}}, "names": {}, "qname": {}, "_index": 98}], ["rp_http", {"name": {"runpod.serverless.modules.rp_http": {}}, "names": {}, "qname": {}, "_index": 101}], ["rp_info", {"name": {"runpod.cli.utils.rp_info": {}}, "names": {}, "qname": {}, "_index": 62}], ["rp_job", {"name": {"runpod.serverless.modules.rp_job": {}}, "names": {}, "qname": {}, "_index": 104}], ["rp_local", {"name": {"runpod.serverless.modules.rp_local": {}}, "names": {}, "qname": {}, "_index": 107}], ["rp_logger", {"name": {"runpod.serverless.modules.rp_logger": {}}, "names": {}, "qname": {}, "_index": 110}], ["rp_ping", {"name": {"runpod.serverless.modules.rp_ping": {}}, "names": {}, "qname": {}, "_index": 113}], ["rp_progress", {"name": {"runpod.serverless.modules.rp_progress": {}}, "names": {}, "qname": {}, "_index": 116}], ["rp_runpodignore", {"name": {"runpod.cli.utils.rp_runpodignore": {}}, "names": {}, "qname": {}, "_index": 66}], ["rp_scale", {"name": {"runpod.serverless.modules.rp_scale": {}}, "names": {}, "qname": {}, "_index": 119}], ["rp_session", {"name": {"runpod.endpoint.runner.RunPodClient.rp_session": {}}, "names": {}, "qname": {}, "_index": 726}], ["rp_sync", {"name": {"runpod.cli.utils.rp_sync": {}}, "names": {}, "qname": {}, "_index": 69}], ["rp_tips", {"name": {"runpod.serverless.modules.rp_tips": {}}, "names": {}, "qname": {}, "_index": 122}], ["rp_upload", {"name": {"runpod.serverless.utils.rp_upload": {}}, "names": {}, "qname": {}, "_index": 142}], ["rp_userspace", {"name": {"runpod.cli.utils.rp_userspace": {}}, "names": {}, "qname": {}, "_index": 72}], ["rp_validator", {"name": {"runpod.serverless.utils.rp_validator": {}}, "names": {}, "qname": {}, "_index": 145}], ["rsync", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "qname": {}, "_index": 880}], ["run", {"name": {"runpod.serverless.core.run": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger": {}, "runpod.serverless.modules.rp_job.run_job": {}, "runpod.serverless.modules.rp_job.run_job_generator": {}, "runpod.serverless.core.run": {}, "runpod.serverless.modules.rp_local.run_local": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}, "runpod.error.RunPodError": {}, "runpod.api.graphql.run_graphql_query": {}, "runpod.endpoint.runner.RunPodClient": {}, "runpod.endpoint.runner.Endpoint.run": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}}, "qname": {}, "_index": 173}], ["run_commands", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}}, "names": {}, "qname": {}, "_index": 869}], ["run_description", {"name": {"runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION": {}}, "names": {}, "qname": {}, "_index": 525}], ["run_graphql_query", {"name": {"runpod.api.graphql.run_graphql_query": {}}, "names": {}, "qname": {}, "_index": 628}], ["run_job", {"name": {"runpod.serverless.modules.rp_job.run_job": {}}, "names": {}, "qname": {}, "_index": 263}], ["run_job_generator", {"name": {"runpod.serverless.modules.rp_job.run_job_generator": {}}, "names": {}, "qname": {}, "_index": 265}], ["run_local", {"name": {"runpod.serverless.modules.rp_local.run_local": {}}, "names": {}, "qname": {}, "_index": 334}], ["run_sync", {"name": {"runpod.endpoint.runner.Endpoint.run_sync": {}}, "names": {}, "qname": {}, "_index": 761}], ["run_worker", {"name": {"runpod.serverless.worker.run_worker": {}}, "names": {}, "qname": {}, "_index": 516}], ["runner", {"name": {"runpod.endpoint.runner": {}}, "names": {"runpod.endpoint.asyncio.asyncio_runner": {}, "runpod.endpoint.runner": {}}, "qname": {}, "_index": 83}], ["runpod", {"name": {"runpod": {}}, "names": {"runpod": {}, "runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}, "runpod.cli.entry.runpod_cli": {}}, "qname": {"runpod": {}}, "_index": 0}], ["runpod._credentials", {"name": {}, "names": {}, "qname": {"runpod._credentials": {}}, "_index": 803}], ["runpod.api", {"name": {}, "names": {}, "qname": {"runpod.api": {}}, "_index": 2}], ["runpod.api.ctl_commands", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands": {}}, "_index": 6}], ["runpod.api.ctl_commands.create_container_registry_auth", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.create_container_registry_auth": {}}, "_index": 698}], ["runpod.api.ctl_commands.create_endpoint", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.create_endpoint": {}}, "_index": 694}], ["runpod.api.ctl_commands.create_pod", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.create_pod": {}}, "_index": 682}], ["runpod.api.ctl_commands.create_template", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.create_template": {}}, "_index": 690}], ["runpod.api.ctl_commands.get_endpoints", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_endpoints": {}}, "_index": 692}], ["runpod.api.ctl_commands.get_gpu", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_gpu": {}}, "_index": 676}], ["runpod.api.ctl_commands.get_gpus", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_gpus": {}}, "_index": 674}], ["runpod.api.ctl_commands.get_pod", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_pod": {}}, "_index": 680}], ["runpod.api.ctl_commands.get_pods", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_pods": {}}, "_index": 678}], ["runpod.api.ctl_commands.get_user", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.get_user": {}}, "_index": 669}], ["runpod.api.ctl_commands.resume_pod", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.resume_pod": {}}, "_index": 686}], ["runpod.api.ctl_commands.stop_pod", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.stop_pod": {}}, "_index": 684}], ["runpod.api.ctl_commands.terminate_pod", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.terminate_pod": {}}, "_index": 688}], ["runpod.api.ctl_commands.update_endpoint_template", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.update_endpoint_template": {}}, "_index": 696}], ["runpod.api.ctl_commands.update_user_settings", {"name": {}, "names": {}, "qname": {"runpod.api.ctl_commands.update_user_settings": {}}, "_index": 672}], ["runpod.api.graphql", {"name": {}, "names": {}, "qname": {"runpod.api.graphql": {}}, "_index": 8}], ["runpod.api.graphql.http_status_unauthorized", {"name": {}, "names": {}, "qname": {"runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}}, "_index": 627}], ["runpod.api.graphql.run_graphql_query", {"name": {}, "names": {}, "qname": {"runpod.api.graphql.run_graphql_query": {}}, "_index": 629}], ["runpod.api.mutations", {"name": {}, "names": {}, "qname": {"runpod.api.mutations": {}}, "_index": 10}], ["runpod.api.mutations.container_register_auth", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.container_register_auth": {}}, "_index": 15}], ["runpod.api.mutations.container_register_auth.generate_container_registry_auth", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.container_register_auth.generate_container_registry_auth": {}}, "_index": 633}], ["runpod.api.mutations.endpoints", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.endpoints": {}}, "_index": 17}], ["runpod.api.mutations.endpoints.generate_endpoint_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.endpoints.generate_endpoint_mutation": {}}, "_index": 636}], ["runpod.api.mutations.endpoints.update_endpoint_template_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}}, "_index": 638}], ["runpod.api.mutations.pods", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.pods": {}}, "_index": 19}], ["runpod.api.mutations.pods.generate_pod_deployment_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.pods.generate_pod_deployment_mutation": {}}, "_index": 641}], ["runpod.api.mutations.pods.generate_pod_resume_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.pods.generate_pod_resume_mutation": {}}, "_index": 646}], ["runpod.api.mutations.pods.generate_pod_stop_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.pods.generate_pod_stop_mutation": {}}, "_index": 643}], ["runpod.api.mutations.pods.generate_pod_terminate_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.pods.generate_pod_terminate_mutation": {}}, "_index": 649}], ["runpod.api.mutations.templates", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.templates": {}}, "_index": 21}], ["runpod.api.mutations.templates.generate_pod_template", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.templates.generate_pod_template": {}}, "_index": 651}], ["runpod.api.mutations.user", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.user": {}}, "_index": 23}], ["runpod.api.mutations.user.generate_user_mutation", {"name": {}, "names": {}, "qname": {"runpod.api.mutations.user.generate_user_mutation": {}}, "_index": 653}], ["runpod.api.queries", {"name": {}, "names": {}, "qname": {"runpod.api.queries": {}}, "_index": 25}], ["runpod.api.queries.endpoints", {"name": {}, "names": {}, "qname": {"runpod.api.queries.endpoints": {}}, "_index": 26}], ["runpod.api.queries.endpoints.query_endpoint", {"name": {}, "names": {}, "qname": {"runpod.api.queries.endpoints.QUERY_ENDPOINT": {}}, "_index": 655}], ["runpod.api.queries.gpus", {"name": {}, "names": {}, "qname": {"runpod.api.queries.gpus": {}}, "_index": 28}], ["runpod.api.queries.gpus.generate_gpu_query", {"name": {}, "names": {}, "qname": {"runpod.api.queries.gpus.generate_gpu_query": {}}, "_index": 661}], ["runpod.api.queries.gpus.query_gpu_types", {"name": {}, "names": {}, "qname": {"runpod.api.queries.gpus.QUERY_GPU_TYPES": {}}, "_index": 659}], ["runpod.api.queries.pods", {"name": {}, "names": {}, "qname": {"runpod.api.queries.pods": {}}, "_index": 29}], ["runpod.api.queries.pods.generate_pod_query", {"name": {}, "names": {}, "qname": {"runpod.api.queries.pods.generate_pod_query": {}}, "_index": 665}], ["runpod.api.queries.pods.query_pod", {"name": {}, "names": {}, "qname": {"runpod.api.queries.pods.QUERY_POD": {}}, "_index": 663}], ["runpod.api.queries.user", {"name": {}, "names": {}, "qname": {"runpod.api.queries.user": {}}, "_index": 30}], ["runpod.api.queries.user.query_user", {"name": {}, "names": {}, "qname": {"runpod.api.queries.user.QUERY_USER": {}}, "_index": 667}], ["runpod.api_key", {"name": {}, "names": {}, "qname": {"runpod.api_key": {}}, "_index": 805}], ["runpod.api_url_base", {"name": {}, "names": {}, "qname": {"runpod.api_url_base": {}}, "_index": 807}], ["runpod.cli", {"name": {}, "names": {}, "qname": {"runpod.cli": {}}, "_index": 32}], ["runpod.cli.base_docker_image", {"name": {}, "names": {}, "qname": {"runpod.cli.BASE_DOCKER_IMAGE": {}}, "_index": 828}], ["runpod.cli.entry", {"name": {}, "names": {}, "qname": {"runpod.cli.entry": {}}, "_index": 34}], ["runpod.cli.entry.runpod_cli", {"name": {}, "names": {}, "qname": {"runpod.cli.entry.runpod_cli": {}}, "_index": 973}], ["runpod.cli.env_vars", {"name": {}, "names": {}, "qname": {"runpod.cli.ENV_VARS": {}}, "_index": 834}], ["runpod.cli.gpu_types", {"name": {}, "names": {}, "qname": {"runpod.cli.GPU_TYPES": {}}, "_index": 830}], ["runpod.cli.groups", {"name": {}, "names": {}, "qname": {"runpod.cli.groups": {}}, "_index": 36}], ["runpod.cli.groups.config", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config": {}}, "_index": 38}], ["runpod.cli.groups.config.commands", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.commands": {}}, "_index": 39}], ["runpod.cli.groups.config.commands.config_wizard", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.commands.config_wizard": {}}, "_index": 944}], ["runpod.cli.groups.config.functions", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.functions": {}}, "_index": 41}], ["runpod.cli.groups.config.functions.check_credentials", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.functions.check_credentials": {}}, "_index": 706}], ["runpod.cli.groups.config.functions.credential_file", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.functions.CREDENTIAL_FILE": {}}, "_index": 701}], ["runpod.cli.groups.config.functions.get_credentials", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.functions.get_credentials": {}}, "_index": 708}], ["runpod.cli.groups.config.functions.set_credentials", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.config.functions.set_credentials": {}}, "_index": 704}], ["runpod.cli.groups.exec", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec": {}}, "_index": 43}], ["runpod.cli.groups.exec.commands", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.commands": {}}, "_index": 44}], ["runpod.cli.groups.exec.commands.exec_cli", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.commands.exec_cli": {}}, "_index": 968}], ["runpod.cli.groups.exec.commands.remote_python", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.commands.remote_python": {}}, "_index": 971}], ["runpod.cli.groups.exec.functions", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.functions": {}}, "_index": 45}], ["runpod.cli.groups.exec.functions.python_over_ssh", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.functions.python_over_ssh": {}}, "_index": 962}], ["runpod.cli.groups.exec.helpers", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.helpers": {}}, "_index": 47}], ["runpod.cli.groups.exec.helpers.get_session_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.helpers.get_session_pod": {}}, "_index": 966}], ["runpod.cli.groups.exec.helpers.pod_id_file", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.exec.helpers.POD_ID_FILE": {}}, "_index": 964}], ["runpod.cli.groups.pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod": {}}, "_index": 49}], ["runpod.cli.groups.pod.commands", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod.commands": {}}, "_index": 50}], ["runpod.cli.groups.pod.commands.connect_to_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod.commands.connect_to_pod": {}}, "_index": 959}], ["runpod.cli.groups.pod.commands.create_new_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod.commands.create_new_pod": {}}, "_index": 956}], ["runpod.cli.groups.pod.commands.list_pods", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod.commands.list_pods": {}}, "_index": 954}], ["runpod.cli.groups.pod.commands.pod_cli", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.pod.commands.pod_cli": {}}, "_index": 952}], ["runpod.cli.groups.project", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project": {}}, "_index": 52}], ["runpod.cli.groups.project.commands", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.commands": {}}, "_index": 53}], ["runpod.cli.groups.project.commands.deploy_project", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.commands.deploy_project": {}}, "_index": 942}], ["runpod.cli.groups.project.commands.new_project_wizard", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.commands.new_project_wizard": {}}, "_index": 937}], ["runpod.cli.groups.project.commands.project_cli", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.commands.project_cli": {}}, "_index": 934}], ["runpod.cli.groups.project.commands.start_project_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.commands.start_project_pod": {}}, "_index": 939}], ["runpod.cli.groups.project.functions", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions": {}}, "_index": 54}], ["runpod.cli.groups.project.functions._launch_dev_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions._launch_dev_pod": {}}, "_index": 926}], ["runpod.cli.groups.project.functions.create_new_project", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions.create_new_project": {}}, "_index": 928}], ["runpod.cli.groups.project.functions.create_project_endpoint", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions.create_project_endpoint": {}}, "_index": 932}], ["runpod.cli.groups.project.functions.start_project", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions.start_project": {}}, "_index": 930}], ["runpod.cli.groups.project.functions.starter_templates", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.functions.STARTER_TEMPLATES": {}}, "_index": 923}], ["runpod.cli.groups.project.helpers", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers": {}}, "_index": 55}], ["runpod.cli.groups.project.helpers.attempt_pod_launch", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.attempt_pod_launch": {}}, "_index": 895}], ["runpod.cli.groups.project.helpers.copy_template_files", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.copy_template_files": {}}, "_index": 892}], ["runpod.cli.groups.project.helpers.get_project_endpoint", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.get_project_endpoint": {}}, "_index": 889}], ["runpod.cli.groups.project.helpers.get_project_pod", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.get_project_pod": {}}, "_index": 887}], ["runpod.cli.groups.project.helpers.load_project_config", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.load_project_config": {}}, "_index": 898}], ["runpod.cli.groups.project.helpers.validate_project_name", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.project.helpers.validate_project_name": {}}, "_index": 885}], ["runpod.cli.groups.ssh", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh": {}}, "_index": 57}], ["runpod.cli.groups.ssh.commands", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.commands": {}}, "_index": 58}], ["runpod.cli.groups.ssh.commands.add_key", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.commands.add_key": {}}, "_index": 950}], ["runpod.cli.groups.ssh.commands.list_keys", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.commands.list_keys": {}}, "_index": 948}], ["runpod.cli.groups.ssh.commands.ssh_cli", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.commands.ssh_cli": {}}, "_index": 946}], ["runpod.cli.groups.ssh.functions", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions": {}}, "_index": 59}], ["runpod.cli.groups.ssh.functions.add_ssh_key", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions.add_ssh_key": {}}, "_index": 822}], ["runpod.cli.groups.ssh.functions.generate_ssh_key_pair", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}}, "_index": 820}], ["runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}}, "_index": 813}], ["runpod.cli.groups.ssh.functions.get_user_pub_keys", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions.get_user_pub_keys": {}}, "_index": 817}], ["runpod.cli.groups.ssh.functions.ssh_files", {"name": {}, "names": {}, "qname": {"runpod.cli.groups.ssh.functions.SSH_FILES": {}}, "_index": 810}], ["runpod.cli.stop_event", {"name": {}, "names": {}, "qname": {"runpod.cli.STOP_EVENT": {}}, "_index": 825}], ["runpod.cli.utils", {"name": {}, "names": {}, "qname": {"runpod.cli.utils": {}}, "_index": 61}], ["runpod.cli.utils.rp_info", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_info": {}}, "_index": 65}], ["runpod.cli.utils.rp_info.get_pod_ssh_ip_port", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}}, "_index": 837}], ["runpod.cli.utils.rp_runpodignore", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_runpodignore": {}}, "_index": 68}], ["runpod.cli.utils.rp_runpodignore.exclude_patterns", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_runpodignore.EXCLUDE_PATTERNS": {}}, "_index": 844}], ["runpod.cli.utils.rp_runpodignore.get_ignore_list", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_runpodignore.get_ignore_list": {}}, "_index": 847}], ["runpod.cli.utils.rp_runpodignore.should_ignore", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_runpodignore.should_ignore": {}}, "_index": 850}], ["runpod.cli.utils.rp_sync", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync": {}}, "_index": 71}], ["runpod.cli.utils.rp_sync.start_watcher", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.start_watcher": {}}, "_index": 917}], ["runpod.cli.utils.rp_sync.sync_directory", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.sync_directory": {}}, "_index": 920}], ["runpod.cli.utils.rp_sync.watcherhandler", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler": {}}, "_index": 901}], ["runpod.cli.utils.rp_sync.watcherhandler.__init__", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.__init__": {}}, "_index": 902}], ["runpod.cli.utils.rp_sync.watcherhandler.action_function", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.action_function": {}}, "_index": 905}], ["runpod.cli.utils.rp_sync.watcherhandler.debouncer", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.debouncer": {}}, "_index": 911}], ["runpod.cli.utils.rp_sync.watcherhandler.ignore_list", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.ignore_list": {}}, "_index": 909}], ["runpod.cli.utils.rp_sync.watcherhandler.local_path", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.local_path": {}}, "_index": 907}], ["runpod.cli.utils.rp_sync.watcherhandler.on_any_event", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_sync.WatcherHandler.on_any_event": {}}, "_index": 915}], ["runpod.cli.utils.rp_userspace", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_userspace": {}}, "_index": 74}], ["runpod.cli.utils.rp_userspace.find_ssh_key_file", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.rp_userspace.find_ssh_key_file": {}}, "_index": 840}], ["runpod.cli.utils.ssh_cmd", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd": {}}, "_index": 77}], ["runpod.cli.utils.ssh_cmd.sshconnection", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection": {}}, "_index": 852}], ["runpod.cli.utils.ssh_cmd.sshconnection.__enter__", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.__enter__": {}}, "_index": 863}], ["runpod.cli.utils.ssh_cmd.sshconnection.__exit__", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.__exit__": {}}, "_index": 864}], ["runpod.cli.utils.ssh_cmd.sshconnection.__init__", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.__init__": {}}, "_index": 853}], ["runpod.cli.utils.ssh_cmd.sshconnection._get_ssh_options", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}}, "_index": 867}], ["runpod.cli.utils.ssh_cmd.sshconnection._signal_handler", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}}, "_index": 868}], ["runpod.cli.utils.ssh_cmd.sshconnection.close", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.close": {}}, "_index": 883}], ["runpod.cli.utils.ssh_cmd.sshconnection.get_file", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.get_file": {}}, "_index": 875}], ["runpod.cli.utils.ssh_cmd.sshconnection.key_file", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.key_file": {}}, "_index": 861}], ["runpod.cli.utils.ssh_cmd.sshconnection.launch_terminal", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}}, "_index": 879}], ["runpod.cli.utils.ssh_cmd.sshconnection.pod_id", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_id": {}}, "_index": 855}], ["runpod.cli.utils.ssh_cmd.sshconnection.pod_ip", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_ip": {}}, "_index": 857}], ["runpod.cli.utils.ssh_cmd.sshconnection.pod_port", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.pod_port": {}}, "_index": 859}], ["runpod.cli.utils.ssh_cmd.sshconnection.put_file", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.put_file": {}}, "_index": 873}], ["runpod.cli.utils.ssh_cmd.sshconnection.rsync", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.rsync": {}}, "_index": 881}], ["runpod.cli.utils.ssh_cmd.sshconnection.run_commands", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.run_commands": {}}, "_index": 870}], ["runpod.cli.utils.ssh_cmd.sshconnection.ssh", {"name": {}, "names": {}, "qname": {"runpod.cli.utils.ssh_cmd.SSHConnection.ssh": {}}, "_index": 862}], ["runpod.endpoint", {"name": {}, "names": {}, "qname": {"runpod.endpoint": {}}, "_index": 79}], ["runpod.endpoint.asyncio", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio": {}}, "_index": 81}], ["runpod.endpoint.asyncio.asyncio_runner", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner": {}}, "_index": 84}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint": {}}, "_index": 788}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.__init__", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.__init__": {}}, "_index": 789}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.endpoint_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_id": {}}, "_index": 790}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.endpoint_url", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url": {}}, "_index": 792}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.headers", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.headers": {}}, "_index": 793}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.health", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.health": {}}, "_index": 796}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.purge_queue", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.purge_queue": {}}, "_index": 797}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.run", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.run": {}}, "_index": 795}], ["runpod.endpoint.asyncio.asyncio_runner.endpoint.session", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Endpoint.session": {}}, "_index": 794}], ["runpod.endpoint.asyncio.asyncio_runner.job", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job": {}}, "_index": 769}], ["runpod.endpoint.asyncio.asyncio_runner.job.__init__", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.__init__": {}}, "_index": 770}], ["runpod.endpoint.asyncio.asyncio_runner.job._fetch_job", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job._fetch_job": {}}, "_index": 778}], ["runpod.endpoint.asyncio.asyncio_runner.job._wait_for_completion", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}}, "_index": 784}], ["runpod.endpoint.asyncio.asyncio_runner.job.cancel", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.cancel": {}}, "_index": 787}], ["runpod.endpoint.asyncio.asyncio_runner.job.endpoint_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_id": {}}, "_index": 771}], ["runpod.endpoint.asyncio.asyncio_runner.job.endpoint_url_base", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}}, "_index": 775}], ["runpod.endpoint.asyncio.asyncio_runner.job.headers", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.headers": {}}, "_index": 773}], ["runpod.endpoint.asyncio.asyncio_runner.job.job_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.job_id": {}}, "_index": 772}], ["runpod.endpoint.asyncio.asyncio_runner.job.job_output", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.job_output": {}}, "_index": 777}], ["runpod.endpoint.asyncio.asyncio_runner.job.job_status", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.job_status": {}}, "_index": 776}], ["runpod.endpoint.asyncio.asyncio_runner.job.output", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.output": {}}, "_index": 785}], ["runpod.endpoint.asyncio.asyncio_runner.job.session", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.session": {}}, "_index": 774}], ["runpod.endpoint.asyncio.asyncio_runner.job.status", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.status": {}}, "_index": 779}], ["runpod.endpoint.asyncio.asyncio_runner.job.stream", {"name": {}, "names": {}, "qname": {"runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}}, "_index": 786}], ["runpod.endpoint.helpers", {"name": {}, "names": {}, "qname": {"runpod.endpoint.helpers": {}}, "_index": 85}], ["runpod.endpoint.helpers.api_key_not_set_msg", {"name": {}, "names": {}, "qname": {"runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}}, "_index": 719}], ["runpod.endpoint.helpers.final_states", {"name": {}, "names": {}, "qname": {"runpod.endpoint.helpers.FINAL_STATES": {}}, "_index": 712}], ["runpod.endpoint.helpers.is_completed", {"name": {}, "names": {}, "qname": {"runpod.endpoint.helpers.is_completed": {}}, "_index": 722}], ["runpod.endpoint.helpers.unauthorized_msg", {"name": {}, "names": {}, "qname": {"runpod.endpoint.helpers.UNAUTHORIZED_MSG": {}}, "_index": 715}], ["runpod.endpoint.runner", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner": {}}, "_index": 86}], ["runpod.endpoint.runner.endpoint", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint": {}}, "_index": 756}], ["runpod.endpoint.runner.endpoint.__init__", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.__init__": {}}, "_index": 757}], ["runpod.endpoint.runner.endpoint.endpoint_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.endpoint_id": {}}, "_index": 758}], ["runpod.endpoint.runner.endpoint.health", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.health": {}}, "_index": 764}], ["runpod.endpoint.runner.endpoint.purge_queue", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.purge_queue": {}}, "_index": 768}], ["runpod.endpoint.runner.endpoint.rp_client", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.rp_client": {}}, "_index": 759}], ["runpod.endpoint.runner.endpoint.run", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.run": {}}, "_index": 760}], ["runpod.endpoint.runner.endpoint.run_sync", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Endpoint.run_sync": {}}, "_index": 762}], ["runpod.endpoint.runner.job", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job": {}}, "_index": 736}], ["runpod.endpoint.runner.job.__init__", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.__init__": {}}, "_index": 737}], ["runpod.endpoint.runner.job._fetch_job", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job._fetch_job": {}}, "_index": 750}], ["runpod.endpoint.runner.job.cancel", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.cancel": {}}, "_index": 755}], ["runpod.endpoint.runner.job.endpoint_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.endpoint_id": {}}, "_index": 739}], ["runpod.endpoint.runner.job.job_id", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.job_id": {}}, "_index": 741}], ["runpod.endpoint.runner.job.job_output", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.job_output": {}}, "_index": 747}], ["runpod.endpoint.runner.job.job_status", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.job_status": {}}, "_index": 745}], ["runpod.endpoint.runner.job.output", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.output": {}}, "_index": 752}], ["runpod.endpoint.runner.job.rp_client", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.rp_client": {}}, "_index": 743}], ["runpod.endpoint.runner.job.status", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.status": {}}, "_index": 751}], ["runpod.endpoint.runner.job.stream", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.Job.stream": {}}, "_index": 753}], ["runpod.endpoint.runner.runpodclient", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient": {}}, "_index": 724}], ["runpod.endpoint.runner.runpodclient.__init__", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.__init__": {}}, "_index": 725}], ["runpod.endpoint.runner.runpodclient._request", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient._request": {}}, "_index": 733}], ["runpod.endpoint.runner.runpodclient.endpoint_url_base", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}}, "_index": 731}], ["runpod.endpoint.runner.runpodclient.get", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.get": {}}, "_index": 735}], ["runpod.endpoint.runner.runpodclient.headers", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.headers": {}}, "_index": 728}], ["runpod.endpoint.runner.runpodclient.post", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.post": {}}, "_index": 734}], ["runpod.endpoint.runner.runpodclient.rp_session", {"name": {}, "names": {}, "qname": {"runpod.endpoint.runner.RunPodClient.rp_session": {}}, "_index": 727}], ["runpod.endpoint_url_base", {"name": {}, "names": {}, "qname": {"runpod.endpoint_url_base": {}}, "_index": 808}], ["runpod.error", {"name": {}, "names": {}, "qname": {"runpod.error": {}}, "_index": 88}], ["runpod.error.authenticationerror", {"name": {}, "names": {}, "qname": {"runpod.error.AuthenticationError": {}}, "_index": 619}], ["runpod.error.queryerror", {"name": {}, "names": {}, "qname": {"runpod.error.QueryError": {}}, "_index": 622}], ["runpod.error.queryerror.__init__", {"name": {}, "names": {}, "qname": {"runpod.error.QueryError.__init__": {}}, "_index": 623}], ["runpod.error.queryerror.query", {"name": {}, "names": {}, "qname": {"runpod.error.QueryError.query": {}}, "_index": 624}], ["runpod.error.runpoderror", {"name": {}, "names": {}, "qname": {"runpod.error.RunPodError": {}}, "_index": 613}], ["runpod.error.runpoderror.__init__", {"name": {}, "names": {}, "qname": {"runpod.error.RunPodError.__init__": {}}, "_index": 614}], ["runpod.error.runpoderror.__str__", {"name": {}, "names": {}, "qname": {"runpod.error.RunPodError.__str__": {}}, "_index": 616}], ["runpod.error.runpoderror.message", {"name": {}, "names": {}, "qname": {"runpod.error.RunPodError.message": {}}, "_index": 615}], ["runpod.profile", {"name": {}, "names": {}, "qname": {"runpod.profile": {}}, "_index": 801}], ["runpod.serverless", {"name": {}, "names": {}, "qname": {"runpod.serverless": {}}, "_index": 90}], ["runpod.serverless._get_realtime_concurrency", {"name": {}, "names": {}, "qname": {"runpod.serverless._get_realtime_concurrency": {}}, "_index": 607}], ["runpod.serverless._get_realtime_port", {"name": {}, "names": {}, "qname": {"runpod.serverless._get_realtime_port": {}}, "_index": 605}], ["runpod.serverless._set_config_args", {"name": {}, "names": {}, "qname": {"runpod.serverless._set_config_args": {}}, "_index": 602}], ["runpod.serverless._signal_handler", {"name": {}, "names": {}, "qname": {"runpod.serverless._signal_handler": {}}, "_index": 610}], ["runpod.serverless.core", {"name": {}, "names": {}, "qname": {"runpod.serverless.core": {}}, "_index": 92}], ["runpod.serverless.core._process_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.core._process_job": {}}, "_index": 325}], ["runpod.serverless.core.cgetjobresult", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.CGetJobResult": {}}, "_index": 272}], ["runpod.serverless.core.cgetjobresult.__str__", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.CGetJobResult.__str__": {}}, "_index": 276}], ["runpod.serverless.core.cgetjobresult._fields_", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.CGetJobResult._fields_": {}}, "_index": 275}], ["runpod.serverless.core.hook", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook": {}}, "_index": 278}], ["runpod.serverless.core.hook.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.__init__": {}}, "_index": 296}], ["runpod.serverless.core.hook.__new__", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.__new__": {}}, "_index": 295}], ["runpod.serverless.core.hook._finish_stream", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._finish_stream": {}}, "_index": 294}], ["runpod.serverless.core.hook._get_jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._get_jobs": {}}, "_index": 281}], ["runpod.serverless.core.hook._initialized", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._initialized": {}}, "_index": 307}], ["runpod.serverless.core.hook._instance", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._instance": {}}, "_index": 279}], ["runpod.serverless.core.hook._json_serialize_job_data", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._json_serialize_job_data": {}}, "_index": 312}], ["runpod.serverless.core.hook._post_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._post_output": {}}, "_index": 291}], ["runpod.serverless.core.hook._progress_update", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._progress_update": {}}, "_index": 284}], ["runpod.serverless.core.hook._stream_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook._stream_output": {}}, "_index": 288}], ["runpod.serverless.core.hook.finish_stream", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.finish_stream": {}}, "_index": 322}], ["runpod.serverless.core.hook.get_jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.get_jobs": {}}, "_index": 314}], ["runpod.serverless.core.hook.post_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.post_output": {}}, "_index": 320}], ["runpod.serverless.core.hook.progress_update", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.progress_update": {}}, "_index": 316}], ["runpod.serverless.core.hook.rust_crate_version", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.rust_crate_version": {}}, "_index": 304}], ["runpod.serverless.core.hook.rust_so_path", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.rust_so_path": {}}, "_index": 301}], ["runpod.serverless.core.hook.stream_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.Hook.stream_output": {}}, "_index": 318}], ["runpod.serverless.core.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.log": {}}, "_index": 268}], ["runpod.serverless.core.main", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.main": {}}, "_index": 328}], ["runpod.serverless.core.run", {"name": {}, "names": {}, "qname": {"runpod.serverless.core.run": {}}, "_index": 326}], ["runpod.serverless.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.log": {}}, "_index": 597}], ["runpod.serverless.modules", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules": {}}, "_index": 94}], ["runpod.serverless.modules.rp_fastapi", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi": {}}, "_index": 97}], ["runpod.serverless.modules.rp_fastapi._send_webhook", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "_index": 563}], ["runpod.serverless.modules.rp_fastapi.defaultrequest", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.DefaultRequest": {}}, "_index": 547}], ["runpod.serverless.modules.rp_fastapi.defaultrequest.input", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.DefaultRequest.input": {}}, "_index": 548}], ["runpod.serverless.modules.rp_fastapi.defaultrequest.webhook", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook": {}}, "_index": 549}], ["runpod.serverless.modules.rp_fastapi.description", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.DESCRIPTION": {}}, "_index": 524}], ["runpod.serverless.modules.rp_fastapi.heartbeat", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.heartbeat": {}}, "_index": 536}], ["runpod.serverless.modules.rp_fastapi.job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.Job": {}}, "_index": 537}], ["runpod.serverless.modules.rp_fastapi.job.id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.Job.id": {}}, "_index": 538}], ["runpod.serverless.modules.rp_fastapi.job.input", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.Job.input": {}}, "_index": 539}], ["runpod.serverless.modules.rp_fastapi.job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.job_list": {}}, "_index": 535}], ["runpod.serverless.modules.rp_fastapi.joboutput", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.JobOutput": {}}, "_index": 551}], ["runpod.serverless.modules.rp_fastapi.joboutput.error", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.JobOutput.error": {}}, "_index": 555}], ["runpod.serverless.modules.rp_fastapi.joboutput.id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.JobOutput.id": {}}, "_index": 552}], ["runpod.serverless.modules.rp_fastapi.joboutput.output", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.JobOutput.output": {}}, "_index": 554}], ["runpod.serverless.modules.rp_fastapi.joboutput.status", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.JobOutput.status": {}}, "_index": 553}], ["runpod.serverless.modules.rp_fastapi.run_description", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.RUN_DESCRIPTION": {}}, "_index": 526}], ["runpod.serverless.modules.rp_fastapi.runpod_endpoint_id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}}, "_index": 520}], ["runpod.serverless.modules.rp_fastapi.runsync_description", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION": {}}, "_index": 529}], ["runpod.serverless.modules.rp_fastapi.status_description", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION": {}}, "_index": 534}], ["runpod.serverless.modules.rp_fastapi.stream_description", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION": {}}, "_index": 531}], ["runpod.serverless.modules.rp_fastapi.streamoutput", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.StreamOutput": {}}, "_index": 557}], ["runpod.serverless.modules.rp_fastapi.streamoutput.error", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.StreamOutput.error": {}}, "_index": 561}], ["runpod.serverless.modules.rp_fastapi.streamoutput.id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.StreamOutput.id": {}}, "_index": 558}], ["runpod.serverless.modules.rp_fastapi.streamoutput.status", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.StreamOutput.status": {}}, "_index": 559}], ["runpod.serverless.modules.rp_fastapi.streamoutput.stream", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.StreamOutput.stream": {}}, "_index": 560}], ["runpod.serverless.modules.rp_fastapi.testjob", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.TestJob": {}}, "_index": 541}], ["runpod.serverless.modules.rp_fastapi.testjob.id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.TestJob.id": {}}, "_index": 542}], ["runpod.serverless.modules.rp_fastapi.testjob.input", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.TestJob.input": {}}, "_index": 543}], ["runpod.serverless.modules.rp_fastapi.testjob.webhook", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.TestJob.webhook": {}}, "_index": 544}], ["runpod.serverless.modules.rp_fastapi.title", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.TITLE": {}}, "_index": 522}], ["runpod.serverless.modules.rp_fastapi.workerapi", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI": {}}, "_index": 565}], ["runpod.serverless.modules.rp_fastapi.workerapi.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.__init__": {}}, "_index": 566}], ["runpod.serverless.modules.rp_fastapi.workerapi._realtime", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._realtime": {}}, "_index": 576}], ["runpod.serverless.modules.rp_fastapi.workerapi._sim_run", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}}, "_index": 579}], ["runpod.serverless.modules.rp_fastapi.workerapi._sim_runsync", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}}, "_index": 581}], ["runpod.serverless.modules.rp_fastapi.workerapi._sim_status", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}}, "_index": 585}], ["runpod.serverless.modules.rp_fastapi.workerapi._sim_stream", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}}, "_index": 583}], ["runpod.serverless.modules.rp_fastapi.workerapi.config", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.config": {}}, "_index": 567}], ["runpod.serverless.modules.rp_fastapi.workerapi.rp_app", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.rp_app": {}}, "_index": 570}], ["runpod.serverless.modules.rp_fastapi.workerapi.start_uvicorn", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}}, "_index": 573}], ["runpod.serverless.modules.rp_handler", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_handler": {}}, "_index": 100}], ["runpod.serverless.modules.rp_handler.is_generator", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_handler.is_generator": {}}, "_index": 337}], ["runpod.serverless.modules.rp_http", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http": {}}, "_index": 103}], ["runpod.serverless.modules.rp_http._handle_result", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http._handle_result": {}}, "_index": 413}], ["runpod.serverless.modules.rp_http._transmit", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http._transmit": {}}, "_index": 410}], ["runpod.serverless.modules.rp_http.job_done_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.JOB_DONE_URL": {}}, "_index": 401}], ["runpod.serverless.modules.rp_http.job_done_url_template", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}}, "_index": 399}], ["runpod.serverless.modules.rp_http.job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.job_list": {}}, "_index": 407}], ["runpod.serverless.modules.rp_http.job_stream_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}}, "_index": 405}], ["runpod.serverless.modules.rp_http.job_stream_url_template", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}}, "_index": 403}], ["runpod.serverless.modules.rp_http.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.log": {}}, "_index": 406}], ["runpod.serverless.modules.rp_http.send_result", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.send_result": {}}, "_index": 415}], ["runpod.serverless.modules.rp_http.stream_result", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_http.stream_result": {}}, "_index": 417}], ["runpod.serverless.modules.rp_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job": {}}, "_index": 106}], ["runpod.serverless.modules.rp_job._job_get_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job._job_get_url": {}}, "_index": 261}], ["runpod.serverless.modules.rp_job.get_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.get_job": {}}, "_index": 262}], ["runpod.serverless.modules.rp_job.job_get_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.JOB_GET_URL": {}}, "_index": 256}], ["runpod.serverless.modules.rp_job.job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.job_list": {}}, "_index": 259}], ["runpod.serverless.modules.rp_job.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.log": {}}, "_index": 257}], ["runpod.serverless.modules.rp_job.run_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.run_job": {}}, "_index": 264}], ["runpod.serverless.modules.rp_job.run_job_generator", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_job.run_job_generator": {}}, "_index": 267}], ["runpod.serverless.modules.rp_local", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_local": {}}, "_index": 109}], ["runpod.serverless.modules.rp_local.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_local.log": {}}, "_index": 333}], ["runpod.serverless.modules.rp_local.run_local", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_local.run_local": {}}, "_index": 335}], ["runpod.serverless.modules.rp_logger", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger": {}}, "_index": 112}], ["runpod.serverless.modules.rp_logger._validate_log_level", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger._validate_log_level": {}}, "_index": 171}], ["runpod.serverless.modules.rp_logger.log_levels", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.LOG_LEVELS": {}}, "_index": 167}], ["runpod.serverless.modules.rp_logger.max_message_length", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.MAX_MESSAGE_LENGTH": {}}, "_index": 163}], ["runpod.serverless.modules.rp_logger.runpodlogger", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger": {}}, "_index": 174}], ["runpod.serverless.modules.rp_logger.runpodlogger.__instance", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.__instance": {}}, "_index": 177}], ["runpod.serverless.modules.rp_logger.runpodlogger.__new__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.__new__": {}}, "_index": 181}], ["runpod.serverless.modules.rp_logger.runpodlogger.debug", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.debug": {}}, "_index": 189}], ["runpod.serverless.modules.rp_logger.runpodlogger.error", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.error": {}}, "_index": 193}], ["runpod.serverless.modules.rp_logger.runpodlogger.info", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.info": {}}, "_index": 190}], ["runpod.serverless.modules.rp_logger.runpodlogger.level", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.level": {}}, "_index": 178}], ["runpod.serverless.modules.rp_logger.runpodlogger.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.log": {}}, "_index": 185}], ["runpod.serverless.modules.rp_logger.runpodlogger.secret", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "_index": 187}], ["runpod.serverless.modules.rp_logger.runpodlogger.set_level", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}}, "_index": 184}], ["runpod.serverless.modules.rp_logger.runpodlogger.tip", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.tip": {}}, "_index": 195}], ["runpod.serverless.modules.rp_logger.runpodlogger.warn", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_logger.RunPodLogger.warn": {}}, "_index": 192}], ["runpod.serverless.modules.rp_ping", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping": {}}, "_index": 115}], ["runpod.serverless.modules.rp_ping.heartbeat", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat": {}}, "_index": 341}], ["runpod.serverless.modules.rp_ping.heartbeat.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat.__init__": {}}, "_index": 351}], ["runpod.serverless.modules.rp_ping.heartbeat._send_ping", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}}, "_index": 363}], ["runpod.serverless.modules.rp_ping.heartbeat._session", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat._session": {}}, "_index": 354}], ["runpod.serverless.modules.rp_ping.heartbeat._thread_started", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat._thread_started": {}}, "_index": 350}], ["runpod.serverless.modules.rp_ping.heartbeat.ping_interval", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat.PING_INTERVAL": {}}, "_index": 346}], ["runpod.serverless.modules.rp_ping.heartbeat.ping_loop", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat.ping_loop": {}}, "_index": 360}], ["runpod.serverless.modules.rp_ping.heartbeat.ping_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat.PING_URL": {}}, "_index": 343}], ["runpod.serverless.modules.rp_ping.heartbeat.start_ping", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}}, "_index": 357}], ["runpod.serverless.modules.rp_ping.jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.jobs": {}}, "_index": 339}], ["runpod.serverless.modules.rp_ping.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_ping.log": {}}, "_index": 338}], ["runpod.serverless.modules.rp_progress", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress": {}}, "_index": 118}], ["runpod.serverless.modules.rp_progress._async_progress_update", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress._async_progress_update": {}}, "_index": 592}], ["runpod.serverless.modules.rp_progress._create_session_async", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress._create_session_async": {}}, "_index": 590}], ["runpod.serverless.modules.rp_progress._thread_target", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress._thread_target": {}}, "_index": 595}], ["runpod.serverless.modules.rp_progress.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress.log": {}}, "_index": 586}], ["runpod.serverless.modules.rp_progress.progress_update", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_progress.progress_update": {}}, "_index": 596}], ["runpod.serverless.modules.rp_scale", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale": {}}, "_index": 121}], ["runpod.serverless.modules.rp_scale._default_concurrency_modifier", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale._default_concurrency_modifier": {}}, "_index": 370}], ["runpod.serverless.modules.rp_scale.job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.job_list": {}}, "_index": 365}], ["runpod.serverless.modules.rp_scale.jobscaler", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler": {}}, "_index": 373}], ["runpod.serverless.modules.rp_scale.jobscaler.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.__init__": {}}, "_index": 374}], ["runpod.serverless.modules.rp_scale.jobscaler._is_alive", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler._is_alive": {}}, "_index": 389}], ["runpod.serverless.modules.rp_scale.jobscaler.background_get_job_tasks", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}}, "_index": 380}], ["runpod.serverless.modules.rp_scale.jobscaler.concurrency_modifier", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.concurrency_modifier": {}}, "_index": 376}], ["runpod.serverless.modules.rp_scale.jobscaler.current_concurrency", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.current_concurrency": {}}, "_index": 386}], ["runpod.serverless.modules.rp_scale.jobscaler.get_jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.get_jobs": {}}, "_index": 395}], ["runpod.serverless.modules.rp_scale.jobscaler.is_alive", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.is_alive": {}}, "_index": 391}], ["runpod.serverless.modules.rp_scale.jobscaler.job_history", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.job_history": {}}, "_index": 383}], ["runpod.serverless.modules.rp_scale.jobscaler.kill_worker", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}}, "_index": 394}], ["runpod.serverless.modules.rp_scale.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_scale.log": {}}, "_index": 364}], ["runpod.serverless.modules.rp_tips", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_tips": {}}, "_index": 124}], ["runpod.serverless.modules.rp_tips.check_return_size", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_tips.check_return_size": {}}, "_index": 253}], ["runpod.serverless.modules.rp_tips.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.rp_tips.log": {}}, "_index": 248}], ["runpod.serverless.modules.worker_state", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state": {}}, "_index": 128}], ["runpod.serverless.modules.worker_state.get_auth_header", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.get_auth_header": {}}, "_index": 210}], ["runpod.serverless.modules.worker_state.is_local_test", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}}, "_index": 207}], ["runpod.serverless.modules.worker_state.job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job": {}}, "_index": 211}], ["runpod.serverless.modules.worker_state.job.__eq__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.__eq__": {}}, "_index": 222}], ["runpod.serverless.modules.worker_state.job.__hash__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.__hash__": {}}, "_index": 225}], ["runpod.serverless.modules.worker_state.job.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.__init__": {}}, "_index": 214}], ["runpod.serverless.modules.worker_state.job.__str__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.__str__": {}}, "_index": 228}], ["runpod.serverless.modules.worker_state.job.id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.id": {}}, "_index": 215}], ["runpod.serverless.modules.worker_state.job.input", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.input": {}}, "_index": 217}], ["runpod.serverless.modules.worker_state.job.webhook", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Job.webhook": {}}, "_index": 219}], ["runpod.serverless.modules.worker_state.jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs": {}}, "_index": 230}], ["runpod.serverless.modules.worker_state.jobs.__new__", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.__new__": {}}, "_index": 234}], ["runpod.serverless.modules.worker_state.jobs._instance", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs._instance": {}}, "_index": 232}], ["runpod.serverless.modules.worker_state.jobs.add_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.add_job": {}}, "_index": 237}], ["runpod.serverless.modules.worker_state.jobs.get_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.get_job": {}}, "_index": 242}], ["runpod.serverless.modules.worker_state.jobs.get_job_count", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.get_job_count": {}}, "_index": 247}], ["runpod.serverless.modules.worker_state.jobs.get_job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.get_job_list": {}}, "_index": 245}], ["runpod.serverless.modules.worker_state.jobs.jobs", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.jobs": {}}, "_index": 233}], ["runpod.serverless.modules.worker_state.jobs.remove_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.Jobs.remove_job": {}}, "_index": 240}], ["runpod.serverless.modules.worker_state.ref_count_zero", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}}, "_index": 200}], ["runpod.serverless.modules.worker_state.worker_id", {"name": {}, "names": {}, "qname": {"runpod.serverless.modules.worker_state.WORKER_ID": {}}, "_index": 203}], ["runpod.serverless.parser", {"name": {}, "names": {}, "qname": {"runpod.serverless.parser": {}}, "_index": 599}], ["runpod.serverless.start", {"name": {}, "names": {}, "qname": {"runpod.serverless.start": {}}, "_index": 611}], ["runpod.serverless.utils", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils": {}}, "_index": 129}], ["runpod.serverless.utils.rp_cleanup", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_cleanup": {}}, "_index": 132}], ["runpod.serverless.utils.rp_cleanup.clean", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_cleanup.clean": {}}, "_index": 975}], ["runpod.serverless.utils.rp_cuda", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_cuda": {}}, "_index": 135}], ["runpod.serverless.utils.rp_cuda.is_available", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_cuda.is_available": {}}, "_index": 978}], ["runpod.serverless.utils.rp_debugger", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger": {}}, "_index": 138}], ["runpod.serverless.utils.rp_debugger.checkpoints", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints": {}}, "_index": 466}], ["runpod.serverless.utils.rp_debugger.checkpoints.__instance", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.__instance": {}}, "_index": 467}], ["runpod.serverless.utils.rp_debugger.checkpoints.__new__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.__new__": {}}, "_index": 473}], ["runpod.serverless.utils.rp_debugger.checkpoints.add", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.add": {}}, "_index": 474}], ["runpod.serverless.utils.rp_debugger.checkpoints.checkpoints", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.checkpoints": {}}, "_index": 468}], ["runpod.serverless.utils.rp_debugger.checkpoints.clear", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.clear": {}}, "_index": 481}], ["runpod.serverless.utils.rp_debugger.checkpoints.get_checkpoints", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.get_checkpoints": {}}, "_index": 479}], ["runpod.serverless.utils.rp_debugger.checkpoints.name_lookup", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.name_lookup": {}}, "_index": 472}], ["runpod.serverless.utils.rp_debugger.checkpoints.start", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.start": {}}, "_index": 475}], ["runpod.serverless.utils.rp_debugger.checkpoints.stop", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.Checkpoints.stop": {}}, "_index": 477}], ["runpod.serverless.utils.rp_debugger.clear_debugger_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.clear_debugger_output": {}}, "_index": 507}], ["runpod.serverless.utils.rp_debugger.functiontimer", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.FunctionTimer": {}}, "_index": 497}], ["runpod.serverless.utils.rp_debugger.functiontimer.__call__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.FunctionTimer.__call__": {}}, "_index": 503}], ["runpod.serverless.utils.rp_debugger.functiontimer.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.FunctionTimer.__init__": {}}, "_index": 498}], ["runpod.serverless.utils.rp_debugger.functiontimer.checkpoints", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.FunctionTimer.checkpoints": {}}, "_index": 500}], ["runpod.serverless.utils.rp_debugger.functiontimer.function", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.FunctionTimer.function": {}}, "_index": 499}], ["runpod.serverless.utils.rp_debugger.get_debugger_output", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.get_debugger_output": {}}, "_index": 505}], ["runpod.serverless.utils.rp_debugger.linetimer", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer": {}}, "_index": 485}], ["runpod.serverless.utils.rp_debugger.linetimer.__enter__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer.__enter__": {}}, "_index": 491}], ["runpod.serverless.utils.rp_debugger.linetimer.__exit__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer.__exit__": {}}, "_index": 494}], ["runpod.serverless.utils.rp_debugger.linetimer.__init__", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer.__init__": {}}, "_index": 486}], ["runpod.serverless.utils.rp_debugger.linetimer.checkpoints", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer.checkpoints": {}}, "_index": 487}], ["runpod.serverless.utils.rp_debugger.linetimer.name", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.LineTimer.name": {}}, "_index": 488}], ["runpod.serverless.utils.rp_debugger.os_info", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.OS_INFO": {}}, "_index": 459}], ["runpod.serverless.utils.rp_debugger.processor", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.PROCESSOR": {}}, "_index": 461}], ["runpod.serverless.utils.rp_debugger.python_version", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_debugger.PYTHON_VERSION": {}}, "_index": 464}], ["runpod.serverless.utils.rp_download", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_download": {}}, "_index": 141}], ["runpod.serverless.utils.rp_download.calculate_chunk_size", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "_index": 423}], ["runpod.serverless.utils.rp_download.download_files_from_urls", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}}, "_index": 428}], ["runpod.serverless.utils.rp_download.file", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_download.file": {}}, "_index": 430}], ["runpod.serverless.utils.rp_download.headers", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_download.HEADERS": {}}, "_index": 419}], ["runpod.serverless.utils.rp_upload", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload": {}}, "_index": 144}], ["runpod.serverless.utils.rp_upload.bucket_upload", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.bucket_upload": {}}, "_index": 448}], ["runpod.serverless.utils.rp_upload.extract_region_from_url", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.extract_region_from_url": {}}, "_index": 437}], ["runpod.serverless.utils.rp_upload.files", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.files": {}}, "_index": 445}], ["runpod.serverless.utils.rp_upload.fmt", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.FMT": {}}, "_index": 433}], ["runpod.serverless.utils.rp_upload.get_boto_client", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.get_boto_client": {}}, "_index": 441}], ["runpod.serverless.utils.rp_upload.logger", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.logger": {}}, "_index": 431}], ["runpod.serverless.utils.rp_upload.upload_file_to_bucket", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}}, "_index": 451}], ["runpod.serverless.utils.rp_upload.upload_image", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.upload_image": {}}, "_index": 444}], ["runpod.serverless.utils.rp_upload.upload_in_memory_object", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "_index": 456}], ["runpod.serverless.utils.rp_validator", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator": {}}, "_index": 147}], ["runpod.serverless.utils.rp_validator._add_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator._add_error": {}}, "_index": 1001}], ["runpod.serverless.utils.rp_validator._check_for_unexpected_inputs", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}}, "_index": 1004}], ["runpod.serverless.utils.rp_validator._validate_and_transform_schema_items", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}}, "_index": 1009}], ["runpod.serverless.utils.rp_validator._validate_input_against_schema", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator._validate_input_against_schema": {}}, "_index": 1015}], ["runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "_index": 1012}], ["runpod.serverless.utils.rp_validator.constraints_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.CONSTRAINTS_ERROR": {}}, "_index": 996}], ["runpod.serverless.utils.rp_validator.invalid_type_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}}, "_index": 993}], ["runpod.serverless.utils.rp_validator.missing_default_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.MISSING_DEFAULT_ERROR": {}}, "_index": 987}], ["runpod.serverless.utils.rp_validator.missing_required_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.MISSING_REQUIRED_ERROR": {}}, "_index": 985}], ["runpod.serverless.utils.rp_validator.missing_type_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}}, "_index": 990}], ["runpod.serverless.utils.rp_validator.schema_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.SCHEMA_ERROR": {}}, "_index": 999}], ["runpod.serverless.utils.rp_validator.unexpected_input_error", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}}, "_index": 981}], ["runpod.serverless.utils.rp_validator.validate", {"name": {}, "names": {}, "qname": {"runpod.serverless.utils.rp_validator.validate": {}}, "_index": 1016}], ["runpod.serverless.worker", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker": {}}, "_index": 148}], ["runpod.serverless.worker._get_auth_header", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker._get_auth_header": {}}, "_index": 512}], ["runpod.serverless.worker._is_local", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker._is_local": {}}, "_index": 514}], ["runpod.serverless.worker._process_job", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker._process_job": {}}, "_index": 515}], ["runpod.serverless.worker.heartbeat", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker.heartbeat": {}}, "_index": 510}], ["runpod.serverless.worker.job_list", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker.job_list": {}}, "_index": 509}], ["runpod.serverless.worker.log", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker.log": {}}, "_index": 508}], ["runpod.serverless.worker.main", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker.main": {}}, "_index": 518}], ["runpod.serverless.worker.run_worker", {"name": {}, "names": {}, "qname": {"runpod.serverless.worker.run_worker": {}}, "_index": 517}], ["runpod.ssh_key_path", {"name": {}, "names": {}, "qname": {"runpod.SSH_KEY_PATH": {}}, "_index": 799}], ["runpod.user_agent", {"name": {}, "names": {}, "qname": {"runpod.user_agent": {}}, "_index": 151}], ["runpod.user_agent.construct_user_agent", {"name": {}, "names": {}, "qname": {"runpod.user_agent.construct_user_agent": {}}, "_index": 331}], ["runpod.user_agent.user_agent", {"name": {}, "names": {}, "qname": {"runpod.user_agent.USER_AGENT": {}}, "_index": 332}], ["runpod.version", {"name": {}, "names": {}, "qname": {"runpod.version": {}}, "_index": 153}], ["runpod.version.__version__", {"name": {}, "names": {}, "qname": {"runpod.version.__version__": {}}, "_index": 158}], ["runpod.version.get_version", {"name": {}, "names": {}, "qname": {"runpod.version.get_version": {}}, "_index": 156}], ["runpod_cli", {"name": {"runpod.cli.entry.runpod_cli": {}}, "names": {}, "qname": {}, "_index": 972}], ["runpod_endpoint_id", {"name": {"runpod.serverless.modules.rp_fastapi.RUNPOD_ENDPOINT_ID": {}}, "names": {}, "qname": {}, "_index": 519}], ["runpodclient", {"name": {"runpod.endpoint.runner.RunPodClient": {}}, "names": {}, "qname": {}, "_index": 723}], ["runpoderror", {"name": {"runpod.error.RunPodError": {}}, "names": {}, "qname": {}, "_index": 612}], ["runpodignore", {"name": {}, "names": {"runpod.cli.utils.rp_runpodignore": {}}, "qname": {}, "_index": 67}], ["runpodlogger", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger": {}}, "names": {}, "qname": {}, "_index": 172}], ["runsync", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}}, "qname": {}, "_index": 528}], ["runsync_description", {"name": {"runpod.serverless.modules.rp_fastapi.RUNSYNC_DESCRIPTION": {}}, "names": {}, "qname": {}, "_index": 527}], ["rust", {"name": {}, "names": {"runpod.serverless.core.Hook.rust_so_path": {}, "runpod.serverless.core.Hook.rust_crate_version": {}}, "qname": {}, "_index": 298}], ["rust_crate_version", {"name": {"runpod.serverless.core.Hook.rust_crate_version": {}}, "names": {}, "qname": {}, "_index": 302}], ["rust_so_path", {"name": {"runpod.serverless.core.Hook.rust_so_path": {}}, "names": {}, "qname": {}, "_index": 297}], ["scale", {"name": {}, "names": {"runpod.serverless.modules.rp_scale": {}}, "qname": {}, "_index": 120}], ["scaler", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler": {}}, "qname": {}, "_index": 372}], ["schema", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.SCHEMA_ERROR": {}, "runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}, "runpod.serverless.utils.rp_validator._validate_input_against_schema": {}}, "qname": {}, "_index": 998}], ["schema_error", {"name": {"runpod.serverless.utils.rp_validator.SCHEMA_ERROR": {}}, "names": {}, "qname": {}, "_index": 997}], ["secret", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.secret": {}}, "qname": {}, "_index": 186}], ["send", {"name": {}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat._send_ping": {}, "runpod.serverless.modules.rp_http.send_result": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "qname": {}, "_index": 362}], ["send_result", {"name": {"runpod.serverless.modules.rp_http.send_result": {}}, "names": {}, "qname": {}, "_index": 414}], ["serialize", {"name": {}, "names": {"runpod.serverless.core.Hook._json_serialize_job_data": {}}, "qname": {}, "_index": 310}], ["serverless", {"name": {"runpod.serverless": {}}, "names": {"runpod.serverless": {}}, "qname": {}, "_index": 89}], ["session", {"name": {"runpod.endpoint.asyncio.asyncio_runner.Job.session": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.session": {}}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat._session": {}, "runpod.serverless.modules.rp_progress._create_session_async": {}, "runpod.endpoint.runner.RunPodClient.rp_session": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.session": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.session": {}, "runpod.cli.groups.exec.helpers.get_session_pod": {}}, "qname": {}, "_index": 353}], ["set", {"name": {}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}, "runpod.serverless._set_config_args": {}, "runpod.cli.groups.config.functions.set_credentials": {}, "runpod.endpoint.helpers.API_KEY_NOT_SET_MSG": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}}, "qname": {}, "_index": 183}], ["set_credentials", {"name": {"runpod.cli.groups.config.functions.set_credentials": {}}, "names": {}, "qname": {}, "_index": 702}], ["set_level", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.set_level": {}}, "names": {}, "qname": {}, "_index": 182}], ["settings", {"name": {}, "names": {"runpod.api.ctl_commands.update_user_settings": {}}, "qname": {}, "_index": 671}], ["should", {"name": {}, "names": {"runpod.cli.utils.rp_runpodignore.should_ignore": {}}, "qname": {}, "_index": 849}], ["should_ignore", {"name": {"runpod.cli.utils.rp_runpodignore.should_ignore": {}}, "names": {}, "qname": {}, "_index": 848}], ["signal", {"name": {}, "names": {"runpod.serverless._signal_handler": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._signal_handler": {}}, "qname": {}, "_index": 609}], ["sim", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_run": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_runsync": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}}, "qname": {}, "_index": 578}], ["size", {"name": {}, "names": {"runpod.serverless.modules.rp_tips.check_return_size": {}, "runpod.serverless.utils.rp_download.calculate_chunk_size": {}}, "qname": {}, "_index": 252}], ["so", {"name": {}, "names": {"runpod.serverless.core.Hook.rust_so_path": {}}, "qname": {}, "_index": 299}], ["ssh", {"name": {"runpod.cli.groups.ssh": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.ssh": {}}, "names": {"runpod.cli.groups.ssh": {}, "runpod.cli.utils.ssh_cmd": {}, "runpod.SSH_KEY_PATH": {}, "runpod.cli.groups.ssh.functions.SSH_FILES": {}, "runpod.cli.groups.ssh.functions.get_ssh_key_fingerprint": {}, "runpod.cli.groups.ssh.functions.generate_ssh_key_pair": {}, "runpod.cli.groups.ssh.functions.add_ssh_key": {}, "runpod.cli.utils.rp_info.get_pod_ssh_ip_port": {}, "runpod.cli.utils.rp_userspace.find_ssh_key_file": {}, "runpod.cli.utils.ssh_cmd.SSHConnection.ssh": {}, "runpod.cli.utils.ssh_cmd.SSHConnection._get_ssh_options": {}, "runpod.cli.groups.ssh.commands.ssh_cli": {}, "runpod.cli.groups.exec.functions.python_over_ssh": {}}, "qname": {}, "_index": 56}], ["ssh_cli", {"name": {"runpod.cli.groups.ssh.commands.ssh_cli": {}}, "names": {}, "qname": {}, "_index": 945}], ["ssh_cmd", {"name": {"runpod.cli.utils.ssh_cmd": {}}, "names": {}, "qname": {}, "_index": 75}], ["ssh_files", {"name": {"runpod.cli.groups.ssh.functions.SSH_FILES": {}}, "names": {}, "qname": {}, "_index": 809}], ["ssh_key_path", {"name": {"runpod.SSH_KEY_PATH": {}}, "names": {}, "qname": {}, "_index": 798}], ["sshconnection", {"name": {"runpod.cli.utils.ssh_cmd.SSHConnection": {}}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection": {}}, "qname": {}, "_index": 851}], ["start", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.start": {}, "runpod.serverless.start": {}}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}, "runpod.serverless.utils.rp_debugger.Checkpoints.start": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}, "runpod.serverless.start": {}, "runpod.cli.utils.rp_sync.start_watcher": {}, "runpod.cli.groups.project.functions.start_project": {}, "runpod.cli.groups.project.commands.start_project_pod": {}}, "qname": {}, "_index": 356}], ["start_ping", {"name": {"runpod.serverless.modules.rp_ping.Heartbeat.start_ping": {}}, "names": {}, "qname": {}, "_index": 355}], ["start_project", {"name": {"runpod.cli.groups.project.functions.start_project": {}}, "names": {}, "qname": {}, "_index": 929}], ["start_project_pod", {"name": {"runpod.cli.groups.project.commands.start_project_pod": {}}, "names": {}, "qname": {}, "_index": 938}], ["start_uvicorn", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}}, "names": {}, "qname": {}, "_index": 571}], ["start_watcher", {"name": {"runpod.cli.utils.rp_sync.start_watcher": {}}, "names": {}, "qname": {}, "_index": 916}], ["started", {"name": {}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat._thread_started": {}}, "qname": {}, "_index": 349}], ["starter", {"name": {}, "names": {"runpod.cli.groups.project.functions.STARTER_TEMPLATES": {}}, "qname": {}, "_index": 922}], ["starter_templates", {"name": {"runpod.cli.groups.project.functions.STARTER_TEMPLATES": {}}, "names": {}, "qname": {}, "_index": 921}], ["state", {"name": {}, "names": {"runpod.serverless.modules.worker_state": {}}, "qname": {}, "_index": 127}], ["states", {"name": {}, "names": {"runpod.endpoint.helpers.FINAL_STATES": {}}, "qname": {}, "_index": 711}], ["status", {"name": {"runpod.serverless.modules.rp_fastapi.JobOutput.status": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.status": {}, "runpod.endpoint.runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}}, "names": {"runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.JobOutput.status": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.status": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_status": {}, "runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}, "runpod.endpoint.runner.Job.job_status": {}, "runpod.endpoint.runner.Job.status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.job_status": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.status": {}}, "qname": {}, "_index": 533}], ["status_description", {"name": {"runpod.serverless.modules.rp_fastapi.STATUS_DESCRIPTION": {}}, "names": {}, "qname": {}, "_index": 532}], ["stop", {"name": {"runpod.serverless.utils.rp_debugger.Checkpoints.stop": {}}, "names": {"runpod.serverless.utils.rp_debugger.Checkpoints.stop": {}, "runpod.api.mutations.pods.generate_pod_stop_mutation": {}, "runpod.api.ctl_commands.stop_pod": {}, "runpod.cli.STOP_EVENT": {}}, "qname": {}, "_index": 476}], ["stop_event", {"name": {"runpod.cli.STOP_EVENT": {}}, "names": {}, "qname": {}, "_index": 823}], ["stop_pod", {"name": {"runpod.api.ctl_commands.stop_pod": {}}, "names": {}, "qname": {}, "_index": 683}], ["str", {"name": {}, "names": {"runpod.serverless.modules.worker_state.Job.__str__": {}, "runpod.serverless.core.CGetJobResult.__str__": {}, "runpod.error.RunPodError.__str__": {}}, "qname": {}, "_index": 227}], ["stream", {"name": {"runpod.serverless.modules.rp_fastapi.StreamOutput.stream": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}}, "names": {"runpod.serverless.core.Hook._stream_output": {}, "runpod.serverless.core.Hook._finish_stream": {}, "runpod.serverless.core.Hook.stream_output": {}, "runpod.serverless.core.Hook.finish_stream": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}, "runpod.serverless.modules.rp_http.stream_result": {}, "runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput": {}, "runpod.serverless.modules.rp_fastapi.StreamOutput.stream": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI._sim_stream": {}, "runpod.endpoint.runner.Job.stream": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.stream": {}}, "qname": {}, "_index": 286}], ["stream_description", {"name": {"runpod.serverless.modules.rp_fastapi.STREAM_DESCRIPTION": {}}, "names": {}, "qname": {}, "_index": 530}], ["stream_output", {"name": {"runpod.serverless.core.Hook.stream_output": {}}, "names": {}, "qname": {}, "_index": 317}], ["stream_result", {"name": {"runpod.serverless.modules.rp_http.stream_result": {}}, "names": {}, "qname": {}, "_index": 416}], ["streamoutput", {"name": {"runpod.serverless.modules.rp_fastapi.StreamOutput": {}}, "names": {}, "qname": {}, "_index": 556}], ["sync", {"name": {}, "names": {"runpod.cli.utils.rp_sync": {}, "runpod.endpoint.runner.Endpoint.run_sync": {}, "runpod.cli.utils.rp_sync.sync_directory": {}}, "qname": {}, "_index": 70}], ["sync_directory", {"name": {"runpod.cli.utils.rp_sync.sync_directory": {}}, "names": {}, "qname": {}, "_index": 918}], ["target", {"name": {}, "names": {"runpod.serverless.modules.rp_progress._thread_target": {}}, "qname": {}, "_index": 594}], ["tasks", {"name": {}, "names": {"runpod.serverless.modules.rp_scale.JobScaler.background_get_job_tasks": {}}, "qname": {}, "_index": 379}], ["template", {"name": {}, "names": {"runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.mutations.templates.generate_pod_template": {}, "runpod.api.ctl_commands.create_template": {}, "runpod.api.ctl_commands.update_endpoint_template": {}, "runpod.cli.groups.project.helpers.copy_template_files": {}}, "qname": {}, "_index": 398}], ["templates", {"name": {"runpod.api.mutations.templates": {}}, "names": {"runpod.api.mutations.templates": {}, "runpod.cli.groups.project.functions.STARTER_TEMPLATES": {}}, "qname": {}, "_index": 20}], ["terminal", {"name": {}, "names": {"runpod.cli.utils.ssh_cmd.SSHConnection.launch_terminal": {}}, "qname": {}, "_index": 878}], ["terminate", {"name": {}, "names": {"runpod.api.mutations.pods.generate_pod_terminate_mutation": {}, "runpod.api.ctl_commands.terminate_pod": {}}, "qname": {}, "_index": 648}], ["terminate_pod", {"name": {"runpod.api.ctl_commands.terminate_pod": {}}, "names": {}, "qname": {}, "_index": 687}], ["test", {"name": {}, "names": {"runpod.serverless.modules.worker_state.IS_LOCAL_TEST": {}, "runpod.serverless.modules.rp_fastapi.TestJob": {}}, "qname": {}, "_index": 206}], ["testjob", {"name": {"runpod.serverless.modules.rp_fastapi.TestJob": {}}, "names": {}, "qname": {}, "_index": 540}], ["thread", {"name": {}, "names": {"runpod.serverless.modules.rp_ping.Heartbeat._thread_started": {}, "runpod.serverless.modules.rp_progress._thread_target": {}}, "qname": {}, "_index": 348}], ["timer", {"name": {}, "names": {"runpod.serverless.utils.rp_debugger.LineTimer": {}, "runpod.serverless.utils.rp_debugger.FunctionTimer": {}}, "qname": {}, "_index": 484}], ["tip", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.tip": {}}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.tip": {}}, "qname": {}, "_index": 194}], ["tips", {"name": {}, "names": {"runpod.serverless.modules.rp_tips": {}}, "qname": {}, "_index": 123}], ["title", {"name": {"runpod.serverless.modules.rp_fastapi.TITLE": {}}, "names": {"runpod.serverless.modules.rp_fastapi.TITLE": {}}, "qname": {}, "_index": 521}], ["to", {"name": {}, "names": {"runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.cli.groups.pod.commands.connect_to_pod": {}}, "qname": {}, "_index": 450}], ["transform", {"name": {}, "names": {"runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}}, "qname": {}, "_index": 1007}], ["transmit", {"name": {}, "names": {"runpod.serverless.modules.rp_http._transmit": {}}, "qname": {}, "_index": 409}], ["type", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.MISSING_TYPE_ERROR": {}, "runpod.serverless.utils.rp_validator.INVALID_TYPE_ERROR": {}}, "qname": {}, "_index": 989}], ["types", {"name": {}, "names": {"runpod.api.queries.gpus.QUERY_GPU_TYPES": {}, "runpod.cli.GPU_TYPES": {}}, "qname": {}, "_index": 658}], ["unauthorized", {"name": {}, "names": {"runpod.api.graphql.HTTP_STATUS_UNAUTHORIZED": {}, "runpod.endpoint.helpers.UNAUTHORIZED_MSG": {}}, "qname": {}, "_index": 626}], ["unauthorized_msg", {"name": {"runpod.endpoint.helpers.UNAUTHORIZED_MSG": {}}, "names": {}, "qname": {}, "_index": 713}], ["unexpected", {"name": {}, "names": {"runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}, "runpod.serverless.utils.rp_validator._check_for_unexpected_inputs": {}}, "qname": {}, "_index": 980}], ["unexpected_input_error", {"name": {"runpod.serverless.utils.rp_validator.UNEXPECTED_INPUT_ERROR": {}}, "names": {}, "qname": {}, "_index": 979}], ["update", {"name": {}, "names": {"runpod.serverless.core.Hook._progress_update": {}, "runpod.serverless.core.Hook.progress_update": {}, "runpod.serverless.modules.rp_progress._async_progress_update": {}, "runpod.serverless.modules.rp_progress.progress_update": {}, "runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}, "runpod.api.ctl_commands.update_user_settings": {}, "runpod.api.ctl_commands.update_endpoint_template": {}}, "qname": {}, "_index": 283}], ["update_endpoint_template", {"name": {"runpod.api.ctl_commands.update_endpoint_template": {}}, "names": {}, "qname": {}, "_index": 695}], ["update_endpoint_template_mutation", {"name": {"runpod.api.mutations.endpoints.update_endpoint_template_mutation": {}}, "names": {}, "qname": {}, "_index": 637}], ["update_user_settings", {"name": {"runpod.api.ctl_commands.update_user_settings": {}}, "names": {}, "qname": {}, "_index": 670}], ["upload", {"name": {}, "names": {"runpod.serverless.utils.rp_upload": {}, "runpod.serverless.utils.rp_upload.upload_image": {}, "runpod.serverless.utils.rp_upload.bucket_upload": {}, "runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}, "runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "qname": {}, "_index": 143}], ["upload_file_to_bucket", {"name": {"runpod.serverless.utils.rp_upload.upload_file_to_bucket": {}}, "names": {}, "qname": {}, "_index": 449}], ["upload_image", {"name": {"runpod.serverless.utils.rp_upload.upload_image": {}}, "names": {}, "qname": {}, "_index": 442}], ["upload_in_memory_object", {"name": {"runpod.serverless.utils.rp_upload.upload_in_memory_object": {}}, "names": {}, "qname": {}, "_index": 452}], ["url", {"name": {}, "names": {"runpod.serverless.modules.rp_job.JOB_GET_URL": {}, "runpod.serverless.modules.rp_job._job_get_url": {}, "runpod.serverless.modules.rp_ping.Heartbeat.PING_URL": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_DONE_URL": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL_TEMPLATE": {}, "runpod.serverless.modules.rp_http.JOB_STREAM_URL": {}, "runpod.serverless.utils.rp_upload.extract_region_from_url": {}, "runpod.endpoint.runner.RunPodClient.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Job.endpoint_url_base": {}, "runpod.endpoint.asyncio.asyncio_runner.Endpoint.endpoint_url": {}, "runpod.api_url_base": {}, "runpod.endpoint_url_base": {}}, "qname": {}, "_index": 255}], ["urls", {"name": {}, "names": {"runpod.serverless.utils.rp_download.download_files_from_urls": {}}, "qname": {}, "_index": 427}], ["user", {"name": {"runpod.api.mutations.user": {}, "runpod.api.queries.user": {}}, "names": {"runpod.api.mutations.user": {}, "runpod.api.queries.user": {}, "runpod.user_agent": {}, "runpod.user_agent.construct_user_agent": {}, "runpod.user_agent.USER_AGENT": {}, "runpod.api.mutations.user.generate_user_mutation": {}, "runpod.api.queries.user.QUERY_USER": {}, "runpod.api.ctl_commands.get_user": {}, "runpod.api.ctl_commands.update_user_settings": {}, "runpod.cli.groups.ssh.functions.get_user_pub_keys": {}}, "qname": {}, "_index": 22}], ["user_agent", {"name": {"runpod.user_agent": {}, "runpod.user_agent.USER_AGENT": {}}, "names": {}, "qname": {}, "_index": 149}], ["userspace", {"name": {}, "names": {"runpod.cli.utils.rp_userspace": {}}, "qname": {}, "_index": 73}], ["utils", {"name": {"runpod.cli.utils": {}, "runpod.serverless.utils": {}}, "names": {"runpod.cli.utils": {}, "runpod.serverless.utils": {}}, "qname": {}, "_index": 60}], ["uvicorn", {"name": {}, "names": {"runpod.serverless.modules.rp_fastapi.WorkerAPI.start_uvicorn": {}}, "qname": {}, "_index": 572}], ["validate", {"name": {"runpod.serverless.utils.rp_validator.validate": {}}, "names": {"runpod.serverless.modules.rp_logger._validate_log_level": {}, "runpod.cli.groups.project.helpers.validate_project_name": {}, "runpod.serverless.utils.rp_validator._validate_and_transform_schema_items": {}, "runpod.serverless.utils.rp_validator._validate_required_inputs_and_set_defaults": {}, "runpod.serverless.utils.rp_validator._validate_input_against_schema": {}, "runpod.serverless.utils.rp_validator.validate": {}}, "qname": {}, "_index": 169}], ["validate_project_name", {"name": {"runpod.cli.groups.project.helpers.validate_project_name": {}}, "names": {}, "qname": {}, "_index": 884}], ["validator", {"name": {}, "names": {"runpod.serverless.utils.rp_validator": {}}, "qname": {}, "_index": 146}], ["vars", {"name": {}, "names": {"runpod.cli.ENV_VARS": {}}, "qname": {}, "_index": 833}], ["version", {"name": {"runpod.version": {}}, "names": {"runpod.version": {}, "runpod.version.get_version": {}, "runpod.version.__version__": {}, "runpod.serverless.core.Hook.rust_crate_version": {}, "runpod.serverless.utils.rp_debugger.PYTHON_VERSION": {}}, "qname": {}, "_index": 152}], ["wait", {"name": {}, "names": {"runpod.endpoint.asyncio.asyncio_runner.Job._wait_for_completion": {}}, "qname": {}, "_index": 781}], ["warn", {"name": {"runpod.serverless.modules.rp_logger.RunPodLogger.warn": {}}, "names": {"runpod.serverless.modules.rp_logger.RunPodLogger.warn": {}}, "qname": {}, "_index": 191}], ["watcher", {"name": {}, "names": {"runpod.cli.utils.rp_sync.WatcherHandler": {}, "runpod.cli.utils.rp_sync.start_watcher": {}}, "qname": {}, "_index": 900}], ["watcherhandler", {"name": {"runpod.cli.utils.rp_sync.WatcherHandler": {}}, "names": {}, "qname": {}, "_index": 899}], ["webhook", {"name": {"runpod.serverless.modules.worker_state.Job.webhook": {}, "runpod.serverless.modules.rp_fastapi.TestJob.webhook": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook": {}}, "names": {"runpod.serverless.modules.worker_state.Job.webhook": {}, "runpod.serverless.modules.rp_fastapi.TestJob.webhook": {}, "runpod.serverless.modules.rp_fastapi.DefaultRequest.webhook": {}, "runpod.serverless.modules.rp_fastapi._send_webhook": {}}, "qname": {}, "_index": 218}], ["wizard", {"name": {}, "names": {"runpod.cli.groups.project.commands.new_project_wizard": {}, "runpod.cli.groups.config.commands.config_wizard": {}}, "qname": {}, "_index": 936}], ["worker", {"name": {"runpod.serverless.worker": {}}, "names": {"runpod.serverless.modules.worker_state": {}, "runpod.serverless.worker": {}, "runpod.serverless.modules.worker_state.WORKER_ID": {}, "runpod.serverless.modules.rp_scale.JobScaler.kill_worker": {}, "runpod.serverless.worker.run_worker": {}, "runpod.serverless.modules.rp_fastapi.WorkerAPI": {}}, "qname": {}, "_index": 126}], ["worker_id", {"name": {"runpod.serverless.modules.worker_state.WORKER_ID": {}}, "names": {}, "qname": {}, "_index": 201}], ["worker_state", {"name": {"runpod.serverless.modules.worker_state": {}}, "names": {}, "qname": {}, "_index": 125}], ["workerapi", {"name": {"runpod.serverless.modules.rp_fastapi.WorkerAPI": {}}, "names": {}, "qname": {}, "_index": 564}], ["zero", {"name": {}, "names": {"runpod.serverless.modules.worker_state.REF_COUNT_ZERO": {}}, "qname": {}, "_index": 199}]], "pipeline": []} \ No newline at end of file diff --git a/docs/api/searchlib.js b/docs/api/searchlib.js new file mode 100644 index 00000000..882d7715 --- /dev/null +++ b/docs/api/searchlib.js @@ -0,0 +1,370 @@ +// Wrapper around lunr index searching system for pydoctor API objects +// and function to format search results items into rederable HTML elements. +// This file is meant to be used as a library for the pydoctor search bar (search.js) as well as +// provide a hackable inferface to integrate API docs searching into other platforms, i.e. provide a +// "Search in API docs" option from Read The Docs search page. +// Depends on ajax.js, bundled with pydoctor. +// Other required ressources like lunr.js, searchindex.json and all-documents.html are passed as URL +// to functions. This makes the code reusable outside of pydoctor build directory. +// Implementation note: Searches are designed to be launched synchronously, if lunrSearch() is called sucessively (while already running), +// old promise will never resolves and the searhc worker will be restarted. + +// Hacky way to make the worker code inline with the rest of the source file handling the search. +// Worker message params are the following: +// - query: string +// - indexJSONData: dict +// - defaultFields: list of strings +// - autoWildcard: boolean +let _lunrWorkerCode = ` + +// The lunr.js code will be inserted here. + +onmessage = (message) => { + if (!message.data.query) { + throw new Error('No search query provided.'); + } + if (!message.data.indexJSONData) { + throw new Error('No index data provided.'); + } + if (!message.data.defaultFields) { + throw new Error('No default fields provided.'); + } + if (!message.data.hasOwnProperty('autoWildcard')){ + throw new Error('No value for auto wildcard provided.'); + } + // Create index + let index = lunr.Index.load(message.data.indexJSONData); + + // Declare query function building + function _queryfn(_query){ // _query is the Query object + // Edit the parsed query clauses that are applicable for all fields (default) in order + // to remove the field 'kind' from the clause since this it's only useful when specifically requested. + var parser = new lunr.QueryParser(message.data.query, _query) + parser.parse() + var hasTraillingWildcard = false; + _query.clauses.forEach(clause => { + if (clause.fields == _query.allFields){ + // we change the query fields when they are applicable to all fields + // to a list of predefined fields because we might include additional filters (like kind:) + // which should not be matched by default. + clause.fields = message.data.defaultFields; + } + // clause.wildcard is actually always NONE due to https://github.com/olivernn/lunr.js/issues/495 + // But this works... + if (clause.term.slice(-1) == '*'){ + // we want to avoid the auto wildcard system only if a trailling wildcard is already added + // not if a leading wildcard exists + hasTraillingWildcard = true + } + }); + // Auto wilcard feature, see issue https://github.com/twisted/pydoctor/issues/648 + var new_clauses = []; + if ((message.data.autoWildcard == true) && (hasTraillingWildcard == false)){ + _query.clauses.forEach(clause => { + // Setting clause.wildcard is useless. + // But this works... + let new_clause = {...clause} + new_clause.term = new_clause.term + '*' + clause.boost = 2 + new_clause.boost = 0 + new_clauses.push(new_clause) + }); + } + new_clauses.forEach(clause => { + _query.clauses.push(clause) + }); + console.log('Parsed query:') + console.dir(_query.clauses) + } + + // Launch the search + let results = index.query(_queryfn) + + // Post message with results + postMessage({'results':results}); +}; +`; + +// Adapted from https://stackoverflow.com/a/44137284 +// Override worker methods to detect termination and count message posting and restart() method. +// This allows some optimizations since the worker doesn't need to be restarted when it hasn't been used. +function _makeWorkerSmart(workerURL) { + // make normal worker + var worker = new Worker(workerURL); + // assume that it's running from the start + worker.terminated = false; + worker.postMessageCount = 0; + // count the number of times postMessage() is called + worker.postMessage = function() { + this.postMessageCount = this.postMessageCount + 1; + // normal post message + return Worker.prototype.postMessage.apply(this, arguments); + } + // sets terminated to true + worker.terminate = function() { + if (this.terminated===true){return;} + this.terminated = true; + // normal terminate + return Worker.prototype.terminate.apply(this, arguments); + } + // creates NEW WORKER with the same URL as itself, terminate worker first. + worker.restart = function() { + this.terminate(); + return _makeWorkerSmart(workerURL); + } + return worker; +} + +var _searchWorker = null + +/** + * The searchEventsEnv Document variable let's let caller register a event listener "searchStarted" for sending + * a signal when the search actually starts, could be up to 0.2 or 0.3 secs ater user finished typing. + */ +let searchEventsEnv = document.implementation.createHTMLDocument( + 'This is a document to popagate search related events, we avoid using "document" for performance reasons.'); + +// there is a difference in abortSearch() vs restartSearchWorker(). +// abortSearch() triggers a abortSearch event, which have a effect on searches that are not yet running in workers. +// whereas restartSearchWorker() which kills the worker if it's in use, but does not abort search that is not yet posted to the worker. +function abortSearch(){ + searchEventsEnv.dispatchEvent(new CustomEvent('abortSearch', {})); +} +// Kills and restarts search worker (if needed). +function restartSearchWorker() { + var w = _searchWorker; + if (w!=null){ + if (w.postMessageCount>0){ + // the worker has been used, it has to be restarted + // TODO: Actually it needs to be restarted only if it's running a search right now. + // Otherwise we can reuse the same worker, but that's not a very big deal in this context. + w = w.restart(); + } + // Else, the worker has never been used, it can be returned as is. + // This can happens when typing fast with a very large index JSON to load. + } + _searchWorker = w; +} + +function _getWorkerPromise(lunJsSourceCode){ // -> Promise of a fresh worker to run a query. + let promise = new Promise((resolve, reject) => { + // Do the search business, wrap the process inside an inline Worker. + // This is a hack such that the UI can refresh during the search. + if (_searchWorker===null){ + // Create only one blob and URL. + let lunrWorkerCode = lunJsSourceCode + _lunrWorkerCode; + let _workerBlob = new Blob([lunrWorkerCode], {type: 'text/javascript'}); + let _workerObjectURL = window.URL.createObjectURL(_workerBlob); + _searchWorker = _makeWorkerSmart(_workerObjectURL) + } + else{ + restartSearchWorker(); + } + resolve(_searchWorker); + }); + return promise +} + +/** + * Launch a search and get a promise of results. One search can be lauch at a time only. + * Old promise never resolves if calling lunrSearch() again while already running. + * @param query: Query string. + * @param indexURL: URL pointing to the Lunr search index, generated by pydoctor. + * @param defaultFields: List of strings: default fields to apply to query clauses when none is specified. ["name", "names", "qname"] for instance. + * @param lunrJsURL: URL pointing to a copy of lunr.js. + * @param searchDelay: Number of miliseconds to wait before actually launching the query. This is useful to set for "search as you type" kind of search box + * because it let a chance to users to continue typing without triggering useless searches (because previous search is aborted on launching a new one). + * @param autoWildcard: Whether to automatically append wildcards to all query clauses when no wildcard is already specified. boolean. + */ +function lunrSearch(query, indexURL, defaultFields, lunrJsURL, searchDelay, autoWildcard){ + // Abort ongoing search + abortSearch(); + + // Register abort procedure. + var _aborted = false; + searchEventsEnv.addEventListener('abortSearch', (ev) => { + _aborted = true; + searchEventsEnv.removeEventListener('abortSearch', this); + }); + + // Pref: + // Because this function can be called a lot of times in a very few moments, + // Actually launch search after a delay to let a chance to users to continue typing, + // which would trigger a search abort event, which would avoid wasting a worker + // for a search that is not wanted anymore. + return new Promise((_resolve, _reject) => { + setTimeout(() => { + _resolve( + _getIndexDataPromise(indexURL).then((lunrIndexData) => { + // Include lunr.js source inside the worker such that it has no dependencies. + return httpGetPromise(lunrJsURL).then((responseText) => { + // Do the search business, wrap the process inside an inline Worker. + // This is a hack such that the UI can refresh during the search. + return _getWorkerPromise(responseText).then((worker) => { + let promise = new Promise((resolve, reject) => { + worker.onmessage = (message) => { + if (!message.data.results){ + reject("No data received from worker"); + } + else{ + console.log("Got result from worker:") + console.dir(message.data.results) + resolve(message.data.results) + } + } + worker.onerror = function(error) { + reject(error); + }; + }); + let _msgData = { + 'query': query, + 'indexJSONData': lunrIndexData, + 'defaultFields': defaultFields, + 'autoWildcard': autoWildcard, + } + + if (!_aborted){ + console.log(`Posting query "${query}" to worker:`) + console.dir(_msgData) + worker.postMessage(_msgData); + searchEventsEnv.dispatchEvent( + new CustomEvent("searchStarted", {'query':query}) + ); + } + + return promise + }); + }); + }) + );}, searchDelay); + }); +} + +/** +* @param results: list of lunr.Index~Result. +* @param allDocumentsURL: URL pointing to all-documents.html, generated by pydoctor. +* @returns: Promise of a list of HTMLElement corresponding to the all-documents.html +* list elements matching your search results. +*/ +function fetchResultsData(results, allDocumentsURL){ + return _getAllDocumentsPromise(allDocumentsURL).then((allDocuments) => { + // Look for results data in parsed all-documents.html + return _asyncFor(results, (result) => { + // Find the result model row data. + var dobj = allDocuments.getElementById(result.ref); + if (!dobj){ + throw new Error("Cannot find document ID: " + result.ref); + } + // Return result data + return dobj; + }) + }) +} + +/** + * Transform list item as in all-documents.html into a formatted search result row. + */ +function buildSearchResult(dobj) { + + // Build one result item + var tr = document.createElement('tr'), + kindtd = document.createElement('td'), + contenttd = document.createElement('td'), + article = document.createElement('article'), + header = document.createElement('header'), + section = document.createElement('section'), + code = document.createElement('code'), + a = document.createElement('a'), + p = document.createElement('p'); + + p.innerHTML = dobj.querySelector('.summary').innerHTML; + a.setAttribute('href', dobj.querySelector('.url').innerHTML); + a.setAttribute('class', 'internal-link'); + a.innerHTML = dobj.querySelector('.fullName').innerHTML; + + let kind_value = dobj.querySelector('.kind').innerHTML; + let type_value = dobj.querySelector('.type').innerHTML; + + // Adding '()' on functions and methods + if (type_value.endsWith("Function")){ + a.innerHTML = a.innerHTML + '()'; + } + + kindtd.innerHTML = kind_value; + + // Putting everything together + tr.appendChild(kindtd); + tr.appendChild(contenttd); + contenttd.appendChild(article); + article.appendChild(header); + article.appendChild(section); + header.appendChild(code); + code.appendChild(a); + section.appendChild(p); + + // Set kind as the CSS class of the kind td tag + let ob_css_class = dobj.querySelector('.kind').innerHTML.toLowerCase().replace(' ', ''); + kindtd.setAttribute('class', ob_css_class); + + // Set private + if (dobj.querySelector('.privacy').innerHTML.includes('PRIVATE')){ + tr.setAttribute('class', 'private'); + } + + return tr; +} + + +// This gives the UI the opportunity to refresh while we're iterating over a large list. +function _asyncFor(iterable, callback) { // -> Promise of List of results returned by callback + const promise_global = new Promise((resolve_global, reject_global) => { + let promises = []; + iterable.forEach((element) => { + promises.push(new Promise((resolve, _reject) => { + setTimeout(() => { + try{ resolve(callback(element)); } + catch (error){ _reject(error); } + }, 0); + })); + }); + Promise.all(promises).then((results) =>{ + resolve_global(results); + }).catch((err) => { + reject_global(err); + }); + }); + return promise_global; + } + +// Cache indexes JSON data since it takes a little bit of time to load JSON into stuctured data +var _indexDataCache = {}; +function _getIndexDataPromise(indexURL) { // -> Promise of a structured data for the lunr Index. + if (!_indexDataCache[indexURL]){ + return httpGetPromise(indexURL).then((responseText) => { + _indexDataCache[indexURL] = JSON.parse(responseText) + return (_indexDataCache[indexURL]); + }); + } + else{ + return new Promise((_resolve, _reject) => { + _resolve(_indexDataCache[indexURL]); + }); + } +} + +// Cache Document object +var _allDocumentsCache = {}; +function _getAllDocumentsPromise(allDocumentsURL) { // -> Promise of the all-documents.html Document object. + if (!_allDocumentsCache[allDocumentsURL]){ + return httpGetPromise(allDocumentsURL).then((responseText) => { + let _parser = new self.DOMParser(); + _allDocumentsCache[allDocumentsURL] = _parser.parseFromString(responseText, "text/html"); + return (_allDocumentsCache[allDocumentsURL]); + }); + } + else{ + return new Promise((_resolve, _reject) => { + _resolve(_allDocumentsCache[allDocumentsURL]); + }); + } +} diff --git a/docs/api/sidebartoggle.js b/docs/api/sidebartoggle.js new file mode 100644 index 00000000..dbe0566f --- /dev/null +++ b/docs/api/sidebartoggle.js @@ -0,0 +1,69 @@ +// Cookie manipulation functions, from https://www.w3schools.com/js/js_cookies.asp + +function setCookie(cname, cvalue, exdays) { + var d = new Date(); + d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); + var expires = "expires="+d.toUTCString(); + document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; +} + +function getCookie(cname) { + var name = cname + "="; + var ca = document.cookie.split(';'); + for(var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') { + c = c.substring(1); + } + if (c.indexOf(name) == 0) { + return c.substring(name.length, c.length); + } + } + return ""; +} + +// Toogle sidebar collapse + +function initSideBarCollapse() { + var collapsed = getCookie("pydoctor-sidebar-collapsed"); + if (collapsed == "yes") { + document.body.classList.add("sidebar-collapsed"); + } + if (collapsed == ""){ + setCookie("pydoctor-sidebar-collapsed", "no", 365); + } + updateSideBarCollapse(); +} + +function toggleSideBarCollapse() { + if (document.body.classList.contains('sidebar-collapsed')){ + document.body.classList.remove('sidebar-collapsed'); + setCookie("pydoctor-sidebar-collapsed", "no", 365); + } + else { + document.body.classList.add("sidebar-collapsed"); + setCookie("pydoctor-sidebar-collapsed", "yes", 365); + } + + updateSideBarCollapse(); +} + +function updateSideBarCollapse() { + let link = document.querySelector('#collapseSideBar a') + // Since this script is called before the page finishes the parsing, + // link is undefined when it's first called. + if (link!=undefined){ + var collapsed = document.body.classList.contains('sidebar-collapsed'); + link.innerText = collapsed ? '»' : '«'; + } + // Fixes renderring issue with safari. + // https://stackoverflow.com/a/8840703 + var sidebarcontainer = document.querySelector('.sidebarcontainer'); + sidebarcontainer.style.display='none'; + sidebarcontainer.offsetHeight; // no need to store this anywhere, the reference is enough + // Set the sidebar display on load to avoid showing it for few miliseconds when loading.. + sidebarcontainer.style.display='flex'; + +} + +initSideBarCollapse(); diff --git a/docs/api/undoccedSummary.html b/docs/api/undoccedSummary.html new file mode 100644 index 00000000..cb0b14eb --- /dev/null +++ b/docs/api/undoccedSummary.html @@ -0,0 +1,167 @@ + + + + + + + + Summary of Undocumented Objects + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + \ No newline at end of file diff --git a/examples/api/create_endpoint.py b/examples/api/create_endpoint.py index 0440a19c..da99d2ed 100644 --- a/examples/api/create_endpoint.py +++ b/examples/api/create_endpoint.py @@ -8,9 +8,7 @@ try: new_template = runpod.create_template( - name="test", - image_name="runpod/base:0.4.4", - is_serverless=True + name="test", image_name="runpod/base:0.4.4", is_serverless=True ) print(new_template) @@ -21,7 +19,7 @@ gpu_ids="AMPERE_16", workers_min=0, workers_max=1, - flashboot=True + flashboot=True, ) print(new_endpoint) diff --git a/examples/api/create_template.py b/examples/api/create_template.py index 6630ccd2..6b534218 100644 --- a/examples/api/create_template.py +++ b/examples/api/create_template.py @@ -7,10 +7,7 @@ try: - new_template = runpod.create_template( - name="test", - image_name="runpod/base:0.1.0" - ) + new_template = runpod.create_template(name="test", image_name="runpod/base:0.1.0") print(new_template) diff --git a/examples/api/get_endpoints.py b/examples/api/get_endpoints.py index 1cb6490f..3d61ce94 100644 --- a/examples/api/get_endpoints.py +++ b/examples/api/get_endpoints.py @@ -1,6 +1,5 @@ """ Get all endpoints from the API """ - import runpod endpoints = runpod.get_endpoints() diff --git a/examples/endpoints/asyncio_job_request.py b/examples/endpoints/asyncio_job_request.py index 3e4b9163..841b16d6 100644 --- a/examples/endpoints/asyncio_job_request.py +++ b/examples/endpoints/asyncio_job_request.py @@ -8,15 +8,17 @@ import runpod from runpod import AsyncioEndpoint, AsyncioJob -asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) # For Windows Users +asyncio.set_event_loop_policy( + asyncio.WindowsSelectorEventLoopPolicy() +) # For Windows Users runpod.api_key = "YOUR_API_KEY" async def main(): - ''' + """ Function to run the example. - ''' + """ async with aiohttp.ClientSession() as session: # Invoke API payload = {} @@ -35,4 +37,5 @@ async def main(): # Print output print(output) + asyncio.run(main()) diff --git a/examples/endpoints/run.py b/examples/endpoints/run.py index 6bae4e5d..665888d9 100644 --- a/examples/endpoints/run.py +++ b/examples/endpoints/run.py @@ -1,6 +1,6 @@ -''' +""" Example of calling an endpoint using the RunPod Python Language Library. -''' +""" import runpod @@ -9,11 +9,9 @@ endpoint = runpod.Endpoint("sdxl") # Where "sdxl" is the endpoint ID -run_request = endpoint.run({ - "input": { - "prompt": "a photo of a horse the size of a Boeing 787" - } -}) +run_request = endpoint.run( + {"input": {"prompt": "a photo of a horse the size of a Boeing 787"}} +) # Check the status of the run request print(run_request.status()) diff --git a/examples/endpoints/run_sync.py b/examples/endpoints/run_sync.py index 9fe40794..9c807030 100644 --- a/examples/endpoints/run_sync.py +++ b/examples/endpoints/run_sync.py @@ -1,6 +1,6 @@ -''' +""" Example of calling an endpoint using the RunPod Python Language Library. -''' +""" import runpod @@ -12,12 +12,8 @@ try: # Run the endpoint synchronously, blocking until the endpoint run is complete. run_request = endpoint.run_sync( - { - "input": { - "prompt": "a photo of a horse the size of a Boeing 787" - } - }, - timeout=60 # Seconds + {"input": {"prompt": "a photo of a horse the size of a Boeing 787"}}, + timeout=60, # Seconds ) print(run_request) diff --git a/examples/endpoints/streaming.py b/examples/endpoints/streaming.py index 48ca489b..363727e0 100644 --- a/examples/endpoints/streaming.py +++ b/examples/endpoints/streaming.py @@ -7,12 +7,14 @@ endpoint = runpod.Endpoint("gwp4kx5yd3nur1") -run_request = endpoint.run({ - "input": { - "mock_return": ["a", "b", "c", "d", "e", "f", "g"], - "mock_delay": 1, +run_request = endpoint.run( + { + "input": { + "mock_return": ["a", "b", "c", "d", "e", "f", "g"], + "mock_delay": 1, + } } -}) +) for output in run_request.stream(): print(output) diff --git a/examples/graphql_wrapper.py b/examples/graphql_wrapper.py index 9907c221..ea01d0fb 100644 --- a/examples/graphql_wrapper.py +++ b/examples/graphql_wrapper.py @@ -1,6 +1,6 @@ -'''' +"""' GraphQL wrapper for the RunPod API -''' +""" import time import runpod diff --git a/examples/serverless/concurrent_handler.py b/examples/serverless/concurrent_handler.py index 056b2f17..59e43763 100644 --- a/examples/serverless/concurrent_handler.py +++ b/examples/serverless/concurrent_handler.py @@ -5,17 +5,17 @@ # ---------------------------------- Handler --------------------------------- # async def async_generator_handler(job): - ''' + """ Async generator type handler. - ''' + """ return job # --------------------------- Concurrency Modifier --------------------------- # def concurrency_modifier(current_concurrency=1): - ''' + """ Concurrency modifier. - ''' + """ desired_concurrency = current_concurrency # Do some logic to determine the desired concurrency. @@ -23,7 +23,6 @@ def concurrency_modifier(current_concurrency=1): return desired_concurrency -runpod.serverless.start({ - "handler": async_generator_handler, - "concurrency_modifier": concurrency_modifier -}) +runpod.serverless.start( + {"handler": async_generator_handler, "concurrency_modifier": concurrency_modifier} +) diff --git a/examples/serverless/logger.py b/examples/serverless/logger.py index 67e74967..d97738b2 100644 --- a/examples/serverless/logger.py +++ b/examples/serverless/logger.py @@ -1,15 +1,15 @@ -""" Example of using the RunPodLogger class. """"" +""" Example of using the RunPodLogger class. """ "" import runpod -JOB_ID = '1234567890' +JOB_ID = "1234567890" log = runpod.RunPodLogger() -log.debug('A debug message') -log.info('An info message') -log.warn('A warning message') -log.error('An error message') +log.debug("A debug message") +log.info("An info message") +log.warn("A warning message") +log.error("An error message") # Output: # DEBUG | A debug message @@ -18,10 +18,10 @@ # ERROR | An error message -log.debug('A debug message', request_id=JOB_ID) -log.info('An info message', request_id=JOB_ID) -log.warn('A warning message', request_id=JOB_ID) -log.error('An error message', request_id=JOB_ID) +log.debug("A debug message", request_id=JOB_ID) +log.info("An info message", request_id=JOB_ID) +log.warn("A warning message", request_id=JOB_ID) +log.error("An error message", request_id=JOB_ID) # Output: # {"requestId": "1234567890", "message": "A debug message", "level": "DEBUG"} diff --git a/examples/serverless/simple_handler.py b/examples/serverless/simple_handler.py index cc1c72fc..bad20381 100644 --- a/examples/serverless/simple_handler.py +++ b/examples/serverless/simple_handler.py @@ -8,7 +8,7 @@ def handler(job): - """ Simple handler """ + """Simple handler""" job_input = job["input"] return f"Hello {job_input['name']}!" diff --git a/runpod/api/__init__.py b/runpod/api/__init__.py index 68d99883..90bf6dc7 100644 --- a/runpod/api/__init__.py +++ b/runpod/api/__init__.py @@ -1 +1 @@ -''' Allows api_wrapper to be imported as a module.''' +""" Allows api_wrapper to be imported as a module.""" diff --git a/runpod/api/ctl_commands.py b/runpod/api/ctl_commands.py index 18869c2d..1e8da684 100644 --- a/runpod/api/ctl_commands.py +++ b/runpod/api/ctl_commands.py @@ -1,6 +1,7 @@ """ RunPod | API Wrapper | CTL Commands """ + # pylint: disable=too-many-arguments,too-many-locals from typing import Optional diff --git a/runpod/api/graphql.py b/runpod/api/graphql.py index ad29aa2a..001054d8 100644 --- a/runpod/api/graphql.py +++ b/runpod/api/graphql.py @@ -14,10 +14,11 @@ def run_graphql_query(query: str) -> Dict[str, Any]: - ''' + """ Run a GraphQL query - ''' + """ from runpod import api_key # pylint: disable=import-outside-toplevel, cyclic-import + url = f"https://api.runpod.io/graphql?api_key={api_key}" headers = { @@ -29,12 +30,11 @@ def run_graphql_query(query: str) -> Dict[str, Any]: response = requests.post(url, headers=headers, data=data, timeout=30) if response.status_code == HTTP_STATUS_UNAUTHORIZED: - raise error.AuthenticationError("Unauthorized request, please check your API key.") + raise error.AuthenticationError( + "Unauthorized request, please check your API key." + ) if "errors" in response.json(): - raise error.QueryError( - response.json()["errors"][0]["message"], - query - ) + raise error.QueryError(response.json()["errors"][0]["message"], query) return response.json() diff --git a/runpod/api/mutations/endpoints.py b/runpod/api/mutations/endpoints.py index 8848bd63..61571caf 100644 --- a/runpod/api/mutations/endpoints.py +++ b/runpod/api/mutations/endpoints.py @@ -4,12 +4,19 @@ def generate_endpoint_mutation( - name: str, template_id: str, gpu_ids: str = "AMPERE_16", - network_volume_id: str = None, locations: str = None, - idle_timeout: int = 5, scaler_type: str = "QUEUE_DELAY", scaler_value: int = 4, - workers_min: int = 0, workers_max: int = 3, flashboot=False + name: str, + template_id: str, + gpu_ids: str = "AMPERE_16", + network_volume_id: str = None, + locations: str = None, + idle_timeout: int = 5, + scaler_type: str = "QUEUE_DELAY", + scaler_value: int = 4, + workers_min: int = 0, + workers_max: int = 3, + flashboot=False, ): - """ Generate a string for a GraphQL mutation to create a new endpoint. """ + """Generate a string for a GraphQL mutation to create a new endpoint.""" input_fields = [] # ------------------------------ Required Fields ----------------------------- # @@ -31,11 +38,11 @@ def generate_endpoint_mutation( else: input_fields.append('locations: ""') - input_fields.append(f'idleTimeout: {idle_timeout}') + input_fields.append(f"idleTimeout: {idle_timeout}") input_fields.append(f'scalerType: "{scaler_type}"') - input_fields.append(f'scalerValue: {scaler_value}') - input_fields.append(f'workersMin: {workers_min}') - input_fields.append(f'workersMax: {workers_max}') + input_fields.append(f"scalerValue: {scaler_value}") + input_fields.append(f"workersMin: {workers_min}") + input_fields.append(f"workersMax: {workers_max}") # Format the input fields into a string input_fields_string = ", ".join(input_fields) @@ -63,10 +70,8 @@ def generate_endpoint_mutation( """ -def update_endpoint_template_mutation( - endpoint_id: str, template_id: str -): - """ Generate a string for a GraphQL mutation to update an existing endpoint's template. """ +def update_endpoint_template_mutation(endpoint_id: str, template_id: str): + """Generate a string for a GraphQL mutation to update an existing endpoint's template.""" input_fields = [] # ------------------------------ Required Fields ----------------------------- # diff --git a/runpod/api/mutations/pods.py b/runpod/api/mutations/pods.py index a8a565d7..2f6d466e 100644 --- a/runpod/api/mutations/pods.py +++ b/runpod/api/mutations/pods.py @@ -1,22 +1,37 @@ """ RunPod | API Wrapper | Mutations | Pods """ + # pylint: disable=too-many-arguments, too-many-locals, too-many-branches from typing import Optional, List def generate_pod_deployment_mutation( - name: str, image_name: str, gpu_type_id: str, - cloud_type: str = "ALL", support_public_ip: bool = True, start_ssh: bool = True, - data_center_id=None, country_code=None, - gpu_count=None, volume_in_gb=None, container_disk_in_gb=None, min_vcpu_count=None, - min_memory_in_gb=None, docker_args=None, ports=None, volume_mount_path=None, - env: dict = None, template_id=None, network_volume_id=None, - allowed_cuda_versions: Optional[List[str]] = None): - ''' + name: str, + image_name: str, + gpu_type_id: str, + cloud_type: str = "ALL", + support_public_ip: bool = True, + start_ssh: bool = True, + data_center_id=None, + country_code=None, + gpu_count=None, + volume_in_gb=None, + container_disk_in_gb=None, + min_vcpu_count=None, + min_memory_in_gb=None, + docker_args=None, + ports=None, + volume_mount_path=None, + env: dict = None, + template_id=None, + network_volume_id=None, + allowed_cuda_versions: Optional[List[str]] = None, +): + """ Generates a mutation to deploy a pod on demand. - ''' + """ input_fields = [] # ------------------------------ Required Fields ----------------------------- # @@ -25,15 +40,15 @@ def generate_pod_deployment_mutation( input_fields.append(f'gpuTypeId: "{gpu_type_id}"') # ------------------------------ Default Fields ------------------------------ # - input_fields.append(f'cloudType: {cloud_type}') + input_fields.append(f"cloudType: {cloud_type}") if start_ssh: - input_fields.append('startSsh: true') + input_fields.append("startSsh: true") if support_public_ip: - input_fields.append('supportPublicIp: true') + input_fields.append("supportPublicIp: true") else: - input_fields.append('supportPublicIp: false') + input_fields.append("supportPublicIp: false") # ------------------------------ Optional Fields ----------------------------- # if data_center_id is not None: @@ -59,7 +74,8 @@ def generate_pod_deployment_mutation( input_fields.append(f'volumeMountPath: "{volume_mount_path}"') if env is not None: env_string = ", ".join( - [f'{{ key: "{key}", value: "{value}" }}' for key, value in env.items()]) + [f'{{ key: "{key}", value: "{value}" }}' for key, value in env.items()] + ) input_fields.append(f"env: [{env_string}]") if template_id is not None: input_fields.append(f'templateId: "{template_id}"') @@ -69,8 +85,9 @@ def generate_pod_deployment_mutation( if allowed_cuda_versions is not None: allowed_cuda_versions_string = ", ".join( - [f'"{version}"' for version in allowed_cuda_versions]) - input_fields.append(f'allowedCudaVersions: [{allowed_cuda_versions_string}]') + [f'"{version}"' for version in allowed_cuda_versions] + ) + input_fields.append(f"allowedCudaVersions: [{allowed_cuda_versions_string}]") # Format input fields input_string = ", ".join(input_fields) @@ -96,9 +113,9 @@ def generate_pod_deployment_mutation( def generate_pod_stop_mutation(pod_id: str) -> str: - ''' + """ Generates a mutation to stop a pod. - ''' + """ return f""" mutation {{ podStop(input: {{ podId: "{pod_id}" }}) {{ @@ -110,9 +127,9 @@ def generate_pod_stop_mutation(pod_id: str) -> str: def generate_pod_resume_mutation(pod_id: str, gpu_count: int) -> str: - ''' + """ Generates a mutation to resume a pod. - ''' + """ return f""" mutation {{ podResume(input: {{ podId: "{pod_id}", gpuCount: {gpu_count} }}) {{ @@ -130,9 +147,9 @@ def generate_pod_resume_mutation(pod_id: str, gpu_count: int) -> str: def generate_pod_terminate_mutation(pod_id: str) -> str: - ''' + """ Generates a mutation to terminate a pod. - ''' + """ return f""" mutation {{ podTerminate(input: {{ podId: "{pod_id}" }}) diff --git a/runpod/api/mutations/user.py b/runpod/api/mutations/user.py index 78314c9d..c4947f83 100644 --- a/runpod/api/mutations/user.py +++ b/runpod/api/mutations/user.py @@ -1,14 +1,15 @@ -''' +""" RunPod | API | Mutations | User -''' +""" + def generate_user_mutation(pubkey): - '''' + """' Generates a mutation to edit a user. - ''' + """ input_fields = [] - escaped_pubkey = pubkey.replace('\n', '\\n') + escaped_pubkey = pubkey.replace("\n", "\\n") input_fields.append(f'pubKey: "{escaped_pubkey}"') # Format input fields diff --git a/runpod/api/queries/__init__.py b/runpod/api/queries/__init__.py index 2c4d319c..c7c6306a 100644 --- a/runpod/api/queries/__init__.py +++ b/runpod/api/queries/__init__.py @@ -1 +1 @@ -''' Allows queries to be imported as a module.''' +""" Allows queries to be imported as a module.""" diff --git a/runpod/api/queries/gpus.py b/runpod/api/queries/gpus.py index b731d070..6f1b9ba7 100644 --- a/runpod/api/queries/gpus.py +++ b/runpod/api/queries/gpus.py @@ -14,9 +14,9 @@ def generate_gpu_query(gpu_id, gpu_count=1): - ''' + """ Generate a query for a specific GPU type - ''' + """ return f""" query GpuTypes {{ diff --git a/runpod/api/queries/pods.py b/runpod/api/queries/pods.py index b3b13400..c70abe37 100644 --- a/runpod/api/queries/pods.py +++ b/runpod/api/queries/pods.py @@ -43,10 +43,11 @@ } """ + def generate_pod_query(pod_id): - ''' + """ Generate a query for a specific GPU type - ''' + """ return f""" query pod {{ diff --git a/runpod/api/queries/user.py b/runpod/api/queries/user.py index a377441a..5bafe3c9 100644 --- a/runpod/api/queries/user.py +++ b/runpod/api/queries/user.py @@ -1,8 +1,8 @@ -''' +""" RunPod | API | Queries | User Query for user information. -''' +""" QUERY_USER = """ query myself { diff --git a/runpod/cli/__init__.py b/runpod/cli/__init__.py index 36080e7e..a817ef1f 100644 --- a/runpod/cli/__init__.py +++ b/runpod/cli/__init__.py @@ -1,4 +1,4 @@ -''' Allows the CLI to be imported as a module. ''' +""" Allows the CLI to be imported as a module. """ import threading @@ -8,13 +8,16 @@ # --------------------------- runpod.toml Defaults --------------------------- # -BASE_DOCKER_IMAGE = 'runpod/base:0.4.3-cuda{cuda_version}' +BASE_DOCKER_IMAGE = "runpod/base:0.4.3-cuda{cuda_version}" GPU_TYPES = [ - "NVIDIA RTX A4000", "NVIDIA RTX A4500", "NVIDIA RTX A5000", - "NVIDIA GeForce RTX 3090", "NVIDIA RTX A6000" + "NVIDIA RTX A4000", + "NVIDIA RTX A4500", + "NVIDIA RTX A5000", + "NVIDIA GeForce RTX 3090", + "NVIDIA RTX A6000", ] ENV_VARS = { "POD_INACTIVITY_TIMEOUT": "120", "RUNPOD_DEBUG_LEVEL": "debug", - "UVICORN_LOG_LEVEL": "warning" + "UVICORN_LOG_LEVEL": "warning", } diff --git a/runpod/cli/entry.py b/runpod/cli/entry.py index d9230430..ecdb25ac 100644 --- a/runpod/cli/entry.py +++ b/runpod/cli/entry.py @@ -1,8 +1,9 @@ -''' +""" RunPod | CLI | Entry The entry point for the CLI. -''' +""" + import click from .groups.project.commands import project_cli @@ -12,13 +13,15 @@ from .groups.pod.commands import pod_cli from .groups.exec.commands import exec_cli + @click.group() def runpod_cli(): - '''A collection of CLI functions for RunPod.''' + """A collection of CLI functions for RunPod.""" + -runpod_cli.add_command(config_wizard) # runpod config +runpod_cli.add_command(config_wizard) # runpod config -runpod_cli.add_command(ssh_cli) # runpod ssh -runpod_cli.add_command(pod_cli) # runpod pod -runpod_cli.add_command(exec_cli) # runpod exec -runpod_cli.add_command(project_cli) # runpod project +runpod_cli.add_command(ssh_cli) # runpod ssh +runpod_cli.add_command(pod_cli) # runpod pod +runpod_cli.add_command(exec_cli) # runpod exec +runpod_cli.add_command(project_cli) # runpod project diff --git a/runpod/cli/groups/__init__.py b/runpod/cli/groups/__init__.py index b2cfa0d5..6b15b2f3 100644 --- a/runpod/cli/groups/__init__.py +++ b/runpod/cli/groups/__init__.py @@ -1 +1 @@ -''' Allow CLI groups to be imported from the runpod.cli module. ''' +""" Allow CLI groups to be imported from the runpod.cli module. """ diff --git a/runpod/cli/groups/config/__init__.py b/runpod/cli/groups/config/__init__.py index b895893b..d9af3760 100644 --- a/runpod/cli/groups/config/__init__.py +++ b/runpod/cli/groups/config/__init__.py @@ -1 +1 @@ -''' Config related CLI functions. ''' +""" Config related CLI functions. """ diff --git a/runpod/cli/groups/config/commands.py b/runpod/cli/groups/config/commands.py index 8b142745..fa256e29 100644 --- a/runpod/cli/groups/config/commands.py +++ b/runpod/cli/groups/config/commands.py @@ -1,37 +1,44 @@ -''' +""" Commands for the config command group -''' +""" + import sys import click from .functions import set_credentials, check_credentials -@click.command('config', help="Configures the RunPod CLI with the user's API key.") -@click.argument('api-key', required=False, default=None) -@click.option('--profile', default='default', help='The profile to set the credentials for.') -@click.option('--check', is_flag=True, help='Check if credentials are already set.') + +@click.command("config", help="Configures the RunPod CLI with the user's API key.") +@click.argument("api-key", required=False, default=None) +@click.option( + "--profile", default="default", help="The profile to set the credentials for." +) +@click.option("--check", is_flag=True, help="Check if credentials are already set.") def config_wizard(api_key, profile, check): - """ Starts the configuration wizard to set up the RunPod CLI. + """Starts the configuration wizard to set up the RunPod CLI. If credentials are already set, prompts the user to overwrite them. """ valid, error = check_credentials(profile) if check and valid: - click.echo('Credentials already set for profile: ' + profile) + click.echo("Credentials already set for profile: " + profile) sys.exit(0) elif check and not valid: click.echo(error) sys.exit(1) if valid: - click.confirm(f'Credentials already set for profile: {profile}. Overwrite?', abort=True) + click.confirm( + f"Credentials already set for profile: {profile}. Overwrite?", abort=True + ) if api_key is None: - click.echo('Please enter your RunPod API Key.') - click.echo('You can find it at https://www.runpod.io/console/user/settings') - api_key = click.prompt(' > RunPod API Key', hide_input=False, confirmation_prompt=False) - + click.echo("Please enter your RunPod API Key.") + click.echo("You can find it at https://www.runpod.io/console/user/settings") + api_key = click.prompt( + " > RunPod API Key", hide_input=False, confirmation_prompt=False + ) set_credentials(api_key, profile, overwrite=True) - click.echo(f'Credentials set for profile: {profile} in ~/.runpod/config.toml') + click.echo(f"Credentials set for profile: {profile} in ~/.runpod/config.toml") diff --git a/runpod/cli/groups/config/functions.py b/runpod/cli/groups/config/functions.py index 68a4dcd4..ba6adffe 100644 --- a/runpod/cli/groups/config/functions.py +++ b/runpod/cli/groups/config/functions.py @@ -1,19 +1,20 @@ -''' +""" runpod | cli | config.py A collection of functions to set and validate configurations. Configurations are TOML files located under ~/.runpod/ -''' +""" + import os from pathlib import Path import tomli as toml -CREDENTIAL_FILE = os.path.expanduser('~/.runpod/config.toml') +CREDENTIAL_FILE = os.path.expanduser("~/.runpod/config.toml") -def set_credentials(api_key: str, profile:str="default", overwrite=False) -> None: - ''' +def set_credentials(api_key: str, profile: str = "default", overwrite=False) -> None: + """ Sets the user's credentials in ~/.runpod/config.toml If profile already exists user must use `update_credentials` instead. @@ -25,52 +26,57 @@ def set_credentials(api_key: str, profile:str="default", overwrite=False) -> Non [default] api_key = "RUNPOD_API_KEY" - ''' + """ os.makedirs(os.path.dirname(CREDENTIAL_FILE), exist_ok=True) Path(CREDENTIAL_FILE).touch(exist_ok=True) if not overwrite: - with open(CREDENTIAL_FILE, 'rb') as cred_file: + with open(CREDENTIAL_FILE, "rb") as cred_file: if profile in toml.load(cred_file): - raise ValueError('Profile already exists. Use `update_credentials` instead.') + raise ValueError( + "Profile already exists. Use `update_credentials` instead." + ) - with open(CREDENTIAL_FILE, 'w', encoding="UTF-8") as cred_file: - cred_file.write('[' + profile + ']\n') + with open(CREDENTIAL_FILE, "w", encoding="UTF-8") as cred_file: + cred_file.write("[" + profile + "]\n") cred_file.write('api_key = "' + api_key + '"\n') -def check_credentials(profile:str="default"): - ''' +def check_credentials(profile: str = "default"): + """ Checks if the credentials file exists and is valid. - ''' + """ if not os.path.exists(CREDENTIAL_FILE): - return False, '~/.runpod/config.toml does not exist.' + return False, "~/.runpod/config.toml does not exist." # Check for default api_key try: - with open(CREDENTIAL_FILE, 'rb') as cred_file: + with open(CREDENTIAL_FILE, "rb") as cred_file: config = toml.load(cred_file) if profile not in config: - return False, f'~/.runpod/config.toml is missing {profile} profile.' + return False, f"~/.runpod/config.toml is missing {profile} profile." - if 'api_key' not in config[profile]: - return False, f'~/.runpod/config.toml is missing api_key for {profile} profile.' + if "api_key" not in config[profile]: + return ( + False, + f"~/.runpod/config.toml is missing api_key for {profile} profile.", + ) except (TypeError, ValueError): - return False, '~/.runpod/config.toml is not a valid TOML file.' + return False, "~/.runpod/config.toml is not a valid TOML file." return True, None -def get_credentials(profile='default'): - ''' +def get_credentials(profile="default"): + """ Returns the credentials for the specified profile from ~/.runpod/config.toml - ''' + """ if not os.path.exists(CREDENTIAL_FILE): return None - with open(CREDENTIAL_FILE, 'rb') as cred_file: + with open(CREDENTIAL_FILE, "rb") as cred_file: credentials = toml.load(cred_file) if profile not in credentials: diff --git a/runpod/cli/groups/exec/__init__.py b/runpod/cli/groups/exec/__init__.py index 417c9b5c..b3a934dc 100644 --- a/runpod/cli/groups/exec/__init__.py +++ b/runpod/cli/groups/exec/__init__.py @@ -1 +1 @@ -''' A collection of CLI execution tools ''' +""" A collection of CLI execution tools """ diff --git a/runpod/cli/groups/exec/commands.py b/runpod/cli/groups/exec/commands.py index 24bc479a..c125eb55 100644 --- a/runpod/cli/groups/exec/commands.py +++ b/runpod/cli/groups/exec/commands.py @@ -1,25 +1,27 @@ -''' +""" RunPod | CLI | Exec | Commands -''' +""" import click from .functions import python_over_ssh from .helpers import get_session_pod -@click.group('exec', help='Execute commands in a pods.') + +@click.group("exec", help="Execute commands in a pods.") def exec_cli(): - '''A collection of CLI functions for Exec.''' + """A collection of CLI functions for Exec.""" + -@exec_cli.command('python') -@click.option('--pod_id', default=None, help='The pod ID to run the command on.') -@click.argument('file', type=click.Path(exists=True), required=True) +@exec_cli.command("python") +@click.option("--pod_id", default=None, help="The pod ID to run the command on.") +@click.argument("file", type=click.Path(exists=True), required=True) def remote_python(pod_id, file): - ''' + """ Runs a remote Python shell. - ''' + """ if pod_id is None: pod_id = get_session_pod() - click.echo('Running remote Python shell...') + click.echo("Running remote Python shell...") python_over_ssh(pod_id, file) diff --git a/runpod/cli/groups/exec/functions.py b/runpod/cli/groups/exec/functions.py index cfb30d9e..a826181f 100644 --- a/runpod/cli/groups/exec/functions.py +++ b/runpod/cli/groups/exec/functions.py @@ -1,14 +1,15 @@ -''' +""" RunPod | CLI | Exec | Functions -''' +""" + from runpod.cli.utils import ssh_cmd def python_over_ssh(pod_id, file): - ''' + """ Runs a Python file over SSH. - ''' + """ ssh = ssh_cmd.SSHConnection(pod_id) - ssh.put_file(file, f'/root/{file}') - ssh.run_commands([f'python3.10 /root/{file}']) + ssh.put_file(file, f"/root/{file}") + ssh.run_commands([f"python3.10 /root/{file}"]) ssh.close() diff --git a/runpod/cli/groups/exec/helpers.py b/runpod/cli/groups/exec/helpers.py index 80210010..6402abae 100644 --- a/runpod/cli/groups/exec/helpers.py +++ b/runpod/cli/groups/exec/helpers.py @@ -5,7 +5,7 @@ from runpod import get_pod -POD_ID_FILE = os.path.join(os.path.expanduser('~'), '.runpod', 'pod_id') +POD_ID_FILE = os.path.join(os.path.expanduser("~"), ".runpod", "pod_id") def get_session_pod(): @@ -20,7 +20,7 @@ def get_session_pod(): pod_id = None if os.path.exists(POD_ID_FILE): - with open(POD_ID_FILE, 'r', encoding="UTF-8") as pod_file: + with open(POD_ID_FILE, "r", encoding="UTF-8") as pod_file: pod_id = pod_file.read().strip() # Confirm that the pod_id is valid @@ -28,9 +28,9 @@ def get_session_pod(): return pod_id # If file doesn't exist or is empty, prompt user for the pod_id - pod_id = click.prompt('Please provide the pod ID') + pod_id = click.prompt("Please provide the pod ID") os.makedirs(os.path.dirname(POD_ID_FILE), exist_ok=True) - with open(POD_ID_FILE, 'w', encoding="UTF-8") as pod_file: + with open(POD_ID_FILE, "w", encoding="UTF-8") as pod_file: pod_file.write(pod_id) return pod_id diff --git a/runpod/cli/groups/pod/__init__.py b/runpod/cli/groups/pod/__init__.py index 3b0c5a07..7830c873 100644 --- a/runpod/cli/groups/pod/__init__.py +++ b/runpod/cli/groups/pod/__init__.py @@ -1 +1 @@ -''' A collection of commands for managing pods. ''' +""" A collection of commands for managing pods. """ diff --git a/runpod/cli/groups/pod/commands.py b/runpod/cli/groups/pod/commands.py index de47b75e..84f5e184 100644 --- a/runpod/cli/groups/pod/commands.py +++ b/runpod/cli/groups/pod/commands.py @@ -1,6 +1,7 @@ -''' +""" RunPod | CLI | Pod | Commands -''' +""" + import click from prettytable import PrettyTable @@ -8,53 +9,67 @@ from ...utils import ssh_cmd -@click.group('pod', help='Manage and interact with pods.') + +@click.group("pod", help="Manage and interact with pods.") def pod_cli(): - '''A collection of CLI functions for Pod.''' + """A collection of CLI functions for Pod.""" + -@pod_cli.command('list') +@pod_cli.command("list") def list_pods(): - ''' + """ Lists the pods for the current user. - ''' - table = PrettyTable(['ID', 'Name', 'Status', 'Image']) + """ + table = PrettyTable(["ID", "Name", "Status", "Image"]) for pod in get_pods(): - table.add_row((pod['id'], pod['name'], pod['desiredStatus'], pod['imageName'])) + table.add_row((pod["id"], pod["name"], pod["desiredStatus"], pod["imageName"])) click.echo(table) -@pod_cli.command('create') -@click.argument('name', required=False) -@click.option('--image', default=None, help='The image to use for the pod.') -@click.option('--gpu-type', default=None, help='The GPU type to use for the pod.') -@click.option('--gpu-count', default=1, help='The number of GPUs to use for the pod.') -@click.option('--support-public-ip', default=True, help='Whether or not to support a public IP.') -def create_new_pod(name, image, gpu_type, gpu_count, support_public_ip): # pylint: disable=too-many-arguments - ''' + +@pod_cli.command("create") +@click.argument("name", required=False) +@click.option("--image", default=None, help="The image to use for the pod.") +@click.option("--gpu-type", default=None, help="The GPU type to use for the pod.") +@click.option("--gpu-count", default=1, help="The number of GPUs to use for the pod.") +@click.option( + "--support-public-ip", default=True, help="Whether or not to support a public IP." +) +def create_new_pod( + name, image, gpu_type, gpu_count, support_public_ip +): # pylint: disable=too-many-arguments + """ Creates a pod. - ''' + """ if not name: - name = click.prompt('Enter pod name', default='RunPod-CLI-Pod') + name = click.prompt("Enter pod name", default="RunPod-CLI-Pod") - quick_launch = click.confirm('Would you like to launch default pod?', abort=True) + quick_launch = click.confirm("Would you like to launch default pod?", abort=True) if quick_launch: - image = 'runpod/base:0.0.0' - gpu_type = 'NVIDIA GeForce RTX 3090' - ports ='22/tcp' + image = "runpod/base:0.0.0" + gpu_type = "NVIDIA GeForce RTX 3090" + ports = "22/tcp" - click.echo('Launching default pod...') + click.echo("Launching default pod...") - new_pod = create_pod(name, image, gpu_type, - gpu_count=gpu_count, support_public_ip=support_public_ip, ports=ports) + new_pod = create_pod( + name, + image, + gpu_type, + gpu_count=gpu_count, + support_public_ip=support_public_ip, + ports=ports, + ) click.echo(f'Pod {new_pod["id"]} has been created.') -@pod_cli.command('connect') -@click.argument('pod_id') + +@pod_cli.command("connect") +@click.argument("pod_id") def connect_to_pod(pod_id): - ''' + """ Connects to a pod. - ''' - click.echo(f'Connecting to pod {pod_id}...') + """ + click.echo(f"Connecting to pod {pod_id}...") ssh = ssh_cmd.SSHConnection(pod_id) ssh.launch_terminal() diff --git a/runpod/cli/groups/project/__init__.py b/runpod/cli/groups/project/__init__.py index 145fff5f..0f41264e 100644 --- a/runpod/cli/groups/project/__init__.py +++ b/runpod/cli/groups/project/__init__.py @@ -1 +1 @@ -''' Allows project import ''' +""" Allows project import """ diff --git a/runpod/cli/groups/project/commands.py b/runpod/cli/groups/project/commands.py index f3372909..789e5b1a 100644 --- a/runpod/cli/groups/project/commands.py +++ b/runpod/cli/groups/project/commands.py @@ -1,6 +1,6 @@ -''' +""" RunPod | CLI | Project | Commands -''' +""" import os import sys @@ -12,26 +12,41 @@ from .helpers import validate_project_name -@click.group('project', help='Create, deploy, and manage RunPod projects.') +@click.group("project", help="Create, deploy, and manage RunPod projects.") def project_cli(): - ''' Create and deploy projects on RunPod. ''' + """Create and deploy projects on RunPod.""" # -------------------------------- New Project ------------------------------- # -@project_cli.command('new') -@click.option('--name', '-n', 'project_name', type=str, default=None, help="The project name.") -@click.option('--type', '-t', 'model_type', type=click.Choice(['llama2'], case_sensitive=False), - default=None, help="The type of Hugging Face model.") -@click.option('--model', '-m', 'model_name', type=str, default=None, - help="The name of the Hugging Face model. (e.g. meta-llama/Llama-2-7b)") -@click.option('--init', '-i', 'init_current_dir', is_flag=True, default=False) +@project_cli.command("new") +@click.option( + "--name", "-n", "project_name", type=str, default=None, help="The project name." +) +@click.option( + "--type", + "-t", + "model_type", + type=click.Choice(["llama2"], case_sensitive=False), + default=None, + help="The type of Hugging Face model.", +) +@click.option( + "--model", + "-m", + "model_name", + type=str, + default=None, + help="The name of the Hugging Face model. (e.g. meta-llama/Llama-2-7b)", +) +@click.option("--init", "-i", "init_current_dir", is_flag=True, default=False) def new_project_wizard(project_name, model_type, model_name, init_current_dir): - """ Create a new project. """ - network_volumes = get_user()['networkVolumes'] + """Create a new project.""" + network_volumes = get_user()["networkVolumes"] if len(network_volumes) == 0: click.echo("You do not have any network volumes.") click.echo( - "Please create a network volume (https://runpod.io/console/user/storage) and try again.") # pylint: disable=line-too-long + "Please create a network volume (https://runpod.io/console/user/storage) and try again." + ) # pylint: disable=line-too-long sys.exit(1) click.echo("Creating a new project...") @@ -46,33 +61,33 @@ def new_project_wizard(project_name, model_type, model_name, init_current_dir): def print_net_vol(vol): return { - 'name': f"{vol['id']}: {vol['name']} ({vol['size']} GB, {vol['dataCenterId']})", - 'value': vol['id'] + "name": f"{vol['id']}: {vol['name']} ({vol['size']} GB, {vol['dataCenterId']})", + "value": vol["id"], } network_volumes = list(map(print_net_vol, network_volumes)) questions = [ { - 'type': 'rawlist', - 'name': 'volume-id', - 'qmark': '', - 'amark': '', - 'message': ' > Select a Network Volume:', - 'choices': network_volumes + "type": "rawlist", + "name": "volume-id", + "qmark": "", + "amark": "", + "message": " > Select a Network Volume:", + "choices": network_volumes, } ] - runpod_volume_id = cli_select(questions)['volume-id'] + runpod_volume_id = cli_select(questions)["volume-id"] cuda_version = click.prompt( " > Select a CUDA version, or press enter to use the default", - type=click.Choice(['11.1.1', '11.8.0', '12.1.0'], case_sensitive=False), - default='11.8.0' + type=click.Choice(["11.1.1", "11.8.0", "12.1.0"], case_sensitive=False), + default="11.8.0", ) python_version = click.prompt( " > Select a Python version, or press enter to use the default", - type=click.Choice(['3.8', '3.9', '3.10', '3.11'], case_sensitive=False), - default='3.10' + type=click.Choice(["3.8", "3.9", "3.10", "3.11"], case_sensitive=False), + default="3.10", ) click.echo("") @@ -87,22 +102,35 @@ def print_net_vol(vol): click.echo("The project will be created in the current directory.") click.confirm("Do you want to continue?", abort=True) - create_new_project(project_name, runpod_volume_id, cuda_version, - python_version, model_type, model_name, init_current_dir) # pylint: disable=too-many-arguments + create_new_project( + project_name, + runpod_volume_id, + cuda_version, + python_version, + model_type, + model_name, + init_current_dir, + ) # pylint: disable=too-many-arguments click.echo(f"Project {project_name} created successfully!") click.echo("") - click.echo("From your project root run `runpod project start` to start a development pod.") + click.echo( + "From your project root run `runpod project start` to start a development pod." + ) # ------------------------------- Start Project ------------------------------ # -@project_cli.command('start') +@project_cli.command("start") def start_project_pod(): - ''' + """ Start the project development pod from runpod.toml - ''' - click.echo("Starting the project will create a development pod on RunPod, if one does not already exist.") # pylint: disable=line-too-long - click.echo(" - You will be charged based on the GPU type specified in runpod.toml.") + """ + click.echo( + "Starting the project will create a development pod on RunPod, if one does not already exist." + ) # pylint: disable=line-too-long + click.echo( + " - You will be charged based on the GPU type specified in runpod.toml." + ) click.echo(" - When you are finished close the connection with CTRL+C.") click.echo("") click.confirm("Do you want to continue?", abort=True) @@ -113,9 +141,9 @@ def start_project_pod(): # ------------------------------ Deploy Project ------------------------------ # -@project_cli.command('deploy') +@project_cli.command("deploy") def deploy_project(): - """ Deploy the project to RunPod. """ + """Deploy the project to RunPod.""" click.echo("Deploying project...") endpoint_id = create_project_endpoint() diff --git a/runpod/cli/groups/project/functions.py b/runpod/cli/groups/project/functions.py index 66f13ce5..5787dee1 100644 --- a/runpod/cli/groups/project/functions.py +++ b/runpod/cli/groups/project/functions.py @@ -1,6 +1,6 @@ -''' +""" RunPod | CLI | Project | Functions -''' +""" import os import sys @@ -10,57 +10,81 @@ import tomlkit from tomlkit import document, comment, table, nl -from runpod import __version__, get_pod, create_template, create_endpoint, update_endpoint_template +from runpod import ( + __version__, + get_pod, + create_template, + create_endpoint, + update_endpoint_template, +) from runpod.cli import BASE_DOCKER_IMAGE, GPU_TYPES, ENV_VARS from runpod.cli.utils.ssh_cmd import SSHConnection from .helpers import ( - get_project_pod, copy_template_files, - attempt_pod_launch, load_project_config, get_project_endpoint + get_project_pod, + copy_template_files, + attempt_pod_launch, + load_project_config, + get_project_endpoint, ) from ...utils.rp_sync import sync_directory -STARTER_TEMPLATES = os.path.join(os.path.dirname(__file__), 'starter_templates') +STARTER_TEMPLATES = os.path.join(os.path.dirname(__file__), "starter_templates") def _launch_dev_pod(): - """ Launch a development pod. """ + """Launch a development pod.""" config = load_project_config() # Load runpod.toml print("Deploying development pod on RunPod...") # Prepare the environment variables environment_variables = {"RUNPOD_PROJECT_ID": config["project"]["uuid"]} - for variable in config['project'].get('env_vars', {}): - environment_variables[variable] = config['project']['env_vars'][variable] + for variable in config["project"].get("env_vars", {}): + environment_variables[variable] = config["project"]["env_vars"][variable] # Prepare the GPU types - selected_gpu_types = config['project'].get('gpu_types', []) - if config['project'].get('gpu', None): - selected_gpu_types.append(config['project']['gpu']) + selected_gpu_types = config["project"].get("gpu_types", []) + if config["project"].get("gpu", None): + selected_gpu_types.append(config["project"]["gpu"]) # Attempt to launch a pod with the given configuration new_pod = attempt_pod_launch(config, environment_variables) if new_pod is None: - print("Selected GPU types unavailable, try again later or use a different type.") + print( + "Selected GPU types unavailable, try again later or use a different type." + ) return None print("Waiting for pod to come online... ", end="") sys.stdout.flush() # Wait for the pod to come online - while new_pod.get('desiredStatus', None) != 'RUNNING' or new_pod.get('runtime') is None: - new_pod = get_pod(new_pod['id']) + while ( + new_pod.get("desiredStatus", None) != "RUNNING" + or new_pod.get("runtime") is None + ): + new_pod = get_pod(new_pod["id"]) - project_pod_id = new_pod['id'] + project_pod_id = new_pod["id"] - print(f"Project {config['project']['name']} pod ({project_pod_id}) created.", end="\n\n") + print( + f"Project {config['project']['name']} pod ({project_pod_id}) created.", + end="\n\n", + ) return project_pod_id # -------------------------------- New Project ------------------------------- # -def create_new_project(project_name, runpod_volume_id, cuda_version, python_version, # pylint: disable=too-many-locals, too-many-arguments, too-many-statements - model_type=None, model_name=None, init_current_dir=False): - """ Create a new project. """ +def create_new_project( + project_name, + runpod_volume_id, + cuda_version, + python_version, # pylint: disable=too-many-locals, too-many-arguments, too-many-statements + model_type=None, + model_name=None, + init_current_dir=False, +): + """Create a new project.""" if not init_current_dir: project_folder = os.path.join(os.getcwd(), project_name) if not os.path.exists(project_folder): @@ -75,27 +99,29 @@ def create_new_project(project_name, runpod_volume_id, cuda_version, python_vers # Replace placeholders in requirements.txt requirements_path = os.path.join(project_folder, "builder/requirements.txt") - with open(requirements_path, 'r', encoding='utf-8') as requirements_file: + with open(requirements_path, "r", encoding="utf-8") as requirements_file: requirements_content = requirements_file.read() if "dev" in __version__: requirements_content = requirements_content.replace( - '<>', 'git+https://github.com/runpod/runpod-python.git') + "<>", "git+https://github.com/runpod/runpod-python.git" + ) else: requirements_content = requirements_content.replace( - '<>', f'runpod=={__version__}') + "<>", f"runpod=={__version__}" + ) - with open(requirements_path, 'w', encoding='utf-8') as requirements_file: + with open(requirements_path, "w", encoding="utf-8") as requirements_file: requirements_file.write(requirements_content) # If there's a model_name, replace placeholders in handler.py if model_name: handler_path = os.path.join(project_name, "src/handler.py") - with open(handler_path, 'r', encoding='utf-8') as file: + with open(handler_path, "r", encoding="utf-8") as file: handler_content = file.read() - handler_content = handler_content.replace('<>', model_name) + handler_content = handler_content.replace("<>", model_name) - with open(handler_path, 'w', encoding='utf-8') as file: + with open(handler_path, "w", encoding="utf-8") as file: file.write(handler_content) else: project_folder = os.getcwd() @@ -103,7 +129,7 @@ def create_new_project(project_name, runpod_volume_id, cuda_version, python_vers project_uuid = str(uuid.uuid4())[:8] toml_config = document() - toml_config.add(comment('RunPod Project Configuration')) + toml_config.add(comment("RunPod Project Configuration")) toml_config.add(nl()) toml_config.add("title", project_name) @@ -131,13 +157,15 @@ def create_new_project(project_name, runpod_volume_id, cuda_version, python_vers runtime_table.add("requirements_path", "builder/requirements.txt") toml_config.add("runtime", runtime_table) - with open(os.path.join(project_folder, "runpod.toml"), 'w', encoding="UTF-8") as config_file: + with open( + os.path.join(project_folder, "runpod.toml"), "w", encoding="UTF-8" + ) as config_file: tomlkit.dump(toml_config, config_file) # ------------------------------- Start Project ------------------------------ # def start_project(): # pylint: disable=too-many-locals, too-many-branches - ''' + """ Start the project development environment from runpod.toml - Check if the project pod already exists. @@ -151,14 +179,14 @@ def start_project(): # pylint: disable=too-many-locals, too-many-branches - If the project pod does exist: - ''' + """ config = load_project_config() # Load runpod.toml - for config_item in config['project']: + for config_item in config["project"]: print(f' - {config_item}: {config["project"][config_item]}') print("") - project_pod_id = get_project_pod(config['project']['uuid']) + project_pod_id = get_project_pod(config["project"]["uuid"]) # Check if the project pod already exists, if not create it. if not project_pod_id: @@ -169,28 +197,38 @@ def start_project(): # pylint: disable=too-many-locals, too-many-branches with SSHConnection(project_pod_id) as ssh_conn: - project_path_uuid = f'{config["project"]["volume_mount_path"]}/{config["project"]["uuid"]}' - project_path_uuid_dev = os.path.join(project_path_uuid, 'dev') - project_path_uuid_prod = os.path.join(project_path_uuid, 'prod') - remote_project_path = os.path.join(project_path_uuid_dev, config["project"]["name"]) + project_path_uuid = ( + f'{config["project"]["volume_mount_path"]}/{config["project"]["uuid"]}' + ) + project_path_uuid_dev = os.path.join(project_path_uuid, "dev") + project_path_uuid_prod = os.path.join(project_path_uuid, "prod") + remote_project_path = os.path.join( + project_path_uuid_dev, config["project"]["name"] + ) # Create the project folder on the pod - print(f'Checking pod project folder: {remote_project_path} on pod {project_pod_id}') - ssh_conn.run_commands([f'mkdir -p {remote_project_path} {project_path_uuid_prod}']) + print( + f"Checking pod project folder: {remote_project_path} on pod {project_pod_id}" + ) + ssh_conn.run_commands( + [f"mkdir -p {remote_project_path} {project_path_uuid_prod}"] + ) # Copy local files to the pod project folder - print(f'Syncing files to pod {project_pod_id}') + print(f"Syncing files to pod {project_pod_id}") ssh_conn.rsync(os.getcwd(), project_path_uuid_dev) # Create the virtual environment venv_path = os.path.join(project_path_uuid_dev, "venv") - print(f'Activating Python virtual environment: {venv_path} on pod {project_pod_id}') + print( + f"Activating Python virtual environment: {venv_path} on pod {project_pod_id}" + ) commands = [ f'python{config["runtime"]["python_version"]} -m virtualenv {venv_path}', - f'source {venv_path}/bin/activate &&' - f'cd {remote_project_path} &&' - 'python -m pip install --upgrade pip &&' - f'python -m pip install -v --requirement {config["runtime"]["requirements_path"]}' + f"source {venv_path}/bin/activate &&" + f"cd {remote_project_path} &&" + "python -m pip install --upgrade pip &&" + f'python -m pip install -v --requirement {config["runtime"]["requirements_path"]}', ] ssh_conn.run_commands(commands) @@ -198,10 +236,15 @@ def start_project(): # pylint: disable=too-many-locals, too-many-branches sync_directory(ssh_conn, os.getcwd(), project_path_uuid_dev) project_name = config["project"]["name"] - pip_req_path = os.path.join(remote_project_path, config['runtime']['requirements_path']) - handler_path = os.path.join(remote_project_path, config['runtime']['handler_path']) + pip_req_path = os.path.join( + remote_project_path, config["runtime"]["requirements_path"] + ) + handler_path = os.path.join( + remote_project_path, config["runtime"]["handler_path"] + ) - launch_api_server = [f''' + launch_api_server = [ + f""" pkill inotify function force_kill {{ @@ -292,7 +335,8 @@ def start_project(): # pylint: disable=too-many-locals, too-many-branches echo "Restarted API server with PID: $last_pid" done - '''] + """ + ] print("") print("Starting project development endpoint...") @@ -301,14 +345,14 @@ def start_project(): # pylint: disable=too-many-locals, too-many-branches # ------------------------------ Deploy Project ------------------------------ # def create_project_endpoint(): - """ Create a project endpoint. + """Create a project endpoint. - Move code in dev to prod folder - TODO: git commit the diff from current state to new state - Create a serverless template for the project - Create a new endpoint using the template """ config = load_project_config() - project_pod_id = get_project_pod(config['project']['uuid']) + project_pod_id = get_project_pod(config["project"]["uuid"]) # Check if the project pod already exists, if not create it. if not project_pod_id: @@ -318,58 +362,67 @@ def create_project_endpoint(): return None with SSHConnection(project_pod_id) as ssh_conn: - project_path_uuid = f'{config["project"]["volume_mount_path"]}/{config["project"]["uuid"]}' - project_path_uuid_prod = os.path.join(project_path_uuid, 'prod') - remote_project_path = os.path.join(project_path_uuid_prod, config["project"]["name"]) + project_path_uuid = ( + f'{config["project"]["volume_mount_path"]}/{config["project"]["uuid"]}' + ) + project_path_uuid_prod = os.path.join(project_path_uuid, "prod") + remote_project_path = os.path.join( + project_path_uuid_prod, config["project"]["name"] + ) # Copy local files to the pod project folder - ssh_conn.run_commands([f'mkdir -p {remote_project_path}']) - print(f'Syncing files to pod {project_pod_id} prod') + ssh_conn.run_commands([f"mkdir -p {remote_project_path}"]) + print(f"Syncing files to pod {project_pod_id} prod") ssh_conn.rsync(os.getcwd(), project_path_uuid_prod) # Create the virtual environment - venv_path = os.path.join(project_path_uuid_prod, 'venv') - print(f'Activating Python virtual environment: {venv_path} on pod {project_pod_id}') + venv_path = os.path.join(project_path_uuid_prod, "venv") + print( + f"Activating Python virtual environment: {venv_path} on pod {project_pod_id}" + ) commands = [ f'python{config["runtime"]["python_version"]} -m venv {venv_path}', - f'source {venv_path}/bin/activate &&' - f'cd {remote_project_path} &&' - 'python -m pip install --upgrade pip &&' - f'python -m pip install -v --requirement {config["runtime"]["requirements_path"]}' + f"source {venv_path}/bin/activate &&" + f"cd {remote_project_path} &&" + "python -m pip install --upgrade pip &&" + f'python -m pip install -v --requirement {config["runtime"]["requirements_path"]}', ] ssh_conn.run_commands(commands) ssh_conn.close() environment_variables = {} - for variable in config['project']['env_vars']: - environment_variables[variable] = config['project']['env_vars'][variable] + for variable in config["project"]["env_vars"]: + environment_variables[variable] = config["project"]["env_vars"][variable] # Construct the docker start command - activate_cmd = f'. /runpod-volume/{config["project"]["uuid"]}/prod/venv/bin/activate' + activate_cmd = ( + f'. /runpod-volume/{config["project"]["uuid"]}/prod/venv/bin/activate' + ) python_cmd = f'python -u /runpod-volume/{config["project"]["uuid"]}/prod/{config["project"]["name"]}/{config["runtime"]["handler_path"]}' # pylint: disable=line-too-long - docker_start_cmd = 'bash -c "' + activate_cmd + ' && ' + python_cmd + '"' + docker_start_cmd = 'bash -c "' + activate_cmd + " && " + python_cmd + '"' project_endpoint_template = create_template( name=f'{config["project"]["name"]}-endpoint | {config["project"]["uuid"]} | {datetime.now()}', # pylint: disable=line-too-long - image_name=config['project']['base_image'], - container_disk_in_gb=config['project']['container_disk_size_gb'], + image_name=config["project"]["base_image"], + container_disk_in_gb=config["project"]["container_disk_size_gb"], docker_start_cmd=docker_start_cmd, - env=environment_variables, is_serverless=True + env=environment_variables, + is_serverless=True, ) - deployed_endpoint = get_project_endpoint(config['project']['uuid']) + deployed_endpoint = get_project_endpoint(config["project"]["uuid"]) if not deployed_endpoint: deployed_endpoint = create_endpoint( name=f'{config["project"]["name"]}-endpoint | {config["project"]["uuid"]}', - template_id=project_endpoint_template['id'], - network_volume_id=config['project']['storage_id'], + template_id=project_endpoint_template["id"], + network_volume_id=config["project"]["storage_id"], ) else: deployed_endpoint = update_endpoint_template( - endpoint_id=deployed_endpoint['id'], - template_id=project_endpoint_template['id'], + endpoint_id=deployed_endpoint["id"], + template_id=project_endpoint_template["id"], ) # does user want to tear down and recreate workers immediately? - return deployed_endpoint['id'] + return deployed_endpoint["id"] diff --git a/runpod/cli/groups/project/helpers.py b/runpod/cli/groups/project/helpers.py index e62c4f32..81bb3a88 100644 --- a/runpod/cli/groups/project/helpers.py +++ b/runpod/cli/groups/project/helpers.py @@ -12,12 +12,14 @@ def validate_project_name(name): - ''' + """ Validate the project name. - ''' + """ match = re.search(r"[<>:\"/\\|?*\s]", name) if match: - raise click.BadParameter(f"Project name contains an invalid character: '{match.group()}'.") + raise click.BadParameter( + f"Project name contains an invalid character: '{match.group()}'." + ) return name @@ -26,8 +28,8 @@ def get_project_pod(project_id: str): Return the pod_id if it exists, else return None. """ for pod in get_pods(): - if project_id in pod['name']: - return pod['id'] + if project_id in pod["name"]: + return pod["id"] return None @@ -37,7 +39,7 @@ def get_project_endpoint(project_id: str): Return the endpoint if it exists, else return None. """ for endpoint in get_endpoints(): - if project_id in endpoint['name']: + if project_id in endpoint["name"]: return endpoint return None @@ -56,20 +58,20 @@ def copy_template_files(template_dir, destination): def attempt_pod_launch(config, environment_variables): """Attempt to launch a pod with the given configuration.""" - for gpu_type in config['project'].get('gpu_types', []): + for gpu_type in config["project"].get("gpu_types", []): print(f"Trying to get a pod with {gpu_type}... ", end="") try: created_pod = create_pod( f'{config["project"]["name"]}-dev ({config["project"]["uuid"]})', - config['project']['base_image'], + config["project"]["base_image"], gpu_type, - gpu_count=int(config['project']['gpu_count']), + gpu_count=int(config["project"]["gpu_count"]), support_public_ip=True, ports=f'{config["project"]["ports"]}', network_volume_id=f'{config["project"]["storage_id"]}', volume_mount_path=f'{config["project"]["volume_mount_path"]}', container_disk_in_gb=int(config["project"]["container_disk_size_gb"]), - env=environment_variables + env=environment_variables, ) print("Success!") return created_pod @@ -80,8 +82,8 @@ def attempt_pod_launch(config, environment_variables): def load_project_config(): """Load the project config file.""" - project_config_file = os.path.join(os.getcwd(), 'runpod.toml') + project_config_file = os.path.join(os.getcwd(), "runpod.toml") if not os.path.exists(project_config_file): raise FileNotFoundError("runpod.toml not found in the current directory.") - with open(project_config_file, 'r', encoding="UTF-8") as config_file: + with open(project_config_file, "r", encoding="UTF-8") as config_file: return tomlkit.load(config_file) diff --git a/runpod/cli/groups/project/starter_templates/default/src/handler.py b/runpod/cli/groups/project/starter_templates/default/src/handler.py index bda00409..bd26d7ec 100644 --- a/runpod/cli/groups/project/starter_templates/default/src/handler.py +++ b/runpod/cli/groups/project/starter_templates/default/src/handler.py @@ -1,13 +1,15 @@ -''' A template for a handler file. ''' +""" A template for a handler file. """ import runpod + def handler(job): - ''' + """ This is the handler function for the job. - ''' - job_input = job['input'] - name = job_input.get('name', 'World') + """ + job_input = job["input"] + name = job_input.get("name", "World") return f"Hello, {name}!" + runpod.serverless.start({"handler": handler}) diff --git a/runpod/cli/groups/project/starter_templates/llama2/src/handler.py b/runpod/cli/groups/project/starter_templates/llama2/src/handler.py index 3e4e6794..235c0467 100644 --- a/runpod/cli/groups/project/starter_templates/llama2/src/handler.py +++ b/runpod/cli/groups/project/starter_templates/llama2/src/handler.py @@ -1,4 +1,5 @@ -''' A template for a Llama2 handler file. ''' +""" A template for a Llama2 handler file. """ + # pylint: skip-file import runpod @@ -7,6 +8,7 @@ SELECTED_MODEL = "<>" + def get_model_framework(model_name): api = HfApi() model_files = api.model_info(model_name).files @@ -19,6 +21,7 @@ def get_model_framework(model_name): else: return "Unknown" + def prepare_inputs(text, **kwargs): # Filter kwargs based on what the tokenizer accepts filtered_args = {k: v for k, v in kwargs.items() if k in valid_args} @@ -33,4 +36,5 @@ def handle_request(text, **input_args): outputs = model(**inputs) return process_outputs(outputs) + runpod.serverless.start({"handler": handle_request}) diff --git a/runpod/cli/groups/ssh/__init__.py b/runpod/cli/groups/ssh/__init__.py index 3754b358..c32441dc 100644 --- a/runpod/cli/groups/ssh/__init__.py +++ b/runpod/cli/groups/ssh/__init__.py @@ -1,3 +1,3 @@ -''' CLI functions for SSH. ''' +""" CLI functions for SSH. """ from . import functions diff --git a/runpod/cli/groups/ssh/commands.py b/runpod/cli/groups/ssh/commands.py index 283cb0ed..86e71972 100644 --- a/runpod/cli/groups/ssh/commands.py +++ b/runpod/cli/groups/ssh/commands.py @@ -1,38 +1,45 @@ -''' +""" RunPod | CLI | SSH | Commands -''' +""" import click from prettytable import PrettyTable from .functions import get_user_pub_keys, generate_ssh_key_pair -@click.group('ssh', help='Manage and configure SSH keys for secure access to pods.') + +@click.group("ssh", help="Manage and configure SSH keys for secure access to pods.") def ssh_cli(): - '''Manage and configure SSH keys.''' + """Manage and configure SSH keys.""" + -@ssh_cli.command('list-keys') +@ssh_cli.command("list-keys") def list_keys(): - ''' + """ Lists the SSH keys for the current user. - ''' + """ key_list = get_user_pub_keys() - table = PrettyTable(['Public Key', 'Type', 'Fingerprint']) + table = PrettyTable(["Public Key", "Type", "Fingerprint"]) for key in key_list: - table.add_row((key['name'], key['type'], key['fingerprint'])) + table.add_row((key["name"], key["type"], key["fingerprint"])) click.echo(table) -@ssh_cli.command('add-key') -@click.option('--key', default=None, help='The public key to add.') -@click.option('--key-file', default=None, help='The file containing the public key to add.') + +@ssh_cli.command("add-key") +@click.option("--key", default=None, help="The public key to add.") +@click.option( + "--key-file", default=None, help="The file containing the public key to add." +) def add_key(key, key_file): - ''' + """ Adds an SSH key to the current user account. If no key is provided, one will be generated. - ''' + """ if not key and not key_file: - click.confirm('Would you like to add an SSH key to your account?', abort=True) - key_name = click.prompt('Please enter a name for this key', default='RunPod-Key', type=str) - key_name = key_name.replace(' ', '-') + click.confirm("Would you like to add an SSH key to your account?", abort=True) + key_name = click.prompt( + "Please enter a name for this key", default="RunPod-Key", type=str + ) + key_name = key_name.replace(" ", "-") generate_ssh_key_pair(key_name) - click.echo('The key has been added to your account.') + click.echo("The key has been added to your account.") diff --git a/runpod/cli/groups/ssh/functions.py b/runpod/cli/groups/ssh/functions.py index 69c5fa4b..a7e722f6 100644 --- a/runpod/cli/groups/ssh/functions.py +++ b/runpod/cli/groups/ssh/functions.py @@ -1,6 +1,6 @@ -''' +""" RunPod | CLI | SSH | Functions -''' +""" import os import base64 @@ -9,46 +9,46 @@ from runpod.api.ctl_commands import get_user, update_user_settings -SSH_FILES = os.path.expanduser('~/.runpod/ssh') +SSH_FILES = os.path.expanduser("~/.runpod/ssh") def get_ssh_key_fingerprint(public_key): - ''' + """ Get the fingerprint of an SSH key - ''' + """ parts = public_key.split() if len(parts) < 2: raise ValueError("Invalid SSH public key") key_data = base64.b64decode(parts[1]) fingerprint = hashlib.sha256(key_data).digest() - return "SHA256:" + base64.b64encode(fingerprint).decode('utf-8').strip('=') + return "SHA256:" + base64.b64encode(fingerprint).decode("utf-8").strip("=") def get_user_pub_keys(): - ''' + """ Get the current user's SSH keys - ''' + """ user = get_user() - keys = '' if user['pubKey'] is None else user['pubKey'] + keys = "" if user["pubKey"] is None else user["pubKey"] # Parse the keys - keys = keys.split('\n') - keys = [key for key in keys if key != ''] + keys = keys.split("\n") + keys = [key for key in keys if key != ""] key_list = [] for key in keys: - key_parts = key.split(' ') + key_parts = key.split(" ") # Basic validation if len(key_parts) < 2: continue key_dict = {} - key_dict['type'] = key_parts[0] - key_dict['key'] = key_parts[1] - key_dict['fingerprint'] = get_ssh_key_fingerprint(key) - key_dict['name'] = key_parts[2] if len(key_parts) > 2 else "N/A" + key_dict["type"] = key_parts[0] + key_dict["key"] = key_parts[1] + key_dict["fingerprint"] = get_ssh_key_fingerprint(key) + key_dict["name"] = key_parts[2] if len(key_parts) > 2 else "N/A" key_list.append(key_dict) return key_list @@ -86,14 +86,14 @@ def add_ssh_key(public_key): Checks if the key already exists before adding it. """ user = get_user() - current_keys = '' if user['pubKey'] is None else user['pubKey'] + current_keys = "" if user["pubKey"] is None else user["pubKey"] # Check if the key already exists if public_key in current_keys: print("Key already exists") return - updated_keys = current_keys + ('\n\n' if current_keys else '') + public_key + updated_keys = current_keys + ("\n\n" if current_keys else "") + public_key # Update the user's keys update_user_settings(f"{updated_keys}") diff --git a/runpod/cli/utils/__init__.py b/runpod/cli/utils/__init__.py index d4251656..a809a9d8 100644 --- a/runpod/cli/utils/__init__.py +++ b/runpod/cli/utils/__init__.py @@ -1,3 +1,3 @@ -''' Collection of utility functions for the CLI ''' +""" Collection of utility functions for the CLI """ from .rp_info import get_pod_ssh_ip_port diff --git a/runpod/cli/utils/rp_info.py b/runpod/cli/utils/rp_info.py index 7ed63fc4..11204a84 100644 --- a/runpod/cli/utils/rp_info.py +++ b/runpod/cli/utils/rp_info.py @@ -7,32 +7,37 @@ from runpod import get_pod + def get_pod_ssh_ip_port(pod_id, timeout=300): - ''' + """ Returns the IP and port for SSH access to a pod. - ''' + """ start_time = time.time() pod_ip = None pod_port = None while time.time() - start_time < timeout and (pod_ip is None or pod_port is None): pod = get_pod(pod_id) - desired_status = pod.get('desiredStatus', None) - runtime = pod.get('runtime', None) - - if desired_status == 'RUNNING' and runtime and 'ports' in pod['runtime']: - for port in pod['runtime']['ports']: - if port['privatePort'] == 22: - pod_ip = port['ip'] - pod_port = int(port['publicPort']) + desired_status = pod.get("desiredStatus", None) + runtime = pod.get("runtime", None) + + if desired_status == "RUNNING" and runtime and "ports" in pod["runtime"]: + for port in pod["runtime"]["ports"]: + if port["privatePort"] == 22: + pod_ip = port["ip"] + pod_port = int(port["publicPort"]) break time.sleep(1) - if desired_status != 'RUNNING': - raise TimeoutError(f"Pod {pod_id} did not reach 'RUNNING' state within {timeout} seconds.") + if desired_status != "RUNNING": + raise TimeoutError( + f"Pod {pod_id} did not reach 'RUNNING' state within {timeout} seconds." + ) if runtime is None: - raise TimeoutError(f"Pod {pod_id} did not report runtime data within {timeout} seconds.") + raise TimeoutError( + f"Pod {pod_id} did not report runtime data within {timeout} seconds." + ) return pod_ip, pod_port diff --git a/runpod/cli/utils/rp_runpodignore.py b/runpod/cli/utils/rp_runpodignore.py index 4d90867a..0f503f0e 100644 --- a/runpod/cli/utils/rp_runpodignore.py +++ b/runpod/cli/utils/rp_runpodignore.py @@ -4,45 +4,45 @@ import fnmatch EXCLUDE_PATTERNS = [ - "__pycache__/", - "*.pyc", - ".*.swp", - ".git/", - "*.tmp", - "*.log", - ] + "__pycache__/", + "*.pyc", + ".*.swp", + ".git/", + "*.tmp", + "*.log", +] def get_ignore_list(): - """ Reads the .runpodignore file and returns a list of files to ignore. """ + """Reads the .runpodignore file and returns a list of files to ignore.""" ignore_list = EXCLUDE_PATTERNS.copy() - ignore_file = os.path.join(os.getcwd(), '.runpodignore') + ignore_file = os.path.join(os.getcwd(), ".runpodignore") if not os.path.isfile(ignore_file): return ignore_list - with open(ignore_file, 'r', encoding="UTF-8") as ignore_file_handle: + with open(ignore_file, "r", encoding="UTF-8") as ignore_file_handle: for line in ignore_file_handle: stripped_line = line.strip() - if stripped_line and not stripped_line.startswith('#'): + if stripped_line and not stripped_line.startswith("#"): ignore_list.append(stripped_line) return ignore_list def should_ignore(file_path, ignore_list=None): - """ Returns True if the file should be ignored, False otherwise. """ + """Returns True if the file should be ignored, False otherwise.""" if ignore_list is None: ignore_list = get_ignore_list() relative_path = os.path.relpath(file_path, os.getcwd()) for pattern in ignore_list: - if pattern.startswith('/'): + if pattern.startswith("/"): pattern = pattern[1:] - if pattern.endswith('/'): - pattern += '*' + if pattern.endswith("/"): + pattern += "*" if fnmatch.fnmatch(relative_path, pattern): return True diff --git a/runpod/cli/utils/rp_sync.py b/runpod/cli/utils/rp_sync.py index 21eb2c7a..ef7db683 100644 --- a/runpod/cli/utils/rp_sync.py +++ b/runpod/cli/utils/rp_sync.py @@ -11,6 +11,7 @@ from runpod.cli import STOP_EVENT from .rp_runpodignore import get_ignore_list, should_ignore + class WatcherHandler(FileSystemEventHandler): """Watches a directory for changes and syncs them to a remote directory.""" @@ -22,7 +23,7 @@ def __init__(self, action_function, local_path): self.debouncer = None def on_any_event(self, event): - """ Called on any event. """ + """Called on any event.""" if event.is_directory or should_ignore(event.src_path, self.ignore_list): return @@ -33,6 +34,7 @@ def on_any_event(self, event): self.debouncer = threading.Timer(0.5, self.action_function) self.debouncer.start() + def start_watcher(action_function, local_path): """ Starts the watcher. @@ -49,14 +51,16 @@ def start_watcher(action_function, local_path): observer.stop() observer.join() + def sync_directory(ssh_client, local_path, remote_path): """ Syncs a local directory to a remote directory. """ + def sync(): print("Syncing files...") ssh_client.rsync(local_path, remote_path, quiet=True) threading.Thread(target=start_watcher, daemon=True, args=(sync, local_path)).start() - return sync # For testing purposes + return sync # For testing purposes diff --git a/runpod/cli/utils/rp_userspace.py b/runpod/cli/utils/rp_userspace.py index 5a1308d6..a3c9af11 100644 --- a/runpod/cli/utils/rp_userspace.py +++ b/runpod/cli/utils/rp_userspace.py @@ -1,6 +1,7 @@ -''' +""" RunPod | CLI | Utils | Userspace -''' +""" + import os import paramiko from runpod import SSH_KEY_PATH @@ -20,11 +21,11 @@ def find_ssh_key_file(pod_ip, pod_port): for file in os.listdir(SSH_KEY_PATH): file_path = os.path.join(SSH_KEY_PATH, file) - if not os.path.isfile(file_path) or file.endswith('.pub'): + if not os.path.isfile(file_path) or file.endswith(".pub"): continue try: - ssh.connect(pod_ip, port=pod_port, username='root', key_filename=file_path) + ssh.connect(pod_ip, port=pod_port, username="root", key_filename=file_path) ssh.close() print(f"Connected to pod {pod_ip}:{pod_port} using key {file}") return file_path diff --git a/runpod/cli/utils/ssh_cmd.py b/runpod/cli/utils/ssh_cmd.py index e23ca6ec..f227975a 100644 --- a/runpod/cli/utils/ssh_cmd.py +++ b/runpod/cli/utils/ssh_cmd.py @@ -1,8 +1,9 @@ -''' +""" RunPod | CLI | Utils | SSH Command Connect and run commands over SSH. -''' +""" + import sys import signal import threading @@ -19,7 +20,7 @@ class SSHConnection: - ''' Connect and run commands over SSH. ''' + """Connect and run commands over SSH.""" def __init__(self, pod_id): self.pod_id = pod_id @@ -30,8 +31,12 @@ def __init__(self, pod_id): self.ssh = paramiko.SSHClient() self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - self.ssh.connect(self.pod_ip, port=self.pod_port, - username='root', key_filename=self.key_file) + self.ssh.connect( + self.pod_ip, + port=self.pod_port, + username="root", + key_filename=self.key_file, + ) except paramiko.SSHException as err: print(colorama.Fore.RED + f"[{pod_id}]", err) sys.exit(1) @@ -46,16 +51,20 @@ def __exit__(self, exc_type, exc_value, traceback): self.close() def _get_ssh_options(self): - """ Get the SSH options for connecting to the pod. """ + """Get the SSH options for connecting to the pod.""" return [ - "-o", "StrictHostKeyChecking=no", - "-o", "LogLevel=ERROR", - "-p", str(self.pod_port), - "-i", self.key_file + "-o", + "StrictHostKeyChecking=no", + "-o", + "LogLevel=ERROR", + "-p", + str(self.pod_port), + "-i", + self.key_file, ] def _signal_handler(self, signum, frame): - ''' Handle signals. ''' + """Handle signals.""" del signum, frame self.close() print(colorama.Fore.BLUE + f"[{self.pod_id}]", "SSH Connection Closed") @@ -63,25 +72,34 @@ def _signal_handler(self, signum, frame): sys.exit(0) def run_commands(self, commands): - ''' Runs a list of bash commands over SSH. ''' + """Runs a list of bash commands over SSH.""" + def handle_stream(stream, color, prefix): for line in stream: if line: print(color + f"[{prefix}]", line.strip()) for command in commands: - full_command = ' && '.join([ - 'source /root/.bashrc', - 'source /etc/rp_environment', - 'while IFS= read -r -d \'\' line; do export "$line"; done < /proc/1/environ', - command - ]) + full_command = " && ".join( + [ + "source /root/.bashrc", + "source /etc/rp_environment", + "while IFS= read -r -d '' line; do export \"$line\"; done < /proc/1/environ", + command, + ] + ) _, stdout, stderr = self.ssh.exec_command(full_command) stdout_thread = threading.Thread( - target=handle_stream, args=(stdout, colorama.Fore.GREEN, self.pod_id), daemon=True) + target=handle_stream, + args=(stdout, colorama.Fore.GREEN, self.pod_id), + daemon=True, + ) stderr_thread = threading.Thread( - target=handle_stream, args=(stderr, colorama.Fore.RED, self.pod_id), daemon=True) + target=handle_stream, + args=(stderr, colorama.Fore.RED, self.pod_id), + daemon=True, + ) stdout_thread.start() stderr_thread.start() @@ -90,23 +108,23 @@ def handle_stream(stream, color, prefix): stderr_thread.join() def put_file(self, local_path, remote_path): - ''' Copy local file to remote machine over SSH. ''' + """Copy local file to remote machine over SSH.""" with self.ssh.open_sftp() as sftp: sftp.put(local_path, remote_path) def get_file(self, remote_path, local_path): - ''' Fetch a remote file to local machine over SSH. ''' + """Fetch a remote file to local machine over SSH.""" with self.ssh.open_sftp() as sftp: sftp.get(remote_path, local_path) def launch_terminal(self): - ''' Launch an interactive terminal over SSH. ''' + """Launch an interactive terminal over SSH.""" cmd = ["ssh"] + self._get_ssh_options() + [f"root@{self.pod_ip}"] subprocess.run(cmd, check=True) def rsync(self, local_path, remote_path, quiet=False): - """ Sync a local directory to a remote directory over SSH. + """Sync a local directory to a remote directory over SSH. A .runpodignore file can be used to ignore files and directories. This file should be placed in the root of the local directory to sync. @@ -123,15 +141,17 @@ def rsync(self, local_path, remote_path, quiet=False): if quiet: rsync_cmd.append("--quiet") - rsync_cmd.extend([ - "-e", f"ssh {' '.join(self._get_ssh_options())}", - local_path, - f"root@{self.pod_ip}:{remote_path}" - ]) + rsync_cmd.extend( + [ + "-e", + f"ssh {' '.join(self._get_ssh_options())}", + local_path, + f"root@{self.pod_ip}:{remote_path}", + ] + ) return subprocess.run(rsync_cmd, check=True) - def close(self): - ''' Close the SSH connection. ''' + """Close the SSH connection.""" self.ssh.close() diff --git a/runpod/endpoint/__init__.py b/runpod/endpoint/__init__.py index c931d5f1..a3385811 100644 --- a/runpod/endpoint/__init__.py +++ b/runpod/endpoint/__init__.py @@ -1,4 +1,4 @@ -''' Allows endpoints to be imported as a module. ''' +""" Allows endpoints to be imported as a module. """ from .runner import Endpoint, Job from .asyncio.asyncio_runner import Endpoint as AsyncioEndpoint diff --git a/runpod/endpoint/asyncio/asyncio_runner.py b/runpod/endpoint/asyncio/asyncio_runner.py index 04ef280c..71232dc8 100644 --- a/runpod/endpoint/asyncio/asyncio_runner.py +++ b/runpod/endpoint/asyncio/asyncio_runner.py @@ -1,4 +1,5 @@ """ Module for running endpoints asynchronously. """ + # pylint: disable=too-few-public-methods,R0801 from typing import Any, Dict @@ -12,13 +13,16 @@ class Job: """Class representing a job for an asynchronous endpoint""" def __init__(self, endpoint_id: str, job_id: str, session: aiohttp.ClientSession): - from runpod import api_key, endpoint_url_base # pylint: disable=import-outside-toplevel,cyclic-import + from runpod import ( + api_key, + endpoint_url_base, + ) # pylint: disable=import-outside-toplevel,cyclic-import self.endpoint_id = endpoint_id self.job_id = job_id self.headers = { "Content-Type": "application/json", - "Authorization": f"Bearer {api_key}" + "Authorization": f"Bearer {api_key}", } self.session = session self.endpoint_url_base = endpoint_url_base @@ -27,12 +31,14 @@ def __init__(self, endpoint_id: str, job_id: str, session: aiohttp.ClientSession self.job_output = None async def _fetch_job(self, source: str = "status") -> Dict[str, Any]: - """ Returns the raw json of the status, reaises an exception if invalid. + """Returns the raw json of the status, reaises an exception if invalid. Args: source: The URL source path of the job status. """ - status_url = f"{self.endpoint_url_base}/{self.endpoint_id}/{source}/{self.job_id}" + status_url = ( + f"{self.endpoint_url_base}/{self.endpoint_id}/{source}/{self.job_id}" + ) job_state = await self.session.get(status_url, headers=self.headers) job_state = await job_state.json() @@ -78,7 +84,7 @@ async def output(self, timeout: int = 0) -> Any: return job_data.get("output", None) async def stream(self) -> Any: - """ Returns a generator that yields the output of the job request. """ + """Returns a generator that yields the output of the job request.""" while True: await asyncio.sleep(1) stream_partial = await self._fetch_job(source="stream") @@ -101,13 +107,16 @@ class Endpoint: """Class for running endpoint""" def __init__(self, endpoint_id: str, session: aiohttp.ClientSession): - from runpod import api_key, endpoint_url_base # pylint: disable=import-outside-toplevel + from runpod import ( + api_key, + endpoint_url_base, + ) # pylint: disable=import-outside-toplevel self.endpoint_id = endpoint_id self.endpoint_url = f"{endpoint_url_base}/{self.endpoint_id}/run" self.headers = { "Content-Type": "application/json", - "Authorization": f"Bearer {api_key}" + "Authorization": f"Bearer {api_key}", } self.session = session @@ -133,7 +142,9 @@ async def health(self) -> dict: Returns: Health of endpoint """ - async with self.session.get(f"{self.endpoint_id}/health", headers=self.headers) as resp: + async with self.session.get( + f"{self.endpoint_id}/health", headers=self.headers + ) as resp: return await resp.json() async def purge_queue(self) -> dict: @@ -142,5 +153,7 @@ async def purge_queue(self) -> dict: Returns: Purge status """ - async with self.session.post(f"{self.endpoint_id}/purge", headers=self.headers) as resp: + async with self.session.post( + f"{self.endpoint_id}/purge", headers=self.headers + ) as resp: return await resp.json() diff --git a/runpod/endpoint/helpers.py b/runpod/endpoint/helpers.py index afffb519..2bf49a9a 100644 --- a/runpod/endpoint/helpers.py +++ b/runpod/endpoint/helpers.py @@ -4,10 +4,13 @@ # Exception Messages UNAUTHORIZED_MSG = "401 Unauthorized | Make sure Runpod API key is set and valid." -API_KEY_NOT_SET_MSG = ("Expected `run_pod.api_key` to be initialized. " - "You can solve this by setting `run_pod.api_key = 'your-key'. " - "An API key can be generated at " - "https://runpod.io/console/user/settings") +API_KEY_NOT_SET_MSG = ( + "Expected `run_pod.api_key` to be initialized. " + "You can solve this by setting `run_pod.api_key = 'your-key'. " + "An API key can be generated at " + "https://runpod.io/console/user/settings" +) + def is_completed(status: str) -> bool: """Returns true if status is one of the possible final states for a serverless request.""" diff --git a/runpod/endpoint/runner.py b/runpod/endpoint/runner.py index 34baafff..cf1e71f4 100644 --- a/runpod/endpoint/runner.py +++ b/runpod/endpoint/runner.py @@ -1,13 +1,17 @@ -''' +""" RunPod | Python | Endpoint Runner -''' +""" + from typing import Any, Optional, Dict import time import requests from requests.adapters import HTTPAdapter, Retry from runpod.endpoint.helpers import ( - FINAL_STATES, UNAUTHORIZED_MSG, API_KEY_NOT_SET_MSG, is_completed + FINAL_STATES, + UNAUTHORIZED_MSG, + API_KEY_NOT_SET_MSG, + is_completed, ) @@ -24,24 +28,28 @@ def __init__(self): Raises: RuntimeError: If the API key has not been initialized. """ - from runpod import api_key, endpoint_url_base # pylint: disable=import-outside-toplevel, cyclic-import + from runpod import ( + api_key, + endpoint_url_base, + ) # pylint: disable=import-outside-toplevel, cyclic-import if api_key is None: raise RuntimeError(API_KEY_NOT_SET_MSG) self.rp_session = requests.Session() retries = Retry(total=5, backoff_factor=1, status_forcelist=[408, 429]) - self.rp_session.mount('http://', HTTPAdapter(max_retries=retries)) + self.rp_session.mount("http://", HTTPAdapter(max_retries=retries)) self.headers = { "Content-Type": "application/json", - "Authorization": f"Bearer {api_key}" + "Authorization": f"Bearer {api_key}", } self.endpoint_url_base = endpoint_url_base - def _request(self, - method: str, endpoint: str, data: Optional[dict] = None, timeout: int = 10): + def _request( + self, method: str, endpoint: str, data: Optional[dict] = None, timeout: int = 10 + ): """ Make a request to the specified endpoint using the given HTTP method. @@ -60,7 +68,8 @@ def _request(self, """ url = f"{self.endpoint_url_base}/{endpoint}" response = self.rp_session.request( - method, url, headers=self.headers, json=data, timeout=timeout) + method, url, headers=self.headers, json=data, timeout=timeout + ) if response.status_code == 401: raise RuntimeError(UNAUTHORIZED_MSG) @@ -69,12 +78,12 @@ def _request(self, return response.json() def post(self, endpoint: str, data: dict, timeout: int = 10): - """ Post to the endpoint. """ - return self._request('POST', endpoint, data, timeout) + """Post to the endpoint.""" + return self._request("POST", endpoint, data, timeout) def get(self, endpoint: str, timeout: int = 10): - """ Get from the endpoint. """ - return self._request('GET', endpoint, timeout=timeout) + """Get from the endpoint.""" + return self._request("GET", endpoint, timeout=timeout) # ---------------------------------------------------------------------------- # @@ -100,7 +109,7 @@ def __init__(self, endpoint_id: str, job_id: str, client: RunPodClient): self.job_output = None def _fetch_job(self, source: str = "status") -> Dict[str, Any]: - """ Returns the raw json of the status, raises an exception if invalid """ + """Returns the raw json of the status, raises an exception if invalid""" status_url = f"{self.endpoint_id}/{source}/{self.job_id}" job_state = self.rp_client.get(endpoint=status_url) @@ -111,7 +120,7 @@ def _fetch_job(self, source: str = "status") -> Dict[str, Any]: return job_state def status(self): - """ Returns the status of the job request. """ + """Returns the status of the job request.""" if self.job_status is not None: return self.job_status @@ -137,11 +146,14 @@ def output(self, timeout: int = 0) -> Any: return self._fetch_job().get("output", None) def stream(self) -> Any: - """ Returns a generator that yields the output of the job request. """ + """Returns a generator that yields the output of the job request.""" while True: time.sleep(1) stream_partial = self._fetch_job(source="stream") - if stream_partial["status"] not in FINAL_STATES or len(stream_partial["stream"]) > 0: + if ( + stream_partial["status"] not in FINAL_STATES + or len(stream_partial["stream"]) > 0 + ): for chunk in stream_partial.get("stream", []): yield chunk["output"] elif stream_partial["status"] in FINAL_STATES: @@ -154,8 +166,9 @@ def cancel(self, timeout: int = 3) -> Any: Args: timeout: The number of seconds to wait for the server to respond before giving up. """ - return self.rp_client.post(f"{self.endpoint_id}/cancel/{self.job_id}", - data=None, timeout=timeout) + return self.rp_client.post( + f"{self.endpoint_id}/cancel/{self.job_id}", data=None, timeout=timeout + ) # ---------------------------------------------------------------------------- # @@ -196,7 +209,9 @@ def run(self, request_input: Dict[str, Any]) -> Job: job_request = self.rp_client.post(f"{self.endpoint_id}/run", request_input) return Job(self.endpoint_id, job_request["id"], self.rp_client) - def run_sync(self, request_input: Dict[str, Any], timeout: int = 86400) -> Dict[str, Any]: + def run_sync( + self, request_input: Dict[str, Any], timeout: int = 86400 + ) -> Dict[str, Any]: """ Run the endpoint with the given input synchronously. @@ -207,12 +222,15 @@ def run_sync(self, request_input: Dict[str, Any], timeout: int = 86400) -> Dict[ request_input = {"input": request_input} job_request = self.rp_client.post( - f"{self.endpoint_id}/runsync", request_input, timeout=timeout) + f"{self.endpoint_id}/runsync", request_input, timeout=timeout + ) if job_request["status"] in FINAL_STATES: return job_request.get("output", None) - return Job(self.endpoint_id, job_request["id"], self.rp_client).output(timeout=timeout) + return Job(self.endpoint_id, job_request["id"], self.rp_client).output( + timeout=timeout + ) def health(self, timeout: int = 3) -> Dict[str, Any]: """ @@ -230,4 +248,6 @@ def purge_queue(self, timeout: int = 3) -> Dict[str, Any]: Args: timeout: The number of seconds to wait for the server to respond before giving up. """ - return self.rp_client.post(f"{self.endpoint_id}/purge-queue", data=None, timeout=timeout) + return self.rp_client.post( + f"{self.endpoint_id}/purge-queue", data=None, timeout=timeout + ) diff --git a/runpod/error.py b/runpod/error.py index 4e4d92ad..d78040b9 100644 --- a/runpod/error.py +++ b/runpod/error.py @@ -1,16 +1,17 @@ -''' +""" runpd | error.py This file contains the error classes for the runpod package. -''' +""" from typing import Optional class RunPodError(Exception): - ''' + """ Base class for all runpod errors - ''' + """ + def __init__(self, message: Optional[str] = None): super().__init__(message) self.message = message @@ -22,15 +23,16 @@ def __str__(self): class AuthenticationError(RunPodError): - ''' + """ Raised when authentication fails - ''' + """ class QueryError(RunPodError): - ''' + """ Raised when a GraphQL query fails - ''' + """ + def __init__(self, message: Optional[str] = None, query: Optional[str] = None): super().__init__(message) self.query = query diff --git a/runpod/serverless/__init__.py b/runpod/serverless/__init__.py index 086f6ff3..4c06eeef 100644 --- a/runpod/serverless/__init__.py +++ b/runpod/serverless/__init__.py @@ -27,29 +27,53 @@ # ---------------------------------------------------------------------------- # # Arguments will be passed in with the config under the key "rp_args" parser = argparse.ArgumentParser( - prog="runpod", - description="Runpod Serverless Worker Arguments." + prog="runpod", description="Runpod Serverless Worker Arguments." +) +parser.add_argument( + "--rp_log_level", + type=str, + default=None, + help="""Controls what level of logs are printed to the console. + Options: ERROR, WARN, INFO, and DEBUG.""", ) -parser.add_argument("--rp_log_level", type=str, default=None, - help="""Controls what level of logs are printed to the console. - Options: ERROR, WARN, INFO, and DEBUG.""") -parser.add_argument("--rp_debugger", action="store_true", default=None, - help="Flag to enable the Debugger.") +parser.add_argument( + "--rp_debugger", + action="store_true", + default=None, + help="Flag to enable the Debugger.", +) # Hosted API -parser.add_argument("--rp_serve_api", action="store_true", default=None, - help="Flag to start the API server.") -parser.add_argument("--rp_api_port", type=int, default=8000, - help="Port to start the FastAPI server on.") -parser.add_argument("--rp_api_concurrency", type=int, default=1, - help="Number of concurrent FastAPI workers.") -parser.add_argument("--rp_api_host", type=str, default="localhost", - help="Host to start the FastAPI server on.") +parser.add_argument( + "--rp_serve_api", + action="store_true", + default=None, + help="Flag to start the API server.", +) +parser.add_argument( + "--rp_api_port", type=int, default=8000, help="Port to start the FastAPI server on." +) +parser.add_argument( + "--rp_api_concurrency", + type=int, + default=1, + help="Number of concurrent FastAPI workers.", +) +parser.add_argument( + "--rp_api_host", + type=str, + default="localhost", + help="Host to start the FastAPI server on.", +) # Test input -parser.add_argument("--test_input", type=str, default=None, - help="Test input for the worker, formatted as JSON.") +parser.add_argument( + "--test_input", + type=str, + default=None, + help="Test input for the worker, formatted as JSON.", +) def _set_config_args(config) -> dict: @@ -130,9 +154,9 @@ def start(config: Dict[str, Any]): api_server = rp_fastapi.WorkerAPI(config) api_server.start_uvicorn( - api_host=config['rp_args']['rp_api_host'], - api_port=config['rp_args']['rp_api_port'], - api_concurrency=config['rp_args']['rp_api_concurrency'] + api_host=config["rp_args"]["rp_api_host"], + api_port=config["rp_args"]["rp_api_port"], + api_concurrency=config["rp_args"]["rp_api_concurrency"], ) elif realtime_port: @@ -140,13 +164,15 @@ def start(config: Dict[str, Any]): api_server = rp_fastapi.WorkerAPI(config) api_server.start_uvicorn( - api_host='0.0.0.0', + api_host="0.0.0.0", api_port=realtime_port, - api_concurrency=realtime_concurrency + api_concurrency=realtime_concurrency, ) # --------------------------------- SLS-Core --------------------------------- # - elif os.environ.get("RUNPOD_USE_CORE", None) or os.environ.get("RUNPOD_CORE_PATH", None): + elif os.environ.get("RUNPOD_USE_CORE", None) or os.environ.get( + "RUNPOD_CORE_PATH", None + ): log.info("Starting worker with SLS-Core.") core.main(config) diff --git a/runpod/serverless/core.py b/runpod/serverless/core.py index 168cf204..6ee782f7 100644 --- a/runpod/serverless/core.py +++ b/runpod/serverless/core.py @@ -7,7 +7,7 @@ import pathlib import asyncio from ctypes import CDLL, byref, c_char_p, c_int -from typing import Any, Callable, List, Dict, Optional +from typing import Any, Callable, List, Dict, Optional from runpod.version import __version__ as runpod_version from runpod.serverless.modules.rp_logger import RunPodLogger @@ -32,7 +32,7 @@ def __str__(self) -> str: class Hook: # pylint: disable=too-many-instance-attributes - """ Singleton class for interacting with sls_core.so""" + """Singleton class for interacting with sls_core.so""" _instance = None @@ -58,13 +58,17 @@ def __init__(self, rust_so_path: Optional[str] = None) -> None: default_path = os.path.join( pathlib.Path(__file__).parent.absolute(), "sls_core.so" ) - self.rust_so_path = os.environ.get("RUNPOD_SLS_CORE_PATH", str(default_path)) + self.rust_so_path = os.environ.get( + "RUNPOD_SLS_CORE_PATH", str(default_path) + ) else: self.rust_so_path = rust_so_path rust_library = CDLL(self.rust_so_path) buffer = ctypes.create_string_buffer(1024) # 1 KiB - num_bytes = rust_library._runpod_sls_crate_version(byref(buffer), c_int(len(buffer))) + num_bytes = rust_library._runpod_sls_crate_version( + byref(buffer), c_int(len(buffer)) + ) self.rust_crate_version = buffer.raw[:num_bytes].decode("utf-8") @@ -75,24 +79,30 @@ def __init__(self, rust_so_path: Optional[str] = None) -> None: # Progress Update self._progress_update = rust_library._runpod_sls_progress_update self._progress_update.argtypes = [ - c_char_p, c_int, # id_ptr, id_len - c_char_p, c_int # json_ptr, json_len + c_char_p, + c_int, # id_ptr, id_len + c_char_p, + c_int, # json_ptr, json_len ] self._progress_update.restype = c_int # 1 if success, 0 if failure # Stream Output self._stream_output = rust_library._runpod_sls_stream_output self._stream_output.argtypes = [ - c_char_p, c_int, # id_ptr, id_len - c_char_p, c_int, # json_ptr, json_len + c_char_p, + c_int, # id_ptr, id_len + c_char_p, + c_int, # json_ptr, json_len ] self._stream_output.restype = c_int # 1 if success, 0 if failure # Post Output self._post_output = rust_library._runpod_sls_post_output self._post_output.argtypes = [ - c_char_p, c_int, # id_ptr, id_len - c_char_p, c_int, # json_ptr, json_len + c_char_p, + c_int, # id_ptr, id_len + c_char_p, + c_int, # json_ptr, json_len ] self._post_output.restype = c_int # 1 if success, 0 if failure @@ -114,13 +124,19 @@ def _json_serialize_job_data(self, job_data: Any) -> bytes: def get_jobs(self, max_concurrency: int, max_jobs: int) -> List[Dict[str, Any]]: """Get a job or jobs from the queue. The jobs are returned as a list of Job objects.""" - buffer = ctypes.create_string_buffer(1024 * 1024 * 20) # 20MB buffer to store jobs in + buffer = ctypes.create_string_buffer( + 1024 * 1024 * 20 + ) # 20MB buffer to store jobs in destination_length = len(buffer.raw) result: CGetJobResult = self._get_jobs( - c_int(max_concurrency), c_int(max_jobs), - byref(buffer), c_int(destination_length) + c_int(max_concurrency), + c_int(max_jobs), + byref(buffer), + c_int(destination_length), ) - if result.status_code == 1: # success! the job was stored bytes 0..res_len of buf.raw + if ( + result.status_code == 1 + ): # success! the job was stored bytes 0..res_len of buf.raw return list(json.loads(buffer.raw[: result.res_len].decode("utf-8"))) if result.status_code not in [0, 1]: @@ -133,10 +149,14 @@ def progress_update(self, job_id: str, json_data: bytes) -> bool: send a progress update to AI-API. """ id_bytes = job_id.encode("utf-8") - return bool(self._progress_update( - c_char_p(id_bytes), c_int(len(id_bytes)), - c_char_p(json_data), c_int(len(json_data)) - )) + return bool( + self._progress_update( + c_char_p(id_bytes), + c_int(len(id_bytes)), + c_char_p(json_data), + c_int(len(json_data)), + ) + ) async def stream_output(self, job_id: str, job_output: bytes) -> bool: """ @@ -144,10 +164,14 @@ async def stream_output(self, job_id: str, job_output: bytes) -> bool: """ json_data = self._json_serialize_job_data(job_output) id_bytes = job_id.encode("utf-8") - return bool(self._stream_output( - c_char_p(id_bytes), c_int(len(id_bytes)), - c_char_p(json_data), c_int(len(json_data)) - )) + return bool( + self._stream_output( + c_char_p(id_bytes), + c_int(len(id_bytes)), + c_char_p(json_data), + c_int(len(json_data)), + ) + ) def post_output(self, job_id: str, job_output: bytes) -> bool: """ @@ -156,74 +180,78 @@ def post_output(self, job_id: str, job_output: bytes) -> bool: """ json_data = self._json_serialize_job_data(job_output) id_bytes = job_id.encode("utf-8") - return bool(self._post_output( - c_char_p(id_bytes), c_int(len(id_bytes)), - c_char_p(json_data), c_int(len(json_data)) - )) + return bool( + self._post_output( + c_char_p(id_bytes), + c_int(len(id_bytes)), + c_char_p(json_data), + c_int(len(json_data)), + ) + ) def finish_stream(self, job_id: str) -> bool: """ tell the SLS queue that the result of a streaming job is complete. """ id_bytes = job_id.encode("utf-8") - return bool(self._finish_stream( - c_char_p(id_bytes), c_int(len(id_bytes)) - )) + return bool(self._finish_stream(c_char_p(id_bytes), c_int(len(id_bytes)))) # -------------------------------- Process Job ------------------------------- # -async def _process_job(config: Dict[str, Any], job: Dict[str, Any], hook) -> Dict[str, Any]: - """ Process a single job. """ - handler = config['handler'] +async def _process_job( + config: Dict[str, Any], job: Dict[str, Any], hook +) -> Dict[str, Any]: + """Process a single job.""" + handler = config["handler"] result = {} try: if inspect.isgeneratorfunction(handler) or inspect.isasyncgenfunction(handler): log.debug("SLS Core | Running job as a generator.") generator_output = rp_job.run_job_generator(handler, job) - aggregated_output = {'output': []} + aggregated_output = {"output": []} async for part in generator_output: - log.debug(f"SLS Core | Streaming output: {part}", job['id']) + log.debug(f"SLS Core | Streaming output: {part}", job["id"]) - if 'error' in part: + if "error" in part: aggregated_output = part break - if config.get('return_aggregate_stream', False): - aggregated_output['output'].append(part['output']) + if config.get("return_aggregate_stream", False): + aggregated_output["output"].append(part["output"]) - await hook.stream_output(job['id'], part) + await hook.stream_output(job["id"], part) - log.debug("SLS Core | Finished streaming output.", job['id']) - hook.finish_stream(job['id']) + log.debug("SLS Core | Finished streaming output.", job["id"]) + hook.finish_stream(job["id"]) result = aggregated_output else: log.debug("SLS Core | Running job as a standard function.") result = await rp_job.run_job(handler, job) - result = result.get('output', result) + result = result.get("output", result) except Exception as err: # pylint: disable=broad-except - log.error(f"SLS Core | Error running job: {err}", job['id']) - result = {'error': str(err)} + log.error(f"SLS Core | Error running job: {err}", job["id"]) + result = {"error": str(err)} finally: - log.debug(f"SLS Core | Posting output: {result}", job['id']) - hook.post_output(job['id'], result) + log.debug(f"SLS Core | Posting output: {result}", job["id"]) + hook.post_output(job["id"], result) # ---------------------------------------------------------------------------- # # Run Worker # # ---------------------------------------------------------------------------- # async def run(config: Dict[str, Any]) -> None: - """ Run the worker. + """Run the worker. Args: config: A dictionary containing the following keys: handler: A function that takes a job and returns a result. """ - max_concurrency = config.get('max_concurrency', 1) - max_jobs = config.get('max_jobs', 1) + max_concurrency = config.get("max_concurrency", 1) + max_jobs = config.get("max_jobs", 1) serverless_hook = Hook() @@ -235,7 +263,9 @@ async def run(config: Dict[str, Any]) -> None: continue for job in jobs: - asyncio.create_task(_process_job(config, job, serverless_hook), name=job['id']) + asyncio.create_task( + _process_job(config, job, serverless_hook), name=job["id"] + ) await asyncio.sleep(0) await asyncio.sleep(0) @@ -243,7 +273,7 @@ async def run(config: Dict[str, Any]) -> None: def main(config: Dict[str, Any]) -> None: """Run the worker in an asyncio event loop.""" - if config.get('handler') is None: + if config.get("handler") is None: log.error("SLS Core | config must contain a handler function") raise ValueError("config must contain a handler function") diff --git a/runpod/serverless/modules/__init__.py b/runpod/serverless/modules/__init__.py index c35cedda..31c31954 100644 --- a/runpod/serverless/modules/__init__.py +++ b/runpod/serverless/modules/__init__.py @@ -1 +1 @@ -''' Allows modules to be imported from the modules directory. ''' +""" Allows modules to be imported from the modules directory. """ diff --git a/runpod/serverless/modules/rp_fastapi.py b/runpod/serverless/modules/rp_fastapi.py index 5cd1e0a4..c279f8c7 100644 --- a/runpod/serverless/modules/rp_fastapi.py +++ b/runpod/serverless/modules/rp_fastapi.py @@ -1,4 +1,5 @@ -''' Used to launch the FastAPI web server when worker is running in API mode. ''' +""" Used to launch the FastAPI web server when worker is running in API mode. """ + # pylint: disable=too-few-public-methods, line-too-long import os @@ -104,16 +105,18 @@ # ------------------------------- Input Objects ------------------------------ # @dataclass class Job: - ''' Represents a job. ''' + """Represents a job.""" + id: str input: Union[dict, list, str, int, float, bool] @dataclass class TestJob: - ''' Represents a test job. + """Represents a test job. input can be any type of data. - ''' + """ + id: Optional[str] = None input: Optional[Union[dict, list, str, int, float, bool]] = None webhook: Optional[str] = None @@ -121,7 +124,8 @@ class TestJob: @dataclass class DefaultRequest: - """ Represents a test input. """ + """Represents a test input.""" + input: Dict[str, Any] webhook: Optional[str] = None @@ -129,7 +133,8 @@ class DefaultRequest: # ------------------------------ Output Objects ------------------------------ # @dataclass class JobOutput: - ''' Represents the output of a job. ''' + """Represents the output of a job.""" + id: str status: str output: Optional[Union[dict, list, str, int, float, bool]] = None @@ -138,7 +143,8 @@ class JobOutput: @dataclass class StreamOutput: - """ Stream representation of a job. """ + """Stream representation of a job.""" + id: str status: str = "IN_PROGRESS" stream: Optional[Union[dict, list, str, int, float, bool]] = None @@ -171,15 +177,15 @@ def _send_webhook(url: str, payload: Dict[str, Any]) -> bool: # API Worker # # ---------------------------------------------------------------------------- # class WorkerAPI: - ''' Used to launch the FastAPI web server when the worker is running in API mode. ''' + """Used to launch the FastAPI web server when the worker is running in API mode.""" def __init__(self, config: Dict[str, Any]): - ''' + """ Initializes the WorkerAPI class. 1. Starts the heartbeat thread. 2. Initializes the FastAPI web server. 3. Sets the handler for processing jobs. - ''' + """ # Start the heartbeat thread. heartbeat.start_ping() @@ -188,16 +194,16 @@ def __init__(self, config: Dict[str, Any]): tags_metadata = [ { "name": "Synchronously Submit Request & Get Job Results", - "description": "Endpoints for submitting job requests and getting the results." + "description": "Endpoints for submitting job requests and getting the results.", }, { "name": "Submit Job Requests", - "description": "Endpoints for submitting job requests." + "description": "Endpoints for submitting job requests.", }, { "name": "Check Job Results", - "description": "Endpoints for checking the status of a job and getting the results." - } + "description": "Endpoints for checking the status of a job and getting the results.", + }, ] # Initialize the FastAPI web server. @@ -206,7 +212,7 @@ def __init__(self, config: Dict[str, Any]): description=DESCRIPTION, version=runpod_version, docs_url="/", - openapi_tags=tags_metadata + openapi_tags=tags_metadata, ) # Create an APIRouter and add the route for processing jobs. @@ -214,63 +220,74 @@ def __init__(self, config: Dict[str, Any]): # Docs Redirect /docs -> / api_router.add_api_route( - "/docs", lambda: RedirectResponse(url="/"), - include_in_schema=False + "/docs", lambda: RedirectResponse(url="/"), include_in_schema=False ) if RUNPOD_ENDPOINT_ID: - api_router.add_api_route(f"/{RUNPOD_ENDPOINT_ID}/realtime", - self._realtime, methods=["POST"]) + api_router.add_api_route( + f"/{RUNPOD_ENDPOINT_ID}/realtime", self._realtime, methods=["POST"] + ) # Simulation endpoints. api_router.add_api_route( - "/run", self._sim_run, methods=["POST"], response_model_exclude_none=True, + "/run", + self._sim_run, + methods=["POST"], + response_model_exclude_none=True, summary="Mimics the behavior of the run endpoint.", description=RUN_DESCRIPTION, - tags=["Submit Job Requests"] + tags=["Submit Job Requests"], ) api_router.add_api_route( - "/runsync", self._sim_runsync, methods=["POST"], + "/runsync", + self._sim_runsync, + methods=["POST"], response_model_exclude_none=True, summary="Mimics the behavior of the runsync endpoint.", description=RUNSYNC_DESCRIPTION, - tags=["Synchronously Submit Request & Get Job Results"] + tags=["Synchronously Submit Request & Get Job Results"], ) api_router.add_api_route( - "/stream/{job_id}", self._sim_stream, methods=["POST"], + "/stream/{job_id}", + self._sim_stream, + methods=["POST"], response_model_exclude_none=True, summary="Mimics the behavior of the stream endpoint.", description=STREAM_DESCRIPTION, - tags=["Check Job Results"] + tags=["Check Job Results"], ) api_router.add_api_route( - "/status/{job_id}", self._sim_status, methods=["POST"], + "/status/{job_id}", + self._sim_status, + methods=["POST"], response_model_exclude_none=True, summary="Mimics the behavior of the status endpoint.", description=STATUS_DESCRIPTION, - tags=["Check Job Results"] + tags=["Check Job Results"], ) # Include the APIRouter in the FastAPI application. self.rp_app.include_router(api_router) - def start_uvicorn(self, api_host='localhost', api_port=8000, api_concurrency=1): - ''' + def start_uvicorn(self, api_host="localhost", api_port=8000, api_concurrency=1): + """ Starts the Uvicorn server. - ''' + """ uvicorn.run( - self.rp_app, host=api_host, - port=int(api_port), workers=int(api_concurrency), + self.rp_app, + host=api_host, + port=int(api_port), + workers=int(api_concurrency), log_level=os.environ.get("UVICORN_LOG_LEVEL", "info"), - access_log=False + access_log=False, ) # ----------------------------- Realtime Endpoint ---------------------------- # async def _realtime(self, job: Job): - ''' + """ Performs model inference on the input data using the provided handler. If handler is not provided, returns an error message. - ''' + """ job_list.add_job(job.id) # Process the job using the provided handler, passing in the job input. @@ -287,14 +304,14 @@ async def _realtime(self, job: Job): # ------------------------------------ run ----------------------------------- # async def _sim_run(self, job_request: DefaultRequest) -> JobOutput: - """ Development endpoint to simulate run behavior. """ + """Development endpoint to simulate run behavior.""" assigned_job_id = f"test-{uuid.uuid4()}" job_list.add_job(assigned_job_id, job_request.input, job_request.webhook) return jsonable_encoder({"id": assigned_job_id, "status": "IN_PROGRESS"}) # ---------------------------------- runsync --------------------------------- # async def _sim_runsync(self, job_request: DefaultRequest) -> JobOutput: - """ Development endpoint to simulate runsync behavior. """ + """Development endpoint to simulate runsync behavior.""" assigned_job_id = f"test-{uuid.uuid4()}" job = TestJob(id=assigned_job_id, input=job_request.input) @@ -302,39 +319,35 @@ async def _sim_runsync(self, job_request: DefaultRequest) -> JobOutput: generator_output = run_job_generator(self.config["handler"], job.__dict__) job_output = {"output": []} async for stream_output in generator_output: - job_output['output'].append(stream_output["output"]) + job_output["output"].append(stream_output["output"]) else: job_output = await run_job(self.config["handler"], job.__dict__) - if job_output.get('error', None): - return jsonable_encoder({ - "id": job.id, - "status": "FAILED", - "error": job_output['error'] - }) + if job_output.get("error", None): + return jsonable_encoder( + {"id": job.id, "status": "FAILED", "error": job_output["error"]} + ) if job_request.webhook: thread = threading.Thread( target=_send_webhook, - args=(job_request.webhook, job_output), daemon=True) + args=(job_request.webhook, job_output), + daemon=True, + ) thread.start() - return jsonable_encoder({ - "id": job.id, - "status": "COMPLETED", - "output": job_output['output'] - }) + return jsonable_encoder( + {"id": job.id, "status": "COMPLETED", "output": job_output["output"]} + ) # ---------------------------------- stream ---------------------------------- # async def _sim_stream(self, job_id: str) -> StreamOutput: - """ Development endpoint to simulate stream behavior. """ + """Development endpoint to simulate stream behavior.""" stashed_job = job_list.get_job(job_id) if stashed_job is None: - return jsonable_encoder({ - "id": job_id, - "status": "FAILED", - "error": "Job ID not found" - }) + return jsonable_encoder( + {"id": job_id, "status": "FAILED", "error": "Job ID not found"} + ) job = TestJob(id=job_id, input=stashed_job.input) @@ -344,36 +357,36 @@ async def _sim_stream(self, job_id: str) -> StreamOutput: async for stream_output in generator_output: stream_accumulator.append({"output": stream_output["output"]}) else: - return jsonable_encoder({ - "id": job_id, - "status": "FAILED", - "error": "Stream not supported, handler must be a generator." - }) + return jsonable_encoder( + { + "id": job_id, + "status": "FAILED", + "error": "Stream not supported, handler must be a generator.", + } + ) job_list.remove_job(job.id) if stashed_job.webhook: thread = threading.Thread( target=_send_webhook, - args=(stashed_job.webhook, stream_accumulator), daemon=True) + args=(stashed_job.webhook, stream_accumulator), + daemon=True, + ) thread.start() - return jsonable_encoder({ - "id": job_id, - "status": "COMPLETED", - "stream": stream_accumulator - }) + return jsonable_encoder( + {"id": job_id, "status": "COMPLETED", "stream": stream_accumulator} + ) # ---------------------------------- status ---------------------------------- # async def _sim_status(self, job_id: str) -> JobOutput: - """ Development endpoint to simulate status behavior. """ + """Development endpoint to simulate status behavior.""" stashed_job = job_list.get_job(job_id) if stashed_job is None: - return jsonable_encoder({ - "id": job_id, - "status": "FAILED", - "error": "Job ID not found" - }) + return jsonable_encoder( + {"id": job_id, "status": "FAILED", "error": "Job ID not found"} + ) job = TestJob(id=stashed_job.id, input=stashed_job.input) @@ -381,27 +394,25 @@ async def _sim_status(self, job_id: str) -> JobOutput: generator_output = run_job_generator(self.config["handler"], job.__dict__) job_output = {"output": []} async for stream_output in generator_output: - job_output['output'].append(stream_output["output"]) + job_output["output"].append(stream_output["output"]) else: job_output = await run_job(self.config["handler"], job.__dict__) job_list.remove_job(job.id) - if job_output.get('error', None): - return jsonable_encoder({ - "id": job_id, - "status": "FAILED", - "error": job_output['error'] - }) + if job_output.get("error", None): + return jsonable_encoder( + {"id": job_id, "status": "FAILED", "error": job_output["error"]} + ) if stashed_job.webhook: thread = threading.Thread( target=_send_webhook, - args=(stashed_job.webhook, job_output), daemon=True) + args=(stashed_job.webhook, job_output), + daemon=True, + ) thread.start() - return jsonable_encoder({ - "id": job_id, - "status": "COMPLETED", - "output": job_output['output'] - }) + return jsonable_encoder( + {"id": job_id, "status": "COMPLETED", "output": job_output["output"]} + ) diff --git a/runpod/serverless/modules/rp_handler.py b/runpod/serverless/modules/rp_handler.py index 40f62128..2a442f3a 100644 --- a/runpod/serverless/modules/rp_handler.py +++ b/runpod/serverless/modules/rp_handler.py @@ -3,6 +3,7 @@ import inspect from typing import Callable + def is_generator(handler: Callable) -> bool: - """Check if handler is a generator function. """ + """Check if handler is a generator function.""" return inspect.isgeneratorfunction(handler) or inspect.isasyncgenfunction(handler) diff --git a/runpod/serverless/modules/rp_http.py b/runpod/serverless/modules/rp_http.py index 6ce43a1a..f491fb56 100644 --- a/runpod/serverless/modules/rp_http.py +++ b/runpod/serverless/modules/rp_http.py @@ -10,11 +10,15 @@ from runpod.serverless.modules.rp_logger import RunPodLogger from .worker_state import Jobs, WORKER_ID -JOB_DONE_URL_TEMPLATE = str(os.environ.get('RUNPOD_WEBHOOK_POST_OUTPUT', 'JOB_DONE_URL')) -JOB_DONE_URL = JOB_DONE_URL_TEMPLATE.replace('$RUNPOD_POD_ID', WORKER_ID) +JOB_DONE_URL_TEMPLATE = str( + os.environ.get("RUNPOD_WEBHOOK_POST_OUTPUT", "JOB_DONE_URL") +) +JOB_DONE_URL = JOB_DONE_URL_TEMPLATE.replace("$RUNPOD_POD_ID", WORKER_ID) -JOB_STREAM_URL_TEMPLATE = str(os.environ.get('RUNPOD_WEBHOOK_POST_STREAM', 'JOB_STREAM_URL')) -JOB_STREAM_URL = JOB_STREAM_URL_TEMPLATE.replace('$RUNPOD_POD_ID', WORKER_ID) +JOB_STREAM_URL_TEMPLATE = str( + os.environ.get("RUNPOD_WEBHOOK_POST_STREAM", "JOB_STREAM_URL") +) +JOB_STREAM_URL = JOB_STREAM_URL_TEMPLATE.replace("$RUNPOD_POD_ID", WORKER_ID) log = RunPodLogger() job_list = Jobs() @@ -25,19 +29,26 @@ async def _transmit(client_session, url, job_data): Wrapper for transmitting results via POST. """ retry_options = ExponentialRetry(attempts=3) - retry_client = RetryClient(client_session=client_session, retry_options=retry_options) + retry_client = RetryClient( + client_session=client_session, retry_options=retry_options + ) kwargs = { "data": job_data, - "headers": {"charset": "utf-8", "Content-Type": "application/x-www-form-urlencoded"}, - "raise_for_status": True + "headers": { + "charset": "utf-8", + "Content-Type": "application/x-www-form-urlencoded", + }, + "raise_for_status": True, } async with retry_client.post(url, **kwargs) as client_response: await client_response.text() -async def _handle_result(session, job_data, job, url_template, log_message, is_stream=False): # pylint: disable=too-many-arguments +async def _handle_result( + session, job_data, job, url_template, log_message, is_stream=False +): # pylint: disable=too-many-arguments """ A helper function to handle the result, either for sending or streaming. """ @@ -45,33 +56,40 @@ async def _handle_result(session, job_data, job, url_template, log_message, is_s serialized_job_data = json.dumps(job_data, ensure_ascii=False) is_stream = "true" if is_stream else "false" - url = url_template.replace('$ID', job['id']) + f"&isStream={is_stream}" + url = url_template.replace("$ID", job["id"]) + f"&isStream={is_stream}" await _transmit(session, url, serialized_job_data) - log.debug(f"{log_message}", job['id']) + log.debug(f"{log_message}", job["id"]) except aiohttp.ClientError as err: - log.error(f"Failed to return job results. | {err}", job['id']) + log.error(f"Failed to return job results. | {err}", job["id"]) except (TypeError, RuntimeError) as err: - log.error(f"Error while returning job result. | {err}", job['id']) + log.error(f"Error while returning job result. | {err}", job["id"]) finally: - #job_data status is used for local development with FastAPI - if url_template == JOB_DONE_URL and job_data.get('status', None) != 'IN_PROGRESS': + # job_data status is used for local development with FastAPI + if ( + url_template == JOB_DONE_URL + and job_data.get("status", None) != "IN_PROGRESS" + ): job_list.remove_job(job["id"]) - log.info("Finished.", job['id']) + log.info("Finished.", job["id"]) async def send_result(session, job_data, job, is_stream=False): """ Return the job results. """ - await _handle_result(session, job_data, job, JOB_DONE_URL, "Results sent.", is_stream=is_stream) + await _handle_result( + session, job_data, job, JOB_DONE_URL, "Results sent.", is_stream=is_stream + ) async def stream_result(session, job_data, job): """ Return the stream job results. """ - await _handle_result(session, job_data, job, JOB_STREAM_URL, "Intermediate results sent.") + await _handle_result( + session, job_data, job, JOB_STREAM_URL, "Intermediate results sent." + ) diff --git a/runpod/serverless/modules/rp_job.py b/runpod/serverless/modules/rp_job.py index fe7d3225..4a20b37f 100644 --- a/runpod/serverless/modules/rp_job.py +++ b/runpod/serverless/modules/rp_job.py @@ -1,6 +1,7 @@ """ Job related helpers. """ + # pylint: disable=too-many-branches import inspect @@ -17,7 +18,7 @@ from .rp_tips import check_return_size from ...version import __version__ as runpod_version -JOB_GET_URL = str(os.environ.get('RUNPOD_WEBHOOK_GET_JOB')).replace('$ID', WORKER_ID) +JOB_GET_URL = str(os.environ.get("RUNPOD_WEBHOOK_GET_JOB")).replace("$ID", WORKER_ID) log = RunPodLogger() job_list = Jobs() @@ -33,7 +34,7 @@ def _job_get_url(): Returns: str: The prepared URL for the 'get' request to the serverless API. """ - job_in_progress = '1' if job_list.get_job_list() else '0' + job_in_progress = "1" if job_list.get_job_list() else "0" return JOB_GET_URL + f"&job_in_progress={job_in_progress}" @@ -60,7 +61,9 @@ async def get_job(session: ClientSession, retry=True) -> Optional[Dict[str, Any] continue if response.status == 400: - log.debug("Received 400 status, expected when FlashBoot is enabled.") + log.debug( + "Received 400 status, expected when FlashBoot is enabled." + ) if retry is False: break continue @@ -98,7 +101,9 @@ async def get_job(session: ClientSession, retry=True) -> Optional[Dict[str, Any] err_type = type(err).__name__ err_message = str(err) err_traceback = traceback.format_exc() - log.error(f"Failed to get job. | Error Type: {err_type} | Error Message: {err_message}") + log.error( + f"Failed to get job. | Error Type: {err_type} | Error Message: {err_message}" + ) log.error(f"Traceback: {err_traceback}") if next_job is None: @@ -109,7 +114,7 @@ async def get_job(session: ClientSession, retry=True) -> Optional[Dict[str, Any] await asyncio.sleep(0) else: job_list.add_job(next_job["id"]) - log.debug("Request ID added.", next_job['id']) + log.debug("Request ID added.", next_job["id"]) return next_job @@ -127,19 +132,23 @@ async def run_job(handler: Callable, job: Dict[str, Any]) -> Dict[str, Any]: Returns: Dict[str, Any]: The result of running the job. """ - log.info('Started.', job["id"]) + log.info("Started.", job["id"]) run_result = {} try: handler_return = handler(job) - job_output = await handler_return if inspect.isawaitable(handler_return) else handler_return + job_output = ( + await handler_return + if inspect.isawaitable(handler_return) + else handler_return + ) - log.debug(f'Handler output: {job_output}', job["id"]) + log.debug(f"Handler output: {job_output}", job["id"]) if isinstance(job_output, dict): error_msg = job_output.pop("error", None) refresh_worker = job_output.pop("refresh_worker", None) - run_result['output'] = job_output + run_result["output"] = job_output if error_msg: run_result["error"] = error_msg @@ -157,35 +166,38 @@ async def run_job(handler: Callable, job: Dict[str, Any]) -> Dict[str, Any]: check_return_size(run_result) # Checks the size of the return body. - except Exception as err: # pylint: disable=broad-except + except Exception as err: # pylint: disable=broad-except error_info = { "error_type": str(type(err)), "error_message": str(err), "error_traceback": traceback.format_exc(), "hostname": os.environ.get("RUNPOD_POD_HOSTNAME", "unknown"), "worker_id": os.environ.get("RUNPOD_POD_ID", "unknown"), - "runpod_version": runpod_version + "runpod_version": runpod_version, } - log.error('Captured Handler Exception', job["id"]) + log.error("Captured Handler Exception", job["id"]) log.error(json.dumps(error_info, indent=4)) run_result = {"error": json.dumps(error_info)} finally: - log.debug(f'run_job return: {run_result}', job["id"]) + log.debug(f"run_job return: {run_result}", job["id"]) return run_result async def run_job_generator( - handler: Callable, - job: Dict[str, Any]) -> AsyncGenerator[Dict[str, Union[str, Any]], None]: - ''' + handler: Callable, job: Dict[str, Any] +) -> AsyncGenerator[Dict[str, Union[str, Any]], None]: + """ Run generator job used to stream output. Yields output partials from the generator. - ''' + """ is_async_gen = inspect.isasyncgenfunction(handler) - log.debug('Using Async Generator' if is_async_gen else 'Using Standard Generator', job["id"]) + log.debug( + "Using Async Generator" if is_async_gen else "Using Standard Generator", + job["id"], + ) try: job_output = handler(job) @@ -199,10 +211,8 @@ async def run_job_generator( log.debug(f"Generator output: {output_partial}", job["id"]) yield {"output": output_partial} - except Exception as err: # pylint: disable=broad-except + except Exception as err: # pylint: disable=broad-except log.error(err, job["id"]) - yield { - "error": f"handler: {str(err)} \ntraceback: {traceback.format_exc()}" - } + yield {"error": f"handler: {str(err)} \ntraceback: {traceback.format_exc()}"} finally: - log.info('Finished running generator.', job["id"]) + log.info("Finished running generator.", job["id"]) diff --git a/runpod/serverless/modules/rp_local.py b/runpod/serverless/modules/rp_local.py index 7db3c69c..40b4ccdd 100644 --- a/runpod/serverless/modules/rp_local.py +++ b/runpod/serverless/modules/rp_local.py @@ -1,7 +1,7 @@ -''' +""" runpod | serverless | rp_local.py Provides the local testing functionality for runpod serverless worker. -''' +""" import os import sys @@ -13,14 +13,15 @@ log = RunPodLogger() + async def run_local(config: Dict[str, Any]) -> None: - ''' + """ Runs the worker locally. - ''' + """ # Get the local test job - if config['rp_args'].get('test_input', None): + if config["rp_args"].get("test_input", None): log.info("test_input set, using test_input as job input.") - local_job = config['rp_args']['test_input'] + local_job = config["rp_args"]["test_input"] else: if not os.path.exists("test_input.json"): log.warn("test_input.json not found, exiting.") @@ -48,9 +49,9 @@ async def run_local(config: Dict[str, Any]) -> None: log.info(f"Job result: {job_result}") # Compare to sample output, if provided - if config['rp_args'].get('test_output', None): + if config["rp_args"].get("test_output", None): log.info("test_output set, comparing output to test_output.") - if job_result != config['rp_args']['test_output']: + if job_result != config["rp_args"]["test_output"]: log.error("Job output does not match test_output.") sys.exit(1) log.info("Job output matches test_output.") diff --git a/runpod/serverless/modules/rp_logger.py b/runpod/serverless/modules/rp_logger.py index dd95ef04..a91941ef 100644 --- a/runpod/serverless/modules/rp_logger.py +++ b/runpod/serverless/modules/rp_logger.py @@ -1,4 +1,4 @@ -''' +""" PodWorker | modules | logging.py Log Levels (Level - Value - Description) @@ -8,7 +8,7 @@ INFO - 2 - Confirmation that things are working as expected. WARN - 3 - An indication that something unexpected happened. ERROR - 4 - Serious problem, the software has not been able to perform some function. -''' +""" import os import json @@ -16,37 +16,38 @@ MAX_MESSAGE_LENGTH = 4096 -LOG_LEVELS = ['NOTSET', 'DEBUG', 'INFO', 'WARN', 'ERROR'] +LOG_LEVELS = ["NOTSET", "DEBUG", "INFO", "WARN", "ERROR"] def _validate_log_level(log_level): - ''' + """ Checks the debug level and returns the debug level name. - ''' + """ if isinstance(log_level, str): log_level = log_level.upper() if log_level not in LOG_LEVELS: - raise ValueError(f'Invalid debug level: {log_level}') + raise ValueError(f"Invalid debug level: {log_level}") return log_level if isinstance(log_level, int): if log_level < 0 or log_level > 4: - raise ValueError(f'Invalid debug level: {log_level}') + raise ValueError(f"Invalid debug level: {log_level}") return LOG_LEVELS[log_level] - raise ValueError(f'Invalid debug level: {log_level}') + raise ValueError(f"Invalid debug level: {log_level}") class RunPodLogger: - '''Singleton class for logging.''' + """Singleton class for logging.""" __instance = None - level = _validate_log_level(os.environ.get( - 'RUNPOD_LOG_LEVEL', - os.environ.get('RUNPOD_DEBUG_LEVEL', 'DEBUG')) + level = _validate_log_level( + os.environ.get( + "RUNPOD_LOG_LEVEL", os.environ.get("RUNPOD_DEBUG_LEVEL", "DEBUG") + ) ) def __new__(cls): @@ -55,22 +56,22 @@ def __new__(cls): return RunPodLogger.__instance def set_level(self, new_level): - ''' + """ Set the debug level for logging. Can be set to the name or value of the debug level. - ''' + """ self.level = _validate_log_level(new_level) - self.info(f'Log level set to {self.level}') + self.info(f"Log level set to {self.level}") - def log(self, message, message_level='INFO', job_id=None): - ''' + def log(self, message, message_level="INFO", job_id=None): + """ Log message to stdout if RUNPOD_DEBUG is true. - ''' - if self.level == 'NOTSET': + """ + if self.level == "NOTSET": return level_index = LOG_LEVELS.index(self.level) - if level_index > LOG_LEVELS.index(message_level) and message_level != 'TIP': + if level_index > LOG_LEVELS.index(message_level) and message_level != "TIP": return message = str(message) @@ -78,59 +79,57 @@ def log(self, message, message_level='INFO', job_id=None): if len(message) > MAX_MESSAGE_LENGTH: half_max_length = MAX_MESSAGE_LENGTH // 2 truncated_amount = len(message) - MAX_MESSAGE_LENGTH - truncation_note = f'\n...TRUNCATED {truncated_amount} CHARACTERS...\n' - message = message[:half_max_length] + truncation_note + message[-half_max_length:] - - if os.environ.get('RUNPOD_ENDPOINT_ID'): - log_json = { - 'requestId': job_id, - 'message': message, - 'level': message_level - } + truncation_note = f"\n...TRUNCATED {truncated_amount} CHARACTERS...\n" + message = ( + message[:half_max_length] + truncation_note + message[-half_max_length:] + ) + + if os.environ.get("RUNPOD_ENDPOINT_ID"): + log_json = {"requestId": job_id, "message": message, "level": message_level} print(json.dumps(log_json), flush=True) return if job_id: - message = f'{job_id} | {message}' + message = f"{job_id} | {message}" - print(f'{message_level.ljust(7)}| {message}', flush=True) + print(f"{message_level.ljust(7)}| {message}", flush=True) return def secret(self, secret_name, secret): - ''' + """ Censors secrets for logging. Replaces everything except the first and last characters with * - ''' + """ secret = str(secret) - redacted_secret = secret[0] + '*' * (len(secret)-2) + secret[-1] + redacted_secret = secret[0] + "*" * (len(secret) - 2) + secret[-1] self.info(f"{secret_name}: {redacted_secret}") def debug(self, message, request_id: Optional[str] = None): - ''' + """ debug log - ''' - self.log(message, 'DEBUG', request_id) + """ + self.log(message, "DEBUG", request_id) def info(self, message, request_id: Optional[str] = None): - ''' + """ info log - ''' - self.log(message, 'INFO', request_id) + """ + self.log(message, "INFO", request_id) def warn(self, message, request_id: Optional[str] = None): - ''' + """ warn log - ''' - self.log(message, 'WARN', request_id) + """ + self.log(message, "WARN", request_id) def error(self, message, request_id: Optional[str] = None): - ''' + """ error log - ''' - self.log(message, 'ERROR', request_id) + """ + self.log(message, "ERROR", request_id) def tip(self, message): - ''' + """ tip log - ''' - self.log(message, 'TIP') + """ + self.log(message, "TIP") diff --git a/runpod/serverless/modules/rp_ping.py b/runpod/serverless/modules/rp_ping.py index 050c24b0..88c46c7c 100644 --- a/runpod/serverless/modules/rp_ping.py +++ b/runpod/serverless/modules/rp_ping.py @@ -2,6 +2,7 @@ This module defines the Heartbeat class. The heartbeat is responsible for sending periodic pings to the Runpod server. """ + import os import time import threading @@ -19,45 +20,47 @@ class Heartbeat: - ''' Sends heartbeats to the Runpod server. ''' + """Sends heartbeats to the Runpod server.""" - PING_URL = os.environ.get('RUNPOD_WEBHOOK_PING', "PING_NOT_SET") - PING_URL = PING_URL.replace('$RUNPOD_POD_ID', WORKER_ID) - PING_INTERVAL = int(os.environ.get('RUNPOD_PING_INTERVAL', 10000))//1000 + PING_URL = os.environ.get("RUNPOD_WEBHOOK_PING", "PING_NOT_SET") + PING_URL = PING_URL.replace("$RUNPOD_POD_ID", WORKER_ID) + PING_INTERVAL = int(os.environ.get("RUNPOD_PING_INTERVAL", 10000)) // 1000 _thread_started = False def __init__(self, pool_connections=10, retries=3) -> None: - ''' + """ Initializes the Heartbeat class. - ''' + """ self._session = requests.Session() - self._session.headers.update({"Authorization": f"{os.environ.get('RUNPOD_AI_API_KEY')}"}) + self._session.headers.update( + {"Authorization": f"{os.environ.get('RUNPOD_AI_API_KEY')}"} + ) retry_strategy = Retry( total=retries, status_forcelist=[429, 500, 502, 503, 504], allowed_methods=["GET"], - backoff_factor=1 + backoff_factor=1, ) adapter = requests.adapters.HTTPAdapter( pool_connections=pool_connections, pool_maxsize=pool_connections, - max_retries=retry_strategy + max_retries=retry_strategy, ) - self._session.mount('http://', adapter) - self._session.mount('https://', adapter) + self._session.mount("http://", adapter) + self._session.mount("https://", adapter) def start_ping(self, test=False): - ''' + """ Sends heartbeat pings to the Runpod server. - ''' - if os.environ.get('RUNPOD_AI_API_KEY') is None: + """ + if os.environ.get("RUNPOD_AI_API_KEY") is None: log.debug("Not deployed on RunPod serverless, pings will not be sent.") return - if os.environ.get('RUNPOD_POD_ID') is None: + if os.environ.get("RUNPOD_POD_ID") is None: log.info("Not running on RunPod, pings will not be sent.") return @@ -70,9 +73,9 @@ def start_ping(self, test=False): Heartbeat._thread_started = True def ping_loop(self, test=False): - ''' + """ Sends heartbeat pings to the Runpod server. - ''' + """ while True: self._send_ping() time.sleep(self.PING_INTERVAL) @@ -81,22 +84,20 @@ def ping_loop(self, test=False): return def _send_ping(self): - ''' + """ Sends a heartbeat to the Runpod server. - ''' + """ job_ids = jobs.get_job_list() - ping_params = { - 'job_id': job_ids, - 'runpod_version': runpod_version - } + ping_params = {"job_id": job_ids, "runpod_version": runpod_version} try: result = self._session.get( - self.PING_URL, params=ping_params, - timeout=self.PING_INTERVAL*2 + self.PING_URL, params=ping_params, timeout=self.PING_INTERVAL * 2 ) - log.debug(f"Heartbeat Sent | URL: {self.PING_URL} | Status: {result.status_code}") + log.debug( + f"Heartbeat Sent | URL: {self.PING_URL} | Status: {result.status_code}" + ) except requests.RequestException as err: log.error(f"Ping Request Error: {err}, attempting to restart ping.") diff --git a/runpod/serverless/modules/rp_progress.py b/runpod/serverless/modules/rp_progress.py index 75229c22..c2da3504 100644 --- a/runpod/serverless/modules/rp_progress.py +++ b/runpod/serverless/modules/rp_progress.py @@ -23,8 +23,7 @@ async def _create_session_async(): timeout = aiohttp.ClientTimeout(total=300, connect=2, sock_connect=2) return aiohttp.ClientSession( - connector=aiohttp.TCPConnector(limit=None), - headers=auth_header, timeout=timeout + connector=aiohttp.TCPConnector(limit=None), headers=auth_header, timeout=timeout ) @@ -32,10 +31,7 @@ async def _async_progress_update(session, job, progress): """ The actual asynchronous function that sends the update. """ - job_data = { - "status": "IN_PROGRESS", - "output": progress - } + job_data = {"status": "IN_PROGRESS", "output": progress} await send_result(session, job_data, job) @@ -48,6 +44,7 @@ def _thread_target(job: Dict[str, Any], progress: Any): asyncio.set_event_loop(loop) try: + async def main(): session = await _create_session_async() async with session: diff --git a/runpod/serverless/modules/rp_scale.py b/runpod/serverless/modules/rp_scale.py index 4d14cd3f..f991c936 100644 --- a/runpod/serverless/modules/rp_scale.py +++ b/runpod/serverless/modules/rp_scale.py @@ -1,7 +1,7 @@ -''' +""" runpod | serverless | rp_scale.py Provides the functionality for scaling the runpod serverless worker. -''' +""" import asyncio import typing @@ -29,7 +29,7 @@ def _default_concurrency_modifier(current_concurrency: int) -> int: return current_concurrency -class JobScaler(): +class JobScaler: """ Job Scaler. This class is responsible for scaling the number of concurrent requests. """ @@ -65,7 +65,9 @@ async def get_jobs(self, session): List[Any]: A list of job data retrieved from the server. """ while self.is_alive(): - self.current_concurrency = self.concurrency_modifier(self.current_concurrency) + self.current_concurrency = self.concurrency_modifier( + self.current_concurrency + ) log.debug(f"Concurrency set to: {self.current_concurrency}") log.debug(f"Jobs in progress: {job_list.get_job_count()}") @@ -74,7 +76,9 @@ async def get_jobs(self, session): tasks = [ asyncio.create_task(get_job(session, retry=False)) - for _ in range(self.current_concurrency if job_list.get_job_list() else 1) + for _ in range( + self.current_concurrency if job_list.get_job_list() else 1 + ) ] for job_future in asyncio.as_completed(tasks): diff --git a/runpod/serverless/modules/rp_tips.py b/runpod/serverless/modules/rp_tips.py index b8583f35..e351338b 100644 --- a/runpod/serverless/modules/rp_tips.py +++ b/runpod/serverless/modules/rp_tips.py @@ -1,6 +1,6 @@ -''' +""" RunPod Tips -''' +""" import sys import runpod.serverless.modules.rp_logger as RunPodLogger @@ -9,13 +9,15 @@ def check_return_size(return_body): - ''' + """ Checks the size of the return body. If the size is above 20MB, it will recommend using storage upload. - ''' + """ size_bytes = sys.getsizeof(return_body) size_mb = round(size_bytes / 1_000_000, 2) if size_mb > 20: - log.tip(f"Your return body is {size_mb} MB which exceeds the 20 MB limit. " - "Consider using S3 upload and returning the object's URL instead.") + log.tip( + f"Your return body is {size_mb} MB which exceeds the 20 MB limit. " + "Consider using S3 upload and returning the object's URL instead." + ) diff --git a/runpod/serverless/modules/worker_state.py b/runpod/serverless/modules/worker_state.py index caab2892..d612e247 100644 --- a/runpod/serverless/modules/worker_state.py +++ b/runpod/serverless/modules/worker_state.py @@ -1,6 +1,6 @@ -''' +""" Handles getting stuff from environment variables and updating the global state like job id. -''' +""" import os import uuid @@ -9,7 +9,7 @@ REF_COUNT_ZERO = time.perf_counter() # Used for benchmarking with the debugger. -WORKER_ID = os.environ.get('RUNPOD_POD_ID', str(uuid.uuid4())) +WORKER_ID = os.environ.get("RUNPOD_POD_ID", str(uuid.uuid4())) # ----------------------------------- Flags ---------------------------------- # @@ -17,9 +17,9 @@ def get_auth_header(): - ''' + """ Returns the authorization header with the API key. - ''' + """ return {"Authorization": f"{os.environ.get('RUNPOD_AI_API_KEY')}"} @@ -60,7 +60,7 @@ def __str__(self) -> str: # Tracker # # ---------------------------------------------------------------------------- # class Jobs: - ''' Track the state of current jobs.''' + """Track the state of current jobs.""" _instance = None jobs = set() @@ -72,22 +72,22 @@ def __new__(cls): return Jobs._instance def add_job(self, job_id, job_input=None, webhook=None): - ''' + """ Adds a job to the list of jobs. - ''' + """ self.jobs.add(Job(job_id, job_input, webhook)) def remove_job(self, job_id): - ''' + """ Removes a job from the list of jobs. - ''' + """ self.jobs.remove(Job(job_id)) def get_job(self, job_id) -> Optional[Union[dict, list, str, int, float, bool]]: - ''' + """ Returns the job with the given id. Used within rp_fastapi.py for local testing. - ''' + """ for job in self.jobs: if job.id == job_id: return job @@ -95,13 +95,13 @@ def get_job(self, job_id) -> Optional[Union[dict, list, str, int, float, bool]]: return None def get_job_list(self): - ''' + """ Returns the list of jobs as a string. - ''' - return ','.join(str(job) for job in self.jobs) if self.jobs else None + """ + return ",".join(str(job) for job in self.jobs) if self.jobs else None def get_job_count(self): - ''' + """ Returns the number of jobs. - ''' + """ return len(self.jobs) diff --git a/runpod/serverless/utils/__init__.py b/runpod/serverless/utils/__init__.py index 7d041eaa..09799679 100644 --- a/runpod/serverless/utils/__init__.py +++ b/runpod/serverless/utils/__init__.py @@ -1,4 +1,4 @@ -''' Allows for the import of all modules in the utils directory. ''' +""" Allows for the import of all modules in the utils directory. """ from .rp_download import download_files_from_urls diff --git a/runpod/serverless/utils/rp_cleanup.py b/runpod/serverless/utils/rp_cleanup.py index 22b9d3b4..5ec43692 100644 --- a/runpod/serverless/utils/rp_cleanup.py +++ b/runpod/serverless/utils/rp_cleanup.py @@ -1,8 +1,8 @@ -''' +""" runpod | serverless | cleanup.py Called to clean up the worker pod after a job is completed. -''' +""" import os import shutil @@ -10,16 +10,16 @@ def clean(folder_list: List[str] = None): - ''' + """ Removes the downloads folder. - ''' + """ shutil.rmtree("input_objects", ignore_errors=True) shutil.rmtree("output_objects", ignore_errors=True) shutil.rmtree("job_files", ignore_errors=True) - if os.path.exists('output.zip'): - os.remove('output.zip') + if os.path.exists("output.zip"): + os.remove("output.zip") if folder_list is not None: for folder in folder_list: diff --git a/runpod/serverless/utils/rp_cuda.py b/runpod/serverless/utils/rp_cuda.py index f3816bb0..d65747bc 100644 --- a/runpod/serverless/utils/rp_cuda.py +++ b/runpod/serverless/utils/rp_cuda.py @@ -6,9 +6,9 @@ def is_available(): - ''' + """ Returns True if CUDA is available, False otherwise. - ''' + """ try: output = subprocess.check_output("nvidia-smi", shell=True) if "NVIDIA-SMI" in output.decode(): diff --git a/runpod/serverless/utils/rp_debugger.py b/runpod/serverless/utils/rp_debugger.py index 96567f87..a4dee26b 100644 --- a/runpod/serverless/utils/rp_debugger.py +++ b/runpod/serverless/utils/rp_debugger.py @@ -1,8 +1,8 @@ -''' +""" runpod | serverless | rp_debugger.py A collection of functions to help with debugging. -''' +""" import time import datetime @@ -16,15 +16,15 @@ OS_INFO = f"{platform.system()} {platform.release()}" try: - PROCESSOR = cpuinfo.get_cpu_info()['brand_raw'] + PROCESSOR = cpuinfo.get_cpu_info()["brand_raw"] except KeyError: - PROCESSOR = 'Unable to get processor info.' + PROCESSOR = "Unable to get processor info." PYTHON_VERSION = platform.python_version() class Checkpoints: - ''' + """ A singleton class to store checkpoint times. Format: @@ -50,7 +50,8 @@ class Checkpoints: # Stop a checkpoint checkpoints.stop('checkpoint_name') - ''' + """ + __instance = None checkpoints = [] name_lookup = {} @@ -63,78 +64,80 @@ def __new__(cls): return Checkpoints.__instance def add(self, name): - ''' + """ Add a checkpoint. Returns the index of the checkpoint. - ''' + """ if name in self.name_lookup: raise KeyError(f'Checkpoint name "{name}" already exists.') - self.checkpoints.append({ - 'name': name - }) + self.checkpoints.append({"name": name}) index = len(self.checkpoints) - 1 self.name_lookup[name] = index def start(self, name): - ''' + """ Start a checkpoint. - ''' + """ if name not in self.name_lookup: raise KeyError(f"Checkpoint name '{name}' does not exist.") index = self.name_lookup[name] - self.checkpoints[index]['start'] = time.perf_counter() - self.checkpoints[index]['start_utc'] = datetime.datetime.utcnow().isoformat() + 'Z' + self.checkpoints[index]["start"] = time.perf_counter() + self.checkpoints[index]["start_utc"] = ( + datetime.datetime.utcnow().isoformat() + "Z" + ) def stop(self, name): - ''' + """ Stop a checkpoint. - ''' + """ if name not in self.name_lookup: raise KeyError(f"Checkpoint name '{name}' does not exist.") index = self.name_lookup[name] - if 'start' not in self.checkpoints[index]: - raise KeyError('Checkpoint has not been started.') + if "start" not in self.checkpoints[index]: + raise KeyError("Checkpoint has not been started.") - self.checkpoints[index]['end'] = time.perf_counter() - self.checkpoints[index]['stop_utc'] = datetime.datetime.utcnow().isoformat() + 'Z' + self.checkpoints[index]["end"] = time.perf_counter() + self.checkpoints[index]["stop_utc"] = ( + datetime.datetime.utcnow().isoformat() + "Z" + ) def get_checkpoints(self): - ''' + """ Get the results of the checkpoints. - ''' + """ results = [] for checkpoint in self.checkpoints: - if 'start' not in checkpoint or 'end' not in checkpoint: + if "start" not in checkpoint or "end" not in checkpoint: continue - start_time = checkpoint['start'] - end_time = checkpoint['end'] - checkpoint['duration_ms'] = (end_time - start_time) * 1000 + start_time = checkpoint["start"] + end_time = checkpoint["end"] + checkpoint["duration_ms"] = (end_time - start_time) * 1000 - checkpoint.pop('start') - checkpoint.pop('end') + checkpoint.pop("start") + checkpoint.pop("end") results.append(checkpoint) return results def clear(self): - ''' + """ Clear the checkpoints. - ''' + """ self.checkpoints = [] self.name_lookup = {} class LineTimer: - ''' + """ A utility that can be used to time code execution using the with statement. When used the times should be added to the checkpoints object. - ''' + """ def __init__(self, name): self.checkpoints = Checkpoints() @@ -149,9 +152,9 @@ def __exit__(self, *args): class FunctionTimer: # pylint: disable=too-few-public-methods - ''' + """ A class-based decorator to benchmark a function. - ''' + """ def __init__(self, function): self.function = function @@ -172,38 +175,38 @@ def __call__(self, *args, **kwargs): def get_debugger_output(): - ''' + """ Return the debugger output. - ''' - print('Getting debugger output...') + """ + print("Getting debugger output...") import runpod # pylint: disable=import-outside-toplevel, cyclic-import - print('Getting checkpoints...') + print("Getting checkpoints...") checkpoints = Checkpoints() ckpt_results = checkpoints.get_checkpoints() checkpoints.clear() - print('Getting system info...') + print("Getting system info...") system_info = { - 'os': OS_INFO, - 'processor': PROCESSOR, - 'python_version': PYTHON_VERSION, - 'runpod': runpod.__version__, + "os": OS_INFO, + "processor": PROCESSOR, + "python_version": PYTHON_VERSION, + "runpod": runpod.__version__, } - print('Debugger output complete.') + print("Debugger output complete.") return { - 'system_info': system_info, - 'timestamps': ckpt_results, + "system_info": system_info, + "timestamps": ckpt_results, } def clear_debugger_output(): - ''' + """ Clear the debugger output. - ''' + """ checkpoints = Checkpoints() checkpoints.clear() diff --git a/runpod/serverless/utils/rp_download.py b/runpod/serverless/utils/rp_download.py index a3de467b..8dd90925 100644 --- a/runpod/serverless/utils/rp_download.py +++ b/runpod/serverless/utils/rp_download.py @@ -1,10 +1,10 @@ -''' +""" PodWorker | modules | download.py Called when inputs are images or zip files. Downloads them into a temporary directory called "input_objects". This directory is cleaned up after the job is complete. -''' +""" import os import re @@ -22,15 +22,15 @@ def calculate_chunk_size(file_size: int) -> int: - ''' + """ Calculates the chunk size based on the file size. - ''' - if file_size <= 1024*1024: # 1 MB + """ + if file_size <= 1024 * 1024: # 1 MB return 1024 # 1 KB - if file_size <= 1024*1024*1024: # 1 GB - return 1024*1024 # 1 MB + if file_size <= 1024 * 1024 * 1024: # 1 GB + return 1024 * 1024 # 1 MB - return 1024*1024*10 # 10 MB + return 1024 * 1024 * 10 # 10 MB def download_files_from_urls(job_id: str, urls: Union[str, List[str]]) -> List[str]: @@ -39,29 +39,33 @@ def download_files_from_urls(job_id: str, urls: Union[str, List[str]]) -> List[s Returns the list of downloaded file absolute paths. Saves the files in a directory called "downloaded_files" in the job directory. """ - download_directory = os.path.abspath(os.path.join('jobs', job_id, 'downloaded_files')) + download_directory = os.path.abspath( + os.path.join("jobs", job_id, "downloaded_files") + ) os.makedirs(download_directory, exist_ok=True) - @backoff.on_exception(backoff.expo, requests.exceptions.RequestException, max_tries=3) + @backoff.on_exception( + backoff.expo, requests.exceptions.RequestException, max_tries=3 + ) def download_file(url: str, path_to_save: str) -> str: with requests.get(url, headers=HEADERS, stream=True, timeout=5) as response: response.raise_for_status() - content_disposition = response.headers.get('Content-Disposition') - file_extension = '' + content_disposition = response.headers.get("Content-Disposition") + file_extension = "" if content_disposition: - msg = message_from_string(f'Content-Disposition: {content_disposition}') + msg = message_from_string(f"Content-Disposition: {content_disposition}") params = dict(msg.items()) - file_extension = os.path.splitext(params.get('filename', ''))[1] + file_extension = os.path.splitext(params.get("filename", ""))[1] # If no extension could be determined from 'Content-Disposition', get it from the URL if not file_extension: file_extension = os.path.splitext(urlparse(url).path)[1] - file_size = int(response.headers.get('Content-Length', 0)) + file_size = int(response.headers.get("Content-Length", 0)) chunk_size = calculate_chunk_size(file_size) # write the content in chunks to the file - with open(path_to_save + file_extension, 'wb') as file_path: + with open(path_to_save + file_extension, "wb") as file_path: for chunk in response.iter_content(chunk_size=chunk_size): if chunk: # filter out keep-alive chunks file_path.write(chunk) @@ -72,7 +76,7 @@ def download_file_to_path(url: str) -> str: if url is None: return None - file_name = f'{uuid.uuid4()}' + file_name = f"{uuid.uuid4()}" output_file_path = os.path.join(download_directory, file_name) try: @@ -93,7 +97,7 @@ def download_file_to_path(url: str) -> str: def file(file_url: str) -> dict: - ''' + """ Downloads a single file from a given URL, file is given a random name. First checks if the content-disposition header is set, if so, uses the file name from there. If the file is a zip file, it is extracted into a directory with the same name. @@ -102,16 +106,15 @@ def file(file_url: str) -> dict: - The absolute path to the downloaded file - File type - Original file name - ''' - os.makedirs('job_files', exist_ok=True) + """ + os.makedirs("job_files", exist_ok=True) download_response = requests.get(file_url, headers=HEADERS, timeout=30) original_file_name = [] if "Content-Disposition" in download_response.headers.keys(): original_file_name = re.findall( - "filename=(.+)", - download_response.headers["Content-Disposition"] + "filename=(.+)", download_response.headers["Content-Disposition"] ) if len(original_file_name) > 0: @@ -120,18 +123,18 @@ def file(file_url: str) -> dict: download_path = urlparse(file_url).path original_file_name = os.path.basename(download_path) - file_type = os.path.splitext(original_file_name)[1].replace('.', '') + file_type = os.path.splitext(original_file_name)[1].replace(".", "") - file_name = f'{uuid.uuid4()}' + file_name = f"{uuid.uuid4()}" - output_file_path = os.path.join('job_files', f'{file_name}.{file_type}') - with open(output_file_path, 'wb') as output_file: + output_file_path = os.path.join("job_files", f"{file_name}.{file_type}") + with open(output_file_path, "wb") as output_file: output_file.write(download_response.content) - if file_type == 'zip': - unziped_directory = os.path.join('job_files', file_name) + if file_type == "zip": + unziped_directory = os.path.join("job_files", file_name) os.makedirs(unziped_directory, exist_ok=True) - with zipfile.ZipFile(output_file_path, 'r') as zip_ref: + with zipfile.ZipFile(output_file_path, "r") as zip_ref: zip_ref.extractall(unziped_directory) unziped_directory = os.path.abspath(unziped_directory) else: @@ -141,5 +144,5 @@ def file(file_url: str) -> dict: "file_path": os.path.abspath(output_file_path), "type": file_type, "original_name": original_file_name, - "extracted_path": unziped_directory + "extracted_path": unziped_directory, } diff --git a/runpod/serverless/utils/rp_upload.py b/runpod/serverless/utils/rp_upload.py index cb3d43f4..344da92d 100644 --- a/runpod/serverless/utils/rp_upload.py +++ b/runpod/serverless/utils/rp_upload.py @@ -1,4 +1,5 @@ -''' PodWorker | modules | upload.py ''' +""" PodWorker | modules | upload.py """ + # pylint: disable=too-many-arguments import os @@ -30,59 +31,58 @@ def extract_region_from_url(endpoint_url): """ parsed_url = urlparse(endpoint_url) # AWS/backblaze S3-like URL - if '.s3.' in endpoint_url: - return endpoint_url.split('.s3.')[1].split('.')[0] + if ".s3." in endpoint_url: + return endpoint_url.split(".s3.")[1].split(".")[0] # DigitalOcean Spaces-like URL - if parsed_url.netloc.endswith('.digitaloceanspaces.com'): - return endpoint_url.split('.')[1].split('.digitaloceanspaces.com')[0] + if parsed_url.netloc.endswith(".digitaloceanspaces.com"): + return endpoint_url.split(".")[1].split(".digitaloceanspaces.com")[0] return None # --------------------------- S3 Bucket Connection --------------------------- # def get_boto_client( - bucket_creds: Optional[dict] = None) -> Tuple[boto3.client, TransferConfig]: # pragma: no cover # pylint: disable=line-too-long - ''' + bucket_creds: Optional[dict] = None, +) -> Tuple[ + boto3.client, TransferConfig +]: # pragma: no cover # pylint: disable=line-too-long + """ Returns a boto3 client and transfer config for the bucket. - ''' + """ bucket_session = session.Session() boto_config = Config( - signature_version='s3v4', - retries={ - 'max_attempts': 3, - 'mode': 'standard' - } + signature_version="s3v4", retries={"max_attempts": 3, "mode": "standard"} ) transfer_config = TransferConfig( multipart_threshold=1024 * 25, max_concurrency=multiprocessing.cpu_count(), multipart_chunksize=1024 * 25, - use_threads=True + use_threads=True, ) if bucket_creds: - endpoint_url = bucket_creds['endpointUrl'] - access_key_id = bucket_creds['accessId'] - secret_access_key = bucket_creds['accessSecret'] + endpoint_url = bucket_creds["endpointUrl"] + access_key_id = bucket_creds["accessId"] + secret_access_key = bucket_creds["accessSecret"] else: - endpoint_url = os.environ.get('BUCKET_ENDPOINT_URL', None) - access_key_id = os.environ.get('BUCKET_ACCESS_KEY_ID', None) - secret_access_key = os.environ.get('BUCKET_SECRET_ACCESS_KEY', None) + endpoint_url = os.environ.get("BUCKET_ENDPOINT_URL", None) + access_key_id = os.environ.get("BUCKET_ACCESS_KEY_ID", None) + secret_access_key = os.environ.get("BUCKET_SECRET_ACCESS_KEY", None) if endpoint_url and access_key_id and secret_access_key: # Extract region from the endpoint URL region = extract_region_from_url(endpoint_url) boto_client = bucket_session.client( - 's3', + "s3", endpoint_url=endpoint_url, aws_access_key_id=access_key_id, aws_secret_access_key=secret_access_key, config=boto_config, - region_name=region + region_name=region, ) else: boto_client = None @@ -93,10 +93,16 @@ def get_boto_client( # ---------------------------------------------------------------------------- # # Upload Image # # ---------------------------------------------------------------------------- # -def upload_image(job_id, image_location, result_index=0, results_list=None, bucket_name: Optional[str] = None): # pylint: disable=line-too-long # pragma: no cover - ''' +def upload_image( + job_id, + image_location, + result_index=0, + results_list=None, + bucket_name: Optional[str] = None, +): # pylint: disable=line-too-long # pragma: no cover + """ Upload a single file to bucket storage. - ''' + """ image_name = str(uuid.uuid4())[:8] boto_client, _ = get_boto_client() file_extension = os.path.splitext(image_location)[1] @@ -109,7 +115,9 @@ def upload_image(job_id, image_location, result_index=0, results_list=None, buck # Save the output to a file print("No bucket endpoint set, saving to disk folder 'simulated_uploaded'") print("If this is a live endpoint, please reference the following:") - print("https://github.com/runpod/runpod-python/blob/main/docs/serverless/utils/rp_upload.md") # pylint: disable=line-too-long + print( + "https://github.com/runpod/runpod-python/blob/main/docs/serverless/utils/rp_upload.md" + ) # pylint: disable=line-too-long os.makedirs("simulated_uploaded", exist_ok=True) sim_upload_location = f"simulated_uploaded/{image_name}{file_extension}" @@ -122,20 +130,19 @@ def upload_image(job_id, image_location, result_index=0, results_list=None, buck return sim_upload_location - bucket = bucket_name if bucket_name else time.strftime('%m-%y') + bucket = bucket_name if bucket_name else time.strftime("%m-%y") boto_client.put_object( - Bucket=f'{bucket}', - Key=f'{job_id}/{image_name}{file_extension}', + Bucket=f"{bucket}", + Key=f"{job_id}/{image_name}{file_extension}", Body=output, - ContentType=content_type + ContentType=content_type, ) presigned_url = boto_client.generate_presigned_url( - 'get_object', - Params={ - 'Bucket': f'{bucket}', - 'Key': f'{job_id}/{image_name}{file_extension}' - }, ExpiresIn=604800) + "get_object", + Params={"Bucket": f"{bucket}", "Key": f"{job_id}/{image_name}{file_extension}"}, + ExpiresIn=604800, + ) if results_list is not None: results_list[result_index] = presigned_url @@ -147,17 +154,16 @@ def upload_image(job_id, image_location, result_index=0, results_list=None, buck # Files To Upload # # ---------------------------------------------------------------------------- # def files(job_id, file_list): # pragma: no cover - ''' + """ Uploads a list of files in parallel. Once all files are uploaded, the function returns the presigned URLs list. - ''' + """ upload_progress = [] # List of threads file_urls = [None] * len(file_list) # Resulting list of URLs for each file for index, selected_file in enumerate(file_list): new_upload = threading.Thread( - target=upload_image, - args=(job_id, selected_file, index, file_urls) + target=upload_image, args=(job_id, selected_file, index, file_urls) ) new_upload.start() @@ -172,65 +178,65 @@ def files(job_id, file_list): # pragma: no cover # --------------------------- Custom Bucket Upload --------------------------- # def bucket_upload(job_id, file_list, bucket_creds): # pragma: no cover - ''' + """ Uploads files to bucket storage. - ''' + """ temp_bucket_session = session.Session() temp_boto_config = Config( - signature_version='s3v4', - retries={ - 'max_attempts': 3, - 'mode': 'standard' - } + signature_version="s3v4", retries={"max_attempts": 3, "mode": "standard"} ) temp_boto_client = temp_bucket_session.client( - 's3', - endpoint_url=bucket_creds['endpointUrl'], - aws_access_key_id=bucket_creds['accessId'], - aws_secret_access_key=bucket_creds['accessSecret'], - config=temp_boto_config + "s3", + endpoint_url=bucket_creds["endpointUrl"], + aws_access_key_id=bucket_creds["accessId"], + aws_secret_access_key=bucket_creds["accessSecret"], + config=temp_boto_config, ) bucket_urls = [] for selected_file in file_list: - with open(selected_file, 'rb') as file_data: + with open(selected_file, "rb") as file_data: temp_boto_client.put_object( - Bucket=str(bucket_creds['bucketName']), - Key=f'{job_id}/{selected_file}', + Bucket=str(bucket_creds["bucketName"]), + Key=f"{job_id}/{selected_file}", Body=file_data, ) bucket_urls.append( - f"{bucket_creds['endpointUrl']}/{bucket_creds['bucketName']}/{job_id}/{selected_file}") + f"{bucket_creds['endpointUrl']}/{bucket_creds['bucketName']}/{job_id}/{selected_file}" + ) return bucket_urls # ------------------------- Single File Bucket Upload ------------------------ # def upload_file_to_bucket( - file_name: str, file_location: str, - bucket_creds: Optional[dict] = None, - bucket_name: Optional[str] = None, - prefix: Optional[str] = None, - extra_args: Optional[dict] = None + file_name: str, + file_location: str, + bucket_creds: Optional[dict] = None, + bucket_name: Optional[str] = None, + prefix: Optional[str] = None, + extra_args: Optional[dict] = None, ) -> str: # pragma: no cover - ''' + """ Uploads a single file to bucket storage and returns a presigned URL. - ''' + """ boto_client, transfer_config = get_boto_client(bucket_creds) if not bucket_name: - bucket_name = time.strftime('%m-%y') + bucket_name = time.strftime("%m-%y") key = f"{prefix}/{file_name}" if prefix else file_name if boto_client is None: print("No bucket endpoint set, saving to disk folder 'local_upload'") print("If this is a live endpoint, please reference the following:") - print("https://github.com/runpod/runpod-python/blob/main/docs/serverless/utils/rp_upload.md") # pylint: disable=line-too-long + print( + "https://github.com/runpod/runpod-python/blob/main/docs/serverless/utils/rp_upload.md" + ) # pylint: disable=line-too-long os.makedirs("local_upload", exist_ok=True) local_upload_location = f"local_upload/{file_name}" @@ -239,13 +245,15 @@ def upload_file_to_bucket( return local_upload_location file_size = os.path.getsize(file_location) - with tqdm(total=file_size, unit='B', unit_scale=True, desc=file_name) as progress_bar: + with tqdm( + total=file_size, unit="B", unit_scale=True, desc=file_name + ) as progress_bar: upload_file_args = { "Filename": file_location, "Bucket": bucket_name, "Key": key, "Config": transfer_config, - "Callback": progress_bar.update + "Callback": progress_bar.update, } if extra_args: @@ -254,44 +262,44 @@ def upload_file_to_bucket( boto_client.upload_file(**upload_file_args) presigned_url = boto_client.generate_presigned_url( - 'get_object', - Params={ - 'Bucket': bucket_name, - 'Key': key - }, ExpiresIn=604800) + "get_object", Params={"Bucket": bucket_name, "Key": key}, ExpiresIn=604800 + ) return presigned_url # --------------------------- Upload Memory Object --------------------------- # def upload_in_memory_object( - file_name: str, file_data: bytes, - bucket_creds: Optional[dict] = None, - bucket_name: Optional[str] = None, - prefix: Optional[str] = None) -> str: # pragma: no cover - ''' + file_name: str, + file_data: bytes, + bucket_creds: Optional[dict] = None, + bucket_name: Optional[str] = None, + prefix: Optional[str] = None, +) -> str: # pragma: no cover + """ Uploads an in-memory object (bytes) to bucket storage and returns a presigned URL. - ''' + """ boto_client, transfer_config = get_boto_client(bucket_creds) if not bucket_name: - bucket_name = time.strftime('%m-%y') + bucket_name = time.strftime("%m-%y") key = f"{prefix}/{file_name}" if prefix else file_name file_size = len(file_data) - with tqdm(total=file_size, unit='B', unit_scale=True, desc=file_name) as progress_bar: + with tqdm( + total=file_size, unit="B", unit_scale=True, desc=file_name + ) as progress_bar: boto_client.upload_fileobj( - io.BytesIO(file_data), bucket_name, key, + io.BytesIO(file_data), + bucket_name, + key, Config=transfer_config, - Callback=progress_bar.update + Callback=progress_bar.update, ) presigned_url = boto_client.generate_presigned_url( - 'get_object', - Params={ - 'Bucket': bucket_name, - 'Key': key - }, ExpiresIn=604800) + "get_object", Params={"Bucket": bucket_name, "Key": key}, ExpiresIn=604800 + ) return presigned_url diff --git a/runpod/serverless/utils/rp_validator.py b/runpod/serverless/utils/rp_validator.py index 1a03b42c..be9ad38a 100644 --- a/runpod/serverless/utils/rp_validator.py +++ b/runpod/serverless/utils/rp_validator.py @@ -1,7 +1,8 @@ -''' +""" runpod | serverless | utils | validator.py Provides a function to validate the input to the model. -''' +""" + # pylint: disable=too-many-branches import json @@ -20,6 +21,7 @@ def _add_error(error_list: List[str], message: str) -> None: error_list.append(message) + def _check_for_unexpected_inputs(raw_input, schema, error_list): for key in raw_input: if key not in schema: @@ -35,18 +37,20 @@ def _validate_and_transform_schema_items(schema, error_list): _add_error(error_list, SCHEMA_ERROR.format(key)) -def _validate_required_inputs_and_set_defaults(raw_input, schema, validated_input, error_list): +def _validate_required_inputs_and_set_defaults( + raw_input, schema, validated_input, error_list +): for key, rules in schema.items(): - if 'type' not in rules: + if "type" not in rules: _add_error(error_list, MISSING_TYPE_ERROR.format(key)) - if 'required' not in rules: + if "required" not in rules: _add_error(error_list, MISSING_REQUIRED_ERROR.format(key)) - elif rules['required'] and key not in raw_input: + elif rules["required"] and key not in raw_input: _add_error(error_list, MISSING_REQUIRED_ERROR.format(key)) - elif not rules['required'] and key not in raw_input: + elif not rules["required"] and key not in raw_input: if "default" in rules: - validated_input[key] = rules['default'] + validated_input[key] = rules["default"] else: _add_error(error_list, MISSING_DEFAULT_ERROR.format(key)) @@ -56,27 +60,33 @@ def _validate_input_against_schema(schema, validated_input, error_list): if key in validated_input: # Enforce floats to be floats. try: - if rules['type'] is float and type(validated_input[key]) in [int, float]: + if rules["type"] is float and type(validated_input[key]) in [ + int, + float, + ]: validated_input[key] = float(validated_input[key]) except TypeError: continue # Check for the correct type. - is_instance = isinstance(validated_input[key], rules['type']) + is_instance = isinstance(validated_input[key], rules["type"]) if validated_input[key] is not None and not is_instance: _add_error( error_list, - f"{key} should be {rules['type']} type, not {type(validated_input[key])}." + f"{key} should be {rules['type']} type, not {type(validated_input[key])}.", ) # Check lambda constraints. - if "constraints" in rules and not rules['constraints'](validated_input.get(key)): + if "constraints" in rules and not rules["constraints"]( + validated_input.get(key) + ): _add_error(error_list, CONSTRAINTS_ERROR.format(key)) + def validate( raw_input: Dict[str, Any], schema: Dict[str, Any] ) -> Dict[str, Union[Dict[str, Any], List[str]]]: - ''' + """ Validates the input. Checks to see if the provided inputs match the expected types. Checks to see if the required inputs are included. @@ -87,14 +97,16 @@ def validate( {"errors": ["error1", "error2"]} or {"validated_input": {"input1": "value1", "input2": "value2"} - ''' + """ error_list = [] validated_input = raw_input.copy() # Separate the process into functions for better readability _check_for_unexpected_inputs(raw_input, schema, error_list) _validate_and_transform_schema_items(schema, error_list) - _validate_required_inputs_and_set_defaults(raw_input, schema, validated_input, error_list) + _validate_required_inputs_and_set_defaults( + raw_input, schema, validated_input, error_list + ) _validate_input_against_schema(schema, validated_input, error_list) validation_return = {"validated_input": validated_input} diff --git a/runpod/serverless/worker.py b/runpod/serverless/worker.py index 92b97930..21ea002c 100644 --- a/runpod/serverless/worker.py +++ b/runpod/serverless/worker.py @@ -2,6 +2,7 @@ runpod | serverless | worker_loop.py Called to convert a container into a worker pod for the runpod serverless platform. """ + import os import asyncio from typing import Dict, Any @@ -9,10 +10,7 @@ import aiohttp from runpod.user_agent import USER_AGENT -from runpod.serverless.modules import ( - rp_logger, rp_local, rp_handler, rp_ping, - rp_scale -) +from runpod.serverless.modules import rp_logger, rp_local, rp_handler, rp_ping, rp_scale from .modules.rp_job import run_job, run_job_generator from .modules.rp_http import send_result, stream_result from .modules.worker_state import REF_COUNT_ZERO, Jobs @@ -24,16 +22,16 @@ def _get_auth_header() -> Dict[str, str]: - """ Returns the authorization header with the API key. """ + """Returns the authorization header with the API key.""" return { "Authorization": f"{os.environ.get('RUNPOD_AI_API_KEY')}", - "User-Agent": USER_AGENT + "User-Agent": USER_AGENT, } def _is_local(config) -> bool: - """ Returns True if the worker is running locally, False otherwise. """ - if config['rp_args'].get('test_input', None): + """Returns True if the worker is running locally, False otherwise.""" + if config["rp_args"].get("test_input", None): return True if os.environ.get("RUNPOD_WEBHOOK_GET_JOB", None) is None: @@ -46,16 +44,16 @@ async def _process_job(job, session, job_scaler, config): if rp_handler.is_generator(config["handler"]): is_stream = True generator_output = run_job_generator(config["handler"], job) - log.debug("Handler is a generator, streaming results.", job['id']) + log.debug("Handler is a generator, streaming results.", job["id"]) - job_result = {'output': []} + job_result = {"output": []} async for stream_output in generator_output: - log.debug(f"Stream output: {stream_output}", job['id']) - if 'error' in stream_output: + log.debug(f"Stream output: {stream_output}", job["id"]) + if "error" in stream_output: job_result = stream_output break - if config.get('return_aggregate_stream', False): - job_result['output'].append(stream_output['output']) + if config.get("return_aggregate_stream", False): + job_result["output"].append(stream_output["output"]) await stream_result(session, stream_output, job) else: @@ -64,20 +62,20 @@ async def _process_job(job, session, job_scaler, config): # If refresh_worker is set, pod will be reset after job is complete. if config.get("refresh_worker", False): - log.info("refresh_worker flag set, stopping pod after job.", job['id']) + log.info("refresh_worker flag set, stopping pod after job.", job["id"]) job_result["stopPod"] = True job_scaler.kill_worker() # If rp_debugger is set, debugger output will be returned. if config["rp_args"].get("rp_debugger", False) and isinstance(job_result, dict): job_result["output"]["rp_debugger"] = rp_debugger.get_debugger_output() - log.debug("rp_debugger | Flag set, returning debugger output.", job['id']) + log.debug("rp_debugger | Flag set, returning debugger output.", job["id"]) # Calculate ready delay for the debugger output. ready_delay = (config["reference_counter_start"] - REF_COUNT_ZERO) * 1000 job_result["output"]["rp_debugger"]["ready_delay_ms"] = ready_delay else: - log.debug("rp_debugger | Flag not set, skipping debugger output.", job['id']) + log.debug("rp_debugger | Flag not set, skipping debugger output.", job["id"]) rp_debugger.clear_debugger_output() # Send the job result to SLS @@ -97,12 +95,12 @@ async def run_worker(config: Dict[str, Any]) -> None: client_session = aiohttp.ClientSession( connector=aiohttp.TCPConnector(limit=0), headers=_get_auth_header(), - timeout=aiohttp.ClientTimeout(total=300, connect=2, sock_connect=2) + timeout=aiohttp.ClientTimeout(total=300, connect=2, sock_connect=2), ) async with client_session as session: job_scaler = rp_scale.JobScaler( - concurrency_modifier=config.get('concurrency_modifier', None) + concurrency_modifier=config.get("concurrency_modifier", None) ) while job_scaler.is_alive(): diff --git a/runpod/user_agent.py b/runpod/user_agent.py index f5ef5a85..714d43b6 100644 --- a/runpod/user_agent.py +++ b/runpod/user_agent.py @@ -7,19 +7,19 @@ def construct_user_agent(): - """ Constructs the User-Agent string for the RunPod-Python-SDK + """Constructs the User-Agent string for the RunPod-Python-SDK Example: RunPod-Python-SDK/0.1.0 (Linux 5.4.0-54-generic; x86_64) Language/Python 3.8.5 """ os_info = f"{platform.system()} {platform.release()}; {platform.machine()}" python_version = platform.python_version() - integration_method = os.getenv('RUNPOD_UA_INTEGRATION') + integration_method = os.getenv("RUNPOD_UA_INTEGRATION") ua_components = [ f"RunPod-Python-SDK/{runpod_version}", f"({os_info})", - f"Language/Python {python_version}" + f"Language/Python {python_version}", ] if integration_method: diff --git a/runpod/version.py b/runpod/version.py index 11d347a4..e182eec3 100644 --- a/runpod/version.py +++ b/runpod/version.py @@ -1,13 +1,14 @@ """ runpod-python version """ - from importlib.metadata import version, PackageNotFoundError + def get_version(): - """ Get the version of runpod-python """"" + """ Get the version of runpod-python """ "" try: return version("runpod") except PackageNotFoundError: return "unknown" + __version__ = get_version() diff --git a/setup.py b/setup.py index 647d5d9c..373f08eb 100644 --- a/setup.py +++ b/setup.py @@ -1,90 +1,73 @@ -''' +""" runpod-python | setup.py Called to setup the runpod-python package. -''' +""" from setuptools import setup, find_packages # README.md > long_description -with open('README.md', encoding='utf-8') as long_description_file: +with open("README.md", encoding="utf-8") as long_description_file: long_description = long_description_file.read() # requirements.txt > requirements -with open('requirements.txt', encoding="UTF-8") as requirements_file: +with open("requirements.txt", encoding="UTF-8") as requirements_file: install_requires = requirements_file.read().splitlines() extras_require = { - 'test': [ - 'asynctest', - 'nest_asyncio', - 'pylint', - 'pytest', - 'pytest-cov', - 'pytest-timeout', - 'pytest-asyncio', + "test": [ + "asynctest", + "nest_asyncio", + "pylint", + "pytest", + "pytest-cov", + "pytest-timeout", + "pytest-asyncio", ] } if __name__ == "__main__": setup( - name='runpod', - + name="runpod", use_scm_version=True, - - setup_requires=[ - 'setuptools>=45', - 'setuptools_scm', - 'wheel' - ], - + setup_requires=["setuptools>=45", "setuptools_scm", "wheel"], install_requires=install_requires, - extras_require=extras_require, - packages=find_packages(), - - python_requires='>=3.8', - - description='🐍 | Python library for RunPod API and serverless worker SDK.', - + python_requires=">=3.8", + description="🐍 | Python library for RunPod API and serverless worker SDK.", long_description=long_description, - - long_description_content_type='text/markdown', - - author='RunPod', - - author_email='engineer@runpod.io', - - url='https://runpod.io', - + long_description_content_type="text/markdown", + author="RunPod", + author_email="engineer@runpod.io", + url="https://runpod.io", project_urls={ - 'Documentation': 'https://docs.runpod.io', - 'Source': 'https://github.com/runpod/runpod-python', - 'Bug Tracker': 'https://github.com/runpod/runpod-python/issues', - 'Changelog': 'https://github.com/runpod/runpod-python/blob/main/CHANGELOG.md' + "Documentation": "https://docs.runpod.io", + "Source": "https://github.com/runpod/runpod-python", + "Bug Tracker": "https://github.com/runpod/runpod-python/issues", + "Changelog": "https://github.com/runpod/runpod-python/blob/main/CHANGELOG.md", }, - classifiers=[ - 'Environment :: Web Environment', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: MIT License', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Topic :: Internet :: WWW/HTTP', - 'Topic :: Internet :: WWW/HTTP :: Dynamic Content' + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Topic :: Internet :: WWW/HTTP", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", ], - include_package_data=True, - - entry_points={ - 'console_scripts': [ - 'runpod = runpod.cli.entry:runpod_cli' - ] - }, - - keywords=['runpod', 'ai', 'gpu', 'serverless', 'SDK', 'API', 'python', 'library'], - - license='MIT' + entry_points={"console_scripts": ["runpod = runpod.cli.entry:runpod_cli"]}, + keywords=[ + "runpod", + "ai", + "gpu", + "serverless", + "SDK", + "API", + "python", + "library", + ], + license="MIT", ) diff --git a/tests/__init__.py b/tests/__init__.py index 2f0a7bae..a4f893c1 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,5 +1,5 @@ -''' Allows tests to be imported as a module.''' +""" Allows tests to be imported as a module.""" import sys -sys.path.append('src') +sys.path.append("src") diff --git a/tests/test_api/__init__.py b/tests/test_api/__init__.py index c627663c..e2a1d0b4 100644 --- a/tests/test_api/__init__.py +++ b/tests/test_api/__init__.py @@ -1 +1 @@ -''' Allows files to be imported from this directory. ''' +""" Allows files to be imported from this directory. """ diff --git a/tests/test_api/test_mutation_container_registry_auth.py b/tests/test_api/test_mutation_container_registry_auth.py index 53f812b4..53b78e41 100644 --- a/tests/test_api/test_mutation_container_registry_auth.py +++ b/tests/test_api/test_mutation_container_registry_auth.py @@ -8,7 +8,7 @@ class TestGenerateContainerRegistryAuth(unittest.TestCase): - """ Test suite for the generate_container_registry_auth function. """ + """Test suite for the generate_container_registry_auth function.""" def test_generate_container_registry_auth(self): """ diff --git a/tests/test_api/test_mutation_endpoints.py b/tests/test_api/test_mutation_endpoints.py index 9f2162bf..8a99efa7 100644 --- a/tests/test_api/test_mutation_endpoints.py +++ b/tests/test_api/test_mutation_endpoints.py @@ -20,16 +20,25 @@ def test_required_fields(self): def test_all_fields(self): """Test all the fields.""" result = generate_endpoint_mutation( - "test_name", "test_template_id", "AMPERE_20", - "test_volume_id", "US_WEST", 10, "WORKER_COUNT", 5, 2, 4, True + "test_name", + "test_template_id", + "AMPERE_20", + "test_volume_id", + "US_WEST", + 10, + "WORKER_COUNT", + 5, + 2, + 4, + True, ) self.assertIn('name: "test_name-fb"', result) self.assertIn('templateId: "test_template_id"', result) self.assertIn('gpuIds: "AMPERE_20"', result) self.assertIn('networkVolumeId: "test_volume_id"', result) self.assertIn('locations: "US_WEST"', result) - self.assertIn('idleTimeout: 10', result) + self.assertIn("idleTimeout: 10", result) self.assertIn('scalerType: "WORKER_COUNT"', result) - self.assertIn('scalerValue: 5', result) - self.assertIn('workersMin: 2', result) - self.assertIn('workersMax: 4', result) + self.assertIn("scalerValue: 5", result) + self.assertIn("workersMin: 2", result) + self.assertIn("workersMax: 4", result) diff --git a/tests/test_api/test_mutations_pods.py b/tests/test_api/test_mutations_pods.py index 3b66d7cf..8ebd819e 100644 --- a/tests/test_api/test_mutations_pods.py +++ b/tests/test_api/test_mutations_pods.py @@ -1,4 +1,4 @@ -''' Test API Wrapper Pod Mutations ''' +""" Test API Wrapper Pod Mutations """ import unittest @@ -6,12 +6,12 @@ class TestPodMutations(unittest.TestCase): - ''' Test API Wrapper Pod Mutations ''' + """Test API Wrapper Pod Mutations""" def test_generate_pod_deployment_mutation(self): - ''' + """ Test generate_pod_deployment_mutation - ''' + """ result = pods.generate_pod_deployment_mutation( name="test", image_name="test_image", @@ -30,32 +30,32 @@ def test_generate_pod_deployment_mutation(self): env={"ENV": "test"}, support_public_ip=True, template_id="abcde", - allowed_cuda_versions=["11.8", "12.0"] + allowed_cuda_versions=["11.8", "12.0"], ) # Here you should check the correct structure of the result self.assertIn("mutation", result) def test_generate_pod_stop_mutation(self): - ''' + """ Test generate_pod_stop_mutation - ''' + """ result = pods.generate_pod_stop_mutation("pod_id") # Here you should check the correct structure of the result self.assertIn("mutation", result) def test_generate_pod_resume_mutation(self): - ''' + """ Test generate_pod_resume_mutation - ''' + """ result = pods.generate_pod_resume_mutation("pod_id", 1) # Here you should check the correct structure of the result self.assertIn("mutation", result) def test_generate_pod_terminate_mutation(self): - ''' + """ Test generate_pod_terminate_mutation - ''' + """ result = pods.generate_pod_terminate_mutation("pod_id") # Here you should check the correct structure of the result self.assertIn("mutation", result) diff --git a/tests/test_cli/__init__.py b/tests/test_cli/__init__.py index 230157cd..26359fe5 100644 --- a/tests/test_cli/__init__.py +++ b/tests/test_cli/__init__.py @@ -1 +1 @@ -''' Allows tests to be imported. ''' +""" Allows tests to be imported. """ diff --git a/tests/test_cli/test_cli_groups/__init__.py b/tests/test_cli/test_cli_groups/__init__.py index aa49aca8..f454fa86 100644 --- a/tests/test_cli/test_cli_groups/__init__.py +++ b/tests/test_cli/test_cli_groups/__init__.py @@ -1 +1 @@ -''' Allow CLI groups to be tested. ''' +""" Allow CLI groups to be tested. """ diff --git a/tests/test_cli/test_cli_groups/test_config_commands.py b/tests/test_cli/test_cli_groups/test_config_commands.py index 47633bb9..b1f6d9a1 100644 --- a/tests/test_cli/test_cli_groups/test_config_commands.py +++ b/tests/test_cli/test_cli_groups/test_config_commands.py @@ -1,6 +1,6 @@ -''' +""" RunPod | Tests | CLI | Commands -''' +""" import unittest from unittest.mock import patch @@ -8,73 +8,100 @@ from runpod.cli.entry import runpod_cli + class TestCommands(unittest.TestCase): - ''' A collection of tests for the CLI commands. ''' + """A collection of tests for the CLI commands.""" def setUp(self): self.runner = CliRunner() def test_config_wizard(self): - ''' Tests the config command. ''' - with patch('click.echo') as mock_echo, \ - patch('runpod.cli.groups.config.commands.set_credentials') as mock_set_credentials, \ - patch('runpod.cli.groups.config.commands.check_credentials') as mock_check_creds, \ - patch('click.confirm', return_value=True) as mock_confirm, \ - patch('click.prompt', return_value='KEY') as mock_prompt: + """Tests the config command.""" + with patch("click.echo") as mock_echo, patch( + "runpod.cli.groups.config.commands.set_credentials" + ) as mock_set_credentials, patch( + "runpod.cli.groups.config.commands.check_credentials" + ) as mock_check_creds, patch( + "click.confirm", return_value=True + ) as mock_confirm, patch( + "click.prompt", return_value="KEY" + ) as mock_prompt: # Assuming credentials aren't set (doesn't prompt for overwrite) mock_check_creds.return_value = (False, None) # Successful Call with Direct Key - result = self.runner.invoke(runpod_cli, ['config', '--profile', 'test', 'KEY']) + result = self.runner.invoke( + runpod_cli, ["config", "--profile", "test", "KEY"] + ) assert result.exit_code == 0 - mock_set_credentials.assert_called_with('KEY', 'test', overwrite=True) + mock_set_credentials.assert_called_with("KEY", "test", overwrite=True) assert mock_echo.call_count == 1 # Successful Call with Prompted Key (since direct key isn't provided) - result = self.runner.invoke(runpod_cli, ['config', '--profile', 'test']) + result = self.runner.invoke(runpod_cli, ["config", "--profile", "test"]) assert result.exit_code == 0 - mock_set_credentials.assert_called_with('KEY', 'test', overwrite=True) - mock_prompt.assert_called_with(' > RunPod API Key', hide_input=False, confirmation_prompt=False) # pylint: disable=line-too-long + mock_set_credentials.assert_called_with("KEY", "test", overwrite=True) + mock_prompt.assert_called_with( + " > RunPod API Key", hide_input=False, confirmation_prompt=False + ) # pylint: disable=line-too-long # Simulating existing credentials, prompting for overwrite mock_check_creds.return_value = (True, None) - result = self.runner.invoke(runpod_cli, ['config', '--profile', 'test']) + result = self.runner.invoke(runpod_cli, ["config", "--profile", "test"]) mock_confirm.assert_called_with( - 'Credentials already set for profile: test. Overwrite?', abort=True) + "Credentials already set for profile: test. Overwrite?", abort=True + ) # Unsuccessful Call mock_set_credentials.side_effect = ValueError() - result = self.runner.invoke(runpod_cli, ['config', '--profile', 'test', 'KEY']) + result = self.runner.invoke( + runpod_cli, ["config", "--profile", "test", "KEY"] + ) assert result.exit_code == 1 def test_check_flag(self): - """ Tests the --check flag. """ - with patch('runpod.cli.groups.config.commands.check_credentials') as mock_check_creds: + """Tests the --check flag.""" + with patch( + "runpod.cli.groups.config.commands.check_credentials" + ) as mock_check_creds: # Assuming credentials are set mock_check_creds.return_value = (True, None) - result = self.runner.invoke(runpod_cli, ['config', '--check', '--profile', 'test']) + result = self.runner.invoke( + runpod_cli, ["config", "--check", "--profile", "test"] + ) assert result.exit_code == 0 # Assuming credentials aren't set mock_check_creds.return_value = (False, "Credentials not found.") - result = self.runner.invoke(runpod_cli, ['config', '--check', '--profile', 'test']) + result = self.runner.invoke( + runpod_cli, ["config", "--check", "--profile", "test"] + ) assert result.exit_code == 1 def test_output_messages(self): - """ Tests the output messages for the config command. """ - with patch('click.echo') as mock_echo, \ - patch('runpod.cli.groups.config.commands.set_credentials') as mock_set_credentials, \ - patch('runpod.cli.groups.config.commands.check_credentials', return_value=(False, None)) as mock_check_creds: # pylint: disable=line-too-long - result = self.runner.invoke(runpod_cli, ['config', 'KEY', '--profile', 'test']) - mock_set_credentials.assert_called_with('KEY', 'test', overwrite=True) - mock_echo.assert_any_call('Credentials set for profile: test in ~/.runpod/config.toml') + """Tests the output messages for the config command.""" + with patch("click.echo") as mock_echo, patch( + "runpod.cli.groups.config.commands.set_credentials" + ) as mock_set_credentials, patch( + "runpod.cli.groups.config.commands.check_credentials", + return_value=(False, None), + ) as mock_check_creds: # pylint: disable=line-too-long + result = self.runner.invoke( + runpod_cli, ["config", "KEY", "--profile", "test"] + ) + mock_set_credentials.assert_called_with("KEY", "test", overwrite=True) + mock_echo.assert_any_call( + "Credentials set for profile: test in ~/.runpod/config.toml" + ) assert result.exit_code == 0 assert mock_check_creds.call_count == 1 def test_api_key_prompt(self): - """ Tests the API key prompt. """ - with patch('click.prompt', return_value='KEY') as mock_prompt: - result = self.runner.invoke(runpod_cli, ['config', '--profile', 'test']) - mock_prompt.assert_called_with(' > RunPod API Key', hide_input=False, confirmation_prompt=False) # pylint: disable=line-too-long + """Tests the API key prompt.""" + with patch("click.prompt", return_value="KEY") as mock_prompt: + result = self.runner.invoke(runpod_cli, ["config", "--profile", "test"]) + mock_prompt.assert_called_with( + " > RunPod API Key", hide_input=False, confirmation_prompt=False + ) # pylint: disable=line-too-long assert result.exit_code == 0 diff --git a/tests/test_cli/test_cli_groups/test_config_functions.py b/tests/test_cli/test_cli_groups/test_config_functions.py index edd77c89..89824d24 100644 --- a/tests/test_cli/test_cli_groups/test_config_functions.py +++ b/tests/test_cli/test_cli_groups/test_config_functions.py @@ -1,6 +1,6 @@ -''' +""" Unit tests for the config command. -''' +""" import unittest from unittest.mock import patch, mock_open @@ -9,40 +9,38 @@ class TestConfig(unittest.TestCase): - ''' Unit tests for the config function. ''' + """Unit tests for the config function.""" def setUp(self) -> None: - self.sample_credentials = ( - '[default]\n' - 'api_key = "RUNPOD_API_KEY"\n' - ) + self.sample_credentials = "[default]\n" 'api_key = "RUNPOD_API_KEY"\n' - @patch('runpod.cli.groups.config.functions.toml.load') - @patch('builtins.open', new_callable=mock_open()) + @patch("runpod.cli.groups.config.functions.toml.load") + @patch("builtins.open", new_callable=mock_open()) def test_set_credentials(self, mock_file, mock_toml_load): - ''' + """ Tests the set_credentials function. - ''' + """ mock_toml_load.return_value = "" - functions.set_credentials('RUNPOD_API_KEY') - + functions.set_credentials("RUNPOD_API_KEY") - mock_file.assert_called_with(functions.CREDENTIAL_FILE, 'w', encoding="UTF-8") + mock_file.assert_called_with(functions.CREDENTIAL_FILE, "w", encoding="UTF-8") with self.assertRaises(ValueError) as context: - mock_toml_load.return_value = {'default': True} - functions.set_credentials('RUNPOD_API_KEY') + mock_toml_load.return_value = {"default": True} + functions.set_credentials("RUNPOD_API_KEY") - self.assertEqual(str(context.exception), - 'Profile already exists. Use `update_credentials` instead.') + self.assertEqual( + str(context.exception), + "Profile already exists. Use `update_credentials` instead.", + ) - @patch('builtins.open', new_callable=mock_open()) - @patch('runpod.cli.groups.config.functions.toml.load') - @patch('runpod.cli.groups.config.functions.os.path.exists') + @patch("builtins.open", new_callable=mock_open()) + @patch("runpod.cli.groups.config.functions.toml.load") + @patch("runpod.cli.groups.config.functions.os.path.exists") def test_check_credentials(self, mock_exists, mock_toml_load, mock_file): - '''mock_open_call + """mock_open_call Tests the check_credentials function. - ''' + """ mock_exists.return_value = False passed, _ = functions.check_credentials() assert passed is False @@ -54,7 +52,7 @@ def test_check_credentials(self, mock_exists, mock_toml_load, mock_file): assert passed is False mock_exists.return_value = True - mock_toml_load.return_value = dict({'default': 'something'}) + mock_toml_load.return_value = dict({"default": "something"}) passed, _ = functions.check_credentials() assert passed is False @@ -62,33 +60,40 @@ def test_check_credentials(self, mock_exists, mock_toml_load, mock_file): passed, _ = functions.check_credentials() assert passed is False - mock_toml_load.return_value = dict({'default': 'api_key'}) + mock_toml_load.return_value = dict({"default": "api_key"}) passed, _ = functions.check_credentials() assert passed is True - - @patch('os.path.exists', return_value=True) - @patch('runpod.cli.groups.config.functions.toml.load') - @patch('builtins.open', new_callable=mock_open, read_data='[default]\nkey = "value"') - def test_get_credentials_existing_profile(self, mock_open_call, mock_toml_load, mock_exists): - ''' + @patch("os.path.exists", return_value=True) + @patch("runpod.cli.groups.config.functions.toml.load") + @patch( + "builtins.open", new_callable=mock_open, read_data='[default]\nkey = "value"' + ) + def test_get_credentials_existing_profile( + self, mock_open_call, mock_toml_load, mock_exists + ): + """ Tests the get_credentials function. - ''' - mock_toml_load.return_value = {'default': {'key': 'value'}} - result = functions.get_credentials('default') - assert result == {'key': 'value'} + """ + mock_toml_load.return_value = {"default": {"key": "value"}} + result = functions.get_credentials("default") + assert result == {"key": "value"} assert mock_open_call.called assert mock_exists.called - @patch('os.path.exists', return_value=True) - @patch('runpod.cli.groups.config.functions.toml.load') - @patch('builtins.open', new_callable=mock_open, read_data='[default]\nkey = "value"') - def test_get_credentials_non_existent_profile(self, mock_open_call, mock_toml_load, mock_exists): # pylint: disable=line-too-long - ''' + @patch("os.path.exists", return_value=True) + @patch("runpod.cli.groups.config.functions.toml.load") + @patch( + "builtins.open", new_callable=mock_open, read_data='[default]\nkey = "value"' + ) + def test_get_credentials_non_existent_profile( + self, mock_open_call, mock_toml_load, mock_exists + ): # pylint: disable=line-too-long + """ Tests the get_credentials function. - ''' - mock_toml_load.return_value = {'default': {'key': 'value'}} - result = functions.get_credentials('non_existent') + """ + mock_toml_load.return_value = {"default": {"key": "value"}} + result = functions.get_credentials("non_existent") assert result is None assert mock_open_call.called assert mock_exists.called diff --git a/tests/test_cli/test_cli_groups/test_exec_commands.py b/tests/test_cli/test_cli_groups/test_exec_commands.py index e31c3f08..9b04528e 100644 --- a/tests/test_cli/test_cli_groups/test_exec_commands.py +++ b/tests/test_cli/test_cli_groups/test_exec_commands.py @@ -1,6 +1,7 @@ -''' +""" Tests for Runpod CLI exec commands. -''' +""" + import tempfile import unittest from unittest.mock import patch @@ -9,40 +10,51 @@ from runpod.cli.entry import runpod_cli + class TestExecCommands(unittest.TestCase): - ''' Tests for Runpod CLI exec commands. ''' + """Tests for Runpod CLI exec commands.""" def setUp(self): self.runner = click.testing.CliRunner() def test_remote_python_with_provided_pod_id(self): - ''' Tests the remote_python command when pod_id is provided directly. ''' - with tempfile.NamedTemporaryFile() as temp_file, \ - patch('runpod.cli.groups.exec.commands.python_over_ssh') as mock_python_over_ssh: - result = self.runner.invoke(runpod_cli, - ['exec', 'python', - '--pod_id', 'sample_pod_id', temp_file.name]) + """Tests the remote_python command when pod_id is provided directly.""" + with tempfile.NamedTemporaryFile() as temp_file, patch( + "runpod.cli.groups.exec.commands.python_over_ssh" + ) as mock_python_over_ssh: + result = self.runner.invoke( + runpod_cli, + ["exec", "python", "--pod_id", "sample_pod_id", temp_file.name], + ) assert result.exit_code == 0 - mock_python_over_ssh.assert_called_with('sample_pod_id', temp_file.name) + mock_python_over_ssh.assert_called_with("sample_pod_id", temp_file.name) def test_remote_python_without_provided_pod_id_stored(self): - ''' Tests the remote_python command when pod_id is retrieved from storage. ''' - with tempfile.NamedTemporaryFile() as temp_file, \ - patch('runpod.cli.groups.exec.commands.python_over_ssh') as mock_python_over_ssh, \ - patch('runpod.cli.groups.exec.commands.get_session_pod', return_value='stored_pod_id') as mock_get_pod_id: # pylint: disable=line-too-long + """Tests the remote_python command when pod_id is retrieved from storage.""" + with tempfile.NamedTemporaryFile() as temp_file, patch( + "runpod.cli.groups.exec.commands.python_over_ssh" + ) as mock_python_over_ssh, patch( + "runpod.cli.groups.exec.commands.get_session_pod", + return_value="stored_pod_id", + ) as mock_get_pod_id: # pylint: disable=line-too-long mock_python_over_ssh.return_value = None - result = self.runner.invoke(runpod_cli, ['exec', 'python', temp_file.name]) + result = self.runner.invoke(runpod_cli, ["exec", "python", temp_file.name]) assert result.exit_code == 0 mock_get_pod_id.assert_called_once() - mock_python_over_ssh.assert_called_with('stored_pod_id', temp_file.name) + mock_python_over_ssh.assert_called_with("stored_pod_id", temp_file.name) def test_remote_python_without_provided_pod_id_prompt(self): - ''' Tests the remote_python command when pod_id is prompted to user. ''' - with tempfile.NamedTemporaryFile() as temp_file, \ - patch('runpod.cli.groups.exec.commands.python_over_ssh') as mock_python_over_ssh, \ - patch('runpod.cli.groups.exec.commands.get_session_pod', side_effect=lambda: click.prompt('Please provide the pod ID', 'prompted_pod_id')) as mock_get_pod_id: # pylint: disable=line-too-long + """Tests the remote_python command when pod_id is prompted to user.""" + with tempfile.NamedTemporaryFile() as temp_file, patch( + "runpod.cli.groups.exec.commands.python_over_ssh" + ) as mock_python_over_ssh, patch( + "runpod.cli.groups.exec.commands.get_session_pod", + side_effect=lambda: click.prompt( + "Please provide the pod ID", "prompted_pod_id" + ), + ) as mock_get_pod_id: # pylint: disable=line-too-long mock_python_over_ssh.return_value = None - result = self.runner.invoke(runpod_cli, ['exec', 'python', temp_file.name]) + result = self.runner.invoke(runpod_cli, ["exec", "python", temp_file.name]) assert result.exit_code == 0 mock_get_pod_id.assert_called_once() - mock_python_over_ssh.assert_called_with('prompted_pod_id', temp_file.name) + mock_python_over_ssh.assert_called_with("prompted_pod_id", temp_file.name) diff --git a/tests/test_cli/test_cli_groups/test_exec_functions.py b/tests/test_cli/test_cli_groups/test_exec_functions.py index 7ad3ca42..d9b0f7e8 100644 --- a/tests/test_cli/test_cli_groups/test_exec_functions.py +++ b/tests/test_cli/test_cli_groups/test_exec_functions.py @@ -1,28 +1,29 @@ -''' Tests for CLI group `exec functions` ''' +""" Tests for CLI group `exec functions` """ import unittest from unittest.mock import patch, MagicMock from runpod.cli.groups.exec import functions + class TestExecFunctions(unittest.TestCase): - ''' Tests for CLI group `exec functions` ''' + """Tests for CLI group `exec functions`""" - @patch('runpod.cli.groups.exec.functions.ssh_cmd.SSHConnection') + @patch("runpod.cli.groups.exec.functions.ssh_cmd.SSHConnection") def test_python_over_ssh(self, mock_ssh_connection): - ''' + """ Test `python_over_ssh` - ''' + """ mock_ssh = MagicMock() mock_ssh_connection.return_value = mock_ssh - pod_id = 'pod_id' - file_name = 'file_name' + pod_id = "pod_id" + file_name = "file_name" functions.python_over_ssh(pod_id, file_name) self.assertTrue(functions.python_over_ssh) mock_ssh_connection.assert_called_once_with(pod_id) - mock_ssh.put_file.assert_called_once_with(file_name, f'/root/{file_name}') - mock_ssh.run_commands.assert_called_once_with([f'python3.10 /root/{file_name}']) + mock_ssh.put_file.assert_called_once_with(file_name, f"/root/{file_name}") + mock_ssh.run_commands.assert_called_once_with([f"python3.10 /root/{file_name}"]) mock_ssh.close.assert_called_once_with() diff --git a/tests/test_cli/test_cli_groups/test_exec_helpers.py b/tests/test_cli/test_cli_groups/test_exec_helpers.py index 5fc00367..68a9422e 100644 --- a/tests/test_cli/test_cli_groups/test_exec_helpers.py +++ b/tests/test_cli/test_cli_groups/test_exec_helpers.py @@ -4,67 +4,70 @@ from unittest.mock import patch, mock_open from runpod.cli.groups.exec.helpers import get_session_pod, POD_ID_FILE + class TestGetSessionPod(unittest.TestCase): - """ Unit tests for get_session_pod """ + """Unit tests for get_session_pod""" def setUp(self): self.mocked_pod_id = "sample_pod_id" - @patch('os.path.exists') - @patch('runpod.cli.groups.exec.helpers.get_pod') + @patch("os.path.exists") + @patch("runpod.cli.groups.exec.helpers.get_pod") def test_existing_pod_id_file_and_valid_pod_id(self, mock_get_pod, mock_exists): - """ Test get_session_pod when the pod_id file exists and the pod_id is valid """ + """Test get_session_pod when the pod_id file exists and the pod_id is valid""" mock_exists.return_value = True mock_get_pod.return_value = True - with patch('builtins.open', mock_open(read_data=self.mocked_pod_id)): + with patch("builtins.open", mock_open(read_data=self.mocked_pod_id)): result = get_session_pod() self.assertEqual(result, self.mocked_pod_id) - @patch('os.path.exists') - @patch('runpod.cli.groups.exec.helpers.get_pod') + @patch("os.path.exists") + @patch("runpod.cli.groups.exec.helpers.get_pod") def test_existing_pod_id_file_and_invalid_pod_id(self, mock_get_pod, mock_exists): - """ Test get_session_pod when the pod_id file exists and the pod_id is invalid """ + """Test get_session_pod when the pod_id file exists and the pod_id is invalid""" mock_exists.return_value = True mock_get_pod.return_value = None - with patch('builtins.open', mock_open(read_data="invalid_pod_id")): - with patch('click.prompt', return_value=self.mocked_pod_id): + with patch("builtins.open", mock_open(read_data="invalid_pod_id")): + with patch("click.prompt", return_value=self.mocked_pod_id): result = get_session_pod() self.assertEqual(result, self.mocked_pod_id) - @patch('os.path.exists') - @patch('runpod.cli.groups.exec.helpers.get_pod') + @patch("os.path.exists") + @patch("runpod.cli.groups.exec.helpers.get_pod") def test_no_pod_id_file(self, mock_get_pod, mock_exists): - """ Test get_session_pod when the pod_id file doesn't exist """ + """Test get_session_pod when the pod_id file doesn't exist""" mock_exists.return_value = False mock_get_pod.return_value = None - with patch('click.prompt', return_value=self.mocked_pod_id): + with patch("click.prompt", return_value=self.mocked_pod_id): result = get_session_pod() self.assertEqual(result, self.mocked_pod_id) - @patch('os.path.exists') - @patch('runpod.cli.groups.exec.helpers.get_pod') + @patch("os.path.exists") + @patch("runpod.cli.groups.exec.helpers.get_pod") def test_pod_id_file_written_to_when_not_existing(self, mock_get_pod, mock_exists): - """ Test get_session_pod when the pod_id file doesn't exist """ + """Test get_session_pod when the pod_id file doesn't exist""" mock_exists.return_value = False mock_get_pod.return_value = None mocked = mock_open() - with patch('builtins.open', mocked): - with patch('click.prompt', return_value=self.mocked_pod_id): + with patch("builtins.open", mocked): + with patch("click.prompt", return_value=self.mocked_pod_id): get_session_pod() - mocked.assert_called_once_with(POD_ID_FILE, 'w', encoding="UTF-8") + mocked.assert_called_once_with(POD_ID_FILE, "w", encoding="UTF-8") handle = mocked() handle.write.assert_called_once_with(self.mocked_pod_id) - @patch('os.path.exists') - @patch('runpod.cli.groups.exec.helpers.get_pod') - def test_pod_id_file_written_to_when_invalid_pod_id_in_file(self, mock_get_pod, mock_exists): - """ Test get_session_pod when the pod_id file exists and the pod_id is invalid """ + @patch("os.path.exists") + @patch("runpod.cli.groups.exec.helpers.get_pod") + def test_pod_id_file_written_to_when_invalid_pod_id_in_file( + self, mock_get_pod, mock_exists + ): + """Test get_session_pod when the pod_id file exists and the pod_id is invalid""" mock_exists.return_value = True mock_get_pod.return_value = None mocked = mock_open(read_data="invalid_pod_id") - with patch('builtins.open', mocked): - with patch('click.prompt', return_value=self.mocked_pod_id): + with patch("builtins.open", mocked): + with patch("click.prompt", return_value=self.mocked_pod_id): get_session_pod() - mocked.assert_called_with(POD_ID_FILE, 'w', encoding="UTF-8") + mocked.assert_called_with(POD_ID_FILE, "w", encoding="UTF-8") handle = mocked() handle.write.assert_called_with(self.mocked_pod_id) diff --git a/tests/test_cli/test_cli_groups/test_pod_commands.py b/tests/test_cli/test_cli_groups/test_pod_commands.py index d5d59cd2..dc918e99 100644 --- a/tests/test_cli/test_cli_groups/test_pod_commands.py +++ b/tests/test_cli/test_cli_groups/test_pod_commands.py @@ -1,4 +1,4 @@ -''' Test CLI pod commands ''' +""" Test CLI pod commands """ import unittest from unittest.mock import patch, MagicMock @@ -8,76 +8,91 @@ from runpod.cli.entry import runpod_cli + class TestPodCommands(unittest.TestCase): - ''' Test CLI pod commands ''' + """Test CLI pod commands""" - @patch('runpod.cli.groups.pod.commands.get_pods') - @patch('runpod.cli.groups.pod.commands.click.echo') + @patch("runpod.cli.groups.pod.commands.get_pods") + @patch("runpod.cli.groups.pod.commands.click.echo") def test_list_pods(self, mock_echo, mock_get_pods): - ''' + """ Test list_pods - ''' + """ # Mock data returned by get_pods mock_get_pods.return_value = [ - {'id': '1', 'name': 'Pod1', 'desiredStatus': 'Running', 'imageName': 'Image1'}, - {'id': '2', 'name': 'Pod2', 'desiredStatus': 'Stopped', 'imageName': 'Image2'} + { + "id": "1", + "name": "Pod1", + "desiredStatus": "Running", + "imageName": "Image1", + }, + { + "id": "2", + "name": "Pod2", + "desiredStatus": "Stopped", + "imageName": "Image2", + }, ] runner = CliRunner() - result = runner.invoke(runpod_cli, ['pod', 'list']) + result = runner.invoke(runpod_cli, ["pod", "list"]) # Create expected table assert result.exit_code == 0, result.exception - expected_table = PrettyTable(['ID', 'Name', 'Status', 'Image']) - expected_table.add_row(('1', 'Pod1', 'Running', 'Image1')) - expected_table.add_row(('2', 'Pod2', 'Stopped', 'Image2')) + expected_table = PrettyTable(["ID", "Name", "Status", "Image"]) + expected_table.add_row(("1", "Pod1", "Running", "Image1")) + expected_table.add_row(("2", "Pod2", "Stopped", "Image2")) # Assert that click.echo was called with the correct table mock_echo.assert_called() - - @patch('runpod.cli.groups.pod.commands.click.prompt') - @patch('runpod.cli.groups.pod.commands.click.confirm') - @patch('runpod.cli.groups.pod.commands.click.echo') - @patch('runpod.cli.groups.pod.commands.create_pod') - def test_create_new_pod(self, mock_create_pod, mock_echo, mock_confirm, mock_prompt): # pylint: disable=too-many-arguments,line-too-long - ''' + @patch("runpod.cli.groups.pod.commands.click.prompt") + @patch("runpod.cli.groups.pod.commands.click.confirm") + @patch("runpod.cli.groups.pod.commands.click.echo") + @patch("runpod.cli.groups.pod.commands.create_pod") + def test_create_new_pod( + self, mock_create_pod, mock_echo, mock_confirm, mock_prompt + ): # pylint: disable=too-many-arguments,line-too-long + """ Test create_new_pod - ''' + """ # Mock values mock_confirm.return_value = True # for the quick_launch option - mock_prompt.return_value = 'RunPod-CLI-Pod' - mock_create_pod.return_value = {'id': 'sample_id'} + mock_prompt.return_value = "RunPod-CLI-Pod" + mock_create_pod.return_value = {"id": "sample_id"} runner = CliRunner() - result = runner.invoke(runpod_cli, ['pod', 'create']) + result = runner.invoke(runpod_cli, ["pod", "create"]) # Assertions assert result.exit_code == 0, result.exception - mock_prompt.assert_called_once_with('Enter pod name', default='RunPod-CLI-Pod') - mock_echo.assert_called_with('Pod sample_id has been created.') - mock_create_pod.assert_called_with('RunPod-CLI-Pod', - 'runpod/base:0.0.0', - 'NVIDIA GeForce RTX 3090', - gpu_count=1, support_public_ip=True, ports='22/tcp') - mock_echo.assert_called_with('Pod sample_id has been created.') - - - @patch('runpod.cli.groups.pod.commands.click.echo') - @patch('runpod.cli.groups.pod.commands.ssh_cmd.SSHConnection') + mock_prompt.assert_called_once_with("Enter pod name", default="RunPod-CLI-Pod") + mock_echo.assert_called_with("Pod sample_id has been created.") + mock_create_pod.assert_called_with( + "RunPod-CLI-Pod", + "runpod/base:0.0.0", + "NVIDIA GeForce RTX 3090", + gpu_count=1, + support_public_ip=True, + ports="22/tcp", + ) + mock_echo.assert_called_with("Pod sample_id has been created.") + + @patch("runpod.cli.groups.pod.commands.click.echo") + @patch("runpod.cli.groups.pod.commands.ssh_cmd.SSHConnection") def test_connect_to_pod(self, mock_ssh_connection, mock_echo): - ''' + """ Test connect_to_pod function - ''' - pod_id = 'sample_id' + """ + pod_id = "sample_id" mock_ssh = MagicMock() mock_ssh_connection.return_value = mock_ssh runner = CliRunner() - result = runner.invoke(runpod_cli, ['pod', 'connect', pod_id]) + result = runner.invoke(runpod_cli, ["pod", "connect", pod_id]) assert result.exit_code == 0, result.exception - mock_echo.assert_called_once_with(f'Connecting to pod {pod_id}...') + mock_echo.assert_called_once_with(f"Connecting to pod {pod_id}...") mock_ssh_connection.assert_called_once_with(pod_id) mock_ssh.launch_terminal.assert_called_once_with() diff --git a/tests/test_cli/test_cli_groups/test_project_commands.py b/tests/test_cli/test_cli_groups/test_project_commands.py index 6a04385d..04330bdc 100644 --- a/tests/test_cli/test_cli_groups/test_project_commands.py +++ b/tests/test_cli/test_cli_groups/test_project_commands.py @@ -1,25 +1,30 @@ -''' +""" RunPod | CLI | Groups | Project | Commands | Tests -''' +""" + import unittest from unittest.mock import patch from click.testing import CliRunner -from runpod.cli.groups.project.commands import new_project_wizard, start_project_pod, deploy_project +from runpod.cli.groups.project.commands import ( + new_project_wizard, + start_project_pod, + deploy_project, +) class TestProjectCLI(unittest.TestCase): - ''' A collection of tests for the Project CLI commands. ''' + """A collection of tests for the Project CLI commands.""" def setUp(self): self.runner = CliRunner() def test_new_project_wizard_no_network_volumes(self): - ''' + """ Tests the new_project_wizard command with no network volumes. - ''' - with patch('runpod.cli.groups.project.commands.get_user') as mock_get_user: - mock_get_user.return_value = {'networkVolumes':[]} + """ + with patch("runpod.cli.groups.project.commands.get_user") as mock_get_user: + mock_get_user.return_value = {"networkVolumes": []} result = self.runner.invoke(new_project_wizard) @@ -27,65 +32,103 @@ def test_new_project_wizard_no_network_volumes(self): self.assertIn("You do not have any network volumes.", result.output) def test_new_project_wizard_success(self): - ''' + """ Tests the new_project_wizard command. - ''' - with patch('click.prompt') as mock_prompt, \ - patch('click.confirm', return_value=True) as mock_confirm, \ - patch('runpod.cli.groups.project.commands.create_new_project') as mock_create, \ - patch('runpod.cli.groups.project.commands.get_user') as mock_get_user, \ - patch('runpod.cli.groups.project.commands.cli_select') as mock_select: - mock_get_user.return_value = {'networkVolumes':[{ 'id': 'XYZ_VOLUME', 'name': 'XYZ_VOLUME', 'size': 100, 'dataCenterId': 'XYZ' }]} # pylint: disable=line-too-long - mock_prompt.side_effect = ['TestProject', '11.8.0', '3.10'] - mock_select.return_value = {'volume-id': 'XYZ_VOLUME'} - - result = self.runner.invoke(new_project_wizard, ['--type', 'llama2', '--model', 'meta-llama/Llama-2-7b']) # pylint: disable=line-too-long + """ + with patch("click.prompt") as mock_prompt, patch( + "click.confirm", return_value=True + ) as mock_confirm, patch( + "runpod.cli.groups.project.commands.create_new_project" + ) as mock_create, patch( + "runpod.cli.groups.project.commands.get_user" + ) as mock_get_user, patch( + "runpod.cli.groups.project.commands.cli_select" + ) as mock_select: + mock_get_user.return_value = { + "networkVolumes": [ + { + "id": "XYZ_VOLUME", + "name": "XYZ_VOLUME", + "size": 100, + "dataCenterId": "XYZ", + } + ] + } # pylint: disable=line-too-long + mock_prompt.side_effect = ["TestProject", "11.8.0", "3.10"] + mock_select.return_value = {"volume-id": "XYZ_VOLUME"} + + result = self.runner.invoke( + new_project_wizard, + ["--type", "llama2", "--model", "meta-llama/Llama-2-7b"], + ) # pylint: disable=line-too-long self.assertEqual(result.exit_code, 0) mock_confirm.assert_called_with("Do you want to continue?", abort=True) mock_create.assert_called() mock_prompt.assert_called() - mock_create.assert_called_with('TestProject', 'XYZ_VOLUME', '11.8.0', '3.10', 'llama2', 'meta-llama/Llama-2-7b', False) # pylint: disable=line-too-long + mock_create.assert_called_with( + "TestProject", + "XYZ_VOLUME", + "11.8.0", + "3.10", + "llama2", + "meta-llama/Llama-2-7b", + False, + ) # pylint: disable=line-too-long self.assertIn("Project TestProject created successfully!", result.output) def test_new_project_wizard_success_init_current_dir(self): - ''' + """ Tests the new_project_wizard command with the --init flag. - ''' - with patch('click.prompt') as mock_prompt, \ - patch('click.confirm', return_value=True) as mock_confirm, \ - patch('runpod.cli.groups.project.commands.create_new_project') as mock_create, \ - patch('runpod.cli.groups.project.commands.get_user') as mock_get_user, \ - patch('runpod.cli.groups.project.commands.cli_select') as mock_select, \ - patch('os.getcwd') as mock_getcwd: - mock_get_user.return_value = {'networkVolumes':[{ 'id': 'XYZ_VOLUME', 'name': 'XYZ_VOLUME', 'size': 100, 'dataCenterId': 'XYZ' }]} # pylint: disable=line-too-long - mock_select.return_value = {'volume-id': 'XYZ_VOLUME'} - mock_prompt.side_effect = ['XYZ_VOLUME', '11.8.0', '3.10'] - - self.runner.invoke(new_project_wizard, ['--init']) + """ + with patch("click.prompt") as mock_prompt, patch( + "click.confirm", return_value=True + ) as mock_confirm, patch( + "runpod.cli.groups.project.commands.create_new_project" + ) as mock_create, patch( + "runpod.cli.groups.project.commands.get_user" + ) as mock_get_user, patch( + "runpod.cli.groups.project.commands.cli_select" + ) as mock_select, patch( + "os.getcwd" + ) as mock_getcwd: + mock_get_user.return_value = { + "networkVolumes": [ + { + "id": "XYZ_VOLUME", + "name": "XYZ_VOLUME", + "size": 100, + "dataCenterId": "XYZ", + } + ] + } # pylint: disable=line-too-long + mock_select.return_value = {"volume-id": "XYZ_VOLUME"} + mock_prompt.side_effect = ["XYZ_VOLUME", "11.8.0", "3.10"] + + self.runner.invoke(new_project_wizard, ["--init"]) assert mock_confirm.called assert mock_create.called assert mock_getcwd.called def test_new_project_wizard_invalid_name(self): - ''' + """ Tests the new_project_wizard command with an invalid project name. - ''' - with patch('runpod.cli.groups.project.commands.get_user') as mock_get_user: - mock_get_user.return_value = {'networkVolumes':["XYZ_VOLUME"]} + """ + with patch("runpod.cli.groups.project.commands.get_user") as mock_get_user: + mock_get_user.return_value = {"networkVolumes": ["XYZ_VOLUME"]} - result = self.runner.invoke(new_project_wizard, ['--name', 'Invalid/Name']) + result = self.runner.invoke(new_project_wizard, ["--name", "Invalid/Name"]) self.assertEqual(result.exit_code, 2) self.assertIn("Project name contains an invalid character", result.output) - def test_start_project_pod(self): - ''' + """ Tests the start_project_pod command. - ''' - with patch('click.confirm', return_value=True) as mock_confirm, \ - patch('runpod.cli.groups.project.commands.start_project') as mock_start: + """ + with patch("click.confirm", return_value=True) as mock_confirm, patch( + "runpod.cli.groups.project.commands.start_project" + ) as mock_start: mock_start.return_value = None result = self.runner.invoke(start_project_pod) @@ -93,12 +136,11 @@ def test_start_project_pod(self): self.assertEqual(result.exit_code, 0) self.assertIn("Starting project development pod...", result.output) - - @patch('runpod.cli.groups.project.commands.click.echo') - @patch('runpod.cli.groups.project.commands.create_project_endpoint') + @patch("runpod.cli.groups.project.commands.click.echo") + @patch("runpod.cli.groups.project.commands.create_project_endpoint") def test_deploy_project(self, mock_create_project_endpoint, mock_click_echo): - """ Test the deploy_project function. """ - mock_create_project_endpoint.return_value = 'test_endpoint_id' + """Test the deploy_project function.""" + mock_create_project_endpoint.return_value = "test_endpoint_id" result = self.runner.invoke(deploy_project) @@ -106,8 +148,14 @@ def test_deploy_project(self, mock_create_project_endpoint, mock_click_echo): mock_click_echo.assert_any_call("Deploying project...") mock_click_echo.assert_any_call("The following urls are available:") - mock_click_echo.assert_any_call(" - https://api.runpod.ai/v2/test_endpoint_id/runsync") - mock_click_echo.assert_any_call(" - https://api.runpod.ai/v2/test_endpoint_id/run") - mock_click_echo.assert_any_call(" - https://api.runpod.ai/v2/test_endpoint_id/health") + mock_click_echo.assert_any_call( + " - https://api.runpod.ai/v2/test_endpoint_id/runsync" + ) + mock_click_echo.assert_any_call( + " - https://api.runpod.ai/v2/test_endpoint_id/run" + ) + mock_click_echo.assert_any_call( + " - https://api.runpod.ai/v2/test_endpoint_id/health" + ) self.assertEqual(result.exit_code, 0) diff --git a/tests/test_cli/test_cli_groups/test_project_functions.py b/tests/test_cli/test_cli_groups/test_project_functions.py index 0c165d14..a1cff183 100644 --- a/tests/test_cli/test_cli_groups/test_project_functions.py +++ b/tests/test_cli/test_cli_groups/test_project_functions.py @@ -5,20 +5,24 @@ from unittest.mock import patch, mock_open from runpod.cli.groups.project.functions import ( - STARTER_TEMPLATES, create_new_project, - start_project, create_project_endpoint + STARTER_TEMPLATES, + create_new_project, + start_project, + create_project_endpoint, ) class TestCreateNewProject(unittest.TestCase): - """ Test the create_new_project function.""" + """Test the create_new_project function.""" @patch("os.makedirs") @patch("os.path.exists", return_value=False) @patch("os.getcwd", return_value="/current/path") @patch("runpod.cli.groups.project.functions.copy_template_files") - def test_create_project_folder(self, mock_copy_template_files, mock_getcwd, mock_exists, mock_makedirs): # pylint: disable=line-too-long - """ Test that a new project folder is created if init_current_dir is False. """ + def test_create_project_folder( + self, mock_copy_template_files, mock_getcwd, mock_exists, mock_makedirs + ): # pylint: disable=line-too-long + """Test that a new project folder is created if init_current_dir is False.""" with patch("builtins.open", new_callable=mock_open): create_new_project("test_project", "volume_id", "11.1.1", "3.8") mock_makedirs.assert_called_once_with("/current/path/test_project") @@ -26,21 +30,30 @@ def test_create_project_folder(self, mock_copy_template_files, mock_getcwd, mock assert mock_getcwd.called assert mock_exists.called - @patch('os.makedirs') - @patch('os.path.exists', return_value=False) - @patch('os.getcwd', return_value='/tmp/testdir') - @patch('builtins.open', new_callable=mock_open) - def test_create_new_project_init_current_dir(self, mock_file_open, mock_getcwd, mock_path_exists, mock_makedirs): # pylint: disable=line-too-long - """ Test that a new project folder is not created if init_current_dir is True. """ + @patch("os.makedirs") + @patch("os.path.exists", return_value=False) + @patch("os.getcwd", return_value="/tmp/testdir") + @patch("builtins.open", new_callable=mock_open) + def test_create_new_project_init_current_dir( + self, mock_file_open, mock_getcwd, mock_path_exists, mock_makedirs + ): # pylint: disable=line-too-long + """Test that a new project folder is not created if init_current_dir is True.""" project_name = "test_project" runpod_volume_id = "12345" cuda_version = "11.1.1" python_version = "3.9" create_new_project( - project_name, runpod_volume_id, cuda_version, python_version, init_current_dir=True) + project_name, + runpod_volume_id, + cuda_version, + python_version, + init_current_dir=True, + ) mock_makedirs.assert_not_called() - mock_file_open.assert_called_with('/tmp/testdir/runpod.toml', 'w', encoding="UTF-8") + mock_file_open.assert_called_with( + "/tmp/testdir/runpod.toml", "w", encoding="UTF-8" + ) assert mock_getcwd.called assert mock_path_exists.called is False @@ -48,42 +61,55 @@ def test_create_new_project_init_current_dir(self, mock_file_open, mock_getcwd, @patch("os.path.exists", return_value=False) @patch("os.getcwd", return_value="/current/path") @patch("runpod.cli.groups.project.functions.copy_template_files") - def test_copy_template_files(self, mock_copy_template_files, mock_getcwd, mock_exists, mock_makedirs): # pylint: disable=line-too-long - """ Test that template files are copied to the new project folder. """ + def test_copy_template_files( + self, mock_copy_template_files, mock_getcwd, mock_exists, mock_makedirs + ): # pylint: disable=line-too-long + """Test that template files are copied to the new project folder.""" with patch("builtins.open", new_callable=mock_open): create_new_project("test_project", "volume_id", "11.1.1", "3.8") mock_copy_template_files.assert_called_once_with( - STARTER_TEMPLATES + "/default", "/current/path/test_project") # pylint: disable=line-too-long + STARTER_TEMPLATES + "/default", "/current/path/test_project" + ) # pylint: disable=line-too-long assert mock_getcwd.called assert mock_exists.called assert mock_makedirs.called @patch("os.path.exists", return_value=True) - @patch("builtins.open", new_callable=mock_open, read_data="data with <> placeholder") # pylint: disable=line-too-long - def test_replace_placeholders_in_handler(self, mock_open_file, mock_exists): # pylint: disable=line-too-long - """ Test that placeholders in handler.py are replaced if model_name is given. """ + @patch( + "builtins.open", + new_callable=mock_open, + read_data="data with <> placeholder", + ) # pylint: disable=line-too-long + def test_replace_placeholders_in_handler( + self, mock_open_file, mock_exists + ): # pylint: disable=line-too-long + """Test that placeholders in handler.py are replaced if model_name is given.""" with patch("runpod.cli.groups.project.functions.copy_template_files"): - create_new_project("test_project", "volume_id", "11.8.0", "3.8", model_name="my_model") + create_new_project( + "test_project", "volume_id", "11.8.0", "3.8", model_name="my_model" + ) assert mock_open_file.called assert mock_exists.called @patch("os.path.exists", return_value=False) @patch("builtins.open", new_callable=mock_open) def test_create_runpod_toml(self, mock_open_file, mock_exists): - """ Test that runpod.toml configuration file is created. """ + """Test that runpod.toml configuration file is created.""" with patch("runpod.cli.groups.project.functions.copy_template_files"): create_new_project("test_project", "volume_id", "11.8.0", "3.8") toml_file_location = os.path.join(os.getcwd(), "test_project", "runpod.toml") mock_open_file.assert_called_with( - toml_file_location, 'w', encoding="UTF-8") # pylint: disable=line-too-long + toml_file_location, "w", encoding="UTF-8" + ) # pylint: disable=line-too-long assert mock_exists.called @patch("os.path.exists", return_value=True) @patch("builtins.open", new_callable=mock_open, read_data="<> placeholder") def test_update_requirements_file(self, mock_open_file, mock_exists): - """ Test that placeholders in requirements.txt are replaced correctly. """ - with patch("runpod.cli.groups.project.functions.__version__", "dev"), \ - patch("runpod.cli.groups.project.functions.copy_template_files"): + """Test that placeholders in requirements.txt are replaced correctly.""" + with patch("runpod.cli.groups.project.functions.__version__", "dev"), patch( + "runpod.cli.groups.project.functions.copy_template_files" + ): create_new_project("test_project", "volume_id", "11.8.0", "3.8") assert mock_open_file.called assert mock_exists.called @@ -91,107 +117,127 @@ def test_update_requirements_file(self, mock_open_file, mock_exists): @patch("os.path.exists", return_value=True) @patch("builtins.open", new_callable=mock_open, read_data="<> placeholder") def test_update_requirements_file_non_dev(self, mock_open_file, mock_exists): - """ Test that placeholders in requirements.txt are replaced for non-dev versions. """ - with patch("runpod.cli.groups.project.functions.__version__", "1.0.0"), \ - patch("runpod.cli.groups.project.functions.copy_template_files"): + """Test that placeholders in requirements.txt are replaced for non-dev versions.""" + with patch("runpod.cli.groups.project.functions.__version__", "1.0.0"), patch( + "runpod.cli.groups.project.functions.copy_template_files" + ): create_new_project("test_project", "volume_id", "11.8.0", "3.8") assert mock_open_file.called assert mock_exists.called class TestStartProject(unittest.TestCase): - """ Test the start_project function. """ - - @patch('runpod.cli.groups.project.functions.load_project_config') - @patch('runpod.cli.groups.project.functions.get_project_pod') - @patch('runpod.cli.groups.project.functions.attempt_pod_launch') - @patch('runpod.cli.groups.project.functions.get_pod') - @patch('runpod.cli.groups.project.functions.SSHConnection') - @patch('os.getcwd', return_value='/current/path') - def test_start_nonexistent_successfully(self, mock_getcwd, mock_ssh_connection, mock_get_pod, mock_attempt_pod_launch, mock_get_project_pod, mock_load_project_config): # pylint: disable=line-too-long, too-many-arguments - """ Test that a project is launched successfully. """ + """Test the start_project function.""" + + @patch("runpod.cli.groups.project.functions.load_project_config") + @patch("runpod.cli.groups.project.functions.get_project_pod") + @patch("runpod.cli.groups.project.functions.attempt_pod_launch") + @patch("runpod.cli.groups.project.functions.get_pod") + @patch("runpod.cli.groups.project.functions.SSHConnection") + @patch("os.getcwd", return_value="/current/path") + def test_start_nonexistent_successfully( + self, + mock_getcwd, + mock_ssh_connection, + mock_get_pod, + mock_attempt_pod_launch, + mock_get_project_pod, + mock_load_project_config, + ): # pylint: disable=line-too-long, too-many-arguments + """Test that a project is launched successfully.""" mock_load_project_config.return_value = { - 'project': { - 'uuid': '123456', - 'name': 'test_project', - 'volume_mount_path': '/mount/path', - 'env_vars': {'ENV_VAR': 'value'}, - 'gpu': 'NVIDIA GPU' + "project": { + "uuid": "123456", + "name": "test_project", + "volume_mount_path": "/mount/path", + "env_vars": {"ENV_VAR": "value"}, + "gpu": "NVIDIA GPU", + }, + "runtime": { + "python_version": "3.8", + "handler_path": "handler.py", + "requirements_path": "requirements.txt", }, - 'runtime': { - 'python_version': '3.8', - 'handler_path': 'handler.py', - 'requirements_path': 'requirements.txt' - } } mock_get_project_pod.return_value = False mock_attempt_pod_launch.return_value = { - 'id': 'new_pod_id', - 'desiredStatus': 'PENDING', - 'runtime': None + "id": "new_pod_id", + "desiredStatus": "PENDING", + "runtime": None, } mock_get_pod.return_value = { - 'id': 'new_pod_id', - 'desiredStatus': 'RUNNING', - 'runtime': 'ONLINE' + "id": "new_pod_id", + "desiredStatus": "RUNNING", + "runtime": "ONLINE", } mock_ssh_instance = mock_ssh_connection.return_value mock_ssh_instance.__enter__.return_value = mock_ssh_instance mock_ssh_instance.run_commands.return_value = None - with patch('runpod.cli.groups.project.functions.sync_directory') as mock_sync_directory: + with patch( + "runpod.cli.groups.project.functions.sync_directory" + ) as mock_sync_directory: start_project() mock_attempt_pod_launch.assert_called() - mock_get_pod.assert_called_with('new_pod_id') - mock_ssh_connection.assert_called_with('new_pod_id') + mock_get_pod.assert_called_with("new_pod_id") + mock_ssh_connection.assert_called_with("new_pod_id") mock_ssh_instance.run_commands.assert_called() assert mock_getcwd.called assert mock_sync_directory.called - @patch('runpod.cli.groups.project.functions.get_project_pod') - @patch('runpod.cli.groups.project.functions.attempt_pod_launch') + @patch("runpod.cli.groups.project.functions.get_project_pod") + @patch("runpod.cli.groups.project.functions.attempt_pod_launch") def test_failed_pod_launch(self, mock_attempt_pod, mock_get_pod): - """ Test that a project is not launched if pod launch fails. """ + """Test that a project is not launched if pod launch fails.""" mock_attempt_pod.return_value = None mock_get_pod.return_value = None - with patch('builtins.print') as mock_print, \ - patch('runpod.cli.groups.project.functions.load_project_config'): + with patch("builtins.print") as mock_print, patch( + "runpod.cli.groups.project.functions.load_project_config" + ): start_project() mock_print.assert_called_with( - "Selected GPU types unavailable, try again later or use a different type.") # pylint: disable=line-too-long + "Selected GPU types unavailable, try again later or use a different type." + ) # pylint: disable=line-too-long class TestStartProjectAPI(unittest.TestCase): - """ Test the start_project_api function. """ - - @patch('runpod.cli.groups.project.functions.load_project_config') - @patch('runpod.cli.groups.project.functions.get_project_pod') - @patch('runpod.cli.groups.project.functions.SSHConnection') - @patch('os.getcwd', return_value='/current/path') - @patch('runpod.cli.groups.project.functions.sync_directory') - def test_start_project_api_successfully(self, mock_sync_directory, mock_getcwd, mock_ssh_connection, mock_get_project_pod, mock_load_project_config): # pylint: disable=line-too-long, too-many-arguments - """ Test that a project API is started successfully. """ + """Test the start_project_api function.""" + + @patch("runpod.cli.groups.project.functions.load_project_config") + @patch("runpod.cli.groups.project.functions.get_project_pod") + @patch("runpod.cli.groups.project.functions.SSHConnection") + @patch("os.getcwd", return_value="/current/path") + @patch("runpod.cli.groups.project.functions.sync_directory") + def test_start_project_api_successfully( + self, + mock_sync_directory, + mock_getcwd, + mock_ssh_connection, + mock_get_project_pod, + mock_load_project_config, + ): # pylint: disable=line-too-long, too-many-arguments + """Test that a project API is started successfully.""" mock_load_project_config.return_value = { - 'project': { - 'uuid': '123456', - 'name': 'test_project', - 'volume_mount_path': '/mount/path' + "project": { + "uuid": "123456", + "name": "test_project", + "volume_mount_path": "/mount/path", + }, + "runtime": { + "python_version": "3.8", + "handler_path": "handler.py", + "requirements_path": "requirements.txt", }, - 'runtime': { - 'python_version': '3.8', - 'handler_path': 'handler.py', - 'requirements_path': 'requirements.txt' - } } - mock_get_project_pod.return_value = {'id': 'pod_id'} + mock_get_project_pod.return_value = {"id": "pod_id"} mock_ssh_instance = mock_ssh_connection.return_value mock_ssh_instance.__enter__.return_value = mock_ssh_instance @@ -199,77 +245,88 @@ def test_start_project_api_successfully(self, mock_sync_directory, mock_getcwd, start_project() - mock_get_project_pod.assert_called_with('123456') - mock_ssh_connection.assert_called_with({'id': 'pod_id'}) - mock_sync_directory.assert_called_with(mock_ssh_instance, - '/current/path', '/mount/path/123456/dev') + mock_get_project_pod.assert_called_with("123456") + mock_ssh_connection.assert_called_with({"id": "pod_id"}) + mock_sync_directory.assert_called_with( + mock_ssh_instance, "/current/path", "/mount/path/123456/dev" + ) mock_ssh_instance.run_commands.assert_called() assert mock_getcwd.called class TestCreateProjectEndpoint(unittest.TestCase): - """ Test the create_project_endpoint function. """ - - @patch('runpod.cli.groups.project.functions.SSHConnection') - @patch('runpod.cli.groups.project.functions.load_project_config') - @patch('runpod.cli.groups.project.functions.create_template') - @patch('runpod.cli.groups.project.functions.create_endpoint') - @patch('runpod.cli.groups.project.functions.update_endpoint_template') - @patch('runpod.cli.groups.project.functions.get_project_pod') - @patch('runpod.cli.groups.project.functions.get_project_endpoint') - def test_create_project_endpoint(self, mock_get_project_endpoint, mock_get_project_pod, mock_update_endpoint, mock_create_endpoint, # pylint: disable=too-many-arguments,line-too-long - mock_create_template, mock_load_project_config, mock_ssh_connection): # pylint: disable=line-too-long - """ Test that a project endpoint is created successfully. """ + """Test the create_project_endpoint function.""" + + @patch("runpod.cli.groups.project.functions.SSHConnection") + @patch("runpod.cli.groups.project.functions.load_project_config") + @patch("runpod.cli.groups.project.functions.create_template") + @patch("runpod.cli.groups.project.functions.create_endpoint") + @patch("runpod.cli.groups.project.functions.update_endpoint_template") + @patch("runpod.cli.groups.project.functions.get_project_pod") + @patch("runpod.cli.groups.project.functions.get_project_endpoint") + def test_create_project_endpoint( + self, + mock_get_project_endpoint, + mock_get_project_pod, + mock_update_endpoint, + mock_create_endpoint, # pylint: disable=too-many-arguments,line-too-long + mock_create_template, + mock_load_project_config, + mock_ssh_connection, + ): # pylint: disable=line-too-long + """Test that a project endpoint is created successfully.""" mock_get_project_endpoint.return_value = False mock_get_project_pod.return_value = None - with patch('runpod.cli.groups.project.functions._launch_dev_pod') as mock_launch_dev_pod: + with patch( + "runpod.cli.groups.project.functions._launch_dev_pod" + ) as mock_launch_dev_pod: mock_launch_dev_pod.return_value = None assert create_project_endpoint() is None - mock_get_project_pod.return_value = {'id': 'test_pod_id'} + mock_get_project_pod.return_value = {"id": "test_pod_id"} mock_load_project_config.return_value = { - 'project': { - 'name': 'test_project', - 'volume_mount_path': '/runpod-volume/123456', - 'uuid': '123456', - 'env_vars': {'TEST_VAR': 'value'}, - 'base_image': 'test_image', - 'container_disk_size_gb': 10, - 'storage_id': 'test_storage_id', + "project": { + "name": "test_project", + "volume_mount_path": "/runpod-volume/123456", + "uuid": "123456", + "env_vars": {"TEST_VAR": "value"}, + "base_image": "test_image", + "container_disk_size_gb": 10, + "storage_id": "test_storage_id", + }, + "runtime": { + "python_version": "3.8", + "handler_path": "handler.py", + "requirements_path": "requirements.txt", }, - 'runtime': { - 'python_version': '3.8', - 'handler_path': 'handler.py', - 'requirements_path': 'requirements.txt' - } } - mock_create_template.return_value = {'id': 'test_template_id'} - mock_create_endpoint.return_value = {'id': 'test_endpoint_id'} + mock_create_template.return_value = {"id": "test_template_id"} + mock_create_endpoint.return_value = {"id": "test_endpoint_id"} mock_ssh_instance = mock_ssh_connection.return_value mock_ssh_instance.__enter__.return_value = mock_ssh_instance mock_ssh_instance.run_commands.return_value = None - with patch('runpod.cli.groups.project.functions.datetime') as mock_datetime: - mock_datetime.now.return_value = '123456' + with patch("runpod.cli.groups.project.functions.datetime") as mock_datetime: + mock_datetime.now.return_value = "123456" result = create_project_endpoint() - self.assertEqual(result, 'test_endpoint_id') + self.assertEqual(result, "test_endpoint_id") mock_create_template.assert_called_with( - name='test_project-endpoint | 123456 | 123456', - image_name='test_image', + name="test_project-endpoint | 123456 | 123456", + image_name="test_image", container_disk_in_gb=10, docker_start_cmd='bash -c ". /runpod-volume/123456/prod/venv/bin/activate && python -u /runpod-volume/123456/prod/test_project/handler.py"', # pylint: disable=line-too-long - env={'TEST_VAR': 'value'}, - is_serverless=True + env={"TEST_VAR": "value"}, + is_serverless=True, ) mock_create_endpoint.assert_called_with( - name='test_project-endpoint | 123456', - template_id='test_template_id', - network_volume_id='test_storage_id' + name="test_project-endpoint | 123456", + template_id="test_template_id", + network_volume_id="test_storage_id", ) - mock_update_endpoint.return_value = {'id': 'test_endpoint_id'} - mock_get_project_endpoint.return_value = {'id': 'test_endpoint_id'} - self.assertEqual(create_project_endpoint(), 'test_endpoint_id') + mock_update_endpoint.return_value = {"id": "test_endpoint_id"} + mock_get_project_endpoint.return_value = {"id": "test_endpoint_id"} + self.assertEqual(create_project_endpoint(), "test_endpoint_id") diff --git a/tests/test_cli/test_cli_groups/test_project_helpers.py b/tests/test_cli/test_cli_groups/test_project_helpers.py index e58dc829..051cf0b4 100644 --- a/tests/test_cli/test_cli_groups/test_project_helpers.py +++ b/tests/test_cli/test_cli_groups/test_project_helpers.py @@ -12,7 +12,7 @@ get_project_endpoint, copy_template_files, attempt_pod_launch, - load_project_config + load_project_config, ) @@ -89,7 +89,7 @@ def test_attempt_pod_launch_success(self, mock_create_pod): "ports": "ports", "storage_id": "storage_id", "volume_mount_path": "volume_mount_path", - "container_disk_size_gb": "1" + "container_disk_size_gb": "1", } } environment_variables = {"key": "value"} @@ -108,6 +108,7 @@ def test_load_project_config(self, mock_file, mock_exists): assert mock_exists.called assert mock_file.called - with patch("os.path.exists", return_value=False), \ - self.assertRaises(FileNotFoundError): + with patch("os.path.exists", return_value=False), self.assertRaises( + FileNotFoundError + ): load_project_config() diff --git a/tests/test_cli/test_cli_groups/test_ssh_commands.py b/tests/test_cli/test_cli_groups/test_ssh_commands.py index eee56a77..392276f1 100644 --- a/tests/test_cli/test_cli_groups/test_ssh_commands.py +++ b/tests/test_cli/test_cli_groups/test_ssh_commands.py @@ -7,34 +7,42 @@ from runpod.cli.groups.ssh.commands import list_keys, add_key + class TestSSHCommands(unittest.TestCase): """Tests for the SSH commands of the CLI.""" def test_list_keys(self): """Test the list_keys command.""" runner = CliRunner() - with patch('runpod.cli.groups.ssh.commands.get_user_pub_keys', return_value=[ - {'name': 'key1', 'type': 'RSA', 'fingerprint': 'fp1'}, - {'name': 'key2', 'type': 'DSA', 'fingerprint': 'fp2'} - ]) as mock_get_keys: + with patch( + "runpod.cli.groups.ssh.commands.get_user_pub_keys", + return_value=[ + {"name": "key1", "type": "RSA", "fingerprint": "fp1"}, + {"name": "key2", "type": "DSA", "fingerprint": "fp2"}, + ], + ) as mock_get_keys: result = runner.invoke(list_keys) - self.assertIn('key1', result.output) - self.assertIn('key2', result.output) + self.assertIn("key1", result.output) + self.assertIn("key2", result.output) assert mock_get_keys.called def test_add_key_without_params(self): """Test the add_key command without parameters.""" runner = CliRunner() - with patch('runpod.cli.groups.ssh.commands.generate_ssh_key_pair') as mock_gen_key, \ - patch('runpod.cli.groups.ssh.commands.click.prompt', return_value='TestKey') as mock_prompt, \ - patch('runpod.cli.groups.ssh.commands.click.confirm', return_value=True) as mock_confirm: # pylint: disable=line-too-long + with patch( + "runpod.cli.groups.ssh.commands.generate_ssh_key_pair" + ) as mock_gen_key, patch( + "runpod.cli.groups.ssh.commands.click.prompt", return_value="TestKey" + ) as mock_prompt, patch( + "runpod.cli.groups.ssh.commands.click.confirm", return_value=True + ) as mock_confirm: # pylint: disable=line-too-long result = runner.invoke(add_key, []) - self.assertIn('The key has been added to your account.', result.output) - mock_gen_key.assert_called_once_with('TestKey') + self.assertIn("The key has been added to your account.", result.output) + mock_gen_key.assert_called_once_with("TestKey") assert mock_prompt.called assert mock_confirm.called diff --git a/tests/test_cli/test_cli_groups/test_ssh_functions.py b/tests/test_cli/test_cli_groups/test_ssh_functions.py index c1dcd261..f51882d3 100644 --- a/tests/test_cli/test_cli_groups/test_ssh_functions.py +++ b/tests/test_cli/test_cli_groups/test_ssh_functions.py @@ -4,49 +4,53 @@ import unittest from unittest.mock import patch, mock_open from runpod.cli.groups.ssh.functions import ( - get_ssh_key_fingerprint, get_user_pub_keys, - generate_ssh_key_pair, add_ssh_key + get_ssh_key_fingerprint, + get_user_pub_keys, + generate_ssh_key_pair, + add_ssh_key, ) class TestSSHFunctions(unittest.TestCase): - """ Tests for the SSH functions """ + """Tests for the SSH functions""" def test_get_ssh_key_fingerprint(self): - """ Test the get_ssh_key_fingerprint function """ + """Test the get_ssh_key_fingerprint function""" key = "ssh-rsa AAAAB3Nza...base64data...Q== user@host" fingerprint = get_ssh_key_fingerprint(key) expected_start = "SHA256:" self.assertTrue(fingerprint.startswith(expected_start)) def test_get_ssh_key_fingerprint_invalid(self): - """ Test the get_ssh_key_fingerprint function with an invalid key """ + """Test the get_ssh_key_fingerprint function with an invalid key""" with self.assertRaises(ValueError): get_ssh_key_fingerprint("invalidkey") @patch("runpod.cli.groups.ssh.functions.get_user") def test_get_user_pub_keys(self, mock_get_user): - """ Test the get_user_pub_keys function """ + """Test the get_user_pub_keys function""" # Create dummy base64 data for our mock SSH keys - dummy_data1 = base64.b64encode("test data 1".encode('utf-8')).decode('utf-8') - dummy_data2 = base64.b64encode("test data 2".encode('utf-8')).decode('utf-8') + dummy_data1 = base64.b64encode("test data 1".encode("utf-8")).decode("utf-8") + dummy_data2 = base64.b64encode("test data 2".encode("utf-8")).decode("utf-8") mock_get_user.return_value = { - 'pubKey': f'ssh-rsa {dummy_data1} key1\nssh-rsa {dummy_data2} key2\n1' + "pubKey": f"ssh-rsa {dummy_data1} key1\nssh-rsa {dummy_data2} key2\n1" } keys = get_user_pub_keys() self.assertEqual(len(keys), 2) - self.assertEqual(keys[0]['fingerprint'].startswith("SHA256:"), True) + self.assertEqual(keys[0]["fingerprint"].startswith("SHA256:"), True) @patch("runpod.cli.groups.ssh.functions.get_user") def test_add_ssh_key_already_exists(self, mock_get_user): - """ Test the add_ssh_key function when the key already exists """ - mock_get_user.return_value = {'pubKey': 'ssh-rsa ABCDE12345 key1'} + """Test the add_ssh_key function when the key already exists""" + mock_get_user.return_value = {"pubKey": "ssh-rsa ABCDE12345 key1"} key = "ssh-rsa AAAAB3Nza...base64data...Q== user@host" - with patch("runpod.cli.groups.ssh.functions.update_user_settings") as mock_update_settings: + with patch( + "runpod.cli.groups.ssh.functions.update_user_settings" + ) as mock_update_settings: mock_update_settings.return_value = None self.assertIsNone(add_ssh_key(key)) assert mock_update_settings.called @@ -54,15 +58,18 @@ def test_add_ssh_key_already_exists(self, mock_get_user): @patch("runpod.cli.groups.ssh.functions.os.path.join") @patch("runpod.cli.groups.ssh.functions.paramiko.RSAKey.generate") def test_generate_ssh_key_pair(self, mock_generate, mock_path_join): - """ Test the generate_ssh_key_pair function """ + """Test the generate_ssh_key_pair function""" mock_generate.return_value.get_name.return_value = "ssh-rsa" mock_generate.return_value.get_base64.return_value = "ABCDE12345" mock_path_join.return_value = "/path/to/private_key" - with patch("os.mkdir") as mock_mkdir, \ - patch("builtins.open", mock_open()) as mock_file, \ - patch("runpod.cli.groups.ssh.functions.os.chmod") as mock_chmod, \ - patch("runpod.cli.groups.ssh.functions.add_ssh_key") as mock_add_key: + with patch("os.mkdir") as mock_mkdir, patch( + "builtins.open", mock_open() + ) as mock_file, patch( + "runpod.cli.groups.ssh.functions.os.chmod" + ) as mock_chmod, patch( + "runpod.cli.groups.ssh.functions.add_ssh_key" + ) as mock_add_key: mock_mkdir.return_value = None mock_file.return_value.write.return_value = None private_key, public_key = generate_ssh_key_pair("test_key") @@ -75,11 +82,11 @@ def test_generate_ssh_key_pair(self, mock_generate, mock_path_join): @patch("runpod.cli.groups.ssh.functions.get_user") @patch("runpod.cli.groups.ssh.functions.update_user_settings") def test_add_ssh_key_new(self, mock_update_settings, mock_get_user): - """ Test the add_ssh_key function when the key is new """ - mock_get_user.return_value = {'pubKey': ''} + """Test the add_ssh_key function when the key is new""" + mock_get_user.return_value = {"pubKey": ""} key = "ssh-rsa ABCDE12345 somecomment" add_ssh_key(key) mock_update_settings.assert_called_once_with(key) - mock_get_user.return_value = {'pubKey': 'ssh-rsa ABCDE12345 key1'} - assert add_ssh_key('ssh-rsa ABCDE12345 key1') is None + mock_get_user.return_value = {"pubKey": "ssh-rsa ABCDE12345 key1"} + assert add_ssh_key("ssh-rsa ABCDE12345 key1") is None diff --git a/tests/test_cli/test_cli_utils/__init__.py b/tests/test_cli/test_cli_utils/__init__.py index 99a90cef..f8a5822d 100644 --- a/tests/test_cli/test_cli_utils/__init__.py +++ b/tests/test_cli/test_cli_utils/__init__.py @@ -1 +1 @@ -''' Import util tests ''' +""" Import util tests """ diff --git a/tests/test_cli/test_cli_utils/test_info.py b/tests/test_cli/test_cli_utils/test_info.py index cf38571c..892f4380 100644 --- a/tests/test_cli/test_cli_utils/test_info.py +++ b/tests/test_cli/test_cli_utils/test_info.py @@ -7,45 +7,38 @@ class TestGetPodSSHIpPort: - """ Unit testing for get_pod_ssh_ip_port """ + """Unit testing for get_pod_ssh_ip_port""" def test_get_pod_ssh_ip_port_normal(self): - """ Test get_pod_ssh_ip_port normal """ - with patch('runpod.cli.utils.rp_info.get_pod') as mock_get_pod: + """Test get_pod_ssh_ip_port normal""" + with patch("runpod.cli.utils.rp_info.get_pod") as mock_get_pod: mock_get_pod.return_value = { - 'desiredStatus': 'RUNNING', - 'runtime': { - 'ports': [ - { - 'privatePort': 22, - 'ip': '127.0.0.1', - 'publicPort': 2222 - } + "desiredStatus": "RUNNING", + "runtime": { + "ports": [ + {"privatePort": 22, "ip": "127.0.0.1", "publicPort": 2222} ] - } + }, } - ip, port = get_pod_ssh_ip_port('pod_id') - assert ip == '127.0.0.1' + ip, port = get_pod_ssh_ip_port("pod_id") + assert ip == "127.0.0.1" assert port == 2222 def test_get_pod_ssh_ip_port_timeout(self): - """ Test get_pod_ssh_ip_port timeout """ - with patch('runpod.cli.utils.rp_info.get_pod') as mock_get_pod: - mock_get_pod.return_value = { - 'desiredStatus': 'RUNNING', - 'runtime': None - } + """Test get_pod_ssh_ip_port timeout""" + with patch("runpod.cli.utils.rp_info.get_pod") as mock_get_pod: + mock_get_pod.return_value = {"desiredStatus": "RUNNING", "runtime": None} with pytest.raises(TimeoutError): - get_pod_ssh_ip_port('pod_id', timeout=0.1) + get_pod_ssh_ip_port("pod_id", timeout=0.1) - mock_get_pod.return_value = {'desiredStatus': 'NOT_RUNNING'} + mock_get_pod.return_value = {"desiredStatus": "NOT_RUNNING"} with pytest.raises(TimeoutError): - get_pod_ssh_ip_port('pod_id', timeout=0.1) + get_pod_ssh_ip_port("pod_id", timeout=0.1) mock_get_pod.return_value = {} with pytest.raises(TimeoutError): - get_pod_ssh_ip_port('pod_id', timeout=0.1) + get_pod_ssh_ip_port("pod_id", timeout=0.1) diff --git a/tests/test_cli/test_cli_utils/test_runpodignore.py b/tests/test_cli/test_cli_utils/test_runpodignore.py index 60f3ac09..169fdb1f 100644 --- a/tests/test_cli/test_cli_utils/test_runpodignore.py +++ b/tests/test_cli/test_cli_utils/test_runpodignore.py @@ -10,26 +10,25 @@ class TestGetIgnoreList(unittest.TestCase): - """ Unit tests for the get_ignore_list function. """ + """Unit tests for the get_ignore_list function.""" - @patch('os.path.isfile', return_value=False) + @patch("os.path.isfile", return_value=False) def test_no_ignore_file(self, mock_isfile): - """ Test that the default ignore list is returned when no ignore file is present. """ + """Test that the default ignore list is returned when no ignore file is present.""" result = get_ignore_list() - self.assertEqual(result, [ - "__pycache__/", - "*.pyc", - ".*.swp", - ".git/", - "*.tmp", - "*.log" - ]) + self.assertEqual( + result, ["__pycache__/", "*.pyc", ".*.swp", ".git/", "*.tmp", "*.log"] + ) assert mock_isfile.called - @patch('os.path.isfile', return_value=True) - @patch('builtins.open', new_callable=mock_open, read_data="*.hello\n# This is a comment\n\n.world\n") # pylint: disable=line-too-long + @patch("os.path.isfile", return_value=True) + @patch( + "builtins.open", + new_callable=mock_open, + read_data="*.hello\n# This is a comment\n\n.world\n", + ) # pylint: disable=line-too-long def test_with_ignore_file(self, mock_file, mock_isfile): - """ Test that the default ignore list is returned when no ignore file is present. """ + """Test that the default ignore list is returned when no ignore file is present.""" result = get_ignore_list() expected_patterns = [ "__pycache__/", @@ -39,45 +38,45 @@ def test_with_ignore_file(self, mock_file, mock_isfile): "*.tmp", "*.log", "*.hello", - ".world" + ".world", ] self.assertEqual(result, expected_patterns) assert mock_file.called assert mock_isfile.called - @patch('os.path.isfile', return_value=True) - @patch('builtins.open', new_callable=mock_open, read_data="# Only comments and empty lines\n\n\n") # pylint: disable=line-too-long + @patch("os.path.isfile", return_value=True) + @patch( + "builtins.open", + new_callable=mock_open, + read_data="# Only comments and empty lines\n\n\n", + ) # pylint: disable=line-too-long def test_empty_ignore_file(self, mock_file, mock_isfile): - """ Test that the default ignore list is returned when no ignore file is present. """ + """Test that the default ignore list is returned when no ignore file is present.""" result = get_ignore_list() - self.assertEqual(result, [ - "__pycache__/", - "*.pyc", - ".*.swp", - ".git/", - "*.tmp", - "*.log" - ]) + self.assertEqual( + result, ["__pycache__/", "*.pyc", ".*.swp", ".git/", "*.tmp", "*.log"] + ) assert mock_file.called assert mock_isfile.called + class TestShouldIgnoreFunction(unittest.TestCase): - """ Unit tests for the should_ignore function. """ + """Unit tests for the should_ignore function.""" def test_should_ignore_with_relative_path(self): - """ Test that the should_ignore function returns True when the file should be ignored. """ + """Test that the should_ignore function returns True when the file should be ignored.""" patterns = ["/test/"] file_path = os.path.join(os.getcwd(), "test", "example.txt") self.assertTrue(should_ignore(file_path, patterns)) def test_should_ignore_with_absolute_path(self): - """ Test that the should_ignore function returns True when the file should be ignored. """ + """Test that the should_ignore function returns True when the file should be ignored.""" patterns = ["*.txt"] file_path = os.path.join(os.getcwd(), "test", "example.txt") self.assertTrue(should_ignore(file_path, patterns)) def test_should_not_ignore(self): - """ Test that the should_ignore + """Test that the should_ignore Function returns False when the file should not be ignored """ patterns = ["*.md"] @@ -86,14 +85,14 @@ def test_should_not_ignore(self): @patch("runpod.cli.utils.rp_runpodignore.get_ignore_list") def test_should_ignore_with_mocked_ignore_list(self, mock_get_ignore_list): - """ Test that the should_ignore function returns True when the file should be ignored. """ + """Test that the should_ignore function returns True when the file should be ignored.""" mock_get_ignore_list.return_value = ["*.txt"] file_path = "example.txt" self.assertTrue(should_ignore(file_path)) @patch("runpod.cli.utils.rp_runpodignore.get_ignore_list") def test_should_not_ignore_with_mocked_ignore_list(self, mock_get_ignore_list): - """ Test that the should_ignore + """Test that the should_ignore Function returns False when the file should not be ignored """ mock_get_ignore_list.return_value = ["*.md"] @@ -102,7 +101,7 @@ def test_should_not_ignore_with_mocked_ignore_list(self, mock_get_ignore_list): @patch("runpod.cli.utils.rp_runpodignore.os.getcwd") def test_should_ignore_with_mocked_cwd(self, mock_getcwd): - """ Test that the should_ignore function returns True when the file should be ignored. """ + """Test that the should_ignore function returns True when the file should be ignored.""" mock_getcwd.return_value = "/fake/directory" patterns = ["/test/"] file_path = "/fake/directory/test/example.txt" diff --git a/tests/test_cli/test_cli_utils/test_ssh_cmd.py b/tests/test_cli/test_cli_utils/test_ssh_cmd.py index b33e4b59..5c2a9c47 100644 --- a/tests/test_cli/test_cli_utils/test_ssh_cmd.py +++ b/tests/test_cli/test_cli_utils/test_ssh_cmd.py @@ -1,6 +1,7 @@ -''' +""" RunPod | CLI | Utils | SSH Command -''' +""" + import unittest from unittest.mock import patch, MagicMock @@ -10,57 +11,67 @@ class TestSSHConnection(unittest.TestCase): - """ Test the SSHConnection class. """ + """Test the SSHConnection class.""" def setUp(self): - self.patch_get_pod_ssh_ip_port = patch('runpod.cli.utils.ssh_cmd.get_pod_ssh_ip_port', - return_value=('127.0.0.1', 22)).start() + self.patch_get_pod_ssh_ip_port = patch( + "runpod.cli.utils.ssh_cmd.get_pod_ssh_ip_port", + return_value=("127.0.0.1", 22), + ).start() - self.patch_find_ssh_key_file = patch('runpod.cli.utils.ssh_cmd.find_ssh_key_file', - return_value='key_file').start() + self.patch_find_ssh_key_file = patch( + "runpod.cli.utils.ssh_cmd.find_ssh_key_file", return_value="key_file" + ).start() self.mock_ssh_client = MagicMock() - patch_paramiko = patch('runpod.cli.utils.ssh_cmd.paramiko.SSHClient', - return_value=self.mock_ssh_client).start() + patch_paramiko = patch( + "runpod.cli.utils.ssh_cmd.paramiko.SSHClient", + return_value=self.mock_ssh_client, + ).start() self.addCleanup(self.patch_get_pod_ssh_ip_port.stop) self.addCleanup(self.patch_find_ssh_key_file.stop) self.addCleanup(patch_paramiko.stop) - self.ssh_connection = SSHConnection('pod_id_mock') + self.ssh_connection = SSHConnection("pod_id_mock") def test_enter(self): - ''' Test entering the context manager. ''' + """Test entering the context manager.""" self.assertEqual( - self.ssh_connection, self.ssh_connection.__enter__()) # pylint: disable=unnecessary-dunder-call + self.ssh_connection, self.ssh_connection.__enter__() + ) # pylint: disable=unnecessary-dunder-call def test_enter_exception(self): - """ Test entering the context manager with an exception. """ + """Test entering the context manager with an exception.""" self.mock_ssh_client.connect.side_effect = paramiko.SSHException with self.assertRaises(SystemExit): - SSHConnection('pod_id_mock') + SSHConnection("pod_id_mock") def test_exit(self): - ''' Test exiting the context manager. ''' + """Test exiting the context manager.""" self.ssh_connection.__exit__(None, None, None) self.mock_ssh_client.close.assert_called_once() def test_run_commands(self): - ''' Test that run_commands() calls exec_command() on the SSH object. ''' - commands = ['command1', 'command2'] + """Test that run_commands() calls exec_command() on the SSH object.""" + commands = ["command1", "command2"] mock_exec_command = self.mock_ssh_client.exec_command - mock_exec_command.return_value = (None, ['stdout1', 'stdout2'], ['stderr1', 'stderr2']) + mock_exec_command.return_value = ( + None, + ["stdout1", "stdout2"], + ["stderr1", "stderr2"], + ) self.ssh_connection.run_commands(commands) assert mock_exec_command.call_count == 2 def test_put_file(self): - ''' Test that put_file() calls put() on the SFTP object. ''' - local_path = '/local/file.txt' - remote_path = '/remote/file.txt' + """Test that put_file() calls put() on the SFTP object.""" + local_path = "/local/file.txt" + remote_path = "/remote/file.txt" mock_sftp = self.mock_ssh_client.open_sftp.return_value.__enter__.return_value self.ssh_connection.put_file(local_path, remote_path) @@ -68,32 +79,34 @@ def test_put_file(self): mock_sftp.put.assert_called_once_with(local_path, remote_path) def test_get_file(self): - ''' Test that get_file() calls get() on the SFTP object. ''' - local_path = '/local/file.txt' - remote_path = '/remote/file.txt' + """Test that get_file() calls get() on the SFTP object.""" + local_path = "/local/file.txt" + remote_path = "/remote/file.txt" mock_sftp = self.mock_ssh_client.open_sftp.return_value.__enter__.return_value self.ssh_connection.get_file(remote_path, local_path) mock_sftp.get.assert_called_once_with(remote_path, local_path) - @patch('subprocess.run') + @patch("subprocess.run") def test_launch_terminal(self, mock_subprocess): - ''' Test that launch_terminal() calls subprocess.run(). ''' + """Test that launch_terminal() calls subprocess.run().""" self.ssh_connection.launch_terminal() mock_subprocess.assert_called_once() - @patch('subprocess.run') + @patch("subprocess.run") def test_rsync(self, mock_subprocess): - ''' Test that rsync() calls subprocess.run(). ''' - self.ssh_connection.rsync('local_path', 'remote_path', quiet=True) + """Test that rsync() calls subprocess.run().""" + self.ssh_connection.rsync("local_path", "remote_path", quiet=True) mock_subprocess.assert_called_once() # Test that the signal handler closes the connection. - @patch('runpod.cli.utils.ssh_cmd.SSHConnection.close') + @patch("runpod.cli.utils.ssh_cmd.SSHConnection.close") def test_signal_handler(self, mock_close): - ''' Test that the signal handler closes the connection. ''' - with patch('sys.exit') as mock_exit: - self.ssh_connection._signal_handler(None, None) # pylint: disable=protected-access + """Test that the signal handler closes the connection.""" + with patch("sys.exit") as mock_exit: + self.ssh_connection._signal_handler( + None, None + ) # pylint: disable=protected-access mock_close.assert_called_once() assert mock_exit.called diff --git a/tests/test_cli/test_cli_utils/test_sync.py b/tests/test_cli/test_cli_utils/test_sync.py index da20a217..879d3572 100644 --- a/tests/test_cli/test_cli_utils/test_sync.py +++ b/tests/test_cli/test_cli_utils/test_sync.py @@ -7,6 +7,7 @@ from runpod.cli import STOP_EVENT from runpod.cli.utils.rp_sync import WatcherHandler, start_watcher, sync_directory + class TestWatcherHandler(unittest.TestCase): """Tests for the WatcherHandler class.""" @@ -36,7 +37,7 @@ def test_on_any_event_with_not_ignored_file(self, mock_should_ignore): event_mock.src_path = "some_path/not_ignored_file.txt" handler.on_any_event(event_mock) - handler.on_any_event(event_mock) # Call it twice to test the debouncer + handler.on_any_event(event_mock) # Call it twice to test the debouncer time.sleep(2) mock_action_function.assert_called_once() @@ -52,6 +53,7 @@ def test_on_any_event_with_directory(self): time.sleep(2) mock_action_function.assert_not_called() + class TestSyncDirectory(unittest.TestCase): """Tests for the sync_directory function.""" @@ -66,7 +68,7 @@ def test_sync_directory(self, mock_start_watcher, mock_thread_class): sync_directory(mock_ssh_client, local_path, remote_path) - target_function = mock_thread_class.call_args[1]['target'] + target_function = mock_thread_class.call_args[1]["target"] target_function() mock_start_watcher.assert_called_once() @@ -83,28 +85,33 @@ def test_sync_directory_sync_function(self, mock_start_watcher, mock_thread_clas sync_function = sync_directory(mock_ssh_client, local_path, remote_path) sync_function() - mock_ssh_client.rsync.assert_called_once_with(local_path, remote_path, quiet=True) + mock_ssh_client.rsync.assert_called_once_with( + local_path, remote_path, quiet=True + ) mock_thread_class.assert_called_once() mock_thread_class.assert_called_with( - target=mock_start_watcher, daemon=True, args=(ANY, local_path)) + target=mock_start_watcher, daemon=True, args=(ANY, local_path) + ) assert mock_start_watcher.called is False + class TestStartWatcher(unittest.TestCase): """Tests for the start_watcher function.""" - @patch('runpod.cli.utils.rp_sync.Observer') - @patch('runpod.cli.utils.rp_sync.WatcherHandler') + @patch("runpod.cli.utils.rp_sync.Observer") + @patch("runpod.cli.utils.rp_sync.WatcherHandler") def test_start_watcher(self, mock_watch_handler, mock_observer_class): """Test that the start_watcher function starts the watcher correctly.""" fake_action = MagicMock() - local_path = '/path/to/watch' + local_path = "/path/to/watch" mock_observer_instance = mock_observer_class.return_value STOP_EVENT.clear() - with patch('runpod.cli.utils.rp_sync.time.sleep') as mock_sleep: + with patch("runpod.cli.utils.rp_sync.time.sleep") as mock_sleep: + def side_effect(*args, **kwargs): del args, kwargs STOP_EVENT.set() @@ -115,9 +122,7 @@ def side_effect(*args, **kwargs): mock_watch_handler.assert_called_once_with(fake_action, local_path) mock_observer_instance.schedule.assert_called_once_with( - mock_watch_handler.return_value, - local_path, - recursive=True + mock_watch_handler.return_value, local_path, recursive=True ) mock_observer_instance.start.assert_called_once() diff --git a/tests/test_cli/test_cli_utils/test_userspace.py b/tests/test_cli/test_cli_utils/test_userspace.py index 24bedb92..2aa3a703 100644 --- a/tests/test_cli/test_cli_utils/test_userspace.py +++ b/tests/test_cli/test_cli_utils/test_userspace.py @@ -9,33 +9,33 @@ class TestFindSSHKeyFile(unittest.TestCase): - """ Unit testing for find_ssh_key_file """ + """Unit testing for find_ssh_key_file""" def setUp(self): self.pod_ip = "127.0.0.1" self.pod_port = 22 - @patch('os.listdir') + @patch("os.listdir") def test_no_keys_in_directory(self, mock_listdir): - """ Test find_ssh_key_file when there are no keys in the directory """ + """Test find_ssh_key_file when there are no keys in the directory""" mock_listdir.return_value = [] result = find_ssh_key_file(self.pod_ip, self.pod_port) self.assertIsNone(result) - @patch('os.path.isfile') - @patch('os.listdir') + @patch("os.path.isfile") + @patch("os.listdir") def test_all_keys_end_with_pub(self, mock_listdir, mock_isfile): - """ Test find_ssh_key_file when all keys in the directory end with .pub """ + """Test find_ssh_key_file when all keys in the directory end with .pub""" mock_listdir.return_value = ["key1.pub", "key2.pub"] mock_isfile.return_value = True result = find_ssh_key_file(self.pod_ip, self.pod_port) self.assertIsNone(result) - @patch('paramiko.SSHClient') - @patch('os.path.isfile') - @patch('os.listdir') + @patch("paramiko.SSHClient") + @patch("os.path.isfile") + @patch("os.listdir") def test_valid_key_found(self, mock_listdir, mock_isfile, mock_ssh_client): - """ Test find_ssh_key_file when a valid key is found """ + """Test find_ssh_key_file when a valid key is found""" mock_listdir.return_value = ["key1", "key2"] mock_isfile.return_value = True mock_ssh_instance = mock_ssh_client.return_value @@ -43,16 +43,17 @@ def test_valid_key_found(self, mock_listdir, mock_isfile, mock_ssh_client): result = find_ssh_key_file(self.pod_ip, self.pod_port) self.assertEqual(result, os.path.expanduser("~/.runpod/ssh/key1")) - @patch('paramiko.SSHClient') - @patch('os.path.isfile') - @patch('os.listdir') + @patch("paramiko.SSHClient") + @patch("os.path.isfile") + @patch("os.listdir") def test_no_valid_key_found(self, mock_listdir, mock_isfile, mock_ssh_client): - """ Test find_ssh_key_file when no valid key is found """ + """Test find_ssh_key_file when no valid key is found""" mock_listdir.return_value = ["key1", "key2"] mock_isfile.return_value = True mock_ssh_instance = mock_ssh_client.return_value mock_ssh_instance.connect.side_effect = [ - Exception("Error with key1"), Exception("Error with key2") + Exception("Error with key1"), + Exception("Error with key2"), ] result = find_ssh_key_file(self.pod_ip, self.pod_port) self.assertIsNone(result) diff --git a/tests/test_endpoint/__init__.py b/tests/test_endpoint/__init__.py index 4fab57e7..bbde6efb 100644 --- a/tests/test_endpoint/__init__.py +++ b/tests/test_endpoint/__init__.py @@ -1 +1 @@ -''' Allows for the testing of the endpoint module. ''' +""" Allows for the testing of the endpoint module. """ diff --git a/tests/test_endpoint/test_asyncio_runner.py b/tests/test_endpoint/test_asyncio_runner.py index cdc5ea51..527e37b0 100644 --- a/tests/test_endpoint/test_asyncio_runner.py +++ b/tests/test_endpoint/test_asyncio_runner.py @@ -1,4 +1,5 @@ -''' Unit tests for the asyncio_runner module. ''' +""" Unit tests for the asyncio_runner module. """ + # pylint: disable=too-few-public-methods import tracemalloc @@ -13,13 +14,15 @@ class TestJob(IsolatedAsyncioTestCase): - ''' Tests the Job class. ''' + """Tests the Job class.""" async def test_status(self): - ''' + """ Tests Job.status - ''' - with patch("aiohttp.ClientSession", new_callable=AsyncMock) as mock_session_class: + """ + with patch( + "aiohttp.ClientSession", new_callable=AsyncMock + ) as mock_session_class: mock_session = mock_session_class.return_value mock_get = mock_session.get mock_resp = AsyncMock() @@ -33,11 +36,14 @@ async def test_status(self): assert await job.status() == "COMPLETED" async def test_output(self): - ''' + """ Tests Job.output - ''' - with patch("runpod.endpoint.asyncio.asyncio_runner.asyncio.sleep") as mock_sleep, \ - patch("aiohttp.ClientSession", new_callable=AsyncMock) as mock_session_class: + """ + with patch( + "runpod.endpoint.asyncio.asyncio_runner.asyncio.sleep" + ) as mock_sleep, patch( + "aiohttp.ClientSession", new_callable=AsyncMock + ) as mock_session_class: mock_session = mock_session_class.return_value mock_get = mock_session.get mock_resp = AsyncMock() @@ -58,10 +64,12 @@ async def json_side_effect(): assert await job.output() == "OUTPUT" async def test_output_timeout(self): - ''' + """ Tests Job.output with a timeout - ''' - with patch("aiohttp.ClientSession", new_callable=AsyncMock) as mock_session_class: + """ + with patch( + "aiohttp.ClientSession", new_callable=AsyncMock + ) as mock_session_class: mock_session = mock_session_class.return_value mock_get = mock_session.get mock_resp = AsyncMock() @@ -76,10 +84,12 @@ async def test_output_timeout(self): await output_task async def test_stream(self): - ''' + """ Tests Job.stream - ''' - with patch("aiohttp.ClientSession", new_callable=AsyncMock) as mock_session_class: + """ + with patch( + "aiohttp.ClientSession", new_callable=AsyncMock + ) as mock_session_class: mock_session = mock_session_class.return_value mock_get = mock_session.get mock_resp = AsyncMock() @@ -90,7 +100,11 @@ async def test_stream(self): ] async def json_side_effect(): - return responses.pop(0) if responses else {"stream": [], "status": "COMPLETED"} + return ( + responses.pop(0) + if responses + else {"stream": [], "status": "COMPLETED"} + ) mock_resp.json.side_effect = json_side_effect mock_get.return_value = mock_resp @@ -106,9 +120,9 @@ async def json_side_effect(): assert outputs == ["OUTPUT1", "OUTPUT2"] async def test_cancel(self): - ''' + """ Tests Job.cancel - ''' + """ with patch("aiohttp.ClientSession") as mock_session: mock_resp = MagicMock() mock_resp.json = MagicMock(return_value=asyncio.Future()) @@ -120,19 +134,25 @@ async def test_cancel(self): assert cancel_result == {"result": "CANCELLED"} async def test_output_in_progress_then_completed(self): - '''Tests Job.output when status is initially IN_PROGRESS and then changes to COMPLETED''' - with patch("aiohttp.ClientSession", new_callable=AsyncMock) as mock_session_class: + """Tests Job.output when status is initially IN_PROGRESS and then changes to COMPLETED""" + with patch( + "aiohttp.ClientSession", new_callable=AsyncMock + ) as mock_session_class: mock_session = mock_session_class.return_value mock_get = mock_session.get mock_resp = AsyncMock() responses = [ {"status": "IN_PROGRESS"}, - {"status": "COMPLETED", "output": "OUTPUT"} + {"status": "COMPLETED", "output": "OUTPUT"}, ] async def json_side_effect(): - return responses.pop(0) if responses else {"status": "COMPLETED", "output": "OUTPUT"} # pylint: disable=line-too-long + return ( + responses.pop(0) + if responses + else {"status": "COMPLETED", "output": "OUTPUT"} + ) # pylint: disable=line-too-long mock_resp.json.side_effect = json_side_effect mock_get.return_value = mock_resp @@ -141,13 +161,14 @@ async def json_side_effect(): output = await job.output(timeout=3) assert output == "OUTPUT" + class TestEndpoint(IsolatedAsyncioTestCase): - ''' Unit tests for the Endpoint class. ''' + """Unit tests for the Endpoint class.""" async def test_run(self): - ''' + """ Tests Endpoint.run - ''' + """ with patch("aiohttp.ClientSession") as mock_session: mock_resp = MagicMock() mock_resp.json = MagicMock(return_value=asyncio.Future()) @@ -159,9 +180,9 @@ async def test_run(self): assert job.job_id == "job_id" async def test_health(self): - ''' + """ Tests Endpoint.health - ''' + """ with patch("aiohttp.ClientSession") as mock_session: mock_resp = MagicMock() mock_resp.json = MagicMock(return_value=asyncio.Future()) @@ -173,9 +194,9 @@ async def test_health(self): assert health == {"status": "HEALTHY"} async def test_purge_queue(self): - ''' + """ Tests Endpoint.purge_queue - ''' + """ with patch("aiohttp.ClientSession") as mock_session: mock_resp = MagicMock() mock_resp.json = MagicMock(return_value=asyncio.Future()) @@ -186,22 +207,26 @@ async def test_purge_queue(self): purge_result = await endpoint.purge_queue() assert purge_result == {"result": "PURGED"} + class TestEndpointInitialization(unittest.TestCase): - '''Tests for the Endpoint class initialization.''' + """Tests for the Endpoint class initialization.""" def test_endpoint_initialization(self): - '''Tests initialization of Endpoint class.''' + """Tests initialization of Endpoint class.""" with patch("aiohttp.ClientSession"): endpoint = Endpoint("endpoint_id", MagicMock()) - self.assertEqual(endpoint.endpoint_url, "https://api.runpod.ai/v2/endpoint_id/run") + self.assertEqual( + endpoint.endpoint_url, "https://api.runpod.ai/v2/endpoint_id/run" + ) self.assertIn("Content-Type", endpoint.headers) self.assertIn("Authorization", endpoint.headers) + if __name__ == "__main__": unittest.main() snapshot = tracemalloc.take_snapshot() - top_stats = snapshot.statistics('lineno') + top_stats = snapshot.statistics("lineno") print("[ Top 10 ]") for stat in top_stats[:10]: diff --git a/tests/test_endpoint/test_runner.py b/tests/test_endpoint/test_runner.py index d22a61d4..609c3bed 100644 --- a/tests/test_endpoint/test_runner.py +++ b/tests/test_endpoint/test_runner.py @@ -1,6 +1,6 @@ -''' +""" Tests for runpod | endpoint | modules | endpoint.py -''' +""" import unittest from unittest.mock import patch, Mock @@ -12,21 +12,21 @@ class TestRunPodClient(unittest.TestCase): - """ Tests for RunPodClient """ + """Tests for RunPodClient""" def test_no_api_key(self): - ''' + """ Tests RunPodClient with no api_key - ''' + """ with self.assertRaises(RuntimeError): runpod.api_key = None RunPodClient() - @patch.object(requests.Session, 'post') + @patch.object(requests.Session, "post") def test_post_with_401(self, mock_post): - ''' + """ Tests RunPodClient.post with 401 status code - ''' + """ mock_response = Mock() mock_response.status_code = 401 mock_post.return_value = mock_response @@ -36,11 +36,11 @@ def test_post_with_401(self, mock_post): client = RunPodClient() client.post("ENDPOINT_ID/run", {"input": {}}) - @patch.object(requests.Session, 'request') + @patch.object(requests.Session, "request") def test_post(self, mock_post): - ''' + """ Tests RunPodClient.post - ''' + """ mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {"id": "123"} @@ -52,11 +52,11 @@ def test_post(self, mock_post): self.assertEqual(response, {"id": "123"}) - @patch.object(requests.Session, 'get') + @patch.object(requests.Session, "get") def test_get_with_401(self, mock_get): - ''' + """ Tests RunPodClient.get with 401 status code - ''' + """ mock_response = Mock() mock_response.status_code = 401 mock_get.return_value = mock_response @@ -66,11 +66,11 @@ def test_get_with_401(self, mock_get): client = RunPodClient() client.get("ENDPOINT_ID/status/123") - @patch.object(requests.Session, 'request') + @patch.object(requests.Session, "request") def test_get(self, mock_get): - ''' + """ Tests RunPodClient.get - ''' + """ mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {"status": "COMPLETED"} @@ -84,7 +84,7 @@ def test_get(self, mock_get): class TestEndpoint(unittest.TestCase): - ''' Tests for Endpoint ''' + """Tests for Endpoint""" ENDPOINT_ID = "ENDPOINT_ID" MOCK_API_KEY = "MOCK_API_KEY" @@ -92,21 +92,23 @@ class TestEndpoint(unittest.TestCase): MODEL_OUTPUT = {"result": "YOUR_MODEL_OUTPUT_VALUE"} def setUp(self): - ''' Common setup for the tests. ''' + """Common setup for the tests.""" runpod.api_key = self.MOCK_API_KEY self.endpoint = Endpoint(self.ENDPOINT_ID) - @patch('runpod.endpoint.runner.RunPodClient._request') + @patch("runpod.endpoint.runner.RunPodClient._request") def test_endpoint_run(self, mock_client_request): - ''' Test the run method of Endpoint with a successful job initiation. ''' + """Test the run method of Endpoint with a successful job initiation.""" mock_client_request.return_value = {"id": "123", "status": "IN_PROGRESS"} run_request = self.endpoint.run(self.MODEL_INPUT) # Tests mock_client_request.assert_called_once_with( - 'POST', f"{self.ENDPOINT_ID}/run", - {'input': {'YOUR_MODEL_INPUT_JSON': 'YOUR_MODEL_INPUT_VALUE'}}, 10 + "POST", + f"{self.ENDPOINT_ID}/run", + {"input": {"YOUR_MODEL_INPUT_JSON": "YOUR_MODEL_INPUT_VALUE"}}, + 10, ) self.assertIsInstance(run_request, Job) @@ -114,13 +116,17 @@ def test_endpoint_run(self, mock_client_request): self.assertEqual(run_request.status(), "IN_PROGRESS") mock_client_request.assert_called_with( - 'GET', f"{self.ENDPOINT_ID}/status/123", timeout=10) + "GET", f"{self.ENDPOINT_ID}/status/123", timeout=10 + ) - @patch('runpod.endpoint.runner.RunPodClient._request') + @patch("runpod.endpoint.runner.RunPodClient._request") def test_endpoint_run_sync(self, mock_client_request): - ''' Test the run_sync method of Endpoint with a successful job initiation. ''' + """Test the run_sync method of Endpoint with a successful job initiation.""" mock_client_request.return_value = { - "id": "123", "status": "COMPLETED", "output": self.MODEL_OUTPUT} + "id": "123", + "status": "COMPLETED", + "output": self.MODEL_OUTPUT, + } run_request = self.endpoint.run_sync(self.MODEL_INPUT) @@ -128,40 +134,43 @@ def test_endpoint_run_sync(self, mock_client_request): self.assertEqual(run_request, self.MODEL_OUTPUT) mock_client_request.assert_called_once_with( - 'POST', f"{self.ENDPOINT_ID}/runsync", - {'input': {'YOUR_MODEL_INPUT_JSON': 'YOUR_MODEL_INPUT_VALUE'}}, 86400 + "POST", + f"{self.ENDPOINT_ID}/runsync", + {"input": {"YOUR_MODEL_INPUT_JSON": "YOUR_MODEL_INPUT_VALUE"}}, + 86400, ) - @patch('runpod.endpoint.runner.RunPodClient._request') + @patch("runpod.endpoint.runner.RunPodClient._request") def test_endpoint_health(self, mock_client_request): - ''' Test the health method of Endpoint ''' + """Test the health method of Endpoint""" self.endpoint.health() - mock_client_request.assert_called_once_with('GET', f"{self.ENDPOINT_ID}/health", timeout=3) + mock_client_request.assert_called_once_with( + "GET", f"{self.ENDPOINT_ID}/health", timeout=3 + ) - @patch('runpod.endpoint.runner.RunPodClient._request') + @patch("runpod.endpoint.runner.RunPodClient._request") def test_endpoint_purge_queue(self, mock_client_request): - ''' Test the health method of Endpoint ''' + """Test the health method of Endpoint""" self.endpoint.purge_queue() mock_client_request.assert_called_once_with( - 'POST', f"{self.ENDPOINT_ID}/purge-queue", - None, 3 + "POST", f"{self.ENDPOINT_ID}/purge-queue", None, 3 ) def test_missing_api_key(self): - ''' + """ Tests Endpoint.run without api_key - ''' + """ with self.assertRaises(RuntimeError): runpod.api_key = None self.endpoint.run(self.MODEL_INPUT) - @patch.object(requests.Session, 'post') + @patch.object(requests.Session, "post") def test_run_with_401(self, mock_post): - ''' + """ Tests Endpoint.run with 401 status code - ''' + """ mock_response = Mock() mock_response.status_code = 401 mock_post.return_value = mock_response @@ -172,15 +181,12 @@ def test_run_with_401(self, mock_post): with self.assertRaises(RuntimeError): endpoint.run(request_data) - @patch.object(runpod.endpoint.runner.RunPodClient, '_request') + @patch.object(runpod.endpoint.runner.RunPodClient, "_request") def test_run(self, mock_client_request): - ''' + """ Tests Endpoint.run - ''' - mock_client_request.return_value = { - "id": "123", - "status": "IN_PROGRESS" - } + """ + mock_client_request.return_value = {"id": "123", "status": "IN_PROGRESS"} runpod.api_key = "MOCK_API_KEY" endpoint = runpod.Endpoint("ENDPOINT_ID") @@ -191,15 +197,15 @@ def test_run(self, mock_client_request): self.assertEqual(run_request.job_id, "123") self.assertEqual(run_request.status(), "IN_PROGRESS") - @patch.object(runpod.endpoint.runner.RunPodClient, '_request') + @patch.object(runpod.endpoint.runner.RunPodClient, "_request") def test_run_sync(self, mock_client_request): - ''' + """ Tests Endpoint.run_sync - ''' + """ mock_client_request.return_value = { "id": "123", "status": "COMPLETED", - "output": {"result": "YOUR_MODEL_OUTPUT_VALUE"} + "output": {"result": "YOUR_MODEL_OUTPUT_VALUE"}, } runpod.api_key = "MOCK_API_KEY" @@ -210,15 +216,12 @@ def test_run_sync(self, mock_client_request): self.assertEqual(run_request, {"result": "YOUR_MODEL_OUTPUT_VALUE"}) - @patch.object(runpod.endpoint.runner.RunPodClient, '_request') + @patch.object(runpod.endpoint.runner.RunPodClient, "_request") def test_run_sync_with_timeout(self, mock_client_request): - ''' + """ Tests Endpoint.run_sync with timeout - ''' - mock_client_request.return_value = { - "id": "123", - "status": "IN_PROGRESS" - } + """ + mock_client_request.return_value = {"id": "123", "status": "IN_PROGRESS"} runpod.api_key = "MOCK_API_KEY" endpoint = runpod.Endpoint("ENDPOINT_ID") @@ -229,49 +232,40 @@ def test_run_sync_with_timeout(self, mock_client_request): class TestJob(unittest.TestCase): - ''' Tests for Job ''' + """Tests for Job""" + MODEL_OUTPUT = {"result": "YOUR_MODEL_OUTPUT_VALUE"} - @patch('runpod.endpoint.runner.RunPodClient') + @patch("runpod.endpoint.runner.RunPodClient") def test_status(self, mock_client): - ''' + """ Tests Job.status - ''' - mock_client.get.return_value = { - "status": "COMPLETED" - } + """ + mock_client.get.return_value = {"status": "COMPLETED"} job = runner.Job("endpoint_id", "job_id", mock_client) status = job.status() self.assertEqual(status, "COMPLETED") - @patch('runpod.endpoint.runner.RunPodClient') + @patch("runpod.endpoint.runner.RunPodClient") def test_output(self, mock_client): - ''' + """ Tests Job.output - ''' - mock_client.get.return_value = { - "status": "COMPLETED", - "output": "Job output" - } + """ + mock_client.get.return_value = {"status": "COMPLETED", "output": "Job output"} job = runner.Job("endpoint_id", "job_id", mock_client) output = job.output() self.assertEqual(output, "Job output") - @patch('runpod.endpoint.runner.RunPodClient') + @patch("runpod.endpoint.runner.RunPodClient") def test_output_with_sleep(self, mock_client): - ''' + """ Tests Job.output with sleep - ''' + """ mock_client.get.side_effect = [ - { - "status": "IN_PROGRESS" - }, - { - "status": "COMPLETED", - "output": "Job output" - } + {"status": "IN_PROGRESS"}, + {"status": "COMPLETED", "output": "Job output"}, ] job = runner.Job("endpoint_id", "job_id", mock_client) @@ -279,41 +273,36 @@ def test_output_with_sleep(self, mock_client): self.assertEqual(output, "Job output") - @patch('runpod.endpoint.runner.RunPodClient') + @patch("runpod.endpoint.runner.RunPodClient") def test_output_timeout(self, mock_client): - ''' + """ Tests Job.output with timeout - ''' - mock_client.get.return_value = { - "status": "IN_PROGRESS" - } + """ + mock_client.get.return_value = {"status": "IN_PROGRESS"} job = runner.Job("endpoint_id", "job_id", mock_client) with self.assertRaises(TimeoutError): job.output(timeout=1) - @patch('runpod.endpoint.runner.RunPodClient') + @patch("runpod.endpoint.runner.RunPodClient") def test_cancel(self, mock_client): - ''' Test the cancel method of Job with a successful job initiation. ''' + """Test the cancel method of Job with a successful job initiation.""" job = runner.Job("endpoint_id", "job_id", mock_client) job.cancel() - mock_client.post.assert_called_with("endpoint_id/cancel/job_id", - data=None, timeout=3) + mock_client.post.assert_called_with( + "endpoint_id/cancel/job_id", data=None, timeout=3 + ) - @patch('runpod.endpoint.runner.RunPodClient') + @patch("runpod.endpoint.runner.RunPodClient") def test_job_status(self, mock_client): - ''' + """ Tests Job.status - ''' + """ mock_client.get.side_effect = [ - { - "status": "IN_PROGRESS" - }, - { - "status": "COMPLETED" - } + {"status": "IN_PROGRESS"}, + {"status": "COMPLETED"}, ] job = runner.Job("endpoint_id", "job_id", mock_client) @@ -321,25 +310,19 @@ def test_job_status(self, mock_client): self.assertEqual(job.status(), "COMPLETED") self.assertEqual(job.status(), "COMPLETED") - @patch('runpod.endpoint.runner.RunPodClient') + @patch("runpod.endpoint.runner.RunPodClient") def test_job_stream(self, mock_client): - ''' + """ Tests Job.stream - ''' + """ mock_client.get.side_effect = [ { "status": "IN_PROGRESS", - "stream": [ - {"output": "Job output 1"}, - {"output": "Job output 2"} - ] + "stream": [{"output": "Job output 1"}, {"output": "Job output 2"}], }, - { - "status": "COMPLETED", - "stream": [] - } + {"status": "COMPLETED", "stream": []}, ] job = runner.Job("endpoint_id", "job_id", mock_client) output = list(job.stream()) - self.assertEqual(output, ['Job output 1', 'Job output 2']) + self.assertEqual(output, ["Job output 1", "Job output 2"]) diff --git a/tests/test_error.py b/tests/test_error.py index 52068299..665fc807 100644 --- a/tests/test_error.py +++ b/tests/test_error.py @@ -5,6 +5,7 @@ # Assuming the error classes are in a file named 'error.py' from runpod.error import RunPodError, AuthenticationError, QueryError + class TestErrorClasses(unittest.TestCase): """Unit tests for the error classes in the runpod.error module.""" @@ -17,7 +18,7 @@ def test_run_pod_error_with_message(self): def test_run_pod_error_without_message(self): """Test the RunPodError class without a message.""" err = RunPodError() - self.assertEqual(str(err), 'None') + self.assertEqual(str(err), "None") def test_authentication_error(self): """Test the AuthenticationError class.""" @@ -36,5 +37,5 @@ def test_query_error_with_message_and_query(self): def test_query_error_without_message_and_query(self): """Test the QueryError class without a message or query.""" err = QueryError() - self.assertEqual(str(err), 'None') + self.assertEqual(str(err), "None") self.assertIsNone(err.query) diff --git a/tests/test_serverless/__init__.py b/tests/test_serverless/__init__.py index ed7f2511..d19b423c 100644 --- a/tests/test_serverless/__init__.py +++ b/tests/test_serverless/__init__.py @@ -1 +1 @@ -''' Alow serverless tests to be run from the command line.''' +""" Alow serverless tests to be run from the command line.""" diff --git a/tests/test_serverless/test_modules/__init__.py b/tests/test_serverless/test_modules/__init__.py index ff0b9054..7bd8ff9b 100644 --- a/tests/test_serverless/test_modules/__init__.py +++ b/tests/test_serverless/test_modules/__init__.py @@ -1 +1 @@ -''' Serverless Module Tests ''' +""" Serverless Module Tests """ diff --git a/tests/test_serverless/test_modules/test_fastapi.py b/tests/test_serverless/test_modules/test_fastapi.py index 4b34796d..bce36eee 100644 --- a/tests/test_serverless/test_modules/test_fastapi.py +++ b/tests/test_serverless/test_modules/test_fastapi.py @@ -1,4 +1,5 @@ -''' Tests for runpod.serverless.modules.rp_fastapi.py ''' +""" Tests for runpod.serverless.modules.rp_fastapi.py """ + # pylint: disable=protected-access import os @@ -14,7 +15,7 @@ class TestFastAPI(unittest.TestCase): - ''' Tests the FastAPI ''' + """Tests the FastAPI""" def setUp(self) -> None: self.handler = Mock() @@ -24,20 +25,25 @@ def setUp(self) -> None: self.error_handler.side_effect = Exception("test error") def test_start_serverless_with_realtime(self): - ''' + """ Tests the start_serverless() method with the realtime option. - ''' + """ module_location = "runpod.serverless.modules.rp_fastapi" - with patch(f"{module_location}.Heartbeat.start_ping", Mock()) as mock_ping, \ - patch(f"{module_location}.FastAPI", Mock()) as mock_fastapi, \ - patch(f"{module_location}.APIRouter", return_value=Mock()) as mock_router, \ - patch(f"{module_location}.uvicorn", Mock()) as mock_uvicorn: - - rp_fastapi.RUNPOD_REALTIME_PORT = '1111' - rp_fastapi.RUNPOD_ENDPOINT_ID = 'test_endpoint_id' - - os.environ["RUNPOD_REALTIME_PORT"] = '1111' - os.environ["RUNPOD_ENDPOINT_ID"] = 'test_endpoint_id' + with patch( + f"{module_location}.Heartbeat.start_ping", Mock() + ) as mock_ping, patch( + f"{module_location}.FastAPI", Mock() + ) as mock_fastapi, patch( + f"{module_location}.APIRouter", return_value=Mock() + ) as mock_router, patch( + f"{module_location}.uvicorn", Mock() + ) as mock_uvicorn: + + rp_fastapi.RUNPOD_REALTIME_PORT = "1111" + rp_fastapi.RUNPOD_ENDPOINT_ID = "test_endpoint_id" + + os.environ["RUNPOD_REALTIME_PORT"] = "1111" + os.environ["RUNPOD_ENDPOINT_ID"] = "test_endpoint_id" runpod.serverless.start({"handler": self.handler}) @@ -46,7 +52,7 @@ def test_start_serverless_with_realtime(self): self.assertTrue(mock_fastapi.called) self.assertTrue(mock_router.called) - self.assertTrue(rp_fastapi.RUNPOD_ENDPOINT_ID == 'test_endpoint_id') + self.assertTrue(rp_fastapi.RUNPOD_ENDPOINT_ID == "test_endpoint_id") self.assertTrue(mock_router.return_value.add_api_route.called) self.assertTrue(mock_uvicorn.run.called) @@ -81,21 +87,24 @@ def test_webhook_sender_failure(self): @pytest.mark.asyncio def test_run(self): - ''' + """ Tests the _run() method. - ''' + """ loop = asyncio.get_event_loop() module_location = "runpod.serverless.modules.rp_fastapi" - with patch(f"{module_location}.Heartbeat.start_ping", Mock()) as mock_ping, \ - patch(f"{module_location}.FastAPI", Mock()), \ - patch(f"{module_location}.APIRouter", return_value=Mock()), \ - patch(f"{module_location}.uvicorn", Mock()), \ - patch(f"{module_location}.uuid.uuid4", return_value="123"): + with patch( + f"{module_location}.Heartbeat.start_ping", Mock() + ) as mock_ping, patch(f"{module_location}.FastAPI", Mock()), patch( + f"{module_location}.APIRouter", return_value=Mock() + ), patch( + f"{module_location}.uvicorn", Mock() + ), patch( + f"{module_location}.uuid.uuid4", return_value="123" + ): job_object = rp_fastapi.Job( - id="test_job_id", - input={"test_input": "test_input"} + id="test_job_id", input={"test_input": "test_input"} ) default_input_object = rp_fastapi.DefaultRequest( @@ -109,10 +118,7 @@ def test_run(self): assert run_return == {"output": {"result": "success"}} debug_run_return = asyncio.run(worker_api._sim_run(default_input_object)) - assert debug_run_return == { - "id": "test-123", - "status": "IN_PROGRESS" - } + assert debug_run_return == {"id": "test-123", "status": "IN_PROGRESS"} self.assertTrue(mock_ping.called) @@ -122,35 +128,35 @@ def generator_handler(job): yield {"result": "success"} generator_worker_api = rp_fastapi.WorkerAPI({"handler": generator_handler}) - generator_run_return = asyncio.run(generator_worker_api._sim_run(default_input_object)) - assert generator_run_return == { - "id": "test-123", - "status": "IN_PROGRESS" - } + generator_run_return = asyncio.run( + generator_worker_api._sim_run(default_input_object) + ) + assert generator_run_return == {"id": "test-123", "status": "IN_PROGRESS"} loop.close() @pytest.mark.asyncio def test_runsync(self): - ''' + """ Tests the _runsync() method. - ''' + """ loop = asyncio.get_event_loop() module_location = "runpod.serverless.modules.rp_fastapi" - with patch(f"{module_location}.FastAPI", Mock()), \ - patch(f"{module_location}.APIRouter", return_value=Mock()), \ - patch(f"{module_location}.uvicorn", Mock()), \ - patch(f"{module_location}.uuid.uuid4", return_value="123"), \ - patch(f"{module_location}.threading") as mock_threading: + with patch(f"{module_location}.FastAPI", Mock()), patch( + f"{module_location}.APIRouter", return_value=Mock() + ), patch(f"{module_location}.uvicorn", Mock()), patch( + f"{module_location}.uuid.uuid4", return_value="123" + ), patch( + f"{module_location}.threading" + ) as mock_threading: default_input_object = rp_fastapi.DefaultRequest( input={"test_input": "test_input"} ) input_object_with_webhook = rp_fastapi.DefaultRequest( - input={"test_input": "test_input"}, - webhook="test_webhook" + input={"test_input": "test_input"}, webhook="test_webhook" ) # Test with handler @@ -160,7 +166,7 @@ def test_runsync(self): assert runsync_return == { "id": "test-123", "status": "COMPLETED", - "output": {"result": "success"} + "output": {"result": "success"}, } # Test with generator handler @@ -170,17 +176,19 @@ def generator_handler(job): generator_worker_api = rp_fastapi.WorkerAPI({"handler": generator_handler}) generator_runsync_return = asyncio.run( - generator_worker_api._sim_runsync(default_input_object)) + generator_worker_api._sim_runsync(default_input_object) + ) assert generator_runsync_return == { "id": "test-123", "status": "COMPLETED", - "output": [{"result": "success"}] + "output": [{"result": "success"}], } # Test with error handler error_worker_api = rp_fastapi.WorkerAPI({"handler": self.error_handler}) error_runsync_return = asyncio.run( - error_worker_api._sim_runsync(default_input_object)) + error_worker_api._sim_runsync(default_input_object) + ) assert "error" in error_runsync_return # Test webhook caller sent @@ -191,25 +199,26 @@ def generator_handler(job): @pytest.mark.asyncio def test_stream(self): - ''' + """ Tests the _stream() method. - ''' + """ loop = asyncio.get_event_loop() module_location = "runpod.serverless.modules.rp_fastapi" - with patch(f"{module_location}.FastAPI", Mock()), \ - patch(f"{module_location}.APIRouter", return_value=Mock()), \ - patch(f"{module_location}.uvicorn", Mock()), \ - patch(f"{module_location}.uuid.uuid4", return_value="123"), \ - patch(f"{module_location}.threading") as mock_threading: + with patch(f"{module_location}.FastAPI", Mock()), patch( + f"{module_location}.APIRouter", return_value=Mock() + ), patch(f"{module_location}.uvicorn", Mock()), patch( + f"{module_location}.uuid.uuid4", return_value="123" + ), patch( + f"{module_location}.threading" + ) as mock_threading: default_input_object = rp_fastapi.DefaultRequest( input={"test_input": "test_input"} ) input_object_with_webhook = rp_fastapi.DefaultRequest( - input={"test_input": "test_input"}, - webhook="test_webhook" + input={"test_input": "test_input"}, webhook="test_webhook" ) worker_api = rp_fastapi.WorkerAPI({"handler": self.handler}) @@ -221,14 +230,14 @@ def test_stream(self): assert stream_return == { "id": "test_job_id", "status": "FAILED", - "error": "Job ID not found" + "error": "Job ID not found", } stream_return = asyncio.run(worker_api._sim_stream("test-123")) assert stream_return == { "id": "test-123", "status": "FAILED", - "error": "Stream not supported, handler must be a generator." + "error": "Stream not supported, handler must be a generator.", } # Test with generator handler @@ -238,11 +247,12 @@ def generator_handler(job): generator_worker_api = rp_fastapi.WorkerAPI({"handler": generator_handler}) generator_stream_return = asyncio.run( - generator_worker_api._sim_stream("test-123")) + generator_worker_api._sim_stream("test-123") + ) assert generator_stream_return == { "id": "test-123", "status": "COMPLETED", - "stream": [{"output": {"result": "success"}}] + "stream": [{"output": {"result": "success"}}], } # Test webhook caller sent @@ -254,17 +264,19 @@ def generator_handler(job): @pytest.mark.asyncio def test_status(self): - ''' + """ Tests the _status() method. - ''' + """ loop = asyncio.get_event_loop() module_location = "runpod.serverless.modules.rp_fastapi" - with patch(f"{module_location}.FastAPI", Mock()), \ - patch(f"{module_location}.APIRouter", return_value=Mock()), \ - patch(f"{module_location}.uvicorn", Mock()), \ - patch(f"{module_location}.uuid.uuid4", return_value="123"), \ - patch(f"{module_location}.threading") as mock_threading: + with patch(f"{module_location}.FastAPI", Mock()), patch( + f"{module_location}.APIRouter", return_value=Mock() + ), patch(f"{module_location}.uvicorn", Mock()), patch( + f"{module_location}.uuid.uuid4", return_value="123" + ), patch( + f"{module_location}.threading" + ) as mock_threading: worker_api = rp_fastapi.WorkerAPI({"handler": self.handler}) @@ -273,8 +285,7 @@ def test_status(self): ) input_object_with_webhook = rp_fastapi.DefaultRequest( - input={"test_input": "test_input"}, - webhook="test_webhook" + input={"test_input": "test_input"}, webhook="test_webhook" ) # Add job to job_list @@ -284,14 +295,14 @@ def test_status(self): assert status_return == { "id": "test_job_id", "status": "FAILED", - "error": "Job ID not found" + "error": "Job ID not found", } status_return = asyncio.run(worker_api._sim_status("test-123")) assert status_return == { "id": "test-123", "status": "COMPLETED", - "output": {"result": "success"} + "output": {"result": "success"}, } # Test webhook caller sent @@ -303,21 +314,22 @@ def test_status(self): def generator_handler(job): del job yield {"result": "success"} + generator_worker_api = rp_fastapi.WorkerAPI({"handler": generator_handler}) asyncio.run(generator_worker_api._sim_run(default_input_object)) generator_stream_return = asyncio.run( - generator_worker_api._sim_status("test-123")) + generator_worker_api._sim_status("test-123") + ) assert generator_stream_return == { "id": "test-123", "status": "COMPLETED", - "output": [{"result": "success"}] + "output": [{"result": "success"}], } # Test with error handler error_worker_api = rp_fastapi.WorkerAPI({"handler": self.error_handler}) asyncio.run(error_worker_api._sim_run(default_input_object)) - error_status_return = asyncio.run( - error_worker_api._sim_status("test-123")) + error_status_return = asyncio.run(error_worker_api._sim_status("test-123")) assert "error" in error_status_return loop.close() diff --git a/tests/test_serverless/test_modules/test_handler.py b/tests/test_serverless/test_modules/test_handler.py index d055a337..2c68779e 100644 --- a/tests/test_serverless/test_modules/test_handler.py +++ b/tests/test_serverless/test_modules/test_handler.py @@ -1,5 +1,6 @@ """ Unit tests for the handler module. """ + import unittest from runpod.serverless.modules.rp_handler import is_generator @@ -10,24 +11,32 @@ class TestIsGenerator(unittest.TestCase): def test_regular_function(self): """Test that a regular function is not a generator.""" + def regular_func(): return "I'm a regular function!" + self.assertFalse(is_generator(regular_func)) def test_generator_function(self): """Test that a generator function is a generator.""" + def generator_func(): yield "I'm a generator function!" + self.assertTrue(is_generator(generator_func)) def test_async_function(self): """Test that an async function is not a generator.""" + async def async_func(): return "I'm an async function!" + self.assertFalse(is_generator(async_func)) def test_async_generator_function(self): """Test that an async generator function is a generator.""" + async def async_gen_func(): yield "I'm an async generator function!" + self.assertTrue(is_generator(async_gen_func)) diff --git a/tests/test_serverless/test_modules/test_http.py b/tests/test_serverless/test_modules/test_http.py index 917fd501..032884f4 100644 --- a/tests/test_serverless/test_modules/test_http.py +++ b/tests/test_serverless/test_modules/test_http.py @@ -1,6 +1,7 @@ -''' +""" Test rp_http.py module. -''' +""" + # pylint: disable=too-few-public-methods import gc @@ -13,7 +14,7 @@ class MockRequestInfo: - ''' Mock aiohttp.RequestInfo class. ''' + """Mock aiohttp.RequestInfo class.""" def __init__(self, *args, **kwargs): del args, kwargs @@ -26,7 +27,7 @@ def __init__(self, *args, **kwargs): class TestHTTP(unittest.IsolatedAsyncioTestCase): - ''' Test HTTP module. ''' + """Test HTTP module.""" def setUp(self) -> None: self.job = {"id": "test_id"} @@ -36,18 +37,24 @@ def tearDown(self) -> None: gc.collect() async def test_send_result(self): - ''' + """ Test send_result function. - ''' - with patch('runpod.serverless.modules.rp_http.log') as mock_log, \ - patch('runpod.serverless.modules.rp_http.job_list.jobs') as mock_jobs, \ - patch('runpod.serverless.modules.rp_http.RetryClient') as mock_retry: + """ + with patch("runpod.serverless.modules.rp_http.log") as mock_log, patch( + "runpod.serverless.modules.rp_http.job_list.jobs" + ) as mock_jobs, patch( + "runpod.serverless.modules.rp_http.RetryClient" + ) as mock_retry: mock_retry.return_value.post.return_value = AsyncMock() - mock_retry.return_value.post.return_value.__aenter__.return_value.text.return_value = "response text" # pylint: disable=line-too-long + mock_retry.return_value.post.return_value.__aenter__.return_value.text.return_value = ( + "response text" # pylint: disable=line-too-long + ) - mock_jobs.return_value = set(['test_id']) - send_return_local = await rp_http.send_result(AsyncMock(), self.job_data, self.job) + mock_jobs.return_value = set(["test_id"]) + send_return_local = await rp_http.send_result( + AsyncMock(), self.job_data, self.job + ) assert send_return_local is None assert mock_log.debug.call_count == 1 @@ -55,44 +62,49 @@ async def test_send_result(self): assert mock_log.info.call_count == 1 mock_retry.return_value.post.assert_called_with( - 'JOB_DONE_URL' + "&isStream=false", + "JOB_DONE_URL" + "&isStream=false", data=str(json.dumps(self.job_data, ensure_ascii=False)), headers={ "charset": "utf-8", - "Content-Type": "application/x-www-form-urlencoded" + "Content-Type": "application/x-www-form-urlencoded", }, - raise_for_status=True + raise_for_status=True, ) async def test_send_result_client_response_error(self): - ''' + """ Test send_result function with ClientResponseError. - ''' + """ def mock_request_info_init(self, *args, **kwargs): - ''' + """ Mock aiohttp.RequestInfo.__init__ method. - ''' + """ del args, kwargs self.url = "http://test_url" self.method = "POST" self.headers = {"Content-Type": "application/json"} self.real_url = "http://test_url" - with patch('runpod.serverless.modules.rp_http.log') as mock_log, \ - patch('runpod.serverless.modules.rp_http.job_list.jobs') as mock_jobs, \ - patch('runpod.serverless.modules.rp_http.RetryClient') as mock_retry, \ - patch.object(aiohttp.RequestInfo, "__init__", mock_request_info_init): + with patch("runpod.serverless.modules.rp_http.log") as mock_log, patch( + "runpod.serverless.modules.rp_http.job_list.jobs" + ) as mock_jobs, patch( + "runpod.serverless.modules.rp_http.RetryClient" + ) as mock_retry, patch.object( + aiohttp.RequestInfo, "__init__", mock_request_info_init + ): mock_retry.side_effect = aiohttp.ClientResponseError( request_info=MockRequestInfo, history=None, status=500, - message="Error message" + message="Error message", ) - mock_jobs.return_value = set(['test_id']) - send_return_local = await rp_http.send_result(AsyncMock(), self.job_data, self.job) + mock_jobs.return_value = set(["test_id"]) + send_return_local = await rp_http.send_result( + AsyncMock(), self.job_data, self.job + ) assert send_return_local is None assert mock_log.debug.call_count == 0 @@ -100,18 +112,23 @@ def mock_request_info_init(self, *args, **kwargs): assert mock_log.info.call_count == 1 async def test_send_result_type_error(self): - ''' + """ Test send_result function with TypeError. - ''' - with patch('runpod.serverless.modules.rp_http.log') as mock_log, \ - patch('runpod.serverless.modules.rp_http.job_list.jobs') as mock_jobs, \ - patch('runpod.serverless.modules.rp_http.json.dumps') as mock_dumps, \ - patch('runpod.serverless.modules.rp_http.RetryClient') as mock_retry: + """ + with patch("runpod.serverless.modules.rp_http.log") as mock_log, patch( + "runpod.serverless.modules.rp_http.job_list.jobs" + ) as mock_jobs, patch( + "runpod.serverless.modules.rp_http.json.dumps" + ) as mock_dumps, patch( + "runpod.serverless.modules.rp_http.RetryClient" + ) as mock_retry: mock_dumps.side_effect = TypeError("Forced exception") - mock_jobs.return_value = set(['test_id']) - send_return_local = await rp_http.send_result("No Session", self.job_data, self.job) + mock_jobs.return_value = set(["test_id"]) + send_return_local = await rp_http.send_result( + "No Session", self.job_data, self.job + ) assert send_return_local is None assert mock_log.debug.call_count == 0 @@ -119,21 +136,28 @@ async def test_send_result_type_error(self): assert mock_log.info.call_count == 1 assert mock_retry.return_value.post.call_count == 0 mock_log.error.assert_called_with( - 'Error while returning job result. | Forced exception', 'test_id') # pylint: disable=line-too-long + "Error while returning job result. | Forced exception", "test_id" + ) # pylint: disable=line-too-long async def test_stream_result(self): - ''' + """ Test stream_result function. - ''' - with patch('runpod.serverless.modules.rp_http.log') as mock_log, \ - patch('runpod.serverless.modules.rp_http.job_list.jobs') as mock_jobs, \ - patch('runpod.serverless.modules.rp_http.RetryClient') as mock_retry: + """ + with patch("runpod.serverless.modules.rp_http.log") as mock_log, patch( + "runpod.serverless.modules.rp_http.job_list.jobs" + ) as mock_jobs, patch( + "runpod.serverless.modules.rp_http.RetryClient" + ) as mock_retry: mock_retry.return_value.post.return_value = AsyncMock() - mock_retry.return_value.post.return_value.__aenter__.return_value.text.return_value = "response text" # pylint: disable=line-too-long + mock_retry.return_value.post.return_value.__aenter__.return_value.text.return_value = ( + "response text" # pylint: disable=line-too-long + ) - mock_jobs.return_value = set(['test_id']) - send_return_local = await rp_http.stream_result(AsyncMock(), self.job_data, self.job) + mock_jobs.return_value = set(["test_id"]) + send_return_local = await rp_http.stream_result( + AsyncMock(), self.job_data, self.job + ) assert send_return_local is None assert mock_log.debug.call_count == 1 @@ -141,15 +165,15 @@ async def test_stream_result(self): assert mock_log.info.call_count == 0 mock_retry.return_value.post.assert_called_with( - 'JOB_STREAM_URL' + "&isStream=false", + "JOB_STREAM_URL" + "&isStream=false", data=str(json.dumps(self.job_data, ensure_ascii=False)), headers={ "charset": "utf-8", - "Content-Type": "application/x-www-form-urlencoded" + "Content-Type": "application/x-www-form-urlencoded", }, - raise_for_status=True + raise_for_status=True, ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/tests/test_serverless/test_modules/test_job.py b/tests/test_serverless/test_modules/test_job.py index c20fc685..f677679d 100644 --- a/tests/test_serverless/test_modules/test_job.py +++ b/tests/test_serverless/test_modules/test_job.py @@ -1,6 +1,6 @@ -''' +""" Test Serverless Job Module -''' +""" import asyncio from unittest.mock import Mock, patch @@ -13,12 +13,12 @@ class TestJob(IsolatedAsyncioTestCase): - ''' Tests the Job class. ''' + """Tests the Job class.""" async def test_get_job_200(self): - ''' + """ Tests the get_job function - ''' + """ # Mock the non-200 response response1 = Mock() response1.status = 500 @@ -37,14 +37,20 @@ async def test_get_job_200(self): # Mock the 200 response response4 = Mock() response4.status = 200 - response4.json = make_mocked_coro(return_value={"id": "123", "input": {"number": 1}}) + response4.json = make_mocked_coro( + return_value={"id": "123", "input": {"number": 1}} + ) - with patch("aiohttp.ClientSession") as mock_session, \ - patch("runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url"): + with patch("aiohttp.ClientSession") as mock_session, patch( + "runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url" + ): # Set side_effect to a list of mock responses mock_session.get.return_value.__aenter__.side_effect = [ - response1, response2, response3, response4 + response1, + response2, + response3, + response4, ] job = await rp_job.get_job(mock_session, retry=True) @@ -53,16 +59,17 @@ async def test_get_job_200(self): assert job == {"id": "123", "input": {"number": 1}} async def test_get_job_204(self): - ''' + """ Tests the get_job function with a 204 response - ''' + """ # 204 Mock response_204 = Mock() response_204.status = 204 response_204.json = make_mocked_coro(return_value=None) - with patch("aiohttp.ClientSession") as mock_session_204, \ - patch("runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url"): + with patch("aiohttp.ClientSession") as mock_session_204, patch( + "runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url" + ): mock_session_204.get.return_value.__aenter__.return_value = response_204 job = await rp_job.get_job(mock_session_204, retry=False) @@ -71,15 +78,16 @@ async def test_get_job_204(self): assert mock_session_204.get.call_count == 1 async def test_get_job_400(self): - ''' + """ Test the get_job function with a 400 response - ''' + """ # 400 Mock response_400 = Mock(ClientResponse) response_400.status = 400 - with patch("aiohttp.ClientSession") as mock_session_400, \ - patch("runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url"): + with patch("aiohttp.ClientSession") as mock_session_400, patch( + "runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url" + ): mock_session_400.get.return_value.__aenter__.return_value = response_400 job = await rp_job.get_job(mock_session_400, retry=False) @@ -87,15 +95,16 @@ async def test_get_job_400(self): assert job is None async def test_get_job_500(self): - ''' + """ Tests the get_job function with a 500 response - ''' + """ # 500 Mock response_500 = Mock(ClientResponse) response_500.status = 500 - with patch("aiohttp.ClientSession") as mock_session_500, \ - patch("runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url"): + with patch("aiohttp.ClientSession") as mock_session_500, patch( + "runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url" + ): mock_session_500.get.return_value.__aenter__.return_value = response_500 job = await rp_job.get_job(mock_session_500, retry=False) @@ -103,16 +112,18 @@ async def test_get_job_500(self): assert job is None async def test_get_job_no_id(self): - ''' + """ Tests the get_job function with a 200 response but no id - ''' + """ response = Mock(ClientResponse) response.status = 200 response.json = make_mocked_coro(return_value={}) - with patch("aiohttp.ClientSession") as mock_session, \ - patch("runpod.serverless.modules.rp_job.log", new_callable=Mock) as mock_log, \ - patch("runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url"): + with patch("aiohttp.ClientSession") as mock_session, patch( + "runpod.serverless.modules.rp_job.log", new_callable=Mock + ) as mock_log, patch( + "runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url" + ): mock_session.get.return_value.__aenter__.return_value = response @@ -122,16 +133,18 @@ async def test_get_job_no_id(self): assert mock_log.error.call_count == 1 async def test_get_job_no_input(self): - ''' + """ Tests the get_job function with a 200 response but no input - ''' + """ response = Mock(ClientResponse) response.status = 200 response.json = make_mocked_coro(return_value={"id": "123"}) - with patch("aiohttp.ClientSession") as mock_session, \ - patch("runpod.serverless.modules.rp_job.log", new_callable=Mock) as mock_log, \ - patch("runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url"): + with patch("aiohttp.ClientSession") as mock_session, patch( + "runpod.serverless.modules.rp_job.log", new_callable=Mock + ) as mock_log, patch( + "runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url" + ): mock_session.get.return_value.__aenter__.return_value = response @@ -141,32 +154,38 @@ async def test_get_job_no_input(self): assert mock_log.error.call_count == 1 async def test_get_job_no_timeout(self): - """ Tests the get_job function with a timeout """ + """Tests the get_job function with a timeout""" # Timeout Mock response_timeout = Mock(ClientResponse) response_timeout.status = 200 - with patch("aiohttp.ClientSession") as mock_session_timeout, \ - patch("runpod.serverless.modules.rp_job.log", new_callable=Mock) as mock_log, \ - patch("runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url"): + with patch("aiohttp.ClientSession") as mock_session_timeout, patch( + "runpod.serverless.modules.rp_job.log", new_callable=Mock + ) as mock_log, patch( + "runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url" + ): - mock_session_timeout.get.return_value.__aenter__.side_effect = asyncio.TimeoutError + mock_session_timeout.get.return_value.__aenter__.side_effect = ( + asyncio.TimeoutError + ) job = await rp_job.get_job(mock_session_timeout, retry=False) assert job is None assert mock_log.error.call_count == 0 async def test_get_job_exception(self): - ''' + """ Tests the get_job function with an exception - ''' + """ # Exception Mock response_exception = Mock(ClientResponse) response_exception.status = 200 - with patch("aiohttp.ClientSession") as mock_session_exception, \ - patch("runpod.serverless.modules.rp_job.log", new_callable=Mock) as mock_log, \ - patch("runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url"): + with patch("aiohttp.ClientSession") as mock_session_exception, patch( + "runpod.serverless.modules.rp_job.log", new_callable=Mock + ) as mock_log, patch( + "runpod.serverless.modules.rp_job.JOB_GET_URL", "http://mock.url" + ): mock_session_exception.get.return_value.__aenter__.side_effect = Exception job = await rp_job.get_job(mock_session_exception, retry=False) @@ -176,27 +195,27 @@ async def test_get_job_exception(self): class TestRunJob(IsolatedAsyncioTestCase): - ''' Tests the run_job function ''' + """Tests the run_job function""" def setUp(self) -> None: self.sample_job = { "id": "123", "input": { "test_input": None, - } + }, } async def test_simple_job(self): - ''' + """ Tests the run_job function - ''' + """ mock_handler = Mock() mock_handler.return_value = "test" job_result = await rp_job.run_job(mock_handler, self.sample_job) assert job_result == {"output": "test"} - mock_handler.return_value = ['test1', 'test2'] + mock_handler.return_value = ["test1", "test2"] job_result_list = await rp_job.run_job(mock_handler, self.sample_job) assert job_result_list == {"output": ["test1", "test2"]} @@ -205,9 +224,9 @@ async def test_simple_job(self): assert job_result_int == {"output": 123} async def test_job_with_errors(self): - ''' + """ Tests the run_job function with errors - ''' + """ mock_handler = Mock() mock_handler.return_value = {"error": "test"} @@ -216,9 +235,9 @@ async def test_job_with_errors(self): assert job_result == {"error": "test"} async def test_job_with_raised_exception(self): - ''' + """ Tests the run_job function with a raised exception - ''' + """ mock_handler = Mock() mock_handler.side_effect = Exception @@ -227,9 +246,9 @@ async def test_job_with_raised_exception(self): assert "error" in job_result async def test_job_with_refresh_worker(self): - ''' + """ Tests the run_job function with refresh_worker - ''' + """ mock_handler = Mock() mock_handler.return_value = {"refresh_worker": True} @@ -238,9 +257,9 @@ async def test_job_with_refresh_worker(self): assert job_result["stopPod"] is True async def test_job_bool_output(self): - ''' + """ Tests the run_job function with a boolean output - ''' + """ mock_handler = Mock() mock_handler.return_value = True @@ -249,9 +268,9 @@ async def test_job_bool_output(self): assert job_result == {"output": True} async def test_job_with_exception(self): - ''' + """ Tests the run_job function with an exception - ''' + """ mock_handler = Mock() mock_handler.side_effect = Exception @@ -261,70 +280,82 @@ async def test_job_with_exception(self): class TestRunJobGenerator(IsolatedAsyncioTestCase): - ''' Tests the run_job_generator function ''' + """Tests the run_job_generator function""" def handler_gen_success(self, job): # pylint: disable=unused-argument - ''' + """ Test handler that returns a generator. - ''' + """ yield "partial_output_1" yield "partial_output_2" async def handler_async_gen_success(self, job): # pylint: disable=unused-argument - ''' + """ Test handler that returns an async generator. - ''' + """ yield "partial_output_1" yield "partial_output_2" def handler_fail(self, job): - ''' + """ Test handler that raises an exception. - ''' + """ raise Exception("Test Exception") # pylint: disable=broad-exception-raised async def test_run_job_generator_success(self): - ''' + """ Tests the run_job_generator function with a successful generator - ''' + """ handler = self.handler_gen_success job = {"id": "123"} - with patch("runpod.serverless.modules.rp_job.log", new_callable=Mock) as mock_log: + with patch( + "runpod.serverless.modules.rp_job.log", new_callable=Mock + ) as mock_log: result = [i async for i in rp_job.run_job_generator(handler, job)] - assert result == [{"output": "partial_output_1"}, {"output": "partial_output_2"}] + assert result == [ + {"output": "partial_output_1"}, + {"output": "partial_output_2"}, + ] assert mock_log.error.call_count == 0 assert mock_log.info.call_count == 1 - mock_log.info.assert_called_with('Finished running generator.', '123') + mock_log.info.assert_called_with("Finished running generator.", "123") async def test_run_job_generator_success_async(self): - ''' + """ Tests the run_job_generator function with a successful generator - ''' + """ handler = self.handler_async_gen_success job = {"id": "123"} - with patch("runpod.serverless.modules.rp_job.log", new_callable=Mock) as mock_log: + with patch( + "runpod.serverless.modules.rp_job.log", new_callable=Mock + ) as mock_log: result = [i async for i in rp_job.run_job_generator(handler, job)] - assert result == [{"output": "partial_output_1"}, {"output": "partial_output_2"}] + assert result == [ + {"output": "partial_output_1"}, + {"output": "partial_output_2"}, + ] assert mock_log.error.call_count == 0 assert mock_log.info.call_count == 1 - mock_log.info.assert_called_with('Finished running generator.', '123') + mock_log.info.assert_called_with("Finished running generator.", "123") async def test_run_job_generator_exception(self): - ''' + """ Tests the run_job_generator function with an exception - ''' + """ handler = self.handler_fail job = {"id": "123"} - with patch("runpod.serverless.modules.rp_job.log", new_callable=Mock) as mock_log: + with patch( + "runpod.serverless.modules.rp_job.log", new_callable=Mock + ) as mock_log: result = [i async for i in rp_job.run_job_generator(handler, job)] assert len(result) == 1 assert "error" in result[0] assert mock_log.error.call_count == 1 assert mock_log.info.call_count == 1 - mock_log.info.assert_called_with('Finished running generator.', '123') + mock_log.info.assert_called_with("Finished running generator.", "123") diff --git a/tests/test_serverless/test_modules/test_local.py b/tests/test_serverless/test_modules/test_local.py index cba0ffcf..4671db4d 100644 --- a/tests/test_serverless/test_modules/test_local.py +++ b/tests/test_serverless/test_modules/test_local.py @@ -1,4 +1,4 @@ -''' Tests for rp_local.py ''' +""" Tests for rp_local.py """ from unittest import IsolatedAsyncioTestCase from unittest.mock import patch, mock_open @@ -7,25 +7,22 @@ class TestRunLocal(IsolatedAsyncioTestCase): - ''' Tests for run_local function ''' + """Tests for run_local function""" - @patch("runpod.serverless.modules.rp_local.run_job", return_value={"result": "success"}) + @patch( + "runpod.serverless.modules.rp_local.run_job", return_value={"result": "success"} + ) @patch("builtins.open", new_callable=mock_open, read_data='{"input": "test"}') async def test_run_local_with_test_input(self, mock_file, mock_run): - ''' + """ Test run_local function with test_input in rp_args - ''' + """ config = { "handler": "handler", "rp_args": { - "test_input": { - "input": "test", - "id": "test_id" - }, - "test_output": { - "result": "success" - } - } + "test_input": {"input": "test", "id": "test_id"}, + "test_output": {"result": "success"}, + }, } with self.assertRaises(SystemExit) as sys_exit: await rp_local.run_local(config) @@ -42,13 +39,10 @@ async def test_run_local_with_test_input(self, mock_file, mock_run): @patch("runpod.serverless.modules.rp_local.run_job", return_value={}) @patch("builtins.open", new_callable=mock_open, read_data='{"input": "test"}') async def test_run_local_with_test_input_json(self, mock_file, mock_run): - ''' + """ Test run_local function with test_input.json - ''' - config = { - "handler": "handler", - "rp_args": {} - } + """ + config = {"handler": "handler", "rp_args": {}} with patch("os.path.exists", return_value=True): with self.assertRaises(SystemExit) as sys_exit: await rp_local.run_local(config) @@ -57,20 +51,18 @@ async def test_run_local_with_test_input_json(self, mock_file, mock_run): assert mock_file.called assert mock_run.called - @patch("runpod.serverless.modules.rp_local.run_job", return_value={"error": "test_error"}) + @patch( + "runpod.serverless.modules.rp_local.run_job", + return_value={"error": "test_error"}, + ) @patch("builtins.open", new_callable=mock_open, read_data='{"input": "test"}') async def test_run_local_with_error(self, mock_file, mock_run): - ''' + """ Test run_local function when run_job returns an error - ''' + """ config = { "handler": "handler", - "rp_args": { - "test_input": { - "input": "test", - "id": "test_id" - } - } + "rp_args": {"test_input": {"input": "test", "id": "test_id"}}, } with self.assertRaises(SystemExit) as sys_exit: await rp_local.run_local(config) @@ -80,13 +72,10 @@ async def test_run_local_with_error(self, mock_file, mock_run): assert mock_run.called async def test_run_local_without_test_input_json(self): - ''' + """ Test run_local function without test_input.json - ''' - config = { - "handler": "handler", - "rp_args": {} - } + """ + config = {"handler": "handler", "rp_args": {}} with patch("os.path.exists", return_value=False): with self.assertRaises(SystemExit) as sys_exit: await rp_local.run_local(config) @@ -95,13 +84,10 @@ async def test_run_local_without_test_input_json(self): @patch("runpod.serverless.modules.rp_local.run_job", return_value={}) @patch("builtins.open", new_callable=mock_open, read_data='{"not_input": "test"}') async def test_run_local_without_input(self, mock_file, mock_run): - ''' + """ Test run_local function without input in test_input.json - ''' - config = { - "handler": "handler", - "rp_args": {} - } + """ + config = {"handler": "handler", "rp_args": {}} with patch("os.path.exists", return_value=True): with self.assertRaises(SystemExit) as sys_exit: await rp_local.run_local(config) diff --git a/tests/test_serverless/test_modules/test_logger.py b/tests/test_serverless/test_modules/test_logger.py index cef3cf7f..772aa3b7 100644 --- a/tests/test_serverless/test_modules/test_logger.py +++ b/tests/test_serverless/test_modules/test_logger.py @@ -1,4 +1,4 @@ -''' Tests for runpod.serverless.modules.rp_logger ''' +""" Tests for runpod.serverless.modules.rp_logger """ import os import unittest @@ -8,35 +8,35 @@ class TestLogger(unittest.TestCase): - ''' Tests for rp_logger ''' + """Tests for rp_logger""" def setUp(self) -> None: - ''' + """ Set up the logger for each test - ''' + """ self.logger = rp_logger.RunPodLogger() def test_default_log_level(self): - ''' + """ Tests that the default log level is DEBUG - ''' + """ defult_logger = rp_logger.RunPodLogger() self.assertEqual(defult_logger.level, "DEBUG") def test_singleton(self): - ''' + """ Tests that the logger is a singleton - ''' + """ logger1 = rp_logger.RunPodLogger() logger2 = rp_logger.RunPodLogger() self.assertIs(logger1, logger2) def test_set_log_level(self): - ''' + """ Tests that the log level can be set - ''' + """ logger = rp_logger.RunPodLogger() logger.set_level("INFO") @@ -49,9 +49,9 @@ def test_set_log_level(self): self.assertEqual(logger.level, "INFO") def test_call_log(self): - ''' + """ Tests that the logger can be called and logs the message to stdout if the log level is set. - ''' + """ log = rp_logger.RunPodLogger() with patch("runpod.serverless.modules.rp_logger.RunPodLogger.log") as mock_log: @@ -61,8 +61,9 @@ def test_call_log(self): mock_log.assert_called_once_with("Test log message", "WARN", None) log.set_level(0) - with patch("runpod.serverless.modules.rp_logger.RunPodLogger.log") as mock_log, \ - patch("builtins.print") as mock_print: + with patch( + "runpod.serverless.modules.rp_logger.RunPodLogger.log" + ) as mock_log, patch("builtins.print") as mock_print: log.debug("Test log message") @@ -73,9 +74,9 @@ def test_call_log(self): log.set_level("DEBUG") def test_invalid_debug_level(self): - ''' + """ Tests that an invalid debug level raises an exception - ''' + """ logger = rp_logger.RunPodLogger() with self.assertRaises(ValueError): @@ -85,33 +86,35 @@ def test_invalid_debug_level(self): logger.set_level([]) def test_debug_level_int(self): - ''' + """ Tests that the debug level can be set using an int - ''' + """ int_logger = rp_logger.RunPodLogger() with self.assertRaises(ValueError): int_logger.set_level(69) def test_log_secret(self): - ''' + """ Tests that the secret method censors secrets. Captures stdout and checks that the secret is censored. - ''' + """ with patch("runpod.serverless.modules.rp_logger.RunPodLogger.log") as mock_log: self.logger.secret("test_secret", "test_secret_value") - mock_log.assert_called_once_with("test_secret: t***************e", "INFO", None) + mock_log.assert_called_once_with( + "test_secret: t***************e", "INFO", None + ) def test_log_tip(self): - ''' + """ Tests that the tip method logs a tip. - ''' + """ with patch("runpod.serverless.modules.rp_logger.RunPodLogger.log") as mock_log: self.logger.tip("test_tip") mock_log.assert_called_once_with("test_tip", "TIP") def test_log_job_id(self): - """ Tests that the log method logs a job id """ + """Tests that the log method logs a job id""" logger = rp_logger.RunPodLogger() job_id = "test_job_id" @@ -120,8 +123,7 @@ def test_log_job_id(self): logger.log("test_message", "INFO", job_id) mock_print.assert_called_once_with( - 'INFO | test_job_id | test_message', - flush=True + "INFO | test_job_id | test_message", flush=True ) # Test with endpoint id set @@ -131,23 +133,23 @@ def test_log_job_id(self): mock_print.assert_called_with( '{"requestId": "test_job_id", "message": "test_message", "level": "INFO"}', - flush=True + flush=True, ) def test_log_truncate(self): - """Tests that the log method truncates """ + """Tests that the log method truncates""" logger = rp_logger.RunPodLogger() job_id = "test_job_id" long_message = "a" * (rp_logger.MAX_MESSAGE_LENGTH + 100) expected_start = "a" * (rp_logger.MAX_MESSAGE_LENGTH // 2) expected_end = "a" * (rp_logger.MAX_MESSAGE_LENGTH // 2) truncated_amount = len(long_message) - rp_logger.MAX_MESSAGE_LENGTH - truncation_note = f'\n...TRUNCATED {truncated_amount} CHARACTERS...\n' + truncation_note = f"\n...TRUNCATED {truncated_amount} CHARACTERS...\n" truncated_message = expected_start + truncation_note + expected_end with patch("builtins.print") as mock_print: logger.log(long_message, "INFO", job_id) - expected_log_output = f'INFO | {job_id} | {truncated_message}' + expected_log_output = f"INFO | {job_id} | {truncated_message}" mock_print.assert_called_once_with(expected_log_output, flush=True) diff --git a/tests/test_serverless/test_modules/test_ping.py b/tests/test_serverless/test_modules/test_ping.py index 751d45ea..39d71a6c 100644 --- a/tests/test_serverless/test_modules/test_ping.py +++ b/tests/test_serverless/test_modules/test_ping.py @@ -1,4 +1,4 @@ -''' Tests for runpod.serverless.modules.rp_ping ''' +""" Tests for runpod.serverless.modules.rp_ping """ import os import importlib @@ -9,23 +9,27 @@ import requests from runpod.serverless.modules import rp_ping -class MockResponse: # pylint: disable=too-few-public-methods - ''' Mock response for aiohttp ''' + +class MockResponse: # pylint: disable=too-few-public-methods + """Mock response for aiohttp""" + status_code = 200 -def mock_get(*args, **kwargs): # pylint: disable=unused-argument - ''' + +def mock_get(*args, **kwargs): # pylint: disable=unused-argument + """ Mock get function for aiohttp - ''' + """ return MockResponse() + class TestPing(unittest.TestCase): - ''' Tests for rp_ping ''' + """Tests for rp_ping""" def test_variables(self): - ''' + """ Tests that the variables are set correctly - ''' + """ os.environ["RUNPOD_WEBHOOK_PING"] = "PING_NOT_SET" importlib.reload(rp_ping) @@ -43,9 +47,9 @@ def test_variables(self): @patch("requests.Session.get", side_effect=mock_get) def test_start_ping(self, mock_get_return): - ''' + """ Tests that the start_ping function works correctly - ''' + """ # No RUNPOD_AI_API_KEY case with patch("threading.Thread.start") as mock_thread_start: rp_ping.Heartbeat().start_ping(test=True) diff --git a/tests/test_serverless/test_modules/test_progress.py b/tests/test_serverless/test_modules/test_progress.py index 7586a8a0..d7e183e6 100644 --- a/tests/test_serverless/test_modules/test_progress.py +++ b/tests/test_serverless/test_modules/test_progress.py @@ -8,8 +8,9 @@ from runpod.serverless.modules.rp_progress import progress_update, _thread_target + class TestProgressUpdate(unittest.TestCase): - """ Tests for the progress_update function. """ + """Tests for the progress_update function.""" @patch("runpod.serverless.modules.rp_progress.os.environ.get") @patch("runpod.serverless.modules.rp_progress.send_result") @@ -25,7 +26,7 @@ def mock_thread_function(job, progress): try: assert job == "fake_job", "Job ID was not passed correctly" assert progress == "50%", "Progress was not passed correctly" - except Exception as err: # pylint: disable=broad-except + except Exception as err: # pylint: disable=broad-except print(f"Exception in mocked function: {err}") finally: thread_event.set() @@ -41,15 +42,13 @@ def mock_thread_function(job, progress): progress_update(job, progress) _thread_target(job, progress) - assert mock_thread_target.called, "Thread function was not started" mock_thread_target.assert_called_once_with(job, progress) - assert thread_event.wait(timeout=30), "Thread did not complete within expected time" + assert thread_event.wait( + timeout=30 + ), "Thread did not complete within expected time" # Assertions - mock_os_get.assert_called_with('RUNPOD_AI_API_KEY') - expected_job_data = { - "status": "IN_PROGRESS", - "output": progress - } + mock_os_get.assert_called_with("RUNPOD_AI_API_KEY") + expected_job_data = {"status": "IN_PROGRESS", "output": progress} mock_result.assert_called_once_with(ANY, expected_job_data, job) diff --git a/tests/test_serverless/test_modules/test_state.py b/tests/test_serverless/test_modules/test_state.py index 7faac930..35d5ef6b 100644 --- a/tests/test_serverless/test_modules/test_state.py +++ b/tests/test_serverless/test_modules/test_state.py @@ -1,81 +1,85 @@ -''' Tests for environment variables module ''' +""" Tests for environment variables module """ import os import unittest from runpod.serverless.modules.worker_state import ( - Job, Jobs, IS_LOCAL_TEST, WORKER_ID, get_auth_header + Job, + Jobs, + IS_LOCAL_TEST, + WORKER_ID, + get_auth_header, ) class TestEnvVars(unittest.TestCase): - ''' Tests for environment variables module ''' + """Tests for environment variables module""" def setUp(self): - ''' + """ Set up test variables - ''' - self.test_api_key = 'test_api_key' - os.environ['RUNPOD_AI_API_KEY'] = self.test_api_key + """ + self.test_api_key = "test_api_key" + os.environ["RUNPOD_AI_API_KEY"] = self.test_api_key def test_is_local_test(self): - ''' + """ Tests if IS_LOCAL_TEST flag is properly set - ''' - os.environ.pop('RUNPOD_WEBHOOK_GET_JOB', None) + """ + os.environ.pop("RUNPOD_WEBHOOK_GET_JOB", None) self.assertEqual(IS_LOCAL_TEST, True) def test_worker_id(self): - ''' + """ Tests if WORKER_ID is properly set - ''' + """ os.environ["RUNPOD_POD_ID"] = WORKER_ID - self.assertEqual(WORKER_ID, os.environ.get('RUNPOD_POD_ID')) + self.assertEqual(WORKER_ID, os.environ.get("RUNPOD_POD_ID")) def test_get_auth_header(self): - ''' + """ Tests if get_auth_header() function works as expected - ''' - self.assertEqual(get_auth_header(), {'Authorization': self.test_api_key}) + """ + self.assertEqual(get_auth_header(), {"Authorization": self.test_api_key}) class TestJobs(unittest.TestCase): - ''' Tests for Jobs class ''' + """Tests for Jobs class""" def setUp(self): - ''' + """ Set up test variables - ''' + """ self.jobs = Jobs() self.jobs.jobs.clear() # clear jobs before each test def test_singleton(self): - ''' + """ Tests if Jobs is a singleton class - ''' + """ jobs2 = Jobs() self.assertEqual(self.jobs, jobs2) def test_add_job(self): - ''' + """ Tests if add_job() method works as expected - ''' - self.jobs.add_job('123') - self.assertIn(Job('123'), self.jobs.jobs) + """ + self.jobs.add_job("123") + self.assertIn(Job("123"), self.jobs.jobs) def test_remove_job(self): - ''' + """ Tests if remove_job() method works as expected - ''' - self.jobs.add_job('123') - self.jobs.remove_job('123') - self.assertNotIn(Job('123'), self.jobs.jobs) + """ + self.jobs.add_job("123") + self.jobs.remove_job("123") + self.assertNotIn(Job("123"), self.jobs.jobs) def test_get_job_input(self): - ''' + """ Tests if get_job_input() method works as expected - ''' + """ job1 = Job(job_id="id1") job2 = Job(job_id="id2") self.assertNotEqual(job1, job2) @@ -84,21 +88,21 @@ def test_get_job_input(self): non_job_object = "some_string" self.assertNotEqual(job, non_job_object) - self.assertEqual(self.jobs.get_job('123'), None) + self.assertEqual(self.jobs.get_job("123"), None) - self.jobs.add_job('123', 'test_input') - self.assertEqual(self.jobs.get_job('123').input, 'test_input') + self.jobs.add_job("123", "test_input") + self.assertEqual(self.jobs.get_job("123").input, "test_input") def test_get_job_list(self): - ''' + """ Tests if get_job_list() method works as expected - ''' + """ self.assertTrue(self.jobs.get_job_list() is None) - self.jobs.add_job('123') - self.jobs.add_job('456') + self.jobs.add_job("123") + self.jobs.add_job("456") self.assertEqual(len(self.jobs.jobs), 2) - self.assertTrue(Job('123') in self.jobs.jobs) - self.assertTrue(Job('456') in self.jobs.jobs) + self.assertTrue(Job("123") in self.jobs.jobs) + self.assertTrue(Job("456") in self.jobs.jobs) - self.assertTrue(self.jobs.get_job_list() in ['123,456', '456,123']) + self.assertTrue(self.jobs.get_job_list() in ["123,456", "456,123"]) diff --git a/tests/test_serverless/test_modules/test_tips.py b/tests/test_serverless/test_modules/test_tips.py index 9f32c955..f5b8ca4f 100644 --- a/tests/test_serverless/test_modules/test_tips.py +++ b/tests/test_serverless/test_modules/test_tips.py @@ -1,28 +1,29 @@ -''' Tests for runpod.serverless.modules.rp_tips.py ''' +""" Tests for runpod.serverless.modules.rp_tips.py """ import unittest from unittest.mock import patch from runpod.serverless.modules.rp_tips import check_return_size + class TestTips(unittest.TestCase): - ''' Tests for the Tips module ''' + """Tests for the Tips module""" - @patch('runpod.serverless.modules.rp_tips.log.tip') + @patch("runpod.serverless.modules.rp_tips.log.tip") def test_check_return_size_small(self, mock_log): - ''' + """ Tests check_return_size function with a small return_body - ''' - check_return_size('a' * 10) # A small string + """ + check_return_size("a" * 10) # A small string # Ensure that the log.tip function was not called, as the return_body is small mock_log.assert_not_called() - @patch('runpod.serverless.modules.rp_tips.log.tip') + @patch("runpod.serverless.modules.rp_tips.log.tip") def test_check_return_size_large(self, mock_log): - ''' + """ Tests check_return_size function with a large return_body - ''' - check_return_size('a' * 30_000_000) # A large string (over 20 MB) + """ + check_return_size("a" * 30_000_000) # A large string (over 20 MB) # Ensure that the log.tip function was called, as the return_body is large mock_log.assert_called() diff --git a/tests/test_serverless/test_utils/__init__.py b/tests/test_serverless/test_utils/__init__.py index bb7b5267..1b0503c6 100644 --- a/tests/test_serverless/test_utils/__init__.py +++ b/tests/test_serverless/test_utils/__init__.py @@ -1 +1 @@ -''' Import all test modules in this package. ''' +""" Import all test modules in this package. """ diff --git a/tests/test_serverless/test_utils/test_cleanup.py b/tests/test_serverless/test_utils/test_cleanup.py index 29b56304..619c6bdc 100644 --- a/tests/test_serverless/test_utils/test_cleanup.py +++ b/tests/test_serverless/test_utils/test_cleanup.py @@ -1,17 +1,19 @@ -''' +""" Test cleanup.py -''' +""" from unittest.mock import patch from runpod.serverless.utils import rp_cleanup + def test_clean_no_folders(): - ''' + """ Test clean() with no folders. - ''' - with patch('shutil.rmtree') as mock_rmtree, patch('os.remove') as mock_remove, \ - patch('os.path.exists', return_value=False): + """ + with patch("shutil.rmtree") as mock_rmtree, patch( + "os.remove" + ) as mock_remove, patch("os.path.exists", return_value=False): rp_cleanup.clean() assert mock_rmtree.call_count == 3 mock_rmtree.assert_any_call("input_objects", ignore_errors=True) @@ -19,24 +21,28 @@ def test_clean_no_folders(): mock_rmtree.assert_any_call("job_files", ignore_errors=True) mock_remove.assert_not_called() + def test_clean_with_output_zip(): - ''' + """ Test clean() with output.zip. - ''' - with patch('shutil.rmtree') as mock_rmtree, patch('os.remove') as mock_remove, \ - patch('os.path.exists', return_value=True): + """ + with patch("shutil.rmtree") as mock_rmtree, patch( + "os.remove" + ) as mock_remove, patch("os.path.exists", return_value=True): rp_cleanup.clean() assert mock_rmtree.call_count == 3 - mock_remove.assert_called_once_with('output.zip') + mock_remove.assert_called_once_with("output.zip") + def test_clean_with_folders(): - ''' + """ Test clean() with folders. - ''' - with patch('shutil.rmtree') as mock_rmtree, patch('os.remove') as mock_remove, \ - patch('os.path.exists', return_value=False): - rp_cleanup.clean(['test_folder1', 'test_folder2']) + """ + with patch("shutil.rmtree") as mock_rmtree, patch( + "os.remove" + ) as mock_remove, patch("os.path.exists", return_value=False): + rp_cleanup.clean(["test_folder1", "test_folder2"]) assert mock_rmtree.call_count == 5 - mock_rmtree.assert_any_call('test_folder1', ignore_errors=True) - mock_rmtree.assert_any_call('test_folder2', ignore_errors=True) + mock_rmtree.assert_any_call("test_folder1", ignore_errors=True) + mock_rmtree.assert_any_call("test_folder2", ignore_errors=True) mock_remove.assert_not_called() diff --git a/tests/test_serverless/test_utils/test_cuda.py b/tests/test_serverless/test_utils/test_cuda.py index cbd58801..b5e8a185 100644 --- a/tests/test_serverless/test_utils/test_cuda.py +++ b/tests/test_serverless/test_utils/test_cuda.py @@ -1,30 +1,39 @@ -''' +""" Unit tests for the rp_cuda module -''' +""" from unittest.mock import patch from runpod.serverless.utils import rp_cuda + def test_is_available_true(): - ''' + """ Test that is_available returns True when nvidia-smi is available - ''' - with patch("subprocess.check_output", return_value=b"NVIDIA-SMI") as mock_check_output: + """ + with patch( + "subprocess.check_output", return_value=b"NVIDIA-SMI" + ) as mock_check_output: assert rp_cuda.is_available() is True mock_check_output.assert_called_once_with("nvidia-smi", shell=True) + def test_is_available_false(): - ''' + """ Test that is_available returns False when nvidia-smi is not available - ''' - with patch("subprocess.check_output", return_value=b"Not a GPU output") as mock_check_output: + """ + with patch( + "subprocess.check_output", return_value=b"Not a GPU output" + ) as mock_check_output: assert rp_cuda.is_available() is False mock_check_output.assert_called_once_with("nvidia-smi", shell=True) + def test_is_available_exception(): - ''' + """ Test that is_available returns False when nvidia-smi raises an exception - ''' - with patch("subprocess.check_output", side_effect=Exception("Bad Command")) as mock_check: + """ + with patch( + "subprocess.check_output", side_effect=Exception("Bad Command") + ) as mock_check: assert rp_cuda.is_available() is False mock_check.assert_called_once_with("nvidia-smi", shell=True) diff --git a/tests/test_serverless/test_utils/test_debugger.py b/tests/test_serverless/test_utils/test_debugger.py index 2073757a..3a9a67d4 100644 --- a/tests/test_serverless/test_utils/test_debugger.py +++ b/tests/test_serverless/test_utils/test_debugger.py @@ -1,6 +1,6 @@ -''' +""" Unit tests for the debugger utility functions. -''' +""" import time import unittest @@ -8,108 +8,111 @@ from unittest.mock import patch from runpod.serverless.utils import rp_debugger -from runpod.serverless.utils.rp_debugger import( - Checkpoints, LineTimer, FunctionTimer, get_debugger_output, clear_debugger_output +from runpod.serverless.utils.rp_debugger import ( + Checkpoints, + LineTimer, + FunctionTimer, + get_debugger_output, + clear_debugger_output, ) class TestDebugger(unittest.TestCase): - ''' Unit tests for the debugger utility functions. ''' + """Unit tests for the debugger utility functions.""" def setUp(self): self.checkpoints = Checkpoints() self.checkpoints.clear() - @patch('runpod.serverless.utils.rp_debugger.cpuinfo.get_cpu_info') + @patch("runpod.serverless.utils.rp_debugger.cpuinfo.get_cpu_info") def test_key_error(self, mock_get_cpu_info): - ''' + """ Test that a KeyError is raised when an invalid key is used. - ''' - mock_get_cpu_info.side_effect = KeyError('Test Error') + """ + mock_get_cpu_info.side_effect = KeyError("Test Error") importlib.reload(rp_debugger) assert mock_get_cpu_info.called - self.assertEqual(rp_debugger.PROCESSOR, 'Unable to get processor info.') + self.assertEqual(rp_debugger.PROCESSOR, "Unable to get processor info.") def test_checkpoints(self): - ''' + """ Test that checkpoints are added and stopped correctly. - ''' - self.checkpoints.add('checkpoint1') - self.checkpoints.start('checkpoint1') + """ + self.checkpoints.add("checkpoint1") + self.checkpoints.start("checkpoint1") time.sleep(0.1) - self.checkpoints.stop('checkpoint1') + self.checkpoints.stop("checkpoint1") - output = get_debugger_output()['timestamps'] + output = get_debugger_output()["timestamps"] self.assertEqual(len(output), 1) - self.assertEqual(output[0]['name'], 'checkpoint1') - self.assertGreater(output[0]['duration_ms'], 0) + self.assertEqual(output[0]["name"], "checkpoint1") + self.assertGreater(output[0]["duration_ms"], 0) def test_get_checkpoints(self): - ''' + """ Test that checkpoints are added and stopped correctly. - ''' - self.checkpoints.add('checkpoint1') + """ + self.checkpoints.add("checkpoint1") checkpoint_list = self.checkpoints.get_checkpoints() self.assertEqual(len(checkpoint_list), 0) - def test_checkpoints_exception(self): - ''' + """ Test that a KeyError is raised when an invalid checkpoint is used. - ''' - self.assertRaises(KeyError, self.checkpoints.start, 'nonexistent') - self.assertRaises(KeyError, self.checkpoints.stop, 'nonexistent') + """ + self.assertRaises(KeyError, self.checkpoints.start, "nonexistent") + self.assertRaises(KeyError, self.checkpoints.stop, "nonexistent") - self.checkpoints.add('checkpoint2') - self.assertRaises(KeyError, self.checkpoints.add, 'checkpoint2') - self.assertRaises(KeyError, self.checkpoints.stop, 'checkpoint2') + self.checkpoints.add("checkpoint2") + self.assertRaises(KeyError, self.checkpoints.add, "checkpoint2") + self.assertRaises(KeyError, self.checkpoints.stop, "checkpoint2") def test_line_timer(self): - ''' + """ Test that the line timer works correctly. - ''' - with LineTimer('line_timer'): + """ + with LineTimer("line_timer"): time.sleep(0.1) - output = get_debugger_output()['timestamps'] + output = get_debugger_output()["timestamps"] self.assertEqual(len(output), 1) - self.assertEqual(output[0]['name'], 'line_timer') - self.assertGreater(output[0]['duration_ms'], 0) + self.assertEqual(output[0]["name"], "line_timer") + self.assertGreater(output[0]["duration_ms"], 0) def test_function_timer(self): - ''' + """ Test that the function timer works correctly. - ''' + """ + @FunctionTimer def func_to_time(): time.sleep(0.1) func_to_time() - output = get_debugger_output()['timestamps'] + output = get_debugger_output()["timestamps"] self.assertEqual(len(output), 1) - self.assertEqual(output[0]['name'], 'func_to_time') - self.assertGreater(output[0]['duration_ms'], 0) - + self.assertEqual(output[0]["name"], "func_to_time") + self.assertGreater(output[0]["duration_ms"], 0) def test_clear_debugger_output(self): - ''' + """ Test that the debugger output is cleared correctly. - ''' - self.checkpoints.add('checkpoint1') - self.checkpoints.start('checkpoint1') + """ + self.checkpoints.add("checkpoint1") + self.checkpoints.start("checkpoint1") # Check that non-stopped checkpoints are not returned checkpoint_list = self.checkpoints.get_checkpoints() self.assertEqual(len(checkpoint_list), 0) - self.checkpoints.stop('checkpoint1') + self.checkpoints.stop("checkpoint1") checkpoint_list = self.checkpoints.get_checkpoints() self.assertEqual(len(checkpoint_list), 1) @@ -119,5 +122,6 @@ def test_clear_debugger_output(self): checkpoint_list = self.checkpoints.get_checkpoints() self.assertEqual(len(checkpoint_list), 0) + if __name__ == "__main__": unittest.main() diff --git a/tests/test_serverless/test_utils/test_download.py b/tests/test_serverless/test_utils/test_download.py index 6ae029ff..98977a6e 100644 --- a/tests/test_serverless/test_utils/test_download.py +++ b/tests/test_serverless/test_utils/test_download.py @@ -1,4 +1,5 @@ -''' Tests for runpod | serverless | modules | download.py ''' +""" Tests for runpod | serverless | modules | download.py """ + # pylint: disable=R0903,W0613 import os @@ -7,46 +8,52 @@ import requests -from runpod.serverless.utils.rp_download import( - calculate_chunk_size, download_files_from_urls, file +from runpod.serverless.utils.rp_download import ( + calculate_chunk_size, + download_files_from_urls, + file, ) -URL_LIST = ['https://example.com/picture.jpg', - 'https://example.com/picture.jpg?X-Amz-Signature=123'] +URL_LIST = [ + "https://example.com/picture.jpg", + "https://example.com/picture.jpg?X-Amz-Signature=123", +] JOB_ID = "job_123" def mock_requests_get(*args, **kwargs): - ''' + """ Mocks requests.get - ''' + """ headers = { - 'Content-Disposition': 'attachment; filename="picture.jpg"', - 'Content-Length': '1000' + "Content-Disposition": 'attachment; filename="picture.jpg"', + "Content-Length": "1000", } class MockResponse: - ''' Mocks requests.get response ''' + """Mocks requests.get response""" def __init__(self, content, status_code, headers=None): - ''' + """ Mocks requests.get response - ''' + """ self.content = content self.status_code = status_code self.headers = headers or {} def raise_for_status(self): - ''' Mocks raise_for_status function ''' + """Mocks raise_for_status function""" if 400 <= self.status_code < 600: - raise requests.exceptions.RequestException(f"Status code: {self.status_code}") + raise requests.exceptions.RequestException( + f"Status code: {self.status_code}" + ) def iter_content(self, chunk_size=1024): - ''' Mocks iter_content method ''' + """Mocks iter_content method""" length = len(self.content) for i in range(0, length, chunk_size): - yield self.content[i:min(i + chunk_size, length)] + yield self.content[i : min(i + chunk_size, length)] def __enter__(self): return self @@ -55,69 +62,81 @@ def __exit__(self, *args): pass if args[0] in URL_LIST: - return MockResponse(b'nothing', 200, headers) + return MockResponse(b"nothing", 200, headers) return MockResponse(None, 404) class TestDownloadFilesFromUrls(unittest.TestCase): - ''' Tests for download_files_from_urls ''' + """Tests for download_files_from_urls""" def test_calculate_chunk_size(self): - ''' + """ Tests calculate_chunk_size - ''' + """ self.assertEqual(calculate_chunk_size(1024), 1024) - self.assertEqual(calculate_chunk_size(1024*1024), 1024) - self.assertEqual(calculate_chunk_size(1024*1024*1024), 1024*1024) - self.assertEqual(calculate_chunk_size(1024*1024*1024*10), 1024*1024*10) + self.assertEqual(calculate_chunk_size(1024 * 1024), 1024) + self.assertEqual(calculate_chunk_size(1024 * 1024 * 1024), 1024 * 1024) + self.assertEqual( + calculate_chunk_size(1024 * 1024 * 1024 * 10), 1024 * 1024 * 10 + ) - @patch('os.makedirs', return_value=None) - @patch('requests.get', side_effect=mock_requests_get) - @patch('builtins.open', new_callable=mock_open) + @patch("os.makedirs", return_value=None) + @patch("requests.get", side_effect=mock_requests_get) + @patch("builtins.open", new_callable=mock_open) def test_download_files_from_urls(self, mock_open_file, mock_get, mock_makedirs): - ''' + """ Tests download_files_from_urls - ''' + """ downloaded_files = download_files_from_urls( - JOB_ID, ['https://example.com/picture.jpg', ] + JOB_ID, + [ + "https://example.com/picture.jpg", + ], ) self.assertEqual(len(downloaded_files), 1) # Check that the url was called with requests.get - self.assertIn('https://example.com/picture.jpg', mock_get.call_args_list[0][0]) + self.assertIn("https://example.com/picture.jpg", mock_get.call_args_list[0][0]) # Check that the file has the correct extension - self.assertTrue(downloaded_files[0].endswith('.jpg')) - - mock_open_file.assert_called_once_with(downloaded_files[0], 'wb') - mock_makedirs.assert_called_once_with(os.path.abspath( - f'jobs/{JOB_ID}/downloaded_files'), exist_ok=True) + self.assertTrue(downloaded_files[0].endswith(".jpg")) + mock_open_file.assert_called_once_with(downloaded_files[0], "wb") + mock_makedirs.assert_called_once_with( + os.path.abspath(f"jobs/{JOB_ID}/downloaded_files"), exist_ok=True + ) - string_download_file = download_files_from_urls(JOB_ID, 'https://example.com/picture.jpg') - self.assertTrue(string_download_file[0].endswith('.jpg')) + string_download_file = download_files_from_urls( + JOB_ID, "https://example.com/picture.jpg" + ) + self.assertTrue(string_download_file[0].endswith(".jpg")) # Check if None is returned when url is None self.assertEqual(download_files_from_urls(JOB_ID, [None]), [None]) # Test requests exception - mock_get.side_effect = requests.exceptions.RequestException('Error') + mock_get.side_effect = requests.exceptions.RequestException("Error") self.assertEqual( - download_files_from_urls(JOB_ID, ['https://example.com/picture.jpg']), - [None] + download_files_from_urls(JOB_ID, ["https://example.com/picture.jpg"]), + [None], ) - @patch('os.makedirs', return_value=None) - @patch('requests.get', side_effect=mock_requests_get) - @patch('builtins.open', new_callable=mock_open) - def test_download_files_from_urls_signed(self, mock_open_file, mock_get, mock_makedirs): - ''' + @patch("os.makedirs", return_value=None) + @patch("requests.get", side_effect=mock_requests_get) + @patch("builtins.open", new_callable=mock_open) + def test_download_files_from_urls_signed( + self, mock_open_file, mock_get, mock_makedirs + ): + """ Tests download_files_from_urls with signed urls - ''' + """ downloaded_files = download_files_from_urls( - JOB_ID, ['https://example.com/picture.jpg?X-Amz-Signature=123', ] + JOB_ID, + [ + "https://example.com/picture.jpg?X-Amz-Signature=123", + ], ) # Confirms that the same number of files were downloaded as urls provided @@ -127,21 +146,23 @@ def test_download_files_from_urls_signed(self, mock_open_file, mock_get, mock_ma self.assertIn(URL_LIST[1], mock_get.call_args_list[0][0]) # Check that the file has the correct extension - self.assertTrue(downloaded_files[0].endswith('.jpg')) + self.assertTrue(downloaded_files[0].endswith(".jpg")) + + mock_open_file.assert_called_once_with(downloaded_files[0], "wb") + mock_makedirs.assert_called_once_with( + os.path.abspath(f"jobs/{JOB_ID}/downloaded_files"), exist_ok=True + ) - mock_open_file.assert_called_once_with(downloaded_files[0], 'wb') - mock_makedirs.assert_called_once_with(os.path.abspath( - f'jobs/{JOB_ID}/downloaded_files'), exist_ok=True) class FileDownloaderTestCase(unittest.TestCase): - ''' Tests for file_downloader ''' + """Tests for file_downloader""" - @patch('runpod.serverless.utils.rp_download.requests.get') - @patch('builtins.open', new_callable=mock_open) + @patch("runpod.serverless.utils.rp_download.requests.get") + @patch("builtins.open", new_callable=mock_open) def test_download_file(self, mock_file, mock_get): - ''' + """ Tests download_file - ''' + """ # Mock the response from requests.get mock_response = MagicMock() mock_response.content = b"file content" @@ -160,13 +181,13 @@ def test_download_file(self, mock_file, mock_get): # Check that the file was written correctly mock_file().write.assert_called_once_with(b"file content") - @patch('runpod.serverless.utils.rp_download.requests.get') - @patch('builtins.open', new_callable=mock_open) - @patch('runpod.serverless.utils.rp_download.zipfile.ZipFile') + @patch("runpod.serverless.utils.rp_download.requests.get") + @patch("builtins.open", new_callable=mock_open) + @patch("runpod.serverless.utils.rp_download.zipfile.ZipFile") def test_download_zip_file(self, mock_zip, mock_file, mock_get): - ''' + """ Tests download_file with a zip file - ''' + """ # Mock the response from requests.get mock_response = MagicMock() mock_response.content = b"zip file content" diff --git a/tests/test_serverless/test_utils/test_upload.py b/tests/test_serverless/test_utils/test_upload.py index 43c2d3c4..c5cb9ad9 100644 --- a/tests/test_serverless/test_utils/test_upload.py +++ b/tests/test_serverless/test_utils/test_upload.py @@ -1,4 +1,4 @@ -''' Tests for my_module | bucket utilities ''' +""" Tests for my_module | bucket utilities """ import os import io @@ -12,14 +12,14 @@ from runpod.serverless.utils import upload_file_to_bucket, upload_in_memory_object BUCKET_CREDENTIALS = { - 'endpointUrl': 'https://your-bucket-endpoint-url.com', - 'accessId': 'your_access_key_id', - 'accessSecret': 'your_secret_access_key', + "endpointUrl": "https://your-bucket-endpoint-url.com", + "accessId": "your_access_key_id", + "accessSecret": "your_secret_access_key", } class TestBotoConfig(unittest.TestCase): - ''' Tests for boto config ''' + """Tests for boto config""" def setUp(self) -> None: self.original_environ = os.environ.copy() @@ -30,15 +30,16 @@ def tearDown(self): os.environ = self.original_environ def test_get_boto_client(self): - ''' + """ Tests get_boto_client - ''' + """ # Define the bucket credentials bucket_creds = BUCKET_CREDENTIALS # Mock boto3.session.Session - with patch('boto3.session.Session') as mock_session, \ - patch('runpod.serverless.utils.rp_upload.TransferConfig') as mock_transfer_config: + with patch("boto3.session.Session") as mock_session, patch( + "runpod.serverless.utils.rp_upload.TransferConfig" + ) as mock_transfer_config: mock_session.return_value.client.return_value = self.mock_boto_client mock_transfer_config.return_value = self.mock_transfer_config @@ -54,56 +55,61 @@ def test_get_boto_client(self): # Check if boto_client was called with the correct arguments mock_session.return_value.client.assert_called_once_with( - 's3', - endpoint_url=bucket_creds['endpointUrl'], - aws_access_key_id=bucket_creds['accessId'], - aws_secret_access_key=bucket_creds['accessSecret'], + "s3", + endpoint_url=bucket_creds["endpointUrl"], + aws_access_key_id=bucket_creds["accessId"], + aws_secret_access_key=bucket_creds["accessSecret"], config=unittest.mock.ANY, - region_name=None + region_name=None, ) creds_s3 = bucket_creds.copy() - creds_s3['endpointUrl'] = "https://bucket-name.s3.region-code.amazonaws.com/key-name" + creds_s3["endpointUrl"] = ( + "https://bucket-name.s3.region-code.amazonaws.com/key-name" + ) boto_client, transfer_config = get_boto_client(creds_s3) mock_session.return_value.client.assert_called_with( - 's3', - endpoint_url=creds_s3['endpointUrl'], - aws_access_key_id=bucket_creds['accessId'], - aws_secret_access_key=bucket_creds['accessSecret'], + "s3", + endpoint_url=creds_s3["endpointUrl"], + aws_access_key_id=bucket_creds["accessId"], + aws_secret_access_key=bucket_creds["accessSecret"], config=unittest.mock.ANY, - region_name="region-code" + region_name="region-code", ) creds_do = bucket_creds.copy() - creds_do['endpointUrl'] = "https://name.region-code.digitaloceanspaces.com/key-name" + creds_do["endpointUrl"] = ( + "https://name.region-code.digitaloceanspaces.com/key-name" + ) boto_client, transfer_config = get_boto_client(creds_do) mock_session.return_value.client.assert_called_with( - 's3', - endpoint_url=creds_do['endpointUrl'], - aws_access_key_id=bucket_creds['accessId'], - aws_secret_access_key=bucket_creds['accessSecret'], + "s3", + endpoint_url=creds_do["endpointUrl"], + aws_access_key_id=bucket_creds["accessId"], + aws_secret_access_key=bucket_creds["accessSecret"], config=unittest.mock.ANY, - region_name="region-code" + region_name="region-code", ) def test_get_boto_client_environ(self): - ''' + """ Tests get_boto_client with environment variables - ''' + """ assert rp_upload.get_boto_client()[0] is None - os.environ['BUCKET_ENDPOINT_URL'] = 'https://your-bucket-endpoint-url.com' - os.environ['BUCKET_ACCESS_KEY_ID'] = 'your_access_key_id' - os.environ['BUCKET_SECRET_ACCESS_KEY'] = 'your_secret_access_key' + os.environ["BUCKET_ENDPOINT_URL"] = "https://your-bucket-endpoint-url.com" + os.environ["BUCKET_ACCESS_KEY_ID"] = "your_access_key_id" + os.environ["BUCKET_SECRET_ACCESS_KEY"] = "your_secret_access_key" importlib.reload(rp_upload) - with patch('boto3.session.Session') as mock_session, \ - patch('runpod.serverless.utils.rp_upload.TransferConfig') as mock_transfer_config: + with patch("boto3.session.Session") as mock_session, patch( + "runpod.serverless.utils.rp_upload.TransferConfig" + ) as mock_transfer_config: mock_session.return_value.client.return_value = self.mock_boto_client mock_transfer_config.return_value = self.mock_transfer_config @@ -112,21 +118,22 @@ def test_get_boto_client_environ(self): assert boto_client == self.mock_boto_client assert transfer_config == self.mock_transfer_config + # ---------------------------------------------------------------------------- # # Upload Image # # ---------------------------------------------------------------------------- # class TestUploadImage(unittest.TestCase): - ''' Tests for upload_image ''' + """Tests for upload_image""" @patch("runpod.serverless.utils.rp_upload.get_boto_client") @patch("builtins.open") @patch("runpod.serverless.utils.rp_upload.os.makedirs") def test_upload_image_local(self, mock_makedirs, mock_open, mock_get_boto_client): - ''' + """ Test upload_image function when there is no boto client - ''' + """ # Mocking get_boto_client to return None mock_get_boto_client.return_value = (None, None) @@ -144,9 +151,9 @@ def test_upload_image_local(self, mock_makedirs, mock_open, mock_get_boto_client @patch("runpod.serverless.utils.rp_upload.get_boto_client") @patch("builtins.open") def test_upload_image_s3(self, mock_open, mock_get_boto_client): - ''' + """ Test upload_image function when there is a boto client - ''' + """ # Mocking boto_client mock_boto_client = Mock() mock_boto_client.put_object = Mock() @@ -169,13 +176,13 @@ def test_upload_image_s3(self, mock_open, mock_get_boto_client): class TestUploadUtility(unittest.TestCase): - ''' Tests for upload utility ''' + """Tests for upload utility""" - @patch('runpod.serverless.utils.rp_upload.get_boto_client') + @patch("runpod.serverless.utils.rp_upload.get_boto_client") def test_upload_file_to_bucket(self, mock_get_boto_client): - ''' + """ Tests upload_file_to_bucket - ''' + """ # Mock boto_client and transfer_config mock_boto_client = MagicMock() mock_transfer_config = MagicMock() @@ -183,11 +190,11 @@ def test_upload_file_to_bucket(self, mock_get_boto_client): mock_get_boto_client.return_value = (mock_boto_client, mock_transfer_config) # Define the file name and file location - file_name = 'example.txt' - file_location = '/path/to/your/local/file/example.txt' + file_name = "example.txt" + file_location = "/path/to/your/local/file/example.txt" # Mock os.path.getsize to return a file size - with patch('os.path.getsize', return_value=1024): + with patch("os.path.getsize", return_value=1024): upload_file_to_bucket(file_name, file_location, BUCKET_CREDENTIALS) # Check if get_boto_client was called with the correct arguments @@ -195,28 +202,26 @@ def test_upload_file_to_bucket(self, mock_get_boto_client): # Check if upload_file was called with the correct arguments upload_file_args = { - 'Filename': file_location, - 'Bucket': str(time.strftime('%m-%y')), - 'Key': file_name, - 'Config': mock_transfer_config, - 'Callback': unittest.mock.ANY + "Filename": file_location, + "Bucket": str(time.strftime("%m-%y")), + "Key": file_name, + "Config": mock_transfer_config, + "Callback": unittest.mock.ANY, } mock_boto_client.upload_file.assert_called_once_with(**upload_file_args) # Check if generate_presigned_url was called with the correct arguments mock_boto_client.generate_presigned_url.assert_called_once_with( - 'get_object', - Params={ - 'Bucket': str(time.strftime('%m-%y')), - 'Key': file_name - }, ExpiresIn=604800 + "get_object", + Params={"Bucket": str(time.strftime("%m-%y")), "Key": file_name}, + ExpiresIn=604800, ) - @patch('runpod.serverless.utils.rp_upload.get_boto_client') + @patch("runpod.serverless.utils.rp_upload.get_boto_client") def test_upload_in_memory_object(self, mock_get_boto_client): - ''' + """ Tests upload_in_memory_object - ''' + """ # Mock boto_client and transfer_config mock_boto_client = MagicMock() mock_transfer_config = MagicMock() @@ -224,8 +229,8 @@ def test_upload_in_memory_object(self, mock_get_boto_client): mock_get_boto_client.return_value = (mock_boto_client, mock_transfer_config) # Define the file name and file data (bytes) - file_name = 'example.txt' - file_data = b'This is an example text.' + file_name = "example.txt" + file_data = b"This is an example text." upload_in_memory_object(file_name, file_data, BUCKET_CREDENTIALS) @@ -235,10 +240,10 @@ def test_upload_in_memory_object(self, mock_get_boto_client): # Check if upload_fileobj was called with the correct arguments mock_boto_client.upload_fileobj.assert_called_once_with( unittest.mock.ANY, - str(time.strftime('%m-%y')), + str(time.strftime("%m-%y")), file_name, Config=mock_transfer_config, - Callback=unittest.mock.ANY + Callback=unittest.mock.ANY, ) # Check if BytesIO was called with the correct arguments @@ -247,9 +252,7 @@ def test_upload_in_memory_object(self, mock_get_boto_client): # Check if generate_presigned_url was called with the correct arguments mock_boto_client.generate_presigned_url.assert_called_once_with( - 'get_object', - Params={ - 'Bucket': str(time.strftime('%m-%y')), - 'Key': file_name - }, ExpiresIn=604800 + "get_object", + Params={"Bucket": str(time.strftime("%m-%y")), "Key": file_name}, + ExpiresIn=604800, ) diff --git a/tests/test_serverless/test_utils/test_validate.py b/tests/test_serverless/test_utils/test_validate.py index 47e1f5a2..3613562e 100644 --- a/tests/test_serverless/test_utils/test_validate.py +++ b/tests/test_serverless/test_utils/test_validate.py @@ -1,4 +1,4 @@ -''' Tests for runpod.serverless.utils.validate ''' +""" Tests for runpod.serverless.utils.validate """ import unittest from unittest.mock import Mock @@ -6,7 +6,7 @@ class TestValidator(unittest.TestCase): - ''' Tests for validator ''' + """Tests for validator""" def setUp(self): self.raw_input = {"a": 1.1, "x": 10, "y": 20, "z": 30} @@ -15,16 +15,18 @@ def setUp(self): "x": {"type": int, "required": True}, "y": {"type": int, "required": True, "default": 5}, "z": { - "type": int, "required": False, - "default": 5, "constraints": Mock(return_value=True) + "type": int, + "required": False, + "default": 5, + "constraints": Mock(return_value=True), }, - "w": {"type": int, "required": False, "default": 5} + "w": {"type": int, "required": False, "default": 5}, } def test_validate_success(self): - ''' + """ Tests validate - ''' + """ result = rp_validator.validate(self.raw_input, self.schema) self.assertNotIn("errors", result) @@ -33,9 +35,9 @@ def test_validate_success(self): self.assertEqual(result["validated_input"], expected_output) def test_validate_constraints_error(self): - ''' + """ Tests validate with constraints error - ''' + """ # Now add a constraint that the 'x' value must be less than 10 self.schema["x"]["constraints"] = Mock(return_value=False) @@ -45,9 +47,9 @@ def test_validate_constraints_error(self): self.assertIn("x does not meet the constraints.", result["errors"]) def test_validate_missing_required_input(self): - ''' + """ Tests validate with missing required input - ''' + """ del self.raw_input["x"] result = rp_validator.validate(self.raw_input, self.schema) @@ -55,19 +57,22 @@ def test_validate_missing_required_input(self): self.assertIn("x is a required input.", result["errors"]) def test_validate_unexpected_input(self): - ''' + """ Tests validate with unexpected input - ''' + """ self.raw_input["unexpected"] = "unexpected" result = rp_validator.validate(self.raw_input, self.schema) self.assertIn("errors", result) - self.assertIn("Unexpected input. unexpected is not a valid input option.", result["errors"]) + self.assertIn( + "Unexpected input. unexpected is not a valid input option.", + result["errors"], + ) def test_validate_missing_default(self): - ''' + """ Tests validate with missing default - ''' + """ del self.schema["w"]["default"] result = rp_validator.validate(self.raw_input, self.schema) @@ -75,22 +80,24 @@ def test_validate_missing_default(self): self.assertIn("Schema error, missing default value for w.", result["errors"]) def test_validate_invalid_type(self): - ''' + """ Tests validate with invalid type - ''' + """ self.raw_input["x"] = "invalid" result = rp_validator.validate(self.raw_input, self.schema) self.assertIn("errors", result) - self.assertIn("x should be type, not .", result["errors"]) + self.assertIn( + "x should be type, not .", result["errors"] + ) def test_validate_rules_not_dict(self): - ''' + """ Tests validate with rules not dict - ''' + """ result = rp_validator.validate(self.raw_input, {"x": "not dict"}) self.assertIn("errors", result) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/tests/test_serverless/test_worker.py b/tests/test_serverless/test_worker.py index a2dfb6dd..541edc61 100644 --- a/tests/test_serverless/test_worker.py +++ b/tests/test_serverless/test_worker.py @@ -1,4 +1,5 @@ -''' Tests for runpod | serverless| worker ''' +""" Tests for runpod | serverless| worker """ + # pylint: disable=protected-access import os @@ -33,54 +34,54 @@ def test_get_auth_header(self): os_info = f"{platform.system()} {platform.release()}; {platform.machine()}" with patch("runpod.serverless.worker.os") as mock_os: mock_os.environ.get.return_value = "test" - assert runpod.serverless.worker._get_auth_header( - ) == { - 'Authorization': 'test', - 'User-Agent': f'RunPod-Python-SDK/{runpod_version} ({os_info}) Language/Python {platform.python_version()}' # pylint: disable=line-too-long + assert runpod.serverless.worker._get_auth_header() == { + "Authorization": "test", + "User-Agent": f"RunPod-Python-SDK/{runpod_version} ({os_info}) Language/Python {platform.python_version()}", # pylint: disable=line-too-long } def test_is_local(self): - ''' + """ Test _is_local - ''' + """ with patch("runpod.serverless.worker.os") as mock_os: mock_os.environ.get.return_value = None - assert runpod.serverless.worker._is_local( - {"rp_args": {}}) is True - assert runpod.serverless.worker._is_local( - {"rp_args": {"test_input": "something"}}) is True + assert runpod.serverless.worker._is_local({"rp_args": {}}) is True + assert ( + runpod.serverless.worker._is_local( + {"rp_args": {"test_input": "something"}} + ) + is True + ) mock_os.environ.get.return_value = "something" - assert runpod.serverless.worker._is_local( - self.mock_config) is False + assert runpod.serverless.worker._is_local(self.mock_config) is False def test_start(self): - ''' + """ Test basic start call. - ''' - with patch("builtins.open", mock_open(read_data='{"input":{"number":1}}')) as mock_file, \ - self.assertRaises(SystemExit): + """ + with patch( + "builtins.open", mock_open(read_data='{"input":{"number":1}}') + ) as mock_file, self.assertRaises(SystemExit): runpod.serverless.start({"handler": self.mock_handler}) assert mock_file.called def test_is_local_testing(self): - ''' + """ Test _is_local_testing - ''' + """ with patch("runpod.serverless.worker.os") as mock_os: mock_os.environ.get.return_value = None - assert runpod.serverless.worker._is_local( - self.mock_config) is True + assert runpod.serverless.worker._is_local(self.mock_config) is True mock_os.environ.get.return_value = "something" - assert runpod.serverless.worker._is_local( - self.mock_config) is False + assert runpod.serverless.worker._is_local(self.mock_config) is False def test_local_api(self): - ''' + """ Test local FastAPI setup. - ''' + """ known_args = argparse.Namespace() known_args.rp_log_level = None known_args.rp_debugger = None @@ -90,20 +91,23 @@ def test_local_api(self): known_args.rp_api_host = "localhost" known_args.test_input = '{"test": "test"}' - with patch("argparse.ArgumentParser.parse_known_args") as mock_parse_known_args, \ - patch("runpod.serverless.rp_fastapi") as mock_fastapi: + with patch( + "argparse.ArgumentParser.parse_known_args" + ) as mock_parse_known_args, patch( + "runpod.serverless.rp_fastapi" + ) as mock_fastapi: mock_parse_known_args.return_value = known_args, [] runpod.serverless.start({"handler": self.mock_handler}) assert mock_fastapi.WorkerAPI.called - @patch('runpod.serverless.log') - @patch('runpod.serverless.sys.exit') + @patch("runpod.serverless.log") + @patch("runpod.serverless.sys.exit") def test_signal_handler(self, mock_exit, mock_logger): - ''' + """ Test signal handler. - ''' + """ _signal_handler(None, None) @@ -112,7 +116,7 @@ def test_signal_handler(self, mock_exit, mock_logger): class TestWorkerTestInput(IsolatedAsyncioTestCase): - """ Tests for runpod | serverless| worker """ + """Tests for runpod | serverless| worker""" def setUp(self): self.mock_handler = Mock() @@ -121,9 +125,9 @@ def setUp(self): self.mock_handler.return_value = "test" def test_worker_bad_local(self): - ''' + """ Test sys args. - ''' + """ known_args = argparse.Namespace() known_args.rp_log_level = "WARN" known_args.rp_debugger = True @@ -134,8 +138,9 @@ def test_worker_bad_local(self): known_args.test_input = '{"test": "test"}' known_args.test_output = '{"test": "test"}' - with patch("argparse.ArgumentParser.parse_known_args") as mock_parse_known_args, \ - self.assertRaises(SystemExit): + with patch( + "argparse.ArgumentParser.parse_known_args" + ) as mock_parse_known_args, self.assertRaises(SystemExit): mock_parse_known_args.return_value = known_args, [] runpod.serverless.start({"handler": self.mock_handler}) @@ -146,18 +151,18 @@ def test_worker_bad_local(self): def generator_handler(job): - ''' + """ Test generator_handler - ''' + """ print(job) yield "test1" yield "test2" def generator_handler_exception(job): - ''' + """ Test generator_handler - ''' + """ print(job) yield "test1" print("Raise exception") @@ -165,7 +170,7 @@ def generator_handler_exception(job): def test_generator_handler_exception(): - """ Test generator_handler_exception """ + """Test generator_handler_exception""" job = {"id": "test_job"} gen = generator_handler_exception(job) @@ -182,7 +187,7 @@ def test_generator_handler_exception(): class TestRunWorker(IsolatedAsyncioTestCase): - """ Tests for runpod | serverless| worker """ + """Tests for runpod | serverless| worker""" def setUp(self): os.environ["RUNPOD_WEBHOOK_GET_JOB"] = "https://test.com" @@ -191,10 +196,7 @@ def setUp(self): self.config = { "handler": MagicMock(), "refresh_worker": True, - "rp_args": { - "rp_debugger": True, - "rp_log_level": "DEBUG" - } + "rp_args": {"rp_debugger": True, "rp_log_level": "DEBUG"}, } @patch("aiohttp.ClientSession") @@ -204,8 +206,14 @@ def setUp(self): @patch("runpod.serverless.worker.send_result") # pylint: disable=too-many-arguments async def test_run_worker( - self, mock_send_result, mock_stream_result, mock_run_job, mock_get_job, mock_session): - ''' + self, + mock_send_result, + mock_stream_result, + mock_run_job, + mock_get_job, + mock_session, + ): + """ Test run_worker with synchronous handler. Args: @@ -214,7 +222,7 @@ async def test_run_worker( mock_run_job (_type_): _description_ mock_get_job (_type_): _description_ mock_session (_type_): _description_ - ''' + """ # Define the mock behaviors mock_get_job.return_value = {"id": "123", "input": {"number": 1}} mock_run_job.return_value = {"output": {"result": "odd"}} @@ -235,9 +243,9 @@ async def test_run_worker( @patch("runpod.serverless.worker.stream_result") @patch("runpod.serverless.worker.send_result") async def test_run_worker_generator_handler( - self, mock_send_result, mock_stream_result, mock_run_job, - mock_get_job): - ''' + self, mock_send_result, mock_stream_result, mock_run_job, mock_get_job + ): + """ Test run_worker with generator handler. Args: @@ -245,14 +253,12 @@ async def test_run_worker_generator_handler( mock_run_job_generator (_type_): _description_ mock_run_job (_type_): _description_ mock_get_job (_type_): _description_ - ''' + """ # Define the mock behaviors - mock_get_job.return_value = { - "id": "generator-123", "input": {"number": 1}} + mock_get_job.return_value = {"id": "generator-123", "input": {"number": 1}} # Test generator handler - generator_config = { - "handler": generator_handler, "refresh_worker": True} + generator_config = {"handler": generator_handler, "refresh_worker": True} runpod.serverless.start(generator_config) assert mock_stream_result.called @@ -260,48 +266,50 @@ async def test_run_worker_generator_handler( # Since return_aggregate_stream is NOT activated, we should not submit any outputs. _, args, _ = mock_send_result.mock_calls[0] - assert args[1] == {'output': [], 'stopPod': True} + assert args[1] == {"output": [], "stopPod": True} @patch("runpod.serverless.modules.rp_scale.get_job") @patch("runpod.serverless.worker.run_job") @patch("runpod.serverless.worker.stream_result") @patch("runpod.serverless.worker.send_result") async def test_run_worker_generator_handler_exception( - self, mock_send_result, mock_stream_result, mock_run_job, - mock_get_job): - ''' + self, mock_send_result, mock_stream_result, mock_run_job, mock_get_job + ): + """ Test run_worker with generator handler. This test verifies that: - `stream_result` is called exactly once before an exception occurs. - `run_job` is never called since `handler` is a generator function. - An error is correctly reported back via `send_result`. - ''' + """ RunPodLogger().set_level("DEBUG") # Setup: Mock `get_job` to return a predefined job. - mock_get_job.return_value = {"id": "generator-123-exception", "input": {"number": 1}} + mock_get_job.return_value = { + "id": "generator-123-exception", + "input": {"number": 1}, + } - runpod.serverless.start({ - "handler": generator_handler_exception, - "refresh_worker": True - }) + runpod.serverless.start( + {"handler": generator_handler_exception, "refresh_worker": True} + ) assert mock_stream_result.call_count == 1 assert not mock_run_job.called # Since return_aggregate_stream is NOT activated, we should not submit any outputs. _, args, _ = mock_send_result.mock_calls[0] - assert 'error' in args[1], "Expected the error to be reported in the results." + assert "error" in args[1], "Expected the error to be reported in the results." @patch("runpod.serverless.modules.rp_scale.get_job") @patch("runpod.serverless.worker.run_job") @patch("runpod.serverless.worker.stream_result") @patch("runpod.serverless.worker.send_result") async def test_run_worker_generator_aggregate_handler( - self, mock_send_result, mock_stream_result, mock_run_job, - mock_get_job): - ''' + self, mock_send_result, mock_stream_result, mock_run_job, mock_get_job + ): + """ Test run_worker with generator handler. Args: @@ -310,14 +318,19 @@ async def test_run_worker_generator_aggregate_handler( mock_run_job (_type_): _description_ mock_get_job (_type_): _description_ mock_session (_type_): _description_ - ''' + """ # Define the mock behaviors mock_get_job.return_value = { - "id": "generator-123-aggregate", "input": {"number": 1}} + "id": "generator-123-aggregate", + "input": {"number": 1}, + } # Test generator handler generator_config = { - "handler": generator_handler, "return_aggregate_stream": True, "refresh_worker": True} + "handler": generator_handler, + "return_aggregate_stream": True, + "refresh_worker": True, + } runpod.serverless.start(generator_config) @@ -327,7 +340,7 @@ async def test_run_worker_generator_aggregate_handler( # Since return_aggregate_stream is activated, we should submit a list of the outputs. _, args, _ = mock_send_result.mock_calls[0] - assert args[1] == {'output': ['test1', 'test2'], 'stopPod': True} + assert args[1] == {"output": ["test1", "test2"], "stopPod": True} @patch("aiohttp.ClientSession") @patch("runpod.serverless.modules.rp_scale.get_job") @@ -336,8 +349,14 @@ async def test_run_worker_generator_aggregate_handler( @patch("runpod.serverless.worker.send_result") # pylint: disable=too-many-arguments async def test_run_worker_concurrency( - self, mock_send_result, mock_stream_result, mock_run_job, mock_get_job, mock_session): - ''' + self, + mock_send_result, + mock_stream_result, + mock_run_job, + mock_get_job, + mock_session, + ): + """ Test run_worker with synchronous handler. Args: @@ -346,7 +365,7 @@ async def test_run_worker_concurrency( mock_run_job (_type_): _description_ mock_get_job (_type_): _description_ mock_session (_type_): _description_ - ''' + """ # Define the mock behaviors mock_get_job.return_value = {"id": "123", "input": {"number": 1}} mock_run_job.return_value = {"output": {"result": "odd"}} @@ -355,7 +374,7 @@ def concurrency_modifier(current_concurrency): return current_concurrency + 1 config_with_concurrency = self.config.copy() - config_with_concurrency['concurrency_modifier'] = concurrency_modifier + config_with_concurrency["concurrency_modifier"] = concurrency_modifier # Call the function runpod.serverless.start(config_with_concurrency) @@ -375,8 +394,14 @@ def concurrency_modifier(current_concurrency): @patch("runpod.serverless.worker.send_result") # pylint: disable=too-many-arguments async def test_run_worker_multi_processing( - self, mock_send_result, mock_stream_result, mock_run_job, mock_get_job, mock_session): - ''' + self, + mock_send_result, + mock_stream_result, + mock_run_job, + mock_get_job, + mock_session, + ): + """ Test run_worker with multi processing enabled, both async and generator handler. Args: @@ -385,7 +410,7 @@ async def test_run_worker_multi_processing( mock_run_job (_type_): _description_ mock_get_job (_type_): _description_ mock_session (_type_): _description_ - ''' + """ # Define the mock behaviors mock_get_job.return_value = {"id": "123", "input": {"number": 1}} @@ -403,10 +428,7 @@ async def test_run_worker_multi_processing( assert mock_session.called # Test generator handler - generator_config = { - "handler": generator_handler, - "refresh_worker": True - } + generator_config = {"handler": generator_handler, "refresh_worker": True} runpod.serverless.start(generator_config) assert mock_stream_result.called @@ -420,8 +442,8 @@ async def test_run_worker_multi_processing( "rp_serve_api": None, "rp_api_port": 8000, "rp_api_concurrency": 1, - "rp_api_host": "localhost" - } + "rp_api_host": "localhost", + }, } mock_set_config_args.return_value = limited_config @@ -434,8 +456,9 @@ async def test_run_worker_multi_processing( @patch("runpod.serverless.modules.rp_scale.get_job") @patch("runpod.serverless.worker.run_job") async def test_run_worker_multi_processing_scaling_up( - self, mock_run_job, mock_get_job): - ''' + self, mock_run_job, mock_get_job + ): + """ Test run_worker with multi processing enabled, the scale-up and scale-down behavior with concurrency_controller. @@ -445,7 +468,7 @@ async def test_run_worker_multi_processing_scaling_up( mock_run_job (_type_): _description_ mock_get_job (_type_): _description_ mock_session (_type_): _description_ - ''' + """ # Define the mock behaviors mock_get_job.return_value = {"id": "123", "input": {"number": 1}} mock_run_job.return_value = {"output": {"result": "odd"}} @@ -454,35 +477,46 @@ async def test_run_worker_multi_processing_scaling_up( # Should go from concurrency 1 -> 2 -> 4 -> 8 -> 16 -> 8 -> 4 -> 2 -> 1 # 1+2+4+8+16+8+4+2+1 -> 46 calls to get_job. scale_behavior = { - 'behavior': [False, False, False, False, False, False, True, True, True, True, True], - 'counter': 0, + "behavior": [ + False, + False, + False, + False, + False, + False, + True, + True, + True, + True, + True, + ], + "counter": 0, } # Let the test be a long running one so we can capture the scale-up and scale-down. config = { "handler": MagicMock(), "refresh_worker": False, - "rp_args": { - "rp_debugger": True, - "rp_log_level": "DEBUG" - } + "rp_args": {"rp_debugger": True, "rp_log_level": "DEBUG"}, } # Let's mock job_scaler.is_alive so that it returns False # when scale_behavior's counter is now 5. def mock_is_alive(): - res = scale_behavior['counter'] < 10 - scale_behavior['counter'] += 1 + res = scale_behavior["counter"] < 10 + scale_behavior["counter"] += 1 return res - with patch("runpod.serverless.modules.rp_scale.JobScaler.is_alive", wraps=mock_is_alive): + with patch( + "runpod.serverless.modules.rp_scale.JobScaler.is_alive", wraps=mock_is_alive + ): runpod.serverless.start(config) # Test with sls-core async def test_run_worker_with_sls_core(self): - ''' + """ Test run_worker with sls-core. - ''' + """ with patch("runpod.serverless.core.main") as mock_main: os.environ["RUNPOD_USE_CORE"] = "true" runpod.serverless.start(self.config) diff --git a/tests/test_shared/__init__.py b/tests/test_shared/__init__.py index c627663c..e2a1d0b4 100644 --- a/tests/test_shared/__init__.py +++ b/tests/test_shared/__init__.py @@ -1 +1 @@ -''' Allows files to be imported from this directory. ''' +""" Allows files to be imported from this directory. """ diff --git a/tests/test_shared/test_auth.py b/tests/test_shared/test_auth.py index 4500af6c..2fa731c2 100644 --- a/tests/test_shared/test_auth.py +++ b/tests/test_shared/test_auth.py @@ -1,14 +1,15 @@ -''' +""" Test shared functions related to authentication -''' +""" import unittest import importlib from unittest.mock import patch, mock_open + class TestAPIKey(unittest.TestCase): - ''' Test the API key ''' + """Test the API key""" # The mocked TOML file CREDENTIALS = b""" @@ -16,12 +17,13 @@ class TestAPIKey(unittest.TestCase): api_key = "RUNPOD_API_KEY" """ - @patch('builtins.open', new_callable=mock_open, read_data=CREDENTIALS) + @patch("builtins.open", new_callable=mock_open, read_data=CREDENTIALS) def test_use_file_credentials(self, mock_file): - ''' + """ Test that the API key is read from the credentials file - ''' - import runpod # pylint: disable=import-outside-toplevel + """ + import runpod # pylint: disable=import-outside-toplevel + importlib.reload(runpod) self.assertEqual(runpod.api_key, "RUNPOD_API_KEY") assert mock_file.called diff --git a/tests/test_user_agent.py b/tests/test_user_agent.py index a3a3ef50..a4339dbb 100644 --- a/tests/test_user_agent.py +++ b/tests/test_user_agent.py @@ -11,15 +11,16 @@ class TestConstructUserAgent(unittest.TestCase): """Test the construct_user_agent function.""" - @patch('runpod.user_agent.platform.system', return_value='Windows') - @patch('runpod.user_agent.platform.release', return_value='10') - @patch('runpod.user_agent.platform.machine', return_value='AMD64') - @patch('runpod.user_agent.platform.python_version', return_value='3.8.10') + @patch("runpod.user_agent.platform.system", return_value="Windows") + @patch("runpod.user_agent.platform.release", return_value="10") + @patch("runpod.user_agent.platform.machine", return_value="AMD64") + @patch("runpod.user_agent.platform.python_version", return_value="3.8.10") def test_user_agent_without_integration( - self, mock_python_version, mock_machine, mock_release, mock_system): + self, mock_python_version, mock_machine, mock_release, mock_system + ): """Test the User-Agent string without specifying an integration method.""" - if 'RUNPOD_UA_INTEGRATION' in os.environ: - del os.environ['RUNPOD_UA_INTEGRATION'] + if "RUNPOD_UA_INTEGRATION" in os.environ: + del os.environ["RUNPOD_UA_INTEGRATION"] expected_ua = f"RunPod-Python-SDK/{runpod_version} (Windows 10; AMD64) Language/Python 3.8.10" # pylint: disable=line-too-long self.assertEqual(construct_user_agent(), expected_ua) @@ -29,19 +30,20 @@ def test_user_agent_without_integration( assert mock_release.called assert mock_system.called - @patch('runpod.user_agent.platform.system', return_value='Linux') - @patch('runpod.user_agent.platform.release', return_value='5.4') - @patch('runpod.user_agent.platform.machine', return_value='x86_64') - @patch('runpod.user_agent.platform.python_version', return_value='3.9.5') - @patch.dict(os.environ, {'RUNPOD_UA_INTEGRATION': 'SkyPilot'}) + @patch("runpod.user_agent.platform.system", return_value="Linux") + @patch("runpod.user_agent.platform.release", return_value="5.4") + @patch("runpod.user_agent.platform.machine", return_value="x86_64") + @patch("runpod.user_agent.platform.python_version", return_value="3.9.5") + @patch.dict(os.environ, {"RUNPOD_UA_INTEGRATION": "SkyPilot"}) def test_user_agent_with_integration( - self, mock_python_version, mock_machine, mock_release, mock_system): + self, mock_python_version, mock_machine, mock_release, mock_system + ): """Test the User-Agent string with an integration method specified.""" expected_ua = f"RunPod-Python-SDK/{runpod_version} (Linux 5.4; x86_64) Language/Python 3.9.5 Integration/SkyPilot" # pylint: disable=line-too-long - os.environ['RUNPOD_UA_INTEGRATION'] = 'SkyPilot' + os.environ["RUNPOD_UA_INTEGRATION"] = "SkyPilot" self.assertEqual(construct_user_agent(), expected_ua) - os.environ.pop('RUNPOD_UA_INTEGRATION') + os.environ.pop("RUNPOD_UA_INTEGRATION") assert mock_python_version.called assert mock_machine.called @@ -49,5 +51,5 @@ def test_user_agent_with_integration( assert mock_system.called -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/tests/test_version.py b/tests/test_version.py index ebc8ef91..9eb9ab97 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -4,16 +4,18 @@ from importlib.metadata import PackageNotFoundError from runpod.version import get_version + def test_version_found(): - """ Test that the version is found """ - with patch('runpod.version.version') as mock_get_version: - mock_get_version.return_value = '1.0.0' - assert get_version() == '1.0.0' + """Test that the version is found""" + with patch("runpod.version.version") as mock_get_version: + mock_get_version.return_value = "1.0.0" + assert get_version() == "1.0.0" assert mock_get_version.called + def test_version_not_found(): - """ Test that the version is not found """ - with patch('runpod.version.version') as mock_get_version: + """Test that the version is not found""" + with patch("runpod.version.version") as mock_get_version: mock_get_version.side_effect = PackageNotFoundError - assert get_version() == 'unknown' + assert get_version() == "unknown" assert mock_get_version.called diff --git a/tests/whatever.py b/tests/whatever.py index 1dcfc19c..c15395e9 100644 --- a/tests/whatever.py +++ b/tests/whatever.py @@ -1,4 +1,4 @@ -''' +""" This is the starting point for your serverless API. It can be named anything you want, but needs to have the following: @@ -6,13 +6,13 @@ - start function To return an error, return a dictionary with the key "error" and the value being the error message. -''' +""" import runpod # Required def is_even(job): - ''' + """ Example function that returns True if the input is even, False otherwise. "job_input" will contain the input that was passed to the API along with some other metadata. @@ -23,7 +23,7 @@ def is_even(job): } Whatever is returned from this function will be returned to the user as the output. - ''' + """ job_input = job["input"] the_number = job_input["number"]