{"cells":[{"cell_type":"markdown","metadata":{"id":"7PJjHfmPfuVA"},"source":["# Partager ses démos avec d'autres"]},{"cell_type":"markdown","metadata":{"id":"jRWYhCTHfuVC"},"source":["Installez les bibliothèques 🤗 Transformers et 🤗 Gradio pour exécuter ce *notebook*."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"nhJZ6vw1fuVD"},"outputs":[],"source":["!pip install datasets transformers[sentencepiece]\n","!pip install gradio"]},{"cell_type":"code","source":[],"metadata":{"id":"nrI9JVsynK2f"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"9I2ia0R1fuVE"},"outputs":[],"source":["import gradio as gr\n","\n","title = \"Poser une question (en anglais) à Rick\"\n","description = \"\"\"\n","Le bot a été entraîné à répondre à des questions basées sur les dialogues de Rick et Morty (en anglais). Demandez à Rick ce que vous voulez !\n","\n","\"\"\"\n","\n","article = \"Consultez [le bot original Rick et Morty](https://huggingface.co/spaces/kingabzpro/Rick_and_Morty_Bot) sur lequel cette démo est basée.\"\n","\n","from transformers import AutoModelForCausalLM, AutoTokenizer\n","import torch\n","\n","tokenizer = AutoTokenizer.from_pretrained(\"ericzhou/DialoGPT-Medium-Rick_v2\")\n","model = AutoModelForCausalLM.from_pretrained(\"ericzhou/DialoGPT-Medium-Rick_v2\")\n","\n","def predict(input, history=[]):\n"," # tokenizer la nouvelle phrase d'entrée\n"," new_user_input_ids = tokenizer.encode(input + tokenizer.eos_token, return_tensors='pt')\n","\n"," # ajouter les nouveaux tokens d'entrée de l'utilisateur à l'historique de chat\n"," bot_input_ids = torch.cat([torch.LongTensor(history), new_user_input_ids], dim=-1)\n","\n"," # générer une réponse \n"," history = model.generate(bot_input_ids, max_length=1000, pad_token_id=tokenizer.eos_token_id).tolist()\n","\n"," # convertit les tokens en texte, puis divise les réponses dans le bon format.\n"," response = tokenizer.decode(history[0]).split(\"<|endoftext|>\")\n"," response = [(response[i], response[i+1]) for i in range(0, len(response)-1, 2)] # convertir en tuples de liste\n"," return response, history\n","\n","gr.Interface(\n"," fn=predict,\n"," inputs=\"textbox\",\n"," outputs=\"text\",\n"," title=title,\n"," description=description,\n"," article=article,\n"," examples=[[\"What are you doing?\"], [\"Where should we time travel to?\"]],\n",").launch()"]},{"cell_type":"code","source":[],"metadata":{"id":"XDfMUCtb6Stg"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"-FIvt7difuVG"},"outputs":[],"source":["# Vous devez récupérer le fichier pytorch_model.bin ici https://huggingface.co/spaces/course-demos/Sketch-Recognition/blob/main/pytorch_model.bin\n","\n","import torch\n","import gradio as gr\n","from torch import nn\n","import requests\n","from google.colab import drive\n","drive.mount('/content/MyDrive/pytorch_model.bin')\n","\n","LABELS = requests.get(\"https://huggingface.co/spaces/course-demos/Sketch-Recognition/raw/main/class_names.txt\").text.replace(\"\\n\",\"\").split(\"\\r\")\n","\n","model = nn.Sequential(\n"," nn.Conv2d(1, 32, 3, padding=\"same\"),\n"," nn.ReLU(),\n"," nn.MaxPool2d(2),\n"," nn.Conv2d(32, 64, 3, padding=\"same\"),\n"," nn.ReLU(),\n"," nn.MaxPool2d(2),\n"," nn.Conv2d(64, 128, 3, padding=\"same\"),\n"," nn.ReLU(),\n"," nn.MaxPool2d(2),\n"," nn.Flatten(),\n"," nn.Linear(1152, 256),\n"," nn.ReLU(),\n"," nn.Linear(256, len(LABELS)),\n",")\n","state_dict = torch.load(\"pytorch_model.bin\", map_location=\"cpu\")\n","model.load_state_dict(state_dict, strict=False)\n","model.eval()\n","\n","\n","def predict(im):\n"," x = torch.tensor(im, dtype=torch.float32).unsqueeze(0).unsqueeze(0) / 255.0\n"," with torch.no_grad():\n"," out = model(x)\n"," probabilities = torch.nn.functional.softmax(out[0], dim=0)\n"," values, indices = torch.topk(probabilities, 5)\n"," return {LABELS[i]: v.item() for i, v in zip(indices, values)}\n","\n","\n","interface = gr.Interface(\n"," predict,\n"," inputs=\"sketchpad\",\n"," outputs=\"label\",\n"," theme=\"huggingface\",\n"," title=\"Reconnaissance de croquis\",\n"," description=\"Qui veut jouer au Pictionary ? Dessinez un objet courant comme une pelle ou un ordinateur portable, et l'algorithme le devinera en temps réel !\",\n"," article=\"

Reconnaissance de croquis | Modèle de démonstration

\",\n"," live=True,\n",")\n","interface.launch(share=True)"]}],"metadata":{"colab":{"provenance":[],"collapsed_sections":[]},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.8.5"}},"nbformat":4,"nbformat_minor":0}