diff --git a/.env b/.env index 48179c0b..e33db947 100644 --- a/.env +++ b/.env @@ -16,8 +16,8 @@ ACCESS_TOKEN_EXPIRE_MINUTES=60 REFRESH_TOKEN_EXPIRE_MINUTES = 120 # 7 days -SMTP_SERVER=smtp.gmail.com -SMTP_PORT=587 -SMTP_SENDER_EMAIL=shresthasaurab030@outlook.com -SMTP_USERNAME=shresthasaurab030 -SMTP_PASSWORD=huurxwxeorxjorzw \ No newline at end of file +SMTP_SERVER=mail.gibl.com.np +SMTP_PORT=25 +SMTP_SENDER_EMAIL=noreply@gibl.com.np +SMTP_USERNAME=noreply@gibl.com.np +SMTP_PASSWORD=*G15y^N0reP!y diff --git a/poetry.lock b/poetry.lock index 2f8463ae..8ddb75b8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -941,6 +941,16 @@ idna = ["idna (>=2.1,<4.0)"] trio = ["trio (>=0.14,<0.23)"] wmi = ["wmi (>=1.5.1,<2.0.0)"] +[[package]] +name = "docx2txt" +version = "0.8" +description = "A pure python-based utility to extract text and images from docx files." +optional = false +python-versions = "*" +files = [ + {file = "docx2txt-0.8.tar.gz", hash = "sha256:2c06d98d7cfe2d3947e5760a57d924e3ff07745b379c8737723922e7009236e5"}, +] + [[package]] name = "ecdsa" version = "0.18.0" @@ -6306,4 +6316,4 @@ chroma = ["chromadb"] [metadata] lock-version = "2.0" python-versions = ">=3.11,<3.12" -content-hash = "a81365f3feb2e4d69b3d6244c60330549234d13484a787ae8fe6de1b66a201b6" +content-hash = "305eb6301c5ad6fae8ca068bf5c4e121c06a342043320f8f2154761df242d904" diff --git a/private_gpt/__main__.py b/private_gpt/__main__.py index 18b42fd7..508eb65b 100644 --- a/private_gpt/__main__.py +++ b/private_gpt/__main__.py @@ -4,8 +4,11 @@ import uvicorn from private_gpt.main import app from private_gpt.settings.settings import settings +from fastapi.staticfiles import StaticFiles # Set log_config=None to do not use the uvicorn logging configuration, and # use ours instead. For reference, see below: # https://github.com/tiangolo/fastapi/discussions/7457#discussioncomment-5141108 +app.mount("/static", StaticFiles(directory=r"C:\Users\Dbuser\QuickGPT\backend\privateGPT\private_gpt\static"), name="static") + uvicorn.run(app, host="0.0.0.0", port=settings().server.port, log_config=None) diff --git a/private_gpt/constants.py b/private_gpt/constants.py index 8ed2de0f..cbed49a7 100644 --- a/private_gpt/constants.py +++ b/private_gpt/constants.py @@ -2,4 +2,4 @@ import os from pathlib import Path PROJECT_ROOT_PATH: Path = Path(__file__).parents[1] -UPLOAD_DIR = os.path.join(os.getcwd(), "uploads") +UPLOAD_DIR = r"C:\Users\Dbuser\QuickGPT\backend\privateGPT\private_gpt\static" diff --git a/private_gpt/server/ingest/ingest_router.py b/private_gpt/server/ingest/ingest_router.py index 5eba3708..979bdabb 100644 --- a/private_gpt/server/ingest/ingest_router.py +++ b/private_gpt/server/ingest/ingest_router.py @@ -2,7 +2,7 @@ import logging from pathlib import Path from typing import Literal -from fastapi import APIRouter, Depends, HTTPException, Request, UploadFile, File, status, Security +from fastapi import APIRouter, Depends, HTTPException, Request, UploadFile, File, status, Security, Body from fastapi.responses import JSONResponse from pydantic import BaseModel, Field @@ -35,6 +35,8 @@ class IngestResponse(BaseModel): model: Literal["private-gpt"] data: list[IngestedDoc] +class DeleteFilename(BaseModel): + filename: str @ingest_router.post("/ingest", tags=["Ingestion"], deprecated=True) def ingest(request: Request, file: UploadFile) -> IngestResponse: @@ -121,10 +123,10 @@ def delete_ingested(request: Request, doc_id: str) -> None: service.delete(doc_id) -@ingest_router.delete("/ingest/file/{filename}", tags=["Ingestion"]) +@ingest_router.post("/ingest/file/delete", tags=["Ingestion"]) def delete_file( request: Request, - filename: str, + delete_input: DeleteFilename, current_user: models.User = Security( deps.get_current_user, )) -> dict: @@ -133,6 +135,9 @@ def delete_file( The `filename` can be obtained from the `GET /ingest/list` endpoint. The document will be effectively deleted from your storage context. """ + filename = delete_input.filename + print(filename) + service = request.state.injector.get(IngestService) try: doc_ids = service.get_doc_ids_by_filename(filename) diff --git a/private_gpt/ui/common.py b/private_gpt/ui/common.py index cd26755f..0c568545 100644 --- a/private_gpt/ui/common.py +++ b/private_gpt/ui/common.py @@ -20,7 +20,7 @@ class Source(BaseModel): file_name = doc_metadata.get("file_name", "-") if doc_metadata else "-" page_label = doc_metadata.get("page_label", "-") if doc_metadata else "-" - page_link = str(Path(f"{UPLOAD_DIR}/{file_name}#page={page_label}")) + page_link = str(f"http://10.1.101.125:88/static/{file_name}#page={page_label}") source = Source(file=file_name, page=page_label, text=chunk.text, page_link=page_link) curated_sources.add(source) diff --git a/private_gpt/users/utils/utils.py b/private_gpt/users/utils/utils.py index bae4f495..69eb97fc 100644 --- a/private_gpt/users/utils/utils.py +++ b/private_gpt/users/utils/utils.py @@ -22,8 +22,11 @@ def send_registration_email(fullname: str, email: str, random_password: str) -> msg["From"] = settings.SMTP_SENDER_EMAIL msg["To"] = email + print(settings.SMTP_SERVER) + print(settings.SMTP_PORT) + with smtplib.SMTP(settings.SMTP_SERVER, settings.SMTP_PORT) as server: - server.starttls() - server.login(settings.SMTP_USERNAME, settings.SMTP_PASSWORD) + # server.starttls() + # server.login(settings.SMTP_USERNAME, settings.SMTP_PASSWORD) server.sendmail(settings.SMTP_SENDER_EMAIL, email, msg.as_string()) diff --git a/pyproject.toml b/pyproject.toml index 99fcfe4a..58d35576 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,7 @@ bcrypt = "^4.1.2" python-jose = "^3.3.0" psycopg2-binary = "^2.9.9" passlib = "^1.7.4" +docx2txt = "^0.8" [tool.poetry.group.dev.dependencies] black = "^22"