diff --git a/dev_backend/.env b/dev_backend/.env new file mode 100644 index 0000000..7d6e8e1 --- /dev/null +++ b/dev_backend/.env @@ -0,0 +1,9 @@ +MYSQL_HOST=localhost + +MYSQL_PORT=3306 + +MYSQL_USER=root + +MYSQL_PASSWORD='AmB@ig123' + +MYSQL_DATABASE=listing_radar diff --git a/dev_backend/__pycache__/db_setup.cpython-313.pyc b/dev_backend/__pycache__/db_setup.cpython-313.pyc new file mode 100644 index 0000000..cdc274a Binary files /dev/null and b/dev_backend/__pycache__/db_setup.cpython-313.pyc differ diff --git a/dev_backend/__pycache__/main.cpython-313.pyc b/dev_backend/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000..e1c6fc2 Binary files /dev/null and b/dev_backend/__pycache__/main.cpython-313.pyc differ diff --git a/dev_backend/db_setup.py b/dev_backend/db_setup.py new file mode 100644 index 0000000..4e2a3cc --- /dev/null +++ b/dev_backend/db_setup.py @@ -0,0 +1,44 @@ +from __future__ import annotations +import os +from contextlib import asynccontextmanager +from typing import AsyncGenerator +from dotenv import load_dotenv +from qdrant_client import AsyncQdrantClient, models +from typing import Annotated +from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker +from sqlalchemy.orm import declarative_base +from sqlalchemy.orm import sessionmaker +# pyrefly: ignore [missing-import] +from fastapi import FastAPI, Depends +from sqlalchemy.engine.url import URL +from dotenv import load_dotenv +load_dotenv() + +DATABASE_URL = URL.create( + drivername="mysql+asyncmy", + username=os.getenv("MYSQL_USER"), + password=os.getenv("MYSQL_PASSWORD"), + host=os.getenv("MYSQL_HOST"), + port=os.getenv("MYSQL_PORT"), + database=os.getenv("MYSQL_DATABASE"), +) + + +async def get_qdrant_client()->AsyncGenerator[AsyncQdrantClient,None]: + # Replace with your Qdrant URL + client = AsyncQdrantClient(url="http://localhost:6333", timeout=60) + try: + yield client + finally: + # Properly close the async client + await client.close() + +async def get_session(): + engine = create_async_engine(DATABASE_URL, echo=True) + async_session = async_sessionmaker(bind=engine, class_=AsyncSession, expire_on_commit=False) + session = async_session() + Base = declarative_base() + try: + yield session + finally: + await session.close() \ No newline at end of file diff --git a/dev_backend/main.py b/dev_backend/main.py new file mode 100644 index 0000000..741c77e --- /dev/null +++ b/dev_backend/main.py @@ -0,0 +1,15 @@ +from fastapi import FastAPI, status +from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint +from dotenv import load_dotenv +from db_setup import get_qdrant_client,get_session +from mysql_process.views import app_router +from vector_db_router.views +load_dotenv() + +api = FastAPI( + docs_url="/docs", + redoc_url="/redocs", +) + +api.include_router(app_router,tags=["mysql_process"]) +api.include_router(vector_db_router,tags=["vector_db"]) \ No newline at end of file diff --git a/dev_backend/mysql_process/__pycache__/views.cpython-313.pyc b/dev_backend/mysql_process/__pycache__/views.cpython-313.pyc new file mode 100644 index 0000000..2019e2d Binary files /dev/null and b/dev_backend/mysql_process/__pycache__/views.cpython-313.pyc differ diff --git a/README.md b/dev_backend/mysql_process/enums.py similarity index 100% rename from README.md rename to dev_backend/mysql_process/enums.py diff --git a/dev_backend/mysql_process/models.py b/dev_backend/mysql_process/models.py new file mode 100644 index 0000000..2f1976c --- /dev/null +++ b/dev_backend/mysql_process/models.py @@ -0,0 +1,12 @@ +from fastapi import FastAPI +from sqlmodel import SQLModel, Field + +class Memory(SQLModel,table=True): + id: int = Field(default=None,primary_key=True) + product_link: str = Field(default=None,index=True) + price: float = Field(default=None) + product_image: str = Field(default=None) + product_name: str = Field(default=None) + product_description: str = Field(default=None) + product_rating: float = Field(default=None) + product_review: str = Field(default=None) \ No newline at end of file diff --git a/dev_backend/mysql_process/serializers.py b/dev_backend/mysql_process/serializers.py new file mode 100644 index 0000000..7f90fd4 --- /dev/null +++ b/dev_backend/mysql_process/serializers.py @@ -0,0 +1,16 @@ +from fastapi import FastAPI +from pydantic import BaseModel +from .models import Memory + +class MemorySerializer(BaseModel): + id: int + product_link: str + price: float + product_image: str + product_name: str + product_description: str + product_rating: float + product_review: str + + class Config: + orm_mode = True \ No newline at end of file diff --git a/dev_backend/mysql_process/views.py b/dev_backend/mysql_process/views.py new file mode 100644 index 0000000..16b73a1 --- /dev/null +++ b/dev_backend/mysql_process/views.py @@ -0,0 +1,20 @@ +from typing import Annotated +from fastapi import Depends, Header, HTTPException,APIRouter +from typing import List,Optional +from db_setup import get_session,get_qdrant_client +# from .models import Product +from sqlalchemy.ext.asyncio import AsyncSession +from qdrant_client import AsyncQdrantClient +from fastapi.responses import JSONResponse +app_router = APIRouter() + + +@app_router.get("/products") +async def get_all_products( + session: Annotated[AsyncSession, Depends(get_session)], + vector_db:Annotated[AsyncQdrantClient, Depends(get_qdrant_client)], +): + try: + return JSONResponse(content={"message": "Hello World"}) + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) \ No newline at end of file diff --git a/dev_backend/vector_db_router/enums.py b/dev_backend/vector_db_router/enums.py new file mode 100644 index 0000000..e69de29 diff --git a/dev_backend/vector_db_router/models.py b/dev_backend/vector_db_router/models.py new file mode 100644 index 0000000..61b061e --- /dev/null +++ b/dev_backend/vector_db_router/models.py @@ -0,0 +1 @@ +from qdrant_client import AsyncQdrantClient, models diff --git a/dev_backend/vector_db_router/serializers.py b/dev_backend/vector_db_router/serializers.py new file mode 100644 index 0000000..e69de29 diff --git a/dev_backend/vector_db_router/views.py b/dev_backend/vector_db_router/views.py new file mode 100644 index 0000000..172c859 --- /dev/null +++ b/dev_backend/vector_db_router/views.py @@ -0,0 +1,4 @@ +from db_setup import get_session,get_qdrant_client +# from .models import Product +from sqlalchemy.ext.asyncio import AsyncSession +from qdrant_client import AsyncQdrantClient diff --git a/model_export/README.md b/model_export/README.md new file mode 100644 index 0000000..e69de29 diff --git a/dataset.py b/model_export/dataset.py similarity index 100% rename from dataset.py rename to model_export/dataset.py diff --git a/dino_image_matching.py b/model_export/dino_image_matching.py similarity index 100% rename from dino_image_matching.py rename to model_export/dino_image_matching.py diff --git a/download_images.py b/model_export/download_images.py similarity index 100% rename from download_images.py rename to model_export/download_images.py diff --git a/generate_pairs_csv.py b/model_export/generate_pairs_csv.py similarity index 100% rename from generate_pairs_csv.py rename to model_export/generate_pairs_csv.py diff --git a/inference.py b/model_export/inference.py similarity index 100% rename from inference.py rename to model_export/inference.py diff --git a/model.py b/model_export/model.py similarity index 100% rename from model.py rename to model_export/model.py diff --git a/p_hash.py b/model_export/p_hash.py similarity index 100% rename from p_hash.py rename to model_export/p_hash.py diff --git a/requirements.txt b/model_export/requirements.txt similarity index 100% rename from requirements.txt rename to model_export/requirements.txt diff --git a/train.py b/model_export/train.py similarity index 100% rename from train.py rename to model_export/train.py