{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6fb7858c-8ea7-4dea-95ea-f5d7d5210b9a",
   "metadata": {},
   "source": [
    "The following is **Meeting minutes Generator** by using **QWEN2** and **Openai Opensource model whisper for transcription**, check the following colab link to see the outputs\n",
    "\n",
    "https://colab.research.google.com/drive/1_pqFmQXjOYG9Se4Zov4blIGeoYX6ViTJ?usp=sharing\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2103adb0-51f3-4240-bc5d-e27b6103cd8a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "47dba08d-5829-417c-9c6c-bdb35ca846a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "AUDIO_MODEL = \"openai/whisper-medium\"\n",
    "speech_model = AutoModelForSpeechSeq2Seq.from_pretrained(AUDIO_MODEL, torch_dtype=torch.float16, low_cpu_mem_usage=True, use_safetensors=True)\n",
    "speech_model.to('cuda')\n",
    "processor = AutoProcessor.from_pretrained(AUDIO_MODEL)\n",
    "\n",
    "pipe = pipeline(\n",
    "    \"automatic-speech-recognition\",\n",
    "    model=speech_model,\n",
    "    tokenizer=processor.tokenizer,\n",
    "    feature_extractor=processor.feature_extractor,\n",
    "    torch_dtype=torch.float16,\n",
    "    device='cuda',\n",
    "    return_timestamps=True #important if audio is more than 30sec\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c35d6c76-01a9-495f-ad4e-84c98e320750",
   "metadata": {},
   "outputs": [],
   "source": [
    "result = pipe(\"your-audio.mp3\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8fba2d46-b806-4bb3-b02d-e628343db986",
   "metadata": {},
   "outputs": [],
   "source": [
    "transcription = result[\"text\"]\n",
    "print(transcription)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1778c4db-d003-4fb9-a0d0-6cfa71e6208d",
   "metadata": {},
   "source": [
    "## MODEL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9eb579a7-b5de-4537-8ad9-e3117b24c2ff",
   "metadata": {},
   "outputs": [],
   "source": [
    "from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer, BitsAndBytesConfig"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4c632023-9b37-4c0d-b43a-190aacbbd80d",
   "metadata": {},
   "outputs": [],
   "source": [
    "QWEN2 = \"Qwen/Qwen2-7B-Instruct\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "175814b9-81b2-4f75-bf40-9ef7cac492cd",
   "metadata": {},
   "outputs": [],
   "source": [
    "quant_config = BitsAndBytesConfig(\n",
    "    load_in_4bit=True,\n",
    "    bnb_4bit_use_double_quant=True,\n",
    "    bnb_4bit_compute_dtype=torch.bfloat16,\n",
    "    bnb_4bit_quant_type=\"nf4\"\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8aaa160e-7c2b-4080-b24a-995df4469edd",
   "metadata": {},
   "outputs": [],
   "source": [
    "tokenizer = AutoTokenizer.from_pretrained(QWEN2)\n",
    "#tokenizer.pad_token = tokenizer.oes_token\n",
    "inputs = tokenizer.apply_chat_template(messages, return_tensors=\"pt\", add_generation_ptrompt=True).to(\"cuda\")\n",
    "streamer = TextStreamer(tokenizer)\n",
    "model = AutoModelForCausalLM.from_pretrained(QWEN2 , device_map=\"auto\", quantization_config=quant_config)\n",
    "outputs = model.generate(inputs, max_new_tokens=2000, streamer=streamer)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "517443aa-d230-4248-88aa-b06efd8ee3cd",
   "metadata": {},
   "outputs": [],
   "source": [
    "response = tokenizer.decode(outputs[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "47562f76-fd35-4eb0-a399-8e8f1fa054c3",
   "metadata": {},
   "source": [
    "## **For Markdown display**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1f77fea1-0920-46e5-9230-d0e8b9f69353",
   "metadata": {},
   "outputs": [],
   "source": [
    "from IPython.display import Markdown, display, update_display"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "35ac81e2-f960-4705-aaca-2385d8aa12d6",
   "metadata": {},
   "outputs": [],
   "source": [
    "display(Markdown(response))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.13.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}