import{s as el,f as Oe,n as ll,o as tl}from"../chunks/scheduler.37c15a92.js";import{S as sl,i as al,g as i,s as a,r as m,A as nl,h as o,f as t,c as n,j as Re,u,x as p,k as r,y as il,a as s,v as y,d,t as J,w as T}from"../chunks/index.2bf4358c.js";import{Y as ol}from"../chunks/Youtube.1e50a667.js";import{C as $e}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as pl}from"../chunks/CourseFloatingBanner.06521e8b.js";import{H as D,E as rl}from"../chunks/EditOnGithub.8916dc7c.js";function cl(Se){let h,K,X,P,w,O,g,ee,b,We=`Теперь, когда вы создали демо, вы наверняка захотите поделиться им с другими. Демо Gradio
можно распространять двумя способами: используя <strong><em>временную ссылку для общего доступа</em></strong> или <strong><em>постоянный хостинг на Spaces</em></strong>.`,le,j,Ze="Мы рассмотрим оба этих подхода в ближайшее время. Но прежде чем выложить свое демо, вы, возможно, захотите доработать его 💅.",te,f,se,U,Qe='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter9/gradio-demo-overview.png" alt="Overview of a gradio interface"/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter9/gradio-demo-overview-dark.png" alt="Overview of a gradio interface"/>',ae,C,xe="Чтобы добавить дополнительный контент в демо, класс <code>Interface</code> поддерживает некоторые необязательные параметры:",ne,I,He=`<li><code>title</code>: вы можете дать название своему демо, которое будет отображаться <em>над</em> компонентами ввода и вывода.</li> <li><code>description</code>: вы можете дать описание (в виде текста, Markdown или HTML) для интерфейса, которое отображается над компонентами ввода и вывода и под заголовком.</li> <li><code>article</code>: вы также можете написать расширенную статью (в текстовом формате, Markdown или HTML), объясняющую интерфейс. Если она задана, она отображается <em>под</em> компонентами ввода и вывода.</li> <li><code>theme</code>: не нравятся цвета по умолчанию? Установите для темы одно из значений <code>default</code>, <code>huggingface</code>, <code>grass</code>, <code>peach</code>. Вы также можете добавить префикс <code>dark-</code>, например, <code>dark-peach</code> для темной темы (или просто <code>dark</code> для темной темы по умолчанию).</li> <li><code>examples</code>: чтобы сделать ваше демо более удобным в использовании, вы можете предоставить несколько примеров входов для функции. Они появляются под компонентами пользовательского интерфейса и могут быть использованы для заполнения интерфейса. Они должны быть предоставлены в виде вложенного списка, в котором внешний список состоит из примеров, а каждый внутренний список состоит из ввода, соответствующего каждому компоненту ввода.</li> <li><code>live</code>: если вы хотите сделать демо “живым”, то есть чтобы ваша модель запускалась заново при каждом изменении входных данных, вы можете установить <code>live=True</code>. Это имеет смысл использовать с быстрыми моделями (пример мы увидим в конце этого раздела)
Используя приведенные выше варианты, мы получим более завершенный интерфейс. Запустите приведенный ниже код, и вы сможете пообщаться с Риком и Морти:</li>`,ie,k,oe,B,Ye="Используя приведенные выше варианты, мы получим более завершенный интерфейс. Попробуйте интерфейс, представленный ниже:",pe,c,Fe,re,v,ce,G,_e=`Теперь, когда у нас есть работающее демо нашей модели машинного обучения, давайте узнаем, как легко поделиться ссылкой на наш интерфейс.
Интерфейсами можно легко поделиться публично, установив <code>share=True</code> в методе <code>launch()</code>:`,Me,R,me,$,ze="В результате создается общедоступная ссылка, которую вы можете отправить кому угодно! Когда вы отправляете эту ссылку, пользователь на другой стороне может опробовать модель в своем браузере в течение 72 часов. Поскольку обработка происходит на вашем устройстве (пока оно включено!), вам не нужно беспокоиться об упаковке каких-либо зависимостей. Если вы работаете в блокноте Google Colab, ссылка на общий доступ всегда создается автоматически. Обычно она выглядит примерно так: <strong>XXXXX.gradio.app</strong>. Хотя ссылка предоставляется через Gradio, мы являемся лишь прокси для вашего локального сервера и не храним никаких данных, передаваемых через интерфейсы.",ue,S,Ee="Однако не забывайте, что эти ссылки общедоступны, а значит, любой желающий может использовать вашу модель для прогнозирования! Поэтому не раскрывайте конфиденциальную информацию через написанные вами функции и не допускайте критических изменений на вашем устройстве. Если вы установите <code>share=False</code> (по умолчанию), будет создана только локальная ссылка.",ye,W,de,Z,Le="Ссылка на ресурс, которую можно передать коллегам, - это здорово, но как разместить демо на постоянном хостинге, чтобы оно существовало в своем собственном “пространстве (space)” в Интернете?",Je,Q,Ne=`Hugging Face Spaces предоставляет инфраструктуру для постоянного размещения вашей модели Gradio в интернете, <strong>бесплатно</strong>! Spaces позволяет вам создать и разместить в (публичном или частном) репозитории,
где ваш Gradio
код интерфейса будет существовать в файле <code>app.py</code>. <a href="https://huggingface.co/blog/gradio-spaces" rel="nofollow">Прочитайте пошаговое руководство</a> чтобы начать работу, или посмотрите видео с примером ниже.`,Te,x,he,H,Ue,Y,Ve='Используя то, что мы узнали в предыдущих разделах, давайте создадим демо распознавания скетчей, которое мы видели в <a href="../chapter9/1">первом разделе этой главы</a>. Давайте добавим некоторые настройки в наш интерфейс и установим <code>share=True</code>, чтобы создать публичную ссылку, которую мы сможем передавать всем желающим.',we,F,qe='Мы можем загрузить метки из файла <a href="https://huggingface.co/spaces/dawood/Sketch-Recognition/blob/main/class_names.txt" rel="nofollow">class_names.txt</a> и загрузить предварительно обученную модель pytorch из файла <a href="https://huggingface.co/spaces/dawood/Sketch-Recognition/blob/main/pytorch_model.bin" rel="nofollow">pytorch_model.bin</a>. Загрузите эти файлы, перейдя по ссылке и нажав кнопку загрузки в левом верхнем углу окна предварительного просмотра файла. Давайте посмотрим на приведенный ниже код, чтобы увидеть, как мы используем эти файлы для загрузки нашей модели и создания функции <code>predict()</code>:',ge,_,be,z,Xe="Теперь у нас есть функция <code>predict()</code>. Следующим шагом будет определение и запуск нашего интерфейса Gradio:",je,E,fe,M,Ae,Ce,L,De=`Обратите внимание на параметр <code>live=True</code> в <code>Interface</code>, который означает, что демо скетча делает
предсказание каждый раз, когда кто-то рисует на скетчпаде (без кнопки “Исполнить (submit)”!).`,Ie,N,Ke=`Кроме того, мы также установили аргумент <code>share=True</code> в методе <code>launch()</code>.
Это создаст общедоступную ссылку, которую вы можете
отправить кому угодно! Когда вы отправите эту ссылку, пользователь на другой стороне сможет опробовать
модель распознавания эскизов. Повторим, что модель также можно разместить на Hugging Face Spaces,
именно так мы и разместили демо выше.`,ke,V,Pe="Далее мы расскажем о других способах использования Gradio в экосистеме Hugging Face!",Be,q,ve,A,Ge;return w=new D({props:{title:"Делимся демо с другими",local:"sharing-demos-with-others",headingTag:"h1"}}),g=new pl({props:{chapter:9,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter9/section4.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter9/section4.ipynb"}]}}),f=new D({props:{title:"Доработка демо Gradio:",local:"polishing-your-gradio-demo",headingTag:"h3"}}),k=new $e({props:{code:"dGl0bGUlMjAlM0QlMjAlMjJBc2slMjBSaWNrJTIwYSUyMFF1ZXN0aW9uJTIyJTBBZGVzY3JpcHRpb24lMjAlM0QlMjAlMjIlMjIlMjIlMEFUaGUlMjBib3QlMjB3YXMlMjB0cmFpbmVkJTIwdG8lMjBhbnN3ZXIlMjBxdWVzdGlvbnMlMjBiYXNlZCUyMG9uJTIwUmljayUyMGFuZCUyME1vcnR5JTIwZGlhbG9ndWVzLiUyMEFzayUyMFJpY2slMjBhbnl0aGluZyElMEElM0NpbWclMjBzcmMlM0QlMjJodHRwcyUzQSUyRiUyRmh1Z2dpbmdmYWNlLmNvJTJGc3BhY2VzJTJGY291cnNlLWRlbW9zJTJGUmlja19hbmRfTW9ydHlfUUElMkZyZXNvbHZlJTJGbWFpbiUyRnJpY2sucG5nJTIyJTIwd2lkdGglM0QyMDBweCUzRSUwQSUyMiUyMiUyMiUwQSUwQWFydGljbGUlMjAlM0QlMjAlMjJDaGVjayUyMG91dCUyMCU1QnRoZSUyMG9yaWdpbmFsJTIwUmljayUyMGFuZCUyME1vcnR5JTIwQm90JTVEKGh0dHBzJTNBJTJGJTJGaHVnZ2luZ2ZhY2UuY28lMkZzcGFjZXMlMkZraW5nYWJ6cHJvJTJGUmlja19hbmRfTW9ydHlfQm90KSUyMHRoYXQlMjB0aGlzJTIwZGVtbyUyMGlzJTIwYmFzZWQlMjBvZmYlMjBvZi4lMjIlMEElMEFnci5JbnRlcmZhY2UoJTBBJTIwJTIwJTIwJTIwZm4lM0RwcmVkaWN0JTJDJTBBJTIwJTIwJTIwJTIwaW5wdXRzJTNEJTIydGV4dGJveCUyMiUyQyUwQSUyMCUyMCUyMCUyMG91dHB1dHMlM0QlMjJ0ZXh0JTIyJTJDJTBBJTIwJTIwJTIwJTIwdGl0bGUlM0R0aXRsZSUyQyUwQSUyMCUyMCUyMCUyMGRlc2NyaXB0aW9uJTNEZGVzY3JpcHRpb24lMkMlMEElMjAlMjAlMjAlMjBhcnRpY2xlJTNEYXJ0aWNsZSUyQyUwQSUyMCUyMCUyMCUyMGV4YW1wbGVzJTNEJTVCJTVCJTIyV2hhdCUyMGFyZSUyMHlvdSUyMGRvaW5nJTNGJTIyJTVEJTJDJTIwJTVCJTIyV2hlcmUlMjBzaG91bGQlMjB3ZSUyMHRpbWUlMjB0cmF2ZWwlMjB0byUzRiUyMiU1RCU1RCUyQyUwQSkubGF1bmNoKCk=",highlighted:`title = <span class="hljs-string">&quot;Ask Rick a Question&quot;</span>
description = <span class="hljs-string">&quot;&quot;&quot;
The bot was trained to answer questions based on Rick and Morty dialogues. Ask Rick anything!
&lt;img src=&quot;https://huggingface.co/spaces/course-demos/Rick_and_Morty_QA/resolve/main/rick.png&quot; width=200px&gt;
&quot;&quot;&quot;</span>

article = <span class="hljs-string">&quot;Check out [the original Rick and Morty Bot](https://huggingface.co/spaces/kingabzpro/Rick_and_Morty_Bot) that this demo is based off of.&quot;</span>

gr.Interface(
    fn=predict,
    inputs=<span class="hljs-string">&quot;textbox&quot;</span>,
    outputs=<span class="hljs-string">&quot;text&quot;</span>,
    title=title,
    description=description,
    article=article,
    examples=[[<span class="hljs-string">&quot;What are you doing?&quot;</span>], [<span class="hljs-string">&quot;Where should we time travel to?&quot;</span>]],
).launch()`,wrap:!1}}),v=new D({props:{title:"Распространение демо с помощью временных ссылок",local:"sharing-your-demo-with-temporary-links",headingTag:"h3"}}),R=new $e({props:{code:"Z3IuSW50ZXJmYWNlKGNsYXNzaWZ5X2ltYWdlJTJDJTIwJTIyaW1hZ2UlMjIlMkMlMjAlMjJsYWJlbCUyMikubGF1bmNoKHNoYXJlJTNEVHJ1ZSk=",highlighted:'gr.Interface(classify_image, <span class="hljs-string">&quot;image&quot;</span>, <span class="hljs-string">&quot;label&quot;</span>).launch(share=<span class="hljs-literal">True</span>)',wrap:!1}}),W=new D({props:{title:"Хостинг вашего демо на Hugging Face Spaces",local:"hosting-your-demo-on-hugging-face-spaces",headingTag:"h3"}}),x=new ol({props:{id:"LS9Y2wDVI0k"}}),H=new D({props:{title:"✏️ Давайте применим это!",local:"lets-apply-it",headingTag:"h2"}}),_=new $e({props:{code:"ZnJvbSUyMHBhdGhsaWIlMjBpbXBvcnQlMjBQYXRoJTBBaW1wb3J0JTIwdG9yY2glMEFpbXBvcnQlMjBncmFkaW8lMjBhcyUyMGdyJTBBZnJvbSUyMHRvcmNoJTIwaW1wb3J0JTIwbm4lMEElMEFMQUJFTFMlMjAlM0QlMjBQYXRoKCUyMmNsYXNzX25hbWVzLnR4dCUyMikucmVhZF90ZXh0KCkuc3BsaXRsaW5lcygpJTBBJTBBbW9kZWwlMjAlM0QlMjBubi5TZXF1ZW50aWFsKCUwQSUyMCUyMCUyMCUyMG5uLkNvbnYyZCgxJTJDJTIwMzIlMkMlMjAzJTJDJTIwcGFkZGluZyUzRCUyMnNhbWUlMjIpJTJDJTBBJTIwJTIwJTIwJTIwbm4uUmVMVSgpJTJDJTBBJTIwJTIwJTIwJTIwbm4uTWF4UG9vbDJkKDIpJTJDJTBBJTIwJTIwJTIwJTIwbm4uQ29udjJkKDMyJTJDJTIwNjQlMkMlMjAzJTJDJTIwcGFkZGluZyUzRCUyMnNhbWUlMjIpJTJDJTBBJTIwJTIwJTIwJTIwbm4uUmVMVSgpJTJDJTBBJTIwJTIwJTIwJTIwbm4uTWF4UG9vbDJkKDIpJTJDJTBBJTIwJTIwJTIwJTIwbm4uQ29udjJkKDY0JTJDJTIwMTI4JTJDJTIwMyUyQyUyMHBhZGRpbmclM0QlMjJzYW1lJTIyKSUyQyUwQSUyMCUyMCUyMCUyMG5uLlJlTFUoKSUyQyUwQSUyMCUyMCUyMCUyMG5uLk1heFBvb2wyZCgyKSUyQyUwQSUyMCUyMCUyMCUyMG5uLkZsYXR0ZW4oKSUyQyUwQSUyMCUyMCUyMCUyMG5uLkxpbmVhcigxMTUyJTJDJTIwMjU2KSUyQyUwQSUyMCUyMCUyMCUyMG5uLlJlTFUoKSUyQyUwQSUyMCUyMCUyMCUyMG5uLkxpbmVhcigyNTYlMkMlMjBsZW4oTEFCRUxTKSklMkMlMEEpJTBBc3RhdGVfZGljdCUyMCUzRCUyMHRvcmNoLmxvYWQoJTIycHl0b3JjaF9tb2RlbC5iaW4lMjIlMkMlMjBtYXBfbG9jYXRpb24lM0QlMjJjcHUlMjIpJTBBbW9kZWwubG9hZF9zdGF0ZV9kaWN0KHN0YXRlX2RpY3QlMkMlMjBzdHJpY3QlM0RGYWxzZSklMEFtb2RlbC5ldmFsKCklMEElMEElMEFkZWYlMjBwcmVkaWN0KGltKSUzQSUwQSUyMCUyMCUyMCUyMHglMjAlM0QlMjB0b3JjaC50ZW5zb3IoaW0lMkMlMjBkdHlwZSUzRHRvcmNoLmZsb2F0MzIpLnVuc3F1ZWV6ZSgwKS51bnNxdWVlemUoMCklMjAlMkYlMjAyNTUuMCUwQSUyMCUyMCUyMCUyMHdpdGglMjB0b3JjaC5ub19ncmFkKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXQlMjAlM0QlMjBtb2RlbCh4KSUwQSUyMCUyMCUyMCUyMHByb2JhYmlsaXRpZXMlMjAlM0QlMjB0b3JjaC5ubi5mdW5jdGlvbmFsLnNvZnRtYXgob3V0JTVCMCU1RCUyQyUyMGRpbSUzRDApJTBBJTIwJTIwJTIwJTIwdmFsdWVzJTJDJTIwaW5kaWNlcyUyMCUzRCUyMHRvcmNoLnRvcGsocHJvYmFiaWxpdGllcyUyQyUyMDUpJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTdCTEFCRUxTJTVCaSU1RCUzQSUyMHYuaXRlbSgpJTIwZm9yJTIwaSUyQyUyMHYlMjBpbiUyMHppcChpbmRpY2VzJTJDJTIwdmFsdWVzKSU3RA==",highlighted:`<span class="hljs-keyword">from</span> pathlib <span class="hljs-keyword">import</span> Path
<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">import</span> gradio <span class="hljs-keyword">as</span> gr
<span class="hljs-keyword">from</span> torch <span class="hljs-keyword">import</span> nn

LABELS = Path(<span class="hljs-string">&quot;class_names.txt&quot;</span>).read_text().splitlines()

model = nn.Sequential(
    nn.Conv2d(<span class="hljs-number">1</span>, <span class="hljs-number">32</span>, <span class="hljs-number">3</span>, padding=<span class="hljs-string">&quot;same&quot;</span>),
    nn.ReLU(),
    nn.MaxPool2d(<span class="hljs-number">2</span>),
    nn.Conv2d(<span class="hljs-number">32</span>, <span class="hljs-number">64</span>, <span class="hljs-number">3</span>, padding=<span class="hljs-string">&quot;same&quot;</span>),
    nn.ReLU(),
    nn.MaxPool2d(<span class="hljs-number">2</span>),
    nn.Conv2d(<span class="hljs-number">64</span>, <span class="hljs-number">128</span>, <span class="hljs-number">3</span>, padding=<span class="hljs-string">&quot;same&quot;</span>),
    nn.ReLU(),
    nn.MaxPool2d(<span class="hljs-number">2</span>),
    nn.Flatten(),
    nn.Linear(<span class="hljs-number">1152</span>, <span class="hljs-number">256</span>),
    nn.ReLU(),
    nn.Linear(<span class="hljs-number">256</span>, <span class="hljs-built_in">len</span>(LABELS)),
)
state_dict = torch.load(<span class="hljs-string">&quot;pytorch_model.bin&quot;</span>, map_location=<span class="hljs-string">&quot;cpu&quot;</span>)
model.load_state_dict(state_dict, strict=<span class="hljs-literal">False</span>)
model.<span class="hljs-built_in">eval</span>()


<span class="hljs-keyword">def</span> <span class="hljs-title function_">predict</span>(<span class="hljs-params">im</span>):
    x = torch.tensor(im, dtype=torch.float32).unsqueeze(<span class="hljs-number">0</span>).unsqueeze(<span class="hljs-number">0</span>) / <span class="hljs-number">255.0</span>
    <span class="hljs-keyword">with</span> torch.no_grad():
        out = model(x)
    probabilities = torch.nn.functional.softmax(out[<span class="hljs-number">0</span>], dim=<span class="hljs-number">0</span>)
    values, indices = torch.topk(probabilities, <span class="hljs-number">5</span>)
    <span class="hljs-keyword">return</span> {LABELS[i]: v.item() <span class="hljs-keyword">for</span> i, v <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(indices, values)}`,wrap:!1}}),E=new $e({props:{code:"aW50ZXJmYWNlJTIwJTNEJTIwZ3IuSW50ZXJmYWNlKCUwQSUyMCUyMCUyMCUyMHByZWRpY3QlMkMlMEElMjAlMjAlMjAlMjBpbnB1dHMlM0QlMjJza2V0Y2hwYWQlMjIlMkMlMEElMjAlMjAlMjAlMjBvdXRwdXRzJTNEJTIybGFiZWwlMjIlMkMlMEElMjAlMjAlMjAlMjB0aGVtZSUzRCUyMmh1Z2dpbmdmYWNlJTIyJTJDJTBBJTIwJTIwJTIwJTIwdGl0bGUlM0QlMjJTa2V0Y2glMjBSZWNvZ25pdGlvbiUyMiUyQyUwQSUyMCUyMCUyMCUyMGRlc2NyaXB0aW9uJTNEJTIyV2hvJTIwd2FudHMlMjB0byUyMHBsYXklMjBQaWN0aW9uYXJ5JTNGJTIwRHJhdyUyMGElMjBjb21tb24lMjBvYmplY3QlMjBsaWtlJTIwYSUyMHNob3ZlbCUyMG9yJTIwYSUyMGxhcHRvcCUyQyUyMGFuZCUyMHRoZSUyMGFsZ29yaXRobSUyMHdpbGwlMjBndWVzcyUyMGluJTIwcmVhbCUyMHRpbWUhJTIyJTJDJTBBJTIwJTIwJTIwJTIwYXJ0aWNsZSUzRCUyMiUzQ3AlMjBzdHlsZSUzRCd0ZXh0LWFsaWduJTNBJTIwY2VudGVyJyUzRVNrZXRjaCUyMFJlY29nbml0aW9uJTIwJTdDJTIwRGVtbyUyME1vZGVsJTNDJTJGcCUzRSUyMiUyQyUwQSUyMCUyMCUyMCUyMGxpdmUlM0RUcnVlJTJDJTBBKSUwQWludGVyZmFjZS5sYXVuY2goc2hhcmUlM0RUcnVlKQ==",highlighted:`interface = gr.Interface(
    predict,
    inputs=<span class="hljs-string">&quot;sketchpad&quot;</span>,
    outputs=<span class="hljs-string">&quot;label&quot;</span>,
    theme=<span class="hljs-string">&quot;huggingface&quot;</span>,
    title=<span class="hljs-string">&quot;Sketch Recognition&quot;</span>,
    description=<span class="hljs-string">&quot;Who wants to play Pictionary? Draw a common object like a shovel or a laptop, and the algorithm will guess in real time!&quot;</span>,
    article=<span class="hljs-string">&quot;&lt;p style=&#x27;text-align: center&#x27;&gt;Sketch Recognition | Demo Model&lt;/p&gt;&quot;</span>,
    live=<span class="hljs-literal">True</span>,
)
interface.launch(share=<span class="hljs-literal">True</span>)`,wrap:!1}}),q=new rl({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter9/4.mdx"}}),{c(){h=i("meta"),K=a(),X=i("p"),P=a(),m(w.$$.fragment),O=a(),m(g.$$.fragment),ee=a(),b=i("p"),b.innerHTML=We,le=a(),j=i("p"),j.textContent=Ze,te=a(),m(f.$$.fragment),se=a(),U=i("div"),U.innerHTML=Qe,ae=a(),C=i("p"),C.innerHTML=xe,ne=a(),I=i("ul"),I.innerHTML=He,ie=a(),m(k.$$.fragment),oe=a(),B=i("p"),B.textContent=Ye,pe=a(),c=i("iframe"),re=a(),m(v.$$.fragment),ce=a(),G=i("p"),G.innerHTML=_e,Me=a(),m(R.$$.fragment),me=a(),$=i("p"),$.innerHTML=ze,ue=a(),S=i("p"),S.innerHTML=Ee,ye=a(),m(W.$$.fragment),de=a(),Z=i("p"),Z.textContent=Le,Je=a(),Q=i("p"),Q.innerHTML=Ne,Te=a(),m(x.$$.fragment),he=a(),m(H.$$.fragment),Ue=a(),Y=i("p"),Y.innerHTML=Ve,we=a(),F=i("p"),F.innerHTML=qe,ge=a(),m(_.$$.fragment),be=a(),z=i("p"),z.innerHTML=Xe,je=a(),m(E.$$.fragment),fe=a(),M=i("iframe"),Ce=a(),L=i("p"),L.innerHTML=De,Ie=a(),N=i("p"),N.innerHTML=Ke,ke=a(),V=i("p"),V.textContent=Pe,Be=a(),m(q.$$.fragment),ve=a(),A=i("p"),this.h()},l(e){const l=nl("svelte-u9bgzb",document.head);h=o(l,"META",{name:!0,content:!0}),l.forEach(t),K=n(e),X=o(e,"P",{}),Re(X).forEach(t),P=n(e),u(w.$$.fragment,e),O=n(e),u(g.$$.fragment,e),ee=n(e),b=o(e,"P",{"data-svelte-h":!0}),p(b)!=="svelte-1ucl3jt"&&(b.innerHTML=We),le=n(e),j=o(e,"P",{"data-svelte-h":!0}),p(j)!=="svelte-rkaxdn"&&(j.textContent=Ze),te=n(e),u(f.$$.fragment,e),se=n(e),U=o(e,"DIV",{class:!0,"data-svelte-h":!0}),p(U)!=="svelte-nclpfp"&&(U.innerHTML=Qe),ae=n(e),C=o(e,"P",{"data-svelte-h":!0}),p(C)!=="svelte-11847dt"&&(C.innerHTML=xe),ne=n(e),I=o(e,"UL",{"data-svelte-h":!0}),p(I)!=="svelte-zka2tb"&&(I.innerHTML=He),ie=n(e),u(k.$$.fragment,e),oe=n(e),B=o(e,"P",{"data-svelte-h":!0}),p(B)!=="svelte-xtup6g"&&(B.textContent=Ye),pe=n(e),c=o(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),Re(c).forEach(t),re=n(e),u(v.$$.fragment,e),ce=n(e),G=o(e,"P",{"data-svelte-h":!0}),p(G)!=="svelte-6unewf"&&(G.innerHTML=_e),Me=n(e),u(R.$$.fragment,e),me=n(e),$=o(e,"P",{"data-svelte-h":!0}),p($)!=="svelte-18221ng"&&($.innerHTML=ze),ue=n(e),S=o(e,"P",{"data-svelte-h":!0}),p(S)!=="svelte-1k8f2bl"&&(S.innerHTML=Ee),ye=n(e),u(W.$$.fragment,e),de=n(e),Z=o(e,"P",{"data-svelte-h":!0}),p(Z)!=="svelte-ueix3a"&&(Z.textContent=Le),Je=n(e),Q=o(e,"P",{"data-svelte-h":!0}),p(Q)!=="svelte-1wvduip"&&(Q.innerHTML=Ne),Te=n(e),u(x.$$.fragment,e),he=n(e),u(H.$$.fragment,e),Ue=n(e),Y=o(e,"P",{"data-svelte-h":!0}),p(Y)!=="svelte-wlu6wo"&&(Y.innerHTML=Ve),we=n(e),F=o(e,"P",{"data-svelte-h":!0}),p(F)!=="svelte-1fib0dd"&&(F.innerHTML=qe),ge=n(e),u(_.$$.fragment,e),be=n(e),z=o(e,"P",{"data-svelte-h":!0}),p(z)!=="svelte-1igc5vi"&&(z.innerHTML=Xe),je=n(e),u(E.$$.fragment,e),fe=n(e),M=o(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),Re(M).forEach(t),Ce=n(e),L=o(e,"P",{"data-svelte-h":!0}),p(L)!=="svelte-qdsi6r"&&(L.innerHTML=De),Ie=n(e),N=o(e,"P",{"data-svelte-h":!0}),p(N)!=="svelte-6e2nmj"&&(N.innerHTML=Ke),ke=n(e),V=o(e,"P",{"data-svelte-h":!0}),p(V)!=="svelte-9epx9p"&&(V.textContent=Pe),Be=n(e),u(q.$$.fragment,e),ve=n(e),A=o(e,"P",{}),Re(A).forEach(t),this.h()},h(){r(h,"name","hf:doc:metadata"),r(h,"content",Ml),r(U,"class","flex justify-center"),Oe(c.src,Fe="https://course-demos-Rick-and-Morty-QA.hf.space")||r(c,"src",Fe),r(c,"frameborder","0"),r(c,"height","800"),r(c,"title","Gradio app"),r(c,"class","container p-0 flex-grow space-iframe"),r(c,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),r(c,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),Oe(M.src,Ae="https://course-demos-Sketch-Recognition.hf.space")||r(M,"src",Ae),r(M,"frameborder","0"),r(M,"height","650"),r(M,"title","Gradio app"),r(M,"class","container p-0 flex-grow space-iframe"),r(M,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),r(M,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads")},m(e,l){il(document.head,h),s(e,K,l),s(e,X,l),s(e,P,l),y(w,e,l),s(e,O,l),y(g,e,l),s(e,ee,l),s(e,b,l),s(e,le,l),s(e,j,l),s(e,te,l),y(f,e,l),s(e,se,l),s(e,U,l),s(e,ae,l),s(e,C,l),s(e,ne,l),s(e,I,l),s(e,ie,l),y(k,e,l),s(e,oe,l),s(e,B,l),s(e,pe,l),s(e,c,l),s(e,re,l),y(v,e,l),s(e,ce,l),s(e,G,l),s(e,Me,l),y(R,e,l),s(e,me,l),s(e,$,l),s(e,ue,l),s(e,S,l),s(e,ye,l),y(W,e,l),s(e,de,l),s(e,Z,l),s(e,Je,l),s(e,Q,l),s(e,Te,l),y(x,e,l),s(e,he,l),y(H,e,l),s(e,Ue,l),s(e,Y,l),s(e,we,l),s(e,F,l),s(e,ge,l),y(_,e,l),s(e,be,l),s(e,z,l),s(e,je,l),y(E,e,l),s(e,fe,l),s(e,M,l),s(e,Ce,l),s(e,L,l),s(e,Ie,l),s(e,N,l),s(e,ke,l),s(e,V,l),s(e,Be,l),y(q,e,l),s(e,ve,l),s(e,A,l),Ge=!0},p:ll,i(e){Ge||(d(w.$$.fragment,e),d(g.$$.fragment,e),d(f.$$.fragment,e),d(k.$$.fragment,e),d(v.$$.fragment,e),d(R.$$.fragment,e),d(W.$$.fragment,e),d(x.$$.fragment,e),d(H.$$.fragment,e),d(_.$$.fragment,e),d(E.$$.fragment,e),d(q.$$.fragment,e),Ge=!0)},o(e){J(w.$$.fragment,e),J(g.$$.fragment,e),J(f.$$.fragment,e),J(k.$$.fragment,e),J(v.$$.fragment,e),J(R.$$.fragment,e),J(W.$$.fragment,e),J(x.$$.fragment,e),J(H.$$.fragment,e),J(_.$$.fragment,e),J(E.$$.fragment,e),J(q.$$.fragment,e),Ge=!1},d(e){e&&(t(K),t(X),t(P),t(O),t(ee),t(b),t(le),t(j),t(te),t(se),t(U),t(ae),t(C),t(ne),t(I),t(ie),t(oe),t(B),t(pe),t(c),t(re),t(ce),t(G),t(Me),t(me),t($),t(ue),t(S),t(ye),t(de),t(Z),t(Je),t(Q),t(Te),t(he),t(Ue),t(Y),t(we),t(F),t(ge),t(be),t(z),t(je),t(fe),t(M),t(Ce),t(L),t(Ie),t(N),t(ke),t(V),t(Be),t(ve),t(A)),t(h),T(w,e),T(g,e),T(f,e),T(k,e),T(v,e),T(R,e),T(W,e),T(x,e),T(H,e),T(_,e),T(E,e),T(q,e)}}}const Ml='{"title":"Делимся демо с другими","local":"sharing-demos-with-others","sections":[{"title":"Доработка демо Gradio:","local":"polishing-your-gradio-demo","sections":[],"depth":3},{"title":"Распространение демо с помощью временных ссылок","local":"sharing-your-demo-with-temporary-links","sections":[],"depth":3},{"title":"Хостинг вашего демо на Hugging Face Spaces","local":"hosting-your-demo-on-hugging-face-spaces","sections":[],"depth":3},{"title":"✏️ Давайте применим это!","local":"lets-apply-it","sections":[],"depth":2}],"depth":1}';function ml(Se){return tl(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ul extends sl{constructor(h){super(),al(this,h,ml,cl,el,{})}}export{Ul as component};
