diff --git a/api/package.json b/api/package.json index 1119bff0518..013b98b2819 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "@librechat/backend", - "version": "0.6.9", + "version": "0.6.10", "description": "", "scripts": { "start": "echo 'please run this from the root directory'", diff --git a/client/package.json b/client/package.json index 84b37c7db77..6adc99043cf 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "@librechat/frontend", - "version": "0.6.9", + "version": "0.6.10", "description": "", "type": "module", "scripts": { diff --git a/client/public/fonts/Inter-Bold.woff2 b/client/public/fonts/Inter-Bold.woff2 new file mode 100644 index 00000000000..0f1b157633c Binary files /dev/null and b/client/public/fonts/Inter-Bold.woff2 differ diff --git a/client/public/fonts/Inter-BoldItalic.woff2 b/client/public/fonts/Inter-BoldItalic.woff2 new file mode 100644 index 00000000000..bc50f24c873 Binary files /dev/null and b/client/public/fonts/Inter-BoldItalic.woff2 differ diff --git a/client/public/fonts/Inter-Italic.woff2 b/client/public/fonts/Inter-Italic.woff2 new file mode 100644 index 00000000000..4c24ce28152 Binary files /dev/null and b/client/public/fonts/Inter-Italic.woff2 differ diff --git a/client/public/fonts/Inter-Regular.woff2 b/client/public/fonts/Inter-Regular.woff2 new file mode 100644 index 00000000000..b8699af29b0 Binary files /dev/null and b/client/public/fonts/Inter-Regular.woff2 differ diff --git a/client/public/fonts/Inter-SemiBold.woff2 b/client/public/fonts/Inter-SemiBold.woff2 new file mode 100644 index 00000000000..95c48b184ea Binary files /dev/null and b/client/public/fonts/Inter-SemiBold.woff2 differ diff --git a/client/public/fonts/Inter-SemiBoldItalic.woff2 b/client/public/fonts/Inter-SemiBoldItalic.woff2 new file mode 100644 index 00000000000..ddfe19e839c Binary files /dev/null and b/client/public/fonts/Inter-SemiBoldItalic.woff2 differ diff --git a/client/public/fonts/roboto-mono-latin-400-italic.woff2 b/client/public/fonts/roboto-mono-latin-400-italic.woff2 new file mode 100644 index 00000000000..75d29cff8e3 Binary files /dev/null and b/client/public/fonts/roboto-mono-latin-400-italic.woff2 differ diff --git a/client/public/fonts/roboto-mono-latin-400-normal.woff2 b/client/public/fonts/roboto-mono-latin-400-normal.woff2 new file mode 100644 index 00000000000..53d081f3a53 Binary files /dev/null and b/client/public/fonts/roboto-mono-latin-400-normal.woff2 differ diff --git a/client/public/fonts/roboto-mono-latin-700-normal.woff2 b/client/public/fonts/roboto-mono-latin-700-normal.woff2 new file mode 100644 index 00000000000..92fe38dd414 Binary files /dev/null and b/client/public/fonts/roboto-mono-latin-700-normal.woff2 differ diff --git a/client/public/fonts/signifier-bold-italic.woff2 b/client/public/fonts/signifier-bold-italic.woff2 deleted file mode 100644 index cebb25db24a..00000000000 Binary files a/client/public/fonts/signifier-bold-italic.woff2 and /dev/null differ diff --git a/client/public/fonts/signifier-bold.woff2 b/client/public/fonts/signifier-bold.woff2 deleted file mode 100644 index b76fecbacb3..00000000000 Binary files a/client/public/fonts/signifier-bold.woff2 and /dev/null differ diff --git a/client/public/fonts/signifier-light-italic.woff2 b/client/public/fonts/signifier-light-italic.woff2 deleted file mode 100644 index dc144f106c8..00000000000 Binary files a/client/public/fonts/signifier-light-italic.woff2 and /dev/null differ diff --git a/client/public/fonts/signifier-light.woff2 b/client/public/fonts/signifier-light.woff2 deleted file mode 100644 index 1077c6b9e9c..00000000000 Binary files a/client/public/fonts/signifier-light.woff2 and /dev/null differ diff --git a/client/public/fonts/soehne-buch-kursiv.woff2 b/client/public/fonts/soehne-buch-kursiv.woff2 deleted file mode 100644 index 8d4b03588c2..00000000000 Binary files a/client/public/fonts/soehne-buch-kursiv.woff2 and /dev/null differ diff --git a/client/public/fonts/soehne-buch.woff2 b/client/public/fonts/soehne-buch.woff2 deleted file mode 100644 index b1ceb94fa0d..00000000000 Binary files a/client/public/fonts/soehne-buch.woff2 and /dev/null differ diff --git a/client/public/fonts/soehne-halbfett-kursiv.woff2 b/client/public/fonts/soehne-halbfett-kursiv.woff2 deleted file mode 100644 index f7fd3c64b00..00000000000 Binary files a/client/public/fonts/soehne-halbfett-kursiv.woff2 and /dev/null differ diff --git a/client/public/fonts/soehne-halbfett.woff2 b/client/public/fonts/soehne-halbfett.woff2 deleted file mode 100644 index 19ed66001ea..00000000000 Binary files a/client/public/fonts/soehne-halbfett.woff2 and /dev/null differ diff --git a/client/public/fonts/soehne-kraftig-kursiv.woff2 b/client/public/fonts/soehne-kraftig-kursiv.woff2 deleted file mode 100644 index 669ab6920f2..00000000000 Binary files a/client/public/fonts/soehne-kraftig-kursiv.woff2 and /dev/null differ diff --git a/client/public/fonts/soehne-kraftig.woff2 b/client/public/fonts/soehne-kraftig.woff2 deleted file mode 100644 index 59c98a170f6..00000000000 Binary files a/client/public/fonts/soehne-kraftig.woff2 and /dev/null differ diff --git a/client/public/fonts/soehne-mono-buch-kursiv.woff2 b/client/public/fonts/soehne-mono-buch-kursiv.woff2 deleted file mode 100644 index c20b7426345..00000000000 Binary files a/client/public/fonts/soehne-mono-buch-kursiv.woff2 and /dev/null differ diff --git a/client/public/fonts/soehne-mono-buch.woff2 b/client/public/fonts/soehne-mono-buch.woff2 deleted file mode 100644 index 68e14f30396..00000000000 Binary files a/client/public/fonts/soehne-mono-buch.woff2 and /dev/null differ diff --git a/client/public/fonts/soehne-mono-halbfett.woff2 b/client/public/fonts/soehne-mono-halbfett.woff2 deleted file mode 100644 index e14cbdc5361..00000000000 Binary files a/client/public/fonts/soehne-mono-halbfett.woff2 and /dev/null differ diff --git a/client/src/components/Chat/Footer.tsx b/client/src/components/Chat/Footer.tsx index 0e28415f308..66d91e34d01 100644 --- a/client/src/components/Chat/Footer.tsx +++ b/client/src/components/Chat/Footer.tsx @@ -17,7 +17,7 @@ export default function Footer() { rel="noreferrer" className="underline" > - {config?.appTitle || 'LibreChat'} v0.6.9 + {config?.appTitle || 'LibreChat'} v0.6.10 {' - '} {localize('com_ui_new_footer')} diff --git a/client/src/components/Chat/Messages/Content/Markdown.tsx b/client/src/components/Chat/Messages/Content/Markdown.tsx index ef438a15212..1a80449ba8e 100644 --- a/client/src/components/Chat/Messages/Content/Markdown.tsx +++ b/client/src/components/Chat/Messages/Content/Markdown.tsx @@ -41,7 +41,7 @@ export const p = memo(({ children }: { children: React.ReactNode }) => { return

{children}

; }); -const cursor = ' ⬤'; +const cursor = ' '; const Markdown = memo(({ content, message, showCursor }: TContentProps) => { const { isSubmitting, latestMessage } = useChatContext(); const LaTeXParsing = useRecoilValue(store.LaTeXParsing); diff --git a/client/src/components/Chat/Messages/Content/MessageContent.tsx b/client/src/components/Chat/Messages/Content/MessageContent.tsx index 42f06373f0d..540bb001ff8 100644 --- a/client/src/components/Chat/Messages/Content/MessageContent.tsx +++ b/client/src/components/Chat/Messages/Content/MessageContent.tsx @@ -57,6 +57,7 @@ const DisplayMessage = ({ text, isCreatedByUser, message, showCursor }: TDisplay ))}
- {config?.appTitle || 'LibreChat'} v0.6.9 + {config?.appTitle || 'LibreChat'} v0.6.10 {' - '}. {localize('com_ui_pay_per_call')} diff --git a/client/src/style.css b/client/src/style.css index 37129ec7b6d..0d17e880306 100644 --- a/client/src/style.css +++ b/client/src/style.css @@ -10,37 +10,111 @@ @font-face { font-display: swap; - font-family: Signifier; + font-family: Inter; font-style: normal; font-weight: 400; - src: url("$fonts/signifier-light.woff2") format("woff2") + src: url("$fonts/Inter-Regular.woff2") format("woff2"); + size-adjust: 94%; } @font-face { font-display: swap; - font-family: Signifier; + font-family: Inter; font-style: italic; font-weight: 400; - src: url("$fonts/signifier-light-italic.woff2") format("woff2") + src: url("$fonts/Inter-Italic.woff2") format("woff2"); + size-adjust: 94%; } @font-face { font-display: swap; - font-family: Signifier; + font-family: Inter; font-style: normal; - font-weight: 700; - src: url("$fonts/signifier-bold.woff2") format("woff2") + font-weight: 500; + src: url("$fonts/Inter-SemiBold.woff2") format("woff2"); + size-adjust: 94%; +} + +@font-face { + font-display: swap; + font-family: Inter; + font-style: italic; + font-weight: 500; + src: url("$fonts/Inter-SemiBoldItalic.woff2") format("woff2"); + size-adjust: 94%; +} + +@font-face { + font-display: swap; + font-family: Inter; + font-style: normal; + font-weight: 600; + src: url("$fonts/Inter-Bold.woff2") format("woff2"); + size-adjust: 94%; } @font-face { font-display: swap; - font-family: Signifier; + font-family: Inter; font-style: italic; + font-weight: 600; + src: url("$fonts/Inter-BoldItalic.woff2") format("woff2"); + size-adjust: 94%; +} + +@font-face { + font-display: swap; + font-family: Roboto Mono; + font-style: normal; + font-weight: 400; + src: url("$fonts/roboto-mono-latin-400-normal.woff2") format("woff2") +} + +@font-face { + font-display: swap; + font-family: Roboto Mono; + font-style: normal; font-weight: 700; - src: url("$fonts/signifier-bold-italic.woff2") format("woff2") + src: url("$fonts/roboto-mono-latin-700-normal.woff2") format("woff2") } @font-face { + font-display: swap; + font-family: Roboto Mono; + font-style: italic; + font-weight: 400; + src: url("$fonts/roboto-mono-latin-400-italic.woff2") format("woff2") +} + +/* + +The default ChatGPT fonts, according to OpenAI's brand guidelines, are proprietary and require appropriate font license according to your use case. + +They can be purchased here: https://klim.co.nz/buy/soehne/ + +The fonts in question are (9 total): + +> - Söhne (Buch Kursiv, Buch, Halbfett Kursiv, Halbfett, Kraftig Kursiv, Kraftig, Mono Buch Kursiv, Mono Buch, Mono Halbfett) + +If you have purchased a license, you can use the commented-out `@font-face` declarations below to include them in your project. + +Step 1: Buy whatever license applies to you and allows use of `.woff2` font files (likely web font license). +Step 2: Place them in ./client/public/fonts/ directory. +Step 3: Replace the current `fontFamily` config in ./client/tailwind.config.cjs with the following: + +``` + fontFamily: { + sans: ['Söhne', 'sans-serif'], + mono: ['Söhne Mono', 'monospace'], + }, +``` + +Step 4: Uncomment all Söhne font-face declarations below. +Step 5: rebuild frontend code: `npm run frontend` (or rebuild docker). + +*/ + +/* @font-face { font-display: swap; font-family: Söhne; font-style: normal; @@ -110,7 +184,7 @@ font-style: italic; font-weight: 400; src: url("$fonts/soehne-mono-buch-kursiv.woff2") format("woff2") -} +} */ /* * { box-sizing: border-box; @@ -1311,25 +1385,6 @@ html { animation: spin 1s linear infinite; } -.result-streaming { - -webkit-animation: blink 1s steps(5, start) infinite; - animation: blink 1s steps(5, start) infinite; - content:"⬤ "; - margin-left: 0.25rem; - vertical-align: baseline; -} - -/* .result-streaming>:not(ol):not(ul):not(pre):last-child:after, -.result-streaming>ol:last-child li:last-child:after, -.result-streaming>pre:last-child code:after, -.result-streaming>ul:last-child li:last-child:after { - -webkit-animation:blink 1s steps(5,start) infinite; - animation:blink 1s steps(5,start) infinite; - content:"▋"; - margin-left:.25rem; - vertical-align:baseline -} */ - .form-input, .form-multiselect, .form-select, @@ -1870,3 +1925,74 @@ html { --tw-shadow: inset 0 0 0 1px rgba(0,0,0,.25); --tw-shadow-colored: inset 0 0 0 1px var(--tw-shadow-color); } + +.result-streaming>:not(ol):not(ul):not(pre):last-child:after, +.result-streaming>pre:last-child code:after { + display: inline-block; /* Add this line */ + content:"⬤"; + width: 12px; + height: 12px; + font-family:system-ui,Inter,Söhne Circle,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif; + line-height:normal; + margin-left:.25rem; + vertical-align:middle; + font-size: 0.5rem; +} + +.result-streaming>pre:last-child code { + background: url('path-to-circle-image') no-repeat right center; + padding-right: 1em; /* Adjust as necessary */ +} + +@supports (selector(:has(*))) { + .result-streaming>ol:last-child>li:last-child>ol:last-child>li:last-child:after, + .result-streaming>ol:last-child>li:last-child>ol:last-child>li:last-child>ol:last-child>li:last-child:after, + .result-streaming>ol:last-child>li:last-child>ol:last-child>li:last-child>ul:last-child>li:last-child:after, + .result-streaming>ol:last-child>li:last-child>ul:last-child>li:last-child:after, + .result-streaming>ol:last-child>li:last-child>ul:last-child>li:last-child>ol:last-child>li:last-child:after, + .result-streaming>ol:last-child>li:last-child>ul:last-child>li:last-child>ul:last-child>li:last-child:after, + .result-streaming>ul:last-child>li:last-child>ol:last-child>li:last-child:after, + .result-streaming>ul:last-child>li:last-child>ol:last-child>li:last-child>ol:last-child>li:last-child:after, + .result-streaming>ul:last-child>li:last-child>ol:last-child>li:last-child>ul:last-child>li:last-child:after, + .result-streaming>ul:last-child>li:last-child>ul:last-child>li:last-child:after, + .result-streaming>ul:last-child>li:last-child>ul:last-child>li:last-child>ol:last-child>li:last-child:after, + .result-streaming>ul:last-child>li:last-child>ul:last-child>li:last-child>ul:last-child>li:last-child:after, + .result-streaming>ul:last-child>li:last-child[*|\:not-has\(]:after { + content:"⬤"; + font-family:system-ui,Inter,Söhne Circle,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif; + line-height:normal; + margin-left:.25rem; + vertical-align:baseline + } + .result-streaming>ul:last-child>li:last-child:not(:has(*>li)):after { + content:"⬤"; + font-family:system-ui,Inter,Söhne Circle,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif; + line-height:normal; + margin-left:.25rem; + vertical-align:baseline + } + .result-streaming>ol:last-child>li:last-child[*|\:not-has\(]:after { + content:"⬤"; + font-family:system-ui,Inter,Söhne Circle,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif; + line-height:normal; + margin-left:.25rem; + vertical-align:baseline + } + .result-streaming>ol:last-child>li:last-child:not(:has(*>li)):after { + content:"⬤"; + font-family:system-ui,Inter,Söhne Circle,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif; + line-height:normal; + margin-left:.25rem; + vertical-align:baseline + } +} +@supports not (selector(:has(*))) { + .result-streaming>ol:last-child>li:last-child:after, + .result-streaming>ul:last-child>li:last-child:after { + content:"⬤"; + font-family:system-ui,Inter,Söhne Circle,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif; + line-height:normal; + margin-left:.25rem; + vertical-align:baseline + } +} \ No newline at end of file diff --git a/client/tailwind.config.cjs b/client/tailwind.config.cjs index c436e2d6362..d2c48aa7909 100644 --- a/client/tailwind.config.cjs +++ b/client/tailwind.config.cjs @@ -10,9 +10,13 @@ module.exports = { // 'gpt-dark-gray': '#343541', // }, fontFamily: { - sans: ['Söhne', 'sans-serif'], - mono: ['Söhne Mono', 'monospace'], + sans: ['Inter', 'sans-serif'], + mono: ['Roboto Mono', 'monospace'], }, + // fontFamily: { + // sans: ['Söhne', 'sans-serif'], + // mono: ['Söhne Mono', 'monospace'], + // }, extend: { width: { 'authPageWidth': '370px', diff --git a/e2e/jestSetup.js b/e2e/jestSetup.js index 9ddfc532e32..64f5bc40a1e 100644 --- a/e2e/jestSetup.js +++ b/e2e/jestSetup.js @@ -1,3 +1,3 @@ -// v0.6.9 +// v0.6.10 // See .env.test.example for an example of the '.env.test' file. require('dotenv').config({ path: './e2e/.env.test' }); diff --git a/index.html b/index.html index 4f3c2db66bd..c0b1b0117b8 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ - + diff --git a/package-lock.json b/package-lock.json index 3560ff5b8ab..4630faac920 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "LibreChat", - "version": "0.6.9", + "version": "0.6.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "LibreChat", - "version": "0.6.9", + "version": "0.6.10", "license": "ISC", "workspaces": [ "api", @@ -38,7 +38,7 @@ }, "api": { "name": "@librechat/backend", - "version": "0.6.9", + "version": "0.6.10", "license": "ISC", "dependencies": { "@anthropic-ai/sdk": "^0.5.4", @@ -135,7 +135,7 @@ }, "client": { "name": "@librechat/frontend", - "version": "0.6.9", + "version": "0.6.10", "license": "ISC", "dependencies": { "@headlessui/react": "^1.7.13", diff --git a/package.json b/package.json index 9ba9d300b61..fbe29e5f3fd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LibreChat", - "version": "0.6.9", + "version": "0.6.10", "description": "", "workspaces": [ "api", diff --git a/packages/data-provider/package.json b/packages/data-provider/package.json index db0f4f3917a..eeebf1f7c76 100644 --- a/packages/data-provider/package.json +++ b/packages/data-provider/package.json @@ -1,6 +1,6 @@ { "name": "librechat-data-provider", - "version": "0.4.1", + "version": "0.4.2", "description": "data services for librechat apps", "main": "dist/index.js", "module": "dist/index.es.js", diff --git a/packages/data-provider/src/config.ts b/packages/data-provider/src/config.ts index 1864cd7ddd7..a0fad47a394 100644 --- a/packages/data-provider/src/config.ts +++ b/packages/data-provider/src/config.ts @@ -357,7 +357,7 @@ export enum Constants { /** * Key for the app's version. */ - VERSION = 'v0.6.9', + VERSION = 'v0.6.10', /** * Key for the Custom Config's version (librechat.yaml). */ diff --git a/prettier.config.js b/prettier.config.js index a2c8ef261cb..9f1e18e9ab9 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -1,4 +1,4 @@ -// v0.6.9 +// v0.6.10 module.exports = { tailwindConfig: './client/tailwind.config.cjs', printWidth: 100,