first
Browse files- .gitignore +4 -0
 - Dockerfile +39 -0
 - app.py +56 -0
 - frontend/.gitignore +23 -0
 - frontend/README.md +70 -0
 - frontend/package-lock.json +0 -0
 - frontend/package.json +39 -0
 - frontend/public/favicon.ico +0 -0
 - frontend/public/index.html +43 -0
 - frontend/public/logo192.png +0 -0
 - frontend/public/logo512.png +0 -0
 - frontend/public/manifest.json +25 -0
 - frontend/public/robots.txt +3 -0
 - frontend/src/App.css +38 -0
 - frontend/src/App.js +25 -0
 - frontend/src/App.test.js +8 -0
 - frontend/src/index.css +13 -0
 - frontend/src/index.js +17 -0
 - frontend/src/logo.svg +1 -0
 - frontend/src/reportWebVitals.js +13 -0
 - frontend/src/setupProxy.js +14 -0
 - frontend/src/setupTests.js +5 -0
 - requirements.txt +4 -0
 
    	
        .gitignore
    ADDED
    
    | 
         @@ -0,0 +1,4 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            static
         
     | 
| 2 | 
         
            +
            __pycache__
         
     | 
| 3 | 
         
            +
            *.swp
         
     | 
| 4 | 
         
            +
            venv/
         
     | 
    	
        Dockerfile
    ADDED
    
    | 
         @@ -0,0 +1,39 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            FROM node:20-alpine AS builder
         
     | 
| 2 | 
         
            +
            RUN apk add --no-cache libc6-compat
         
     | 
| 3 | 
         
            +
            WORKDIR /app
         
     | 
| 4 | 
         
            +
             
     | 
| 5 | 
         
            +
            # Install dependencies based on the preferred package manager
         
     | 
| 6 | 
         
            +
            COPY frontend .
         
     | 
| 7 | 
         
            +
            RUN \
         
     | 
| 8 | 
         
            +
                if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
         
     | 
| 9 | 
         
            +
                elif [ -f package-lock.json ]; then npm ci; \
         
     | 
| 10 | 
         
            +
                elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
         
     | 
| 11 | 
         
            +
                else echo "Lockfile not found." && exit 1; \
         
     | 
| 12 | 
         
            +
                fi
         
     | 
| 13 | 
         
            +
             
     | 
| 14 | 
         
            +
            RUN npm run build
         
     | 
| 15 | 
         
            +
            FROM python:3.10-slim AS backend
         
     | 
| 16 | 
         
            +
            WORKDIR /app
         
     | 
| 17 | 
         
            +
             
     | 
| 18 | 
         
            +
            RUN apt-get update && apt-get install --no-install-recommends -y \
         
     | 
| 19 | 
         
            +
                git ffmpeg curl gnupg \
         
     | 
| 20 | 
         
            +
                && apt-get clean && rm -rf /var/lib/apt/lists/*
         
     | 
| 21 | 
         
            +
             
     | 
| 22 | 
         
            +
            RUN useradd -m -u 1000 user
         
     | 
| 23 | 
         
            +
             
     | 
| 24 | 
         
            +
            COPY ./requirements.txt .
         
     | 
| 25 | 
         
            +
            RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
         
     | 
| 26 | 
         
            +
             
     | 
| 27 | 
         
            +
            USER user
         
     | 
| 28 | 
         
            +
            ENV HOME=/home/user \
         
     | 
| 29 | 
         
            +
                PATH=/home/user/.local/bin:$PATH
         
     | 
| 30 | 
         
            +
             
     | 
| 31 | 
         
            +
             
     | 
| 32 | 
         
            +
            WORKDIR $HOME/app
         
     | 
| 33 | 
         
            +
            COPY --from=builder /app/build ./static
         
     | 
| 34 | 
         
            +
            COPY . .    
         
     | 
| 35 | 
         
            +
             
     | 
| 36 | 
         
            +
            CMD ["python", "app.py"]
         
     | 
| 37 | 
         
            +
             
     | 
| 38 | 
         
            +
             
     | 
| 39 | 
         
            +
             
     | 
    	
        app.py
    ADDED
    
    | 
         @@ -0,0 +1,56 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            from fastapi import FastAPI
         
     | 
| 2 | 
         
            +
            from fastapi.middleware.cors import CORSMiddleware
         
     | 
| 3 | 
         
            +
            from fastapi.responses import JSONResponse
         
     | 
| 4 | 
         
            +
            from fastapi.staticfiles import StaticFiles
         
     | 
| 5 | 
         
            +
            import numpy as np
         
     | 
| 6 | 
         
            +
            import argparse
         
     | 
| 7 | 
         
            +
            import os
         
     | 
| 8 | 
         
            +
             
     | 
| 9 | 
         
            +
            HOST = os.environ.get("API_URL", "0.0.0.0")
         
     | 
| 10 | 
         
            +
            PORT = os.environ.get("PORT", 7860)
         
     | 
| 11 | 
         
            +
            parser = argparse.ArgumentParser()
         
     | 
| 12 | 
         
            +
            parser.add_argument("--host", default=HOST)
         
     | 
| 13 | 
         
            +
            parser.add_argument("--port", type=int, default=PORT)
         
     | 
| 14 | 
         
            +
            parser.add_argument("--reload", action="store_true", default=True)
         
     | 
| 15 | 
         
            +
            parser.add_argument("--ssl_certfile")
         
     | 
| 16 | 
         
            +
            parser.add_argument("--ssl_keyfile")
         
     | 
| 17 | 
         
            +
            args = parser.parse_args()
         
     | 
| 18 | 
         
            +
             
     | 
| 19 | 
         
            +
            app = FastAPI()
         
     | 
| 20 | 
         
            +
            app.add_middleware(
         
     | 
| 21 | 
         
            +
                CORSMiddleware,
         
     | 
| 22 | 
         
            +
                allow_origins=["*"],
         
     | 
| 23 | 
         
            +
                allow_credentials=True,
         
     | 
| 24 | 
         
            +
                allow_methods=["*"],
         
     | 
| 25 | 
         
            +
                allow_headers=["*"],
         
     | 
| 26 | 
         
            +
            )
         
     | 
| 27 | 
         
            +
             
     | 
| 28 | 
         
            +
             
     | 
| 29 | 
         
            +
            @app.get("/invert")
         
     | 
| 30 | 
         
            +
            async def invert(text: str):
         
     | 
| 31 | 
         
            +
                return {
         
     | 
| 32 | 
         
            +
                    "original": text,
         
     | 
| 33 | 
         
            +
                    "inverted": text[::-1],
         
     | 
| 34 | 
         
            +
                }
         
     | 
| 35 | 
         
            +
             
     | 
| 36 | 
         
            +
             
     | 
| 37 | 
         
            +
            @app.get("/data")
         
     | 
| 38 | 
         
            +
            async def get_data():
         
     | 
| 39 | 
         
            +
                data = {"data": np.random.rand(100).tolist()}
         
     | 
| 40 | 
         
            +
                return JSONResponse(data)
         
     | 
| 41 | 
         
            +
             
     | 
| 42 | 
         
            +
             
     | 
| 43 | 
         
            +
            app.mount("/", StaticFiles(directory="static", html=True), name="static")
         
     | 
| 44 | 
         
            +
             
     | 
| 45 | 
         
            +
            if __name__ == "__main__":
         
     | 
| 46 | 
         
            +
                import uvicorn
         
     | 
| 47 | 
         
            +
             
     | 
| 48 | 
         
            +
                print(args)
         
     | 
| 49 | 
         
            +
                uvicorn.run(
         
     | 
| 50 | 
         
            +
                    "app:app",
         
     | 
| 51 | 
         
            +
                    host=args.host,
         
     | 
| 52 | 
         
            +
                    port=args.port,
         
     | 
| 53 | 
         
            +
                    reload=args.reload,
         
     | 
| 54 | 
         
            +
                    ssl_certfile=args.ssl_certfile,
         
     | 
| 55 | 
         
            +
                    ssl_keyfile=args.ssl_keyfile,
         
     | 
| 56 | 
         
            +
                )
         
     | 
    	
        frontend/.gitignore
    ADDED
    
    | 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
         
     | 
| 2 | 
         
            +
             
     | 
| 3 | 
         
            +
            # dependencies
         
     | 
| 4 | 
         
            +
            /node_modules
         
     | 
| 5 | 
         
            +
            /.pnp
         
     | 
| 6 | 
         
            +
            .pnp.js
         
     | 
| 7 | 
         
            +
             
     | 
| 8 | 
         
            +
            # testing
         
     | 
| 9 | 
         
            +
            /coverage
         
     | 
| 10 | 
         
            +
             
     | 
| 11 | 
         
            +
            # production
         
     | 
| 12 | 
         
            +
            /build
         
     | 
| 13 | 
         
            +
             
     | 
| 14 | 
         
            +
            # misc
         
     | 
| 15 | 
         
            +
            .DS_Store
         
     | 
| 16 | 
         
            +
            .env.local
         
     | 
| 17 | 
         
            +
            .env.development.local
         
     | 
| 18 | 
         
            +
            .env.test.local
         
     | 
| 19 | 
         
            +
            .env.production.local
         
     | 
| 20 | 
         
            +
             
     | 
| 21 | 
         
            +
            npm-debug.log*
         
     | 
| 22 | 
         
            +
            yarn-debug.log*
         
     | 
| 23 | 
         
            +
            yarn-error.log*
         
     | 
    	
        frontend/README.md
    ADDED
    
    | 
         @@ -0,0 +1,70 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            # Getting Started with Create React App
         
     | 
| 2 | 
         
            +
             
     | 
| 3 | 
         
            +
            This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
         
     | 
| 4 | 
         
            +
             
     | 
| 5 | 
         
            +
            ## Available Scripts
         
     | 
| 6 | 
         
            +
             
     | 
| 7 | 
         
            +
            In the project directory, you can run:
         
     | 
| 8 | 
         
            +
             
     | 
| 9 | 
         
            +
            ### `npm start`
         
     | 
| 10 | 
         
            +
             
     | 
| 11 | 
         
            +
            Runs the app in the development mode.\
         
     | 
| 12 | 
         
            +
            Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
         
     | 
| 13 | 
         
            +
             
     | 
| 14 | 
         
            +
            The page will reload when you make changes.\
         
     | 
| 15 | 
         
            +
            You may also see any lint errors in the console.
         
     | 
| 16 | 
         
            +
             
     | 
| 17 | 
         
            +
            ### `npm test`
         
     | 
| 18 | 
         
            +
             
     | 
| 19 | 
         
            +
            Launches the test runner in the interactive watch mode.\
         
     | 
| 20 | 
         
            +
            See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
         
     | 
| 21 | 
         
            +
             
     | 
| 22 | 
         
            +
            ### `npm run build`
         
     | 
| 23 | 
         
            +
             
     | 
| 24 | 
         
            +
            Builds the app for production to the `build` folder.\
         
     | 
| 25 | 
         
            +
            It correctly bundles React in production mode and optimizes the build for the best performance.
         
     | 
| 26 | 
         
            +
             
     | 
| 27 | 
         
            +
            The build is minified and the filenames include the hashes.\
         
     | 
| 28 | 
         
            +
            Your app is ready to be deployed!
         
     | 
| 29 | 
         
            +
             
     | 
| 30 | 
         
            +
            See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
         
     | 
| 31 | 
         
            +
             
     | 
| 32 | 
         
            +
            ### `npm run eject`
         
     | 
| 33 | 
         
            +
             
     | 
| 34 | 
         
            +
            **Note: this is a one-way operation. Once you `eject`, you can't go back!**
         
     | 
| 35 | 
         
            +
             
     | 
| 36 | 
         
            +
            If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
         
     | 
| 37 | 
         
            +
             
     | 
| 38 | 
         
            +
            Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
         
     | 
| 39 | 
         
            +
             
     | 
| 40 | 
         
            +
            You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
         
     | 
| 41 | 
         
            +
             
     | 
| 42 | 
         
            +
            ## Learn More
         
     | 
| 43 | 
         
            +
             
     | 
| 44 | 
         
            +
            You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
         
     | 
| 45 | 
         
            +
             
     | 
| 46 | 
         
            +
            To learn React, check out the [React documentation](https://reactjs.org/).
         
     | 
| 47 | 
         
            +
             
     | 
| 48 | 
         
            +
            ### Code Splitting
         
     | 
| 49 | 
         
            +
             
     | 
| 50 | 
         
            +
            This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
         
     | 
| 51 | 
         
            +
             
     | 
| 52 | 
         
            +
            ### Analyzing the Bundle Size
         
     | 
| 53 | 
         
            +
             
     | 
| 54 | 
         
            +
            This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
         
     | 
| 55 | 
         
            +
             
     | 
| 56 | 
         
            +
            ### Making a Progressive Web App
         
     | 
| 57 | 
         
            +
             
     | 
| 58 | 
         
            +
            This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
         
     | 
| 59 | 
         
            +
             
     | 
| 60 | 
         
            +
            ### Advanced Configuration
         
     | 
| 61 | 
         
            +
             
     | 
| 62 | 
         
            +
            This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
         
     | 
| 63 | 
         
            +
             
     | 
| 64 | 
         
            +
            ### Deployment
         
     | 
| 65 | 
         
            +
             
     | 
| 66 | 
         
            +
            This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
         
     | 
| 67 | 
         
            +
             
     | 
| 68 | 
         
            +
            ### `npm run build` fails to minify
         
     | 
| 69 | 
         
            +
             
     | 
| 70 | 
         
            +
            This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
         
     | 
    	
        frontend/package-lock.json
    ADDED
    
    | 
         The diff for this file is too large to render. 
		See raw diff 
     | 
| 
         | 
    	
        frontend/package.json
    ADDED
    
    | 
         @@ -0,0 +1,39 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            {
         
     | 
| 2 | 
         
            +
              "name": "frontend",
         
     | 
| 3 | 
         
            +
              "version": "0.1.0",
         
     | 
| 4 | 
         
            +
              "private": true,
         
     | 
| 5 | 
         
            +
              "dependencies": {
         
     | 
| 6 | 
         
            +
                "@testing-library/jest-dom": "^5.17.0",
         
     | 
| 7 | 
         
            +
                "@testing-library/react": "^13.4.0",
         
     | 
| 8 | 
         
            +
                "@testing-library/user-event": "^13.5.0",
         
     | 
| 9 | 
         
            +
                "http-proxy-middleware": "^2.0.6",
         
     | 
| 10 | 
         
            +
                "react": "^18.2.0",
         
     | 
| 11 | 
         
            +
                "react-dom": "^18.2.0",
         
     | 
| 12 | 
         
            +
                "react-scripts": "5.0.1",
         
     | 
| 13 | 
         
            +
                "web-vitals": "^2.1.4"
         
     | 
| 14 | 
         
            +
              },
         
     | 
| 15 | 
         
            +
              "scripts": {
         
     | 
| 16 | 
         
            +
                "start": "react-scripts start",
         
     | 
| 17 | 
         
            +
                "build": "react-scripts build",
         
     | 
| 18 | 
         
            +
                "test": "react-scripts test",
         
     | 
| 19 | 
         
            +
                "eject": "react-scripts eject"
         
     | 
| 20 | 
         
            +
              },
         
     | 
| 21 | 
         
            +
              "eslintConfig": {
         
     | 
| 22 | 
         
            +
                "extends": [
         
     | 
| 23 | 
         
            +
                  "react-app",
         
     | 
| 24 | 
         
            +
                  "react-app/jest"
         
     | 
| 25 | 
         
            +
                ]
         
     | 
| 26 | 
         
            +
              },
         
     | 
| 27 | 
         
            +
              "browserslist": {
         
     | 
| 28 | 
         
            +
                "production": [
         
     | 
| 29 | 
         
            +
                  ">0.2%",
         
     | 
| 30 | 
         
            +
                  "not dead",
         
     | 
| 31 | 
         
            +
                  "not op_mini all"
         
     | 
| 32 | 
         
            +
                ],
         
     | 
| 33 | 
         
            +
                "development": [
         
     | 
| 34 | 
         
            +
                  "last 1 chrome version",
         
     | 
| 35 | 
         
            +
                  "last 1 firefox version",
         
     | 
| 36 | 
         
            +
                  "last 1 safari version"
         
     | 
| 37 | 
         
            +
                ]
         
     | 
| 38 | 
         
            +
              }
         
     | 
| 39 | 
         
            +
            }
         
     | 
    	
        frontend/public/favicon.ico
    ADDED
    
    | 
											 | 
									
								
    	
        frontend/public/index.html
    ADDED
    
    | 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            <!DOCTYPE html>
         
     | 
| 2 | 
         
            +
            <html lang="en">
         
     | 
| 3 | 
         
            +
              <head>
         
     | 
| 4 | 
         
            +
                <meta charset="utf-8" />
         
     | 
| 5 | 
         
            +
                <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
         
     | 
| 6 | 
         
            +
                <meta name="viewport" content="width=device-width, initial-scale=1" />
         
     | 
| 7 | 
         
            +
                <meta name="theme-color" content="#000000" />
         
     | 
| 8 | 
         
            +
                <meta
         
     | 
| 9 | 
         
            +
                  name="description"
         
     | 
| 10 | 
         
            +
                  content="Web site created using create-react-app"
         
     | 
| 11 | 
         
            +
                />
         
     | 
| 12 | 
         
            +
                <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
         
     | 
| 13 | 
         
            +
                <!--
         
     | 
| 14 | 
         
            +
                  manifest.json provides metadata used when your web app is installed on a
         
     | 
| 15 | 
         
            +
                  user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
         
     | 
| 16 | 
         
            +
                -->
         
     | 
| 17 | 
         
            +
                <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
         
     | 
| 18 | 
         
            +
                <!--
         
     | 
| 19 | 
         
            +
                  Notice the use of %PUBLIC_URL% in the tags above.
         
     | 
| 20 | 
         
            +
                  It will be replaced with the URL of the `public` folder during the build.
         
     | 
| 21 | 
         
            +
                  Only files inside the `public` folder can be referenced from the HTML.
         
     | 
| 22 | 
         
            +
             
     | 
| 23 | 
         
            +
                  Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
         
     | 
| 24 | 
         
            +
                  work correctly both with client-side routing and a non-root public URL.
         
     | 
| 25 | 
         
            +
                  Learn how to configure a non-root public URL by running `npm run build`.
         
     | 
| 26 | 
         
            +
                -->
         
     | 
| 27 | 
         
            +
                <title>React App</title>
         
     | 
| 28 | 
         
            +
              </head>
         
     | 
| 29 | 
         
            +
              <body>
         
     | 
| 30 | 
         
            +
                <noscript>You need to enable JavaScript to run this app.</noscript>
         
     | 
| 31 | 
         
            +
                <div id="root"></div>
         
     | 
| 32 | 
         
            +
                <!--
         
     | 
| 33 | 
         
            +
                  This HTML file is a template.
         
     | 
| 34 | 
         
            +
                  If you open it directly in the browser, you will see an empty page.
         
     | 
| 35 | 
         
            +
             
     | 
| 36 | 
         
            +
                  You can add webfonts, meta tags, or analytics to this file.
         
     | 
| 37 | 
         
            +
                  The build step will place the bundled scripts into the <body> tag.
         
     | 
| 38 | 
         
            +
             
     | 
| 39 | 
         
            +
                  To begin the development, run `npm start` or `yarn start`.
         
     | 
| 40 | 
         
            +
                  To create a production bundle, use `npm run build` or `yarn build`.
         
     | 
| 41 | 
         
            +
                -->
         
     | 
| 42 | 
         
            +
              </body>
         
     | 
| 43 | 
         
            +
            </html>
         
     | 
    	
        frontend/public/logo192.png
    ADDED
    
    
											 
									 | 
									
								
    	
        frontend/public/logo512.png
    ADDED
    
    
											 
									 | 
									
								
    	
        frontend/public/manifest.json
    ADDED
    
    | 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            {
         
     | 
| 2 | 
         
            +
              "short_name": "React App",
         
     | 
| 3 | 
         
            +
              "name": "Create React App Sample",
         
     | 
| 4 | 
         
            +
              "icons": [
         
     | 
| 5 | 
         
            +
                {
         
     | 
| 6 | 
         
            +
                  "src": "favicon.ico",
         
     | 
| 7 | 
         
            +
                  "sizes": "64x64 32x32 24x24 16x16",
         
     | 
| 8 | 
         
            +
                  "type": "image/x-icon"
         
     | 
| 9 | 
         
            +
                },
         
     | 
| 10 | 
         
            +
                {
         
     | 
| 11 | 
         
            +
                  "src": "logo192.png",
         
     | 
| 12 | 
         
            +
                  "type": "image/png",
         
     | 
| 13 | 
         
            +
                  "sizes": "192x192"
         
     | 
| 14 | 
         
            +
                },
         
     | 
| 15 | 
         
            +
                {
         
     | 
| 16 | 
         
            +
                  "src": "logo512.png",
         
     | 
| 17 | 
         
            +
                  "type": "image/png",
         
     | 
| 18 | 
         
            +
                  "sizes": "512x512"
         
     | 
| 19 | 
         
            +
                }
         
     | 
| 20 | 
         
            +
              ],
         
     | 
| 21 | 
         
            +
              "start_url": ".",
         
     | 
| 22 | 
         
            +
              "display": "standalone",
         
     | 
| 23 | 
         
            +
              "theme_color": "#000000",
         
     | 
| 24 | 
         
            +
              "background_color": "#ffffff"
         
     | 
| 25 | 
         
            +
            }
         
     | 
    	
        frontend/public/robots.txt
    ADDED
    
    | 
         @@ -0,0 +1,3 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            # https://www.robotstxt.org/robotstxt.html
         
     | 
| 2 | 
         
            +
            User-agent: *
         
     | 
| 3 | 
         
            +
            Disallow:
         
     | 
    	
        frontend/src/App.css
    ADDED
    
    | 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            .App {
         
     | 
| 2 | 
         
            +
              text-align: center;
         
     | 
| 3 | 
         
            +
            }
         
     | 
| 4 | 
         
            +
             
     | 
| 5 | 
         
            +
            .App-logo {
         
     | 
| 6 | 
         
            +
              height: 40vmin;
         
     | 
| 7 | 
         
            +
              pointer-events: none;
         
     | 
| 8 | 
         
            +
            }
         
     | 
| 9 | 
         
            +
             
     | 
| 10 | 
         
            +
            @media (prefers-reduced-motion: no-preference) {
         
     | 
| 11 | 
         
            +
              .App-logo {
         
     | 
| 12 | 
         
            +
                animation: App-logo-spin infinite 20s linear;
         
     | 
| 13 | 
         
            +
              }
         
     | 
| 14 | 
         
            +
            }
         
     | 
| 15 | 
         
            +
             
     | 
| 16 | 
         
            +
            .App-header {
         
     | 
| 17 | 
         
            +
              background-color: #282c34;
         
     | 
| 18 | 
         
            +
              min-height: 100vh;
         
     | 
| 19 | 
         
            +
              display: flex;
         
     | 
| 20 | 
         
            +
              flex-direction: column;
         
     | 
| 21 | 
         
            +
              align-items: center;
         
     | 
| 22 | 
         
            +
              justify-content: center;
         
     | 
| 23 | 
         
            +
              font-size: calc(10px + 2vmin);
         
     | 
| 24 | 
         
            +
              color: white;
         
     | 
| 25 | 
         
            +
            }
         
     | 
| 26 | 
         
            +
             
     | 
| 27 | 
         
            +
            .App-link {
         
     | 
| 28 | 
         
            +
              color: #61dafb;
         
     | 
| 29 | 
         
            +
            }
         
     | 
| 30 | 
         
            +
             
     | 
| 31 | 
         
            +
            @keyframes App-logo-spin {
         
     | 
| 32 | 
         
            +
              from {
         
     | 
| 33 | 
         
            +
                transform: rotate(0deg);
         
     | 
| 34 | 
         
            +
              }
         
     | 
| 35 | 
         
            +
              to {
         
     | 
| 36 | 
         
            +
                transform: rotate(360deg);
         
     | 
| 37 | 
         
            +
              }
         
     | 
| 38 | 
         
            +
            }
         
     | 
    	
        frontend/src/App.js
    ADDED
    
    | 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            import logo from './logo.svg';
         
     | 
| 2 | 
         
            +
            import './App.css';
         
     | 
| 3 | 
         
            +
             
     | 
| 4 | 
         
            +
            function App() {
         
     | 
| 5 | 
         
            +
              return (
         
     | 
| 6 | 
         
            +
                <div className="App">
         
     | 
| 7 | 
         
            +
                  <header className="App-header">
         
     | 
| 8 | 
         
            +
                    <img src={logo} className="App-logo" alt="logo" />
         
     | 
| 9 | 
         
            +
                    <p>
         
     | 
| 10 | 
         
            +
                      Edit <code>src/App.js</code> and save to reload.
         
     | 
| 11 | 
         
            +
                    </p>
         
     | 
| 12 | 
         
            +
                    <a
         
     | 
| 13 | 
         
            +
                      className="App-link"
         
     | 
| 14 | 
         
            +
                      href="https://reactjs.org"
         
     | 
| 15 | 
         
            +
                      target="_blank"
         
     | 
| 16 | 
         
            +
                      rel="noopener noreferrer"
         
     | 
| 17 | 
         
            +
                    >
         
     | 
| 18 | 
         
            +
                      Learn React
         
     | 
| 19 | 
         
            +
                    </a>
         
     | 
| 20 | 
         
            +
                  </header>
         
     | 
| 21 | 
         
            +
                </div>
         
     | 
| 22 | 
         
            +
              );
         
     | 
| 23 | 
         
            +
            }
         
     | 
| 24 | 
         
            +
             
     | 
| 25 | 
         
            +
            export default App;
         
     | 
    	
        frontend/src/App.test.js
    ADDED
    
    | 
         @@ -0,0 +1,8 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            import { render, screen } from '@testing-library/react';
         
     | 
| 2 | 
         
            +
            import App from './App';
         
     | 
| 3 | 
         
            +
             
     | 
| 4 | 
         
            +
            test('renders learn react link', () => {
         
     | 
| 5 | 
         
            +
              render(<App />);
         
     | 
| 6 | 
         
            +
              const linkElement = screen.getByText(/learn react/i);
         
     | 
| 7 | 
         
            +
              expect(linkElement).toBeInTheDocument();
         
     | 
| 8 | 
         
            +
            });
         
     | 
    	
        frontend/src/index.css
    ADDED
    
    | 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            body {
         
     | 
| 2 | 
         
            +
              margin: 0;
         
     | 
| 3 | 
         
            +
              font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
         
     | 
| 4 | 
         
            +
                'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
         
     | 
| 5 | 
         
            +
                sans-serif;
         
     | 
| 6 | 
         
            +
              -webkit-font-smoothing: antialiased;
         
     | 
| 7 | 
         
            +
              -moz-osx-font-smoothing: grayscale;
         
     | 
| 8 | 
         
            +
            }
         
     | 
| 9 | 
         
            +
             
     | 
| 10 | 
         
            +
            code {
         
     | 
| 11 | 
         
            +
              font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
         
     | 
| 12 | 
         
            +
                monospace;
         
     | 
| 13 | 
         
            +
            }
         
     | 
    	
        frontend/src/index.js
    ADDED
    
    | 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            import React from 'react';
         
     | 
| 2 | 
         
            +
            import ReactDOM from 'react-dom/client';
         
     | 
| 3 | 
         
            +
            import './index.css';
         
     | 
| 4 | 
         
            +
            import App from './App';
         
     | 
| 5 | 
         
            +
            import reportWebVitals from './reportWebVitals';
         
     | 
| 6 | 
         
            +
             
     | 
| 7 | 
         
            +
            const root = ReactDOM.createRoot(document.getElementById('root'));
         
     | 
| 8 | 
         
            +
            root.render(
         
     | 
| 9 | 
         
            +
              <React.StrictMode>
         
     | 
| 10 | 
         
            +
                <App />
         
     | 
| 11 | 
         
            +
              </React.StrictMode>
         
     | 
| 12 | 
         
            +
            );
         
     | 
| 13 | 
         
            +
             
     | 
| 14 | 
         
            +
            // If you want to start measuring performance in your app, pass a function
         
     | 
| 15 | 
         
            +
            // to log results (for example: reportWebVitals(console.log))
         
     | 
| 16 | 
         
            +
            // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
         
     | 
| 17 | 
         
            +
            reportWebVitals();
         
     | 
    	
        frontend/src/logo.svg
    ADDED
    
    | 
											 | 
									
								
    	
        frontend/src/reportWebVitals.js
    ADDED
    
    | 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            const reportWebVitals = onPerfEntry => {
         
     | 
| 2 | 
         
            +
              if (onPerfEntry && onPerfEntry instanceof Function) {
         
     | 
| 3 | 
         
            +
                import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
         
     | 
| 4 | 
         
            +
                  getCLS(onPerfEntry);
         
     | 
| 5 | 
         
            +
                  getFID(onPerfEntry);
         
     | 
| 6 | 
         
            +
                  getFCP(onPerfEntry);
         
     | 
| 7 | 
         
            +
                  getLCP(onPerfEntry);
         
     | 
| 8 | 
         
            +
                  getTTFB(onPerfEntry);
         
     | 
| 9 | 
         
            +
                });
         
     | 
| 10 | 
         
            +
              }
         
     | 
| 11 | 
         
            +
            };
         
     | 
| 12 | 
         
            +
             
     | 
| 13 | 
         
            +
            export default reportWebVitals;
         
     | 
    	
        frontend/src/setupProxy.js
    ADDED
    
    | 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            const { createProxyMiddleware } = require('http-proxy-middleware');
         
     | 
| 2 | 
         
            +
             
     | 
| 3 | 
         
            +
            module.exports = function (app) {
         
     | 
| 4 | 
         
            +
                app.use(
         
     | 
| 5 | 
         
            +
                    '/api',
         
     | 
| 6 | 
         
            +
                    createProxyMiddleware({
         
     | 
| 7 | 
         
            +
                        pathRewrite: {
         
     | 
| 8 | 
         
            +
                            '^/api': '',
         
     | 
| 9 | 
         
            +
                        },
         
     | 
| 10 | 
         
            +
                        target: 'http://localhost:7860',
         
     | 
| 11 | 
         
            +
                        changeOrigin: true,
         
     | 
| 12 | 
         
            +
                    })
         
     | 
| 13 | 
         
            +
                );
         
     | 
| 14 | 
         
            +
            };
         
     | 
    	
        frontend/src/setupTests.js
    ADDED
    
    | 
         @@ -0,0 +1,5 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            // jest-dom adds custom jest matchers for asserting on DOM nodes.
         
     | 
| 2 | 
         
            +
            // allows you to do things like:
         
     | 
| 3 | 
         
            +
            // expect(element).toHaveTextContent(/react/i)
         
     | 
| 4 | 
         
            +
            // learn more: https://github.com/testing-library/jest-dom
         
     | 
| 5 | 
         
            +
            import '@testing-library/jest-dom';
         
     | 
    	
        requirements.txt
    ADDED
    
    | 
         @@ -0,0 +1,4 @@ 
     | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
| 
         | 
|
| 1 | 
         
            +
            fastapi==0.104.*
         
     | 
| 2 | 
         
            +
            torch==2.1.*
         
     | 
| 3 | 
         
            +
            transformers==4.*
         
     | 
| 4 | 
         
            +
            uvicorn[standard]==0.24.*
         
     |