{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0360e829",
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip install -q git+https://github.com/srush/MiniChain\n",
    "!git clone https://github.com/srush/MiniChain; cp -fr MiniChain/examples/* . "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "60519a97",
   "metadata": {
    "lines_to_next_cell": 2,
    "tags": [
     "hide_inp"
    ]
   },
   "outputs": [],
   "source": [
    "\n",
    "desc = \"\"\"\n",
    "### Bash Command Suggestion\n",
    "\n",
    "Chain that ask for a command-line question and then runs the bash command. [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/srush/MiniChain/blob/master/examples/bash.ipynb)\n",
    "\n",
    "(Adapted from LangChain [BashChain](https://langchain.readthedocs.io/en/latest/modules/chains/examples/llm_bash.html))\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "852ced62",
   "metadata": {},
   "outputs": [],
   "source": [
    "from minichain import show, prompt, OpenAI, Bash"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b80a8444",
   "metadata": {
    "lines_to_next_cell": 1
   },
   "outputs": [],
   "source": [
    "@prompt(OpenAI(), template_file = \"bash.pmpt.tpl\")\n",
    "def cli_prompt(model, query):\n",
    "    x = model(dict(question=query))\n",
    "    return \"\\n\".join(x.strip().split(\"\\n\")[1:-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7d6cc929",
   "metadata": {
    "lines_to_next_cell": 1
   },
   "outputs": [],
   "source": [
    "@prompt(Bash())\n",
    "def bash_run(model, x):\n",
    "    return model(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3c841ddf",
   "metadata": {},
   "outputs": [],
   "source": [
    "def bash(query):\n",
    "    return bash_run(cli_prompt(query))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cd905126",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8b3470a3",
   "metadata": {
    "lines_to_next_cell": 2
   },
   "outputs": [],
   "source": [
    "gradio = show(bash,\n",
    "              subprompts=[cli_prompt, bash_run],\n",
    "              examples=['Go up one directory, and then into the minichain directory,'\n",
    "                        'and list the files in the directory',\n",
    "                        \"Please write a bash script that prints 'Hello World' to the console.\"],\n",
    "              out_type=\"markdown\",\n",
    "              description=desc,\n",
    "              )\n",
    "if __name__ == \"__main__\":\n",
    "    gradio.launch()"
   ]
  }
 ],
 "metadata": {
  "jupytext": {
   "cell_metadata_filter": "tags,-all",
   "main_language": "python",
   "notebook_metadata_filter": "-all"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}