diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/backend/app.py b/backend/app.py
index 52292a7..f9fc592 100644
--- a/backend/app.py
+++ b/backend/app.py
@@ -4,9 +4,14 @@
from flask_migrate import Migrate
from PyPDF2 import PdfReader
import re
+import openai
from dotenv import load_dotenv
load_dotenv()
+
+# Configure OpenAI with your API Key
+openai.api_key = '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',
+
app = Flask(__name__)
CORS(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:heslo@localhost/hackathon'
@@ -23,6 +28,13 @@ def __init__(self, text, filename):
self.text = text
self.filename = filename
+class PdfSummary(db.Model):
+ id = db.Column(db.Integer, primary_key=True)
+ summary_text = db.Column(db.Text)
+ pdf_text_id = db.Column(db.Integer, db.ForeignKey('pdf_text.id'), nullable=False)
+
+ pdf_text = db.relationship('PdfText', backref=db.backref('summary', lazy=True))
+
@app.route('/upload_pdf', methods=['POST'])
def upload_pdf():
uploaded_file = request.files.get('file')
@@ -57,6 +69,37 @@ def delete_pdf_text(pdf_text_id):
else:
return jsonify({"message": "PDF Text not found"}), 404
+
+@app.route('/summarize_pdf', methods=['POST'])
+def summarize_pdf():
+ data = request.json
+ pdf_text_id = data.get('pdf_text_id')
+
+ if not pdf_text_id:
+ return jsonify({"error": "PDF text ID is required"}), 400
+
+ pdf_text_record = PdfText.query.get(pdf_text_id)
+ if not pdf_text_record:
+ return jsonify({"error": "PDF text not found"}), 404
+
+ try:
+ response = openai.Completion.create(
+ engine="text-davinci-003",
+ prompt=f"Summarize the following text:\n\n{pdf_text_record.text}",
+ max_tokens=150
+ )
+ summary = response.choices[0].text.strip()
+
+ # Save the summary to the database
+ new_summary = PdfSummary(summary_text=summary, pdf_text_id=pdf_text_id)
+ db.session.add(new_summary)
+ db.session.commit()
+
+ return jsonify({"summary": summary})
+ except Exception as e:
+ print(f"Error: {e}")
+ return jsonify({"error": "An error occurred during summarization"}), 500
+
def init_db():
db.create_all()
diff --git a/backend/migrations/versions/08afc1f4ebcc_summarize.py b/backend/migrations/versions/08afc1f4ebcc_summarize.py
new file mode 100644
index 0000000..cf0e120
--- /dev/null
+++ b/backend/migrations/versions/08afc1f4ebcc_summarize.py
@@ -0,0 +1,34 @@
+"""summarize
+
+Revision ID: 08afc1f4ebcc
+Revises: c4b843d1ef4c
+Create Date: 2023-11-25 14:41:14.451331
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '08afc1f4ebcc'
+down_revision = 'c4b843d1ef4c'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.create_table('pdf_summary',
+ sa.Column('id', sa.Integer(), nullable=False),
+ sa.Column('summary_text', sa.Text(), nullable=True),
+ sa.Column('pdf_text_id', sa.Integer(), nullable=False),
+ sa.ForeignKeyConstraint(['pdf_text_id'], ['pdf_text.id'], ),
+ sa.PrimaryKeyConstraint('id')
+ )
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_table('pdf_summary')
+ # ### end Alembic commands ###
diff --git a/backend/test.py b/backend/test.py
new file mode 100644
index 0000000..3422b5d
--- /dev/null
+++ b/backend/test.py
@@ -0,0 +1,11 @@
+import openai
+
+# Set the API key directly
+openai.api_key = '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'
+
+response = openai.Completion.create(
+ engine="gpt-3.5-turbo-instruct",
+ prompt="Write a tagline for an ice cream shop."
+)
+
+print(response.choices[0].text.strip())
diff --git a/frontend/src/components/PdfUpload.jsx b/frontend/src/components/PdfUpload.jsx
index 3c0eb0f..7801334 100644
--- a/frontend/src/components/PdfUpload.jsx
+++ b/frontend/src/components/PdfUpload.jsx
@@ -5,6 +5,8 @@ const PdfUpload = () => {
const [pdfTexts, setPdfTexts] = useState([]);
const [selectedFile, setSelectedFile] = useState(null);
const [isUploading, setIsUploading] = useState(false);
+ const [selectedPdfTextId, setSelectedPdfTextId] = useState(null);
+ const [summary, setSummary] = useState('');
const fetchPdfTexts = async () => {
try {
@@ -44,12 +46,23 @@ const PdfUpload = () => {
}
};
+ const summarizePdfText = async (pdfTextId) => {
+ setSelectedPdfTextId(pdfTextId);
+ try {
+ const response = await axios.post('/summarize_pdf', { pdf_text_id: pdfTextId });
+ setSummary(response.data.summary); // Store the summary in state
+ } catch (error) {
+ console.error('Failed to summarize PDF text:', error);
+ setSummary(''); // Clear previous summary on error
+ }
+ };
+
useEffect(() => {
fetchPdfTexts();
}, []);
return (
-