From 5702b0d498808a50893a9e37b962a81279e28cc2 Mon Sep 17 00:00:00 2001 From: Vincent Emonet Date: Wed, 10 Jan 2024 13:33:29 +0100 Subject: [PATCH] fix docker entrypoint --- docker-compose.yml | 21 ++++++++++++++++++++- frontend/package.json | 1 + frontend/pnpm-lock.yaml | 7 +++++++ frontend/public/favicon.svg | 9 --------- frontend/public/logo.png | Bin 0 -> 35083 bytes frontend/src/components/chat.tsx | 23 +++++++++++------------ frontend/src/layouts/Layout.astro | 2 +- scripts/qdrant_config.yml | 12 ++++++++++++ 8 files changed, 52 insertions(+), 23 deletions(-) delete mode 100644 frontend/public/favicon.svg create mode 100644 frontend/public/logo.png create mode 100644 scripts/qdrant_config.yml diff --git a/docker-compose.yml b/docker-compose.yml index 0a2c9ca..6d6916b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,7 +15,7 @@ services: shm_size: '16g' # ports: # - 8000:8000 - # entrypoint: uvicorn scripts.main:app --reload + entrypoint: uvicorn scripts.main:app deploy: # Enable GPU in the container resources: reservations: @@ -40,6 +40,25 @@ services: networks: - nginx + + # qdrant: + # # https://hub.docker.com/r/qdrant/qdrant/tags + # image: qdrant/qdrant:v1.5.1 + # restart: unless-stopped + # volumes: + # - ./data/vectorstore/qdrant:/qdrant/storage + # - ./scripts/qdrant_config.yml:/qdrant/config/production.yaml + # environment: + # - QDRANT_ALLOW_RECOVERY_MODE=true + # - VIRTUAL_HOST=qdrant.137.120.31.148.nip.io + # - LETSENCRYPT_HOST=qdrant.137.120.31.148.nip.io + # - VIRTUAL_PORT=6333 + # # ports: + # # - 6333:6333 + # # command: + # # - ./qdrant --config-path /qdrant/qdrant_config.yml + + # Also required to deploy containers publicly networks: nginx: diff --git a/frontend/package.json b/frontend/package.json index e5315a7..7e03f6e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,6 +16,7 @@ "@nanostores/solid": "^0.4.2", "astro": "^4.1.1", "daisyui": "^4.5.0", + "dompurify": "^3.0.8", "marked": "^11.1.1", "nanostores": "^0.9.5", "solid-js": "^1.8.9", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 31aad1c..0149657 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -23,6 +23,9 @@ dependencies: daisyui: specifier: ^4.5.0 version: 4.5.0(postcss@8.4.33) + dompurify: + specifier: ^3.0.8 + version: 3.0.8 marked: specifier: ^11.1.1 version: 11.1.1 @@ -3217,6 +3220,10 @@ packages: esutils: 2.0.3 dev: true + /dompurify@3.0.8: + resolution: {integrity: sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ==} + dev: false + /dset@3.1.3: resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==} engines: {node: '>=4'} diff --git a/frontend/public/favicon.svg b/frontend/public/favicon.svg deleted file mode 100644 index f157bd1..0000000 --- a/frontend/public/favicon.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/frontend/public/logo.png b/frontend/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6c22dfb3e9968e74d81468f30d600c48eecb7dce GIT binary patch literal 35083 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 -
-
+
{/* Chat messages */} @@ -143,8 +143,7 @@ export default function Chat() {
-
-
+
{/* Add sources when RAG */} { msg.sources.length > 0 && <> @@ -184,20 +183,20 @@ export default function Chat() { {/* Warning message */} { warningMsg().length > 0 &&
- + } {/* List of examples */}
- {(example, _i) => + {(example) => }
- {/* User input border-t border-slate-500 dark:border-slate-500 */} + {/* User input */}
handleSubmit(e)}>
handleInput(e)} onKeyDown={(e) => handleKeyPress(e)} - >
+ />
diff --git a/frontend/src/layouts/Layout.astro b/frontend/src/layouts/Layout.astro index 6967fa2..da32b12 100644 --- a/frontend/src/layouts/Layout.astro +++ b/frontend/src/layouts/Layout.astro @@ -14,7 +14,7 @@ const { title } = Astro.props; - + {title} diff --git a/scripts/qdrant_config.yml b/scripts/qdrant_config.yml new file mode 100644 index 0000000..6ed39c2 --- /dev/null +++ b/scripts/qdrant_config.yml @@ -0,0 +1,12 @@ +# Default: https://github.com/qdrant/qdrant/blob/master/config/config.yaml +log_level: INFO +telemetry_disabled: true + +service: + api_key: TOCHANGE + +storage: + # Where to store all the data + storage_path: ./storage + # Where to store snapshots + snapshots_path: ./snapshots