1 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <link type="text/css" rel="stylesheet" href="/swagger/swagger-ui.css"> 7 <link rel="shortcut icon" href="/swagger/favicon.png"> 8 <title>LiteLLM API - Swagger UI</title> 9 </head> 10 <body> 11 <div id="swagger-ui"> 12 </div> 13
13<script src="/swagger/swagger-ui-bundle.js"></script>
13 14 <!-- `SwaggerUIBundle` is now available on the page --> 15
15<script> 16 const TAG_TO_PREFIX = {};const warmedTags = new Set();const LAZY_TAGS = new Set(Object.keys(TAG_TO_PREFIX));const hideStubRows = () => {document.querySelectorAll('.opblock').forEach(op => {const d = op.querySelector('.opblock-summary-description');if (d && LAZY_TAGS.has(d.textContent.trim())) op.style.display = 'none';});};const annotateLazyHeaders = () => {document.querySelectorAll('.opblock-tag').forEach(tagEl => {const m = (tagEl.id || '').match(/^operations-tag-(.+)$/);if (!m || !LAZY_TAGS.has(m[1])) return;const existing = tagEl.querySelector('.lazy-load-hint');if (warmedTags.has(m[1])) { if (existing) existing.remove(); return; }if (existing) return;const hint = document.createElement('small');hint.className = 'lazy-load-hint';hint.textContent = ' (expand to load routes)';hint.style.opacity = '0.6';hint.style.marginLeft = '6px';const target = tagEl.querySelector('a span') || tagEl.querySelector('span') || tagEl;target.appendChild(hint);});};setInterval(() => { hideStubRows(); annotateLazyHeaders(); }, 200);const LazyLoadPlugin = () => ({afterLoad:function(system){setTimeout(()=>{for(const tag of LAZY_TAGS)system.layoutActions.show(['operations-tag',tag],false);},200);},statePlugins:{layout:{wrapActions:{show:(ori,sys)=>(...args)=>{const thing=args[0];const shown=args[1];let tag=null;if(Array.isArray(thing)){for(const t of thing)if(TAG_TO_PREFIX[t])tag=t;}if(shown!==false&&tag&&!warmedTags.has(tag)){warmedTags.add(tag);fetch('/lazy/warm/'+tag,{method:'POST',credentials:'include'}).then(r=>r.json()).then(d=>{if(!d.paths||Object.keys(d.paths).length===0)return;const cur=sys.specSelectors.specJson().toJS();const merged={};let inserted=false;for(const k in (cur.paths||{})){if(k===d.stub_path){for(const nk in d.paths)merged[nk]=d.paths[nk];inserted=true;}else{merged[k]=cur.paths[k];}}if(!inserted)Object.assign(merged,d.paths);cur.paths=merged;cur.components=cur.components||{};cur.components.schemas=Object.assign(cur.components.schemas||{},(d.components||{}).schemas||{});sys.specActions.updateSpec(JSON.stringify(cur));}).catch(()=>{});}return ori(...args);}}}}});const ui = SwaggerUIBundle({plugins:[LazyLoadPlugin],tagsSorter:"alpha", 17 url: '/openapi.json', 18 "dom_id": "#swagger-ui", 19"layout": "BaseLayout", 20"deepLinking": true, 21"showExtensions": true, 22"showCommonExtensions": true, 23oauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect', 24 presets: [ 25 SwaggerUIBundle.presets.apis, 26 SwaggerUIBundle.SwaggerUIStandalonePreset 27 ], 28 }) 29 </script>
29 30 </body> 31 </html> 32
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.