From 086079f59a8dbaae97f4ce2cbf69903950244082 Mon Sep 17 00:00:00 2001 From: Deepashri Khati <145244952+deepashri30@users.noreply.github.com> Date: Thu, 16 May 2024 23:49:03 +0530 Subject: [PATCH 1/3] Create README.md --- Website Content Summarizer/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Website Content Summarizer/README.md diff --git a/Website Content Summarizer/README.md b/Website Content Summarizer/README.md new file mode 100644 index 00000000..00e3b0af --- /dev/null +++ b/Website Content Summarizer/README.md @@ -0,0 +1 @@ +THIS IS README From d68b740bd918b84b6818e8107ab319cbb44318c3 Mon Sep 17 00:00:00 2001 From: Deepashri Khati <145244952+deepashri30@users.noreply.github.com> Date: Thu, 16 May 2024 23:50:20 +0530 Subject: [PATCH 2/3] Add files via upload --- Website Content Summarizer/Procfile | 1 + Website Content Summarizer/app.py | 45 +++++++++++++ Website Content Summarizer/icon.png | Bin 0 -> 22770 bytes Website Content Summarizer/images/icon.png | Bin 0 -> 15916 bytes Website Content Summarizer/manifest.json | 15 +++++ Website Content Summarizer/popup.css | 57 +++++++++++++++++ Website Content Summarizer/popup.html | 49 +++++++++++++++ Website Content Summarizer/popup.js | 28 +++++++++ Website Content Summarizer/requirements.txt | 66 ++++++++++++++++++++ 9 files changed, 261 insertions(+) create mode 100644 Website Content Summarizer/Procfile create mode 100644 Website Content Summarizer/app.py create mode 100644 Website Content Summarizer/icon.png create mode 100644 Website Content Summarizer/images/icon.png create mode 100644 Website Content Summarizer/manifest.json create mode 100644 Website Content Summarizer/popup.css create mode 100644 Website Content Summarizer/popup.html create mode 100644 Website Content Summarizer/popup.js create mode 100644 Website Content Summarizer/requirements.txt diff --git a/Website Content Summarizer/Procfile b/Website Content Summarizer/Procfile new file mode 100644 index 00000000..b0855f1c --- /dev/null +++ b/Website Content Summarizer/Procfile @@ -0,0 +1 @@ +web: gunicorn your_module_name:app diff --git a/Website Content Summarizer/app.py b/Website Content Summarizer/app.py new file mode 100644 index 00000000..e4234e05 --- /dev/null +++ b/Website Content Summarizer/app.py @@ -0,0 +1,45 @@ +from flask import Flask, request, jsonify +from langchain.prompts import PromptTemplate +from langchain_community.document_loaders import WebBaseLoader +from langchain.schema import StrOutputParser +from langchain.schema.prompt_template import format_document +from flask_cors import CORS +import os +app = Flask(__name__) +CORS(app) +os.environ["GOOGLE_API_KEY"] = "GEMINI-API-KEY" + +from langchain_google_genai import ChatGoogleGenerativeAI +@app.route('/api', methods=['POST']) +def generate_summary(): + data = request.get_json() + site = data['site'] + loader = WebBaseLoader(site) + docs = loader.load() + + doc_prompt = PromptTemplate.from_template("{page_content}") + llm_prompt_template = """Write a concise summary of the following: +"{text}" +CONCISE SUMMARY:""" + llm_prompt = PromptTemplate.from_template(llm_prompt_template) + + llm = ChatGoogleGenerativeAI(model="gemini-pro", + temperature=0.7, top_p=0.85) + + stuff_chain = ( + { + "text": lambda docs: "\n\n".join( + format_document(doc, doc_prompt) for doc in docs + ) + } + | llm_prompt # Prompt for Gemini + | llm # Gemini function + | StrOutputParser() # output parser + ) + + response = stuff_chain.invoke(docs) + + return jsonify({"summary": response}) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/Website Content Summarizer/icon.png b/Website Content Summarizer/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..83c4c8f4eb23e562cf07982f6f0dfc46264714bb GIT binary patch literal 22770 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 NnzEKsrGh2=e*jo + + + + + + Summary Extension + + + + + +
+

Web Summa

+
Loading...
+
+ + + + + + + diff --git a/Website Content Summarizer/popup.js b/Website Content Summarizer/popup.js new file mode 100644 index 00000000..2d1858c4 --- /dev/null +++ b/Website Content Summarizer/popup.js @@ -0,0 +1,28 @@ +document.addEventListener('DOMContentLoaded', function () { + chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { + var currentUrl = tabs[0].url; + var apiUrl = 'https://parapager.onrender.com/api'; // Replace with your actual API endpoint + + var requestBody = { + site: currentUrl + }; + + fetch(apiUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(requestBody), + }) + .then(response => response.json()) + .then(data => { + var summaryElement = document.getElementById('summary'); + summaryElement.textContent = data.summary; + }) + .catch(error => { + console.error('Error fetching data:', error); + var summaryElement = document.getElementById('summary'); + summaryElement.textContent = 'Error fetching data'; + }); + }); +}); diff --git a/Website Content Summarizer/requirements.txt b/Website Content Summarizer/requirements.txt new file mode 100644 index 00000000..e2e24af4 --- /dev/null +++ b/Website Content Summarizer/requirements.txt @@ -0,0 +1,66 @@ +aiohttp==3.9.3 +aiosignal==1.3.1 +annotated-types==0.6.0 +anyio==4.2.0 +async-timeout==4.0.3 +attrs==23.2.0 +beautifulsoup4==4.12.3 +blinker==1.7.0 +bs4==0.0.2 +build==1.0.3 +cachetools==5.3.2 +certifi==2024.2.2 +charset-normalizer==3.3.2 +click==8.1.7 +colorama==0.4.6 +dataclasses-json==0.6.4 +exceptiongroup==1.2.0 +Flask==3.0.2 +Flask-Cors==4.0.0 +frozenlist==1.4.1 +google-ai-generativelanguage==0.4.0 +google-api-core==2.16.2 +google-auth==2.27.0 +google-generativeai==0.3.2 +googleapis-common-protos==1.62.0 +greenlet==3.0.3 +grpcio==1.60.1 +grpcio-status==1.60.1 +gunicorn==21.2.0 +idna==3.6 +itsdangerous==2.1.2 +Jinja2==3.1.3 +jsonpatch==1.33 +jsonpointer==2.4 +langchain==0.1.5 +langchain-community==0.0.17 +langchain-core==0.1.18 +langchain-google-genai==0.0.6 +langsmith==0.0.86 +MarkupSafe==2.1.5 +marshmallow==3.20.2 +multidict==6.0.5 +mypy-extensions==1.0.0 +numpy==1.26.4 +packaging==23.2 +proto-plus==1.23.0 +protobuf==4.25.2 +pyasn1==0.5.1 +pyasn1-modules==0.3.0 +pydantic==2.6.1 +pydantic_core==2.16.2 +pyproject_hooks==1.0.0 +PyYAML==6.0.1 +requests==2.31.0 +rsa==4.9 +sniffio==1.3.0 +soupsieve==2.5 +SQLAlchemy==2.0.25 +tenacity==8.2.3 +tomli==2.0.1 +tqdm==4.66.1 +typing-inspect==0.9.0 +typing_extensions==4.9.0 +urllib3==2.2.0 +Werkzeug==3.0.1 +yarl==1.9.4 From 65778d3d3f55c350f14133b9d878119bb32b72aa Mon Sep 17 00:00:00 2001 From: Deepashri Khati <145244952+deepashri30@users.noreply.github.com> Date: Thu, 16 May 2024 23:55:18 +0530 Subject: [PATCH 3/3] Update README.md --- Website Content Summarizer/README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Website Content Summarizer/README.md b/Website Content Summarizer/README.md index 00e3b0af..22638ce7 100644 --- a/Website Content Summarizer/README.md +++ b/Website Content Summarizer/README.md @@ -1 +1,21 @@ -THIS IS README +**AI Summarizer - Chrome Extension** + +This Chrome extension utilizes artificial intelligence to generate summaries of webpages you visit. + +**Features** +**AI-powered Summarization:** Get concise summaries of articles, news stories, and other web content with the help of advanced AI algorithms. +**Improved Efficiency:** Quickly grasp the key points of a webpage without having to read through the entire text. +**Time Saver:** Save valuable time by getting the gist of information before diving deeper. +**Simplified Reading:** Make lengthy content more manageable and easier to understand. + +**Installation** +1.Download the Zip File and extract it. +2.Open Chrome and navigate to chrome://extensions/. +3.Enable "Developer mode" by clicking the toggle switch in the top right corner. +4.Click Load Unpacked then select the extracted folder. + +You are all set and ready to go. + +**Privacy +This extension does not collect or store any personal information from your browsing activity.** +