Browse Source

Merge 5794f3a4f2 into b8b2f766e5

pull/339/merge
Omar Marie 3 weeks ago committed by GitHub
parent
commit
bea85c5faf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 273
      week1/community-contributions/day1-research_paper_summarizer_by_name.ipynb

273
week1/community-contributions/day1-research_paper_summarizer_by_name.ipynb

@ -0,0 +1,273 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "a15135e6-3ba5-44ae-b14b-dc67674a5ca3",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"# Resarch Paper Summarizer by Name"
]
},
{
"cell_type": "markdown",
"id": "a50f02ea-0f04-4f68-ae66-d1369780065e",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"### Imports"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ea6e09ac-adee-4bb8-b3bd-4f6411495751",
"metadata": {},
"outputs": [],
"source": [
"## If dependencies do not exist please install them\n",
"# !pip install python-dotenv openai arxiv"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e5301f2b-3037-4a85-b7cd-5e6bd700418a",
"metadata": {},
"outputs": [],
"source": [
"import arxiv\n",
"import os\n",
"from openai import OpenAI\n",
"from dotenv import load_dotenv\n",
"from IPython.display import Markdown, display"
]
},
{
"cell_type": "markdown",
"id": "ac45a1f4-0005-4e0a-be90-741182c1db9f",
"metadata": {},
"source": [
"### Load Open AI Key"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "381bef97-6bb7-4bdc-a71d-2ea65c8f6964",
"metadata": {},
"outputs": [],
"source": [
"load_dotenv()\n",
"api_key = os.getenv(\"OPENAI_API_KEY\")\n",
"\n",
"if not api_key:\n",
" print(\"❌ No OpenAI API key found in .env file.\")\n",
"else:\n",
" print(\"✅ API key loaded successfully.\")\n",
"\n",
"# ✅ Initialize OpenAI\n",
"openai = OpenAI(api_key=api_key)"
]
},
{
"cell_type": "markdown",
"id": "00817dbe-209e-418c-bb46-7b6b866fdff4",
"metadata": {},
"source": [
"### Main Class MLResearchFetcher"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7355ba4c-ef61-4934-bb79-4d80b4473e52",
"metadata": {},
"outputs": [],
"source": [
"class MLResearchFetcher:\n",
" def __init__(self, system_prompt, query=\"machine learning\", max_results=5):\n",
" self.query = query\n",
" self.max_results = max_results\n",
" self.system_prompt = system_prompt\n",
"\n",
" def fetch_papers(self):\n",
" search = arxiv.Search(\n",
" query=f'ti:\"{self.query}\"',\n",
" max_results=self.max_results,\n",
" sort_by=arxiv.SortCriterion.SubmittedDate,\n",
" sort_order=arxiv.SortOrder.Descending,\n",
" )\n",
" return list(search.results())\n",
"\n",
" def summarize_abstract(self, abstract, system_prompt):\n",
" try:\n",
" completion = openai.chat.completions.create(\n",
" model=\"gpt-4o-mini\",\n",
" messages=[\n",
" {\"role\": \"system\", \"content\": system_prompt},\n",
" {\"role\": \"user\", \"content\": abstract}\n",
" ]\n",
" )\n",
" return completion.choices[0].message.content.strip()\n",
" except Exception as e:\n",
" return f\"❌ Error during summarization: {e}\"\n",
"\n",
" def display_results(self):\n",
" papers = self.fetch_papers()\n",
" for paper in papers:\n",
" display(Markdown(f\"### 📄 [{paper.title}]({paper.entry_id})\"))\n",
" display(Markdown(f\"**Authors:** {', '.join(author.name for author in paper.authors)}\"))\n",
" display(Markdown(f\"**Published:** {paper.published.date()}\"))\n",
" display(Markdown(f\"**Abstract:** {paper.summary.strip()}\"))\n",
" summary = self.summarize_abstract(paper.summary, self.system_prompt)\n",
" display(Markdown(f\"**🔍 Summary:** {summary}\"))\n",
" display(Markdown(\"---\"))"
]
},
{
"cell_type": "markdown",
"id": "304857ba-e832-42a3-8219-ec9202e41509",
"metadata": {},
"source": [
"### Helper Functions"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1be2a2da-135b-4aec-b200-dc364d319ac4",
"metadata": {},
"outputs": [],
"source": [
"system_prompt = \"You are an expert research paper summarizer and AI research assistant. \\\n",
"When provided with the URL or content of a research paper in the field of machine learning, artificial intelligence, or data science, perform the following: \\\n",
"1. **Extract and present** the following details in a clear, structured Markdown format: \\\n",
" - Title and Author(s) \\\n",
" - Year of Publication \\\n",
" - Objective or Aim of the Research (Why the study was conducted) \\\n",
" - Background or Introduction (What foundational knowledge or motivation led to this work) \\\n",
" - Type of Research (e.g., empirical study, theoretical analysis, experimental benchmark) \\\n",
" - Methods or Methodology (How the research was conducted: dataset, models, techniques used) \\\n",
" - Results and Key Findings (What was discovered or proven) \\\n",
" - Conclusion (Summary of insights, limitations, and proposed future work) \\\n",
"\\\n",
"2. **Evaluate** the impact and relevance of the paper: \\\n",
" - Assess the significance of the research to the broader ML/AI community \\\n",
" - Note any novelty, performance improvements, or theoretical breakthroughs \\\n",
" - Comment on the potential applications or industry relevance \\\n",
"\\\n",
"3. **Suggest new research directions**: \\\n",
" - Identify gaps, limitations, or unexplored ideas in the paper \\\n",
" - Propose at least one new research idea or follow-up paper that builds upon this work \\\n",
"\\\n",
"Respond in a clean, professional Markdown format suitable for researchers or students reviewing the literature.\"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f8b68134-c265-4272-87c4-e16fc205e7c4",
"metadata": {},
"outputs": [],
"source": [
"def print_papers(papers):\n",
" for paper in papers:\n",
" title = paper.title\n",
" authors = \", \".join(author.name for author in paper.authors)\n",
" published = paper.published.strftime('%Y-%m-%d')\n",
" abstract = paper.summary.strip()\n",
" link = paper.entry_id\n",
" pdf_link = [l.href for l in paper.links if l.title == 'pdf']\n",
" categories = \", \".join(paper.categories)\n",
"\n",
" print(f\"\\n📄 Title: {title}\")\n",
" print(f\"👥 Authors: {authors}\")\n",
" print(f\"📅 Published: {published}\")\n",
" print(f\"🏷 Categories: {categories}\")\n",
" print(f\"🔗 Link: {link}\")\n",
" if pdf_link:\n",
" print(f\"📄 PDF: {pdf_link[0]}\")\n",
" print(f\"\\n📝 Abstract:\\n{abstract}\")\n",
" print(\"-\" * 80)\n"
]
},
{
"cell_type": "markdown",
"id": "9e688bbd-d3dd-4f2b-a7c3-d6e550ec9667",
"metadata": {},
"source": [
"#### Get the papers given the name of the paper"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6dcf9639-d6b5-4194-b6a2-5260329fcbe7",
"metadata": {},
"outputs": [],
"source": [
"fetcher = MLResearchFetcher(system_prompt, query=\"QWEN2 TECHNICAL REPORT\", max_results=3)\n",
"papers = fetcher.fetch_papers()\n",
"print_papers(papers)"
]
},
{
"cell_type": "markdown",
"id": "a04e219b-389f-4e0a-9645-662d966d4055",
"metadata": {},
"source": [
"### Call the model and get the results"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "297e915b-078a-49c7-836f-3c4ddf8e17dc",
"metadata": {},
"outputs": [],
"source": [
"fetcher.display_results()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2344499c-3b39-4497-a0bf-1cff83117fdc",
"metadata": {},
"outputs": [],
"source": []
}
],
"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.11.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Loading…
Cancel
Save