From d9a4825bf69ac2694dbecd1907117392b9b8936b Mon Sep 17 00:00:00 2001 From: Reinder Vos de Wael Date: Tue, 24 Sep 2024 14:09:38 -0400 Subject: [PATCH 1/8] First working version --- package-lock.json | 13 +++ package.json | 2 + src/lib/components/Navigation.svelte | 1 + src/lib/icons/EditIcon.svelte | 1 + src/lib/icons/EyeIcon.svelte | 1 + src/lib/icons/PlusIcon.svelte | 1 + src/lib/icons/SaveIcon.svelte | 1 + src/lib/icons/TrashIcon.svelte | 1 + src/lib/server/secrets.ts | 2 + src/routes/+layout.svelte | 3 +- src/routes/api/claude/single/+server.ts | 40 +++++++++ src/routes/api/claude/stream/+server.ts | 67 +++++++++++++++ src/routes/api/markdown2docx/+server.ts | 23 ++++++ src/routes/document-generation/+page.svelte | 82 +++++++++++++++++++ .../document-generation/SectionNode.svelte | 74 +++++++++++++++++ src/routes/document-generation/presets.ts | 44 ++++++++++ src/routes/document-generation/section.ts | 66 +++++++++++++++ src/routes/gpt/Chat/Chat.svelte | 2 +- 18 files changed, 422 insertions(+), 2 deletions(-) create mode 100644 src/lib/icons/EditIcon.svelte create mode 100644 src/lib/icons/EyeIcon.svelte create mode 100644 src/lib/icons/PlusIcon.svelte create mode 100644 src/lib/icons/SaveIcon.svelte create mode 100644 src/lib/icons/TrashIcon.svelte create mode 100644 src/routes/api/claude/single/+server.ts create mode 100644 src/routes/api/claude/stream/+server.ts create mode 100644 src/routes/api/markdown2docx/+server.ts create mode 100644 src/routes/document-generation/+page.svelte create mode 100644 src/routes/document-generation/SectionNode.svelte create mode 100644 src/routes/document-generation/presets.ts create mode 100644 src/routes/document-generation/section.ts diff --git a/package-lock.json b/package-lock.json index 9e329ff..17a739c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "highlight.js": "^11.10.0", "openai": "^4.52.4", "pdfjs-dist": "^4.4.168", + "sortablejs": "^1.15.3", "svelte-markdown": "^0.4.1", "winston": "^3.13.0" }, @@ -35,6 +36,7 @@ "@types/jsonwebtoken": "^9.0.6", "@types/node": "20.12.2", "@types/showdown": "^2.0.6", + "@types/sortablejs": "^1.15.8", "@typescript-eslint/eslint-plugin": "^7.16.0", "@typescript-eslint/parser": "^7.16.0", "autoprefixer": "10.4.19", @@ -2681,6 +2683,12 @@ "integrity": "sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ==", "dev": true }, + "node_modules/@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "dev": true + }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", @@ -6900,6 +6908,11 @@ "sorcery": "bin/sorcery" } }, + "node_modules/sortablejs": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.3.tgz", + "integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==" + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", diff --git a/package.json b/package.json index 686da5b..7617a9c 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "@types/jsonwebtoken": "^9.0.6", "@types/node": "20.12.2", "@types/showdown": "^2.0.6", + "@types/sortablejs": "^1.15.8", "@typescript-eslint/eslint-plugin": "^7.16.0", "@typescript-eslint/parser": "^7.16.0", "autoprefixer": "10.4.19", @@ -60,6 +61,7 @@ "highlight.js": "^11.10.0", "openai": "^4.52.4", "pdfjs-dist": "^4.4.168", + "sortablejs": "^1.15.3", "svelte-markdown": "^0.4.1", "winston": "^3.13.0" }, diff --git a/src/lib/components/Navigation.svelte b/src/lib/components/Navigation.svelte index cd6fd6b..628ca99 100644 --- a/src/lib/components/Navigation.svelte +++ b/src/lib/components/Navigation.svelte @@ -5,6 +5,7 @@ const drawerStore = getDrawerStore(); const pages = [ { name: 'Chatbot', href: '/gpt' }, + { name: 'Document Generation', href: '/document-generation' }, { name: 'Document Intelligence', href: '/document-intelligence' }, { name: 'Diarize (Submit)', href: '/diarize-submit' }, { name: 'Diarize (Retrieve)', href: '/diarize-retrieve' }, diff --git a/src/lib/icons/EditIcon.svelte b/src/lib/icons/EditIcon.svelte new file mode 100644 index 0000000..a758e38 --- /dev/null +++ b/src/lib/icons/EditIcon.svelte @@ -0,0 +1 @@ + diff --git a/src/lib/icons/EyeIcon.svelte b/src/lib/icons/EyeIcon.svelte new file mode 100644 index 0000000..07cf59d --- /dev/null +++ b/src/lib/icons/EyeIcon.svelte @@ -0,0 +1 @@ + diff --git a/src/lib/icons/PlusIcon.svelte b/src/lib/icons/PlusIcon.svelte new file mode 100644 index 0000000..80becd5 --- /dev/null +++ b/src/lib/icons/PlusIcon.svelte @@ -0,0 +1 @@ + diff --git a/src/lib/icons/SaveIcon.svelte b/src/lib/icons/SaveIcon.svelte new file mode 100644 index 0000000..e62cf3d --- /dev/null +++ b/src/lib/icons/SaveIcon.svelte @@ -0,0 +1 @@ + diff --git a/src/lib/icons/TrashIcon.svelte b/src/lib/icons/TrashIcon.svelte new file mode 100644 index 0000000..265d1ae --- /dev/null +++ b/src/lib/icons/TrashIcon.svelte @@ -0,0 +1 @@ + diff --git a/src/lib/server/secrets.ts b/src/lib/server/secrets.ts index 5c66c33..41551f8 100644 --- a/src/lib/server/secrets.ts +++ b/src/lib/server/secrets.ts @@ -18,3 +18,5 @@ export const AZURE_DOCUMENT_INTELLIGENCE_KEY = env.AZURE_DOCUMENT_INTELLIGENCE_K export const AWS_ACCESS_KEY = env.AWS_ACCESS_KEY || ''; export const AWS_SECRET_ACCESS_KEY = env.AWS_SECRET_ACCESS_KEY || ''; + +export const PANDOC_SERVER_ENDPOINT = env.PANDOC_SERVER_ENDPOINT || ''; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index d4c7dc2..d94d197 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -3,7 +3,7 @@ import Navigation from '$lib/components/Navigation.svelte'; import '@cmi-dair/skeleton-themes/cmi.postcss'; import { arrow, autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'; - import { Drawer, Toast, initializeStores, storePopup } from '@skeletonlabs/skeleton'; + import { Drawer, Toast, initializeStores, storePopup, Modal } from '@skeletonlabs/skeleton'; import hljs from 'highlight.js/lib/core'; import bash from 'highlight.js/lib/languages/bash'; @@ -35,6 +35,7 @@ Agate +

Navigation

diff --git a/src/routes/api/claude/single/+server.ts b/src/routes/api/claude/single/+server.ts new file mode 100644 index 0000000..c2913c2 --- /dev/null +++ b/src/routes/api/claude/single/+server.ts @@ -0,0 +1,40 @@ +import { AWS_ACCESS_KEY, AWS_SECRET_ACCESS_KEY } from '$lib/server/secrets.js'; +import type { Message } from '$lib/types'; +import { BedrockRuntimeClient, ConverseCommand } from '@aws-sdk/client-bedrock-runtime'; + +export async function POST({ request }) { + const data = await request.json(); + const messages = data.messages as Message[]; + const model = data.model; + const systemMessage = messages.filter((message) => message.role === 'system')[0]; + const conversation = messages.filter((message) => message.role !== 'system'); + const conversationCommand = conversation.map((message) => ({ + role: message.role, + content: [{ text: message.content }] + })); + let region: string; + + if (model === 'anthropic.claude-3-5-sonnet-20240620-v1:0') { + region = 'us-east-1'; + } else { + region = 'us-west-2'; + } + + const bedrockRuntime = new BedrockRuntimeClient({ + region, + credentials: { accessKeyId: AWS_ACCESS_KEY, secretAccessKey: AWS_SECRET_ACCESS_KEY } + }); + + const command = new ConverseCommand({ + modelId: model, + // @ts-expect-error because our message type contains a 'system' role. + messages: conversationCommand, + system: [{ text: systemMessage.content }] + }); + const response = await bedrockRuntime.send(command); + if (!response.output?.message?.content) { + return new Response(''); + } + const message = response.output?.message?.content[0].text; + return new Response(message); +} diff --git a/src/routes/api/claude/stream/+server.ts b/src/routes/api/claude/stream/+server.ts new file mode 100644 index 0000000..5618fb1 --- /dev/null +++ b/src/routes/api/claude/stream/+server.ts @@ -0,0 +1,67 @@ +import { AWS_ACCESS_KEY, AWS_SECRET_ACCESS_KEY } from '$lib/server/secrets.js'; +import { logger } from '$lib/server/utils'; +import type { Message } from '$lib/types'; +import { BedrockRuntimeClient, ConverseStreamCommand } from '@aws-sdk/client-bedrock-runtime'; + +export async function POST({ request }) { + const data = await request.json(); + const messages = data.messages as Message[]; + const model = data.model; + const systemMessage = messages.filter((message) => message.role === 'system')[0]; + const conversation = messages.filter((message) => message.role !== 'system'); + const conversationCommand = conversation.map((message) => ({ + role: message.role, + content: [{ text: message.content }] + })); + let region: string; + + if (model === 'anthropic.claude-3-5-sonnet-20240620-v1:0') { + region = 'us-east-1'; + } else { + region = 'us-west-2'; + } + + const bedrockRuntime = new BedrockRuntimeClient({ + region, + credentials: { accessKeyId: AWS_ACCESS_KEY, secretAccessKey: AWS_SECRET_ACCESS_KEY } + }); + + const command = new ConverseStreamCommand({ + modelId: model, + // @ts-expect-error because our message type contains a 'system' role. + messages: conversationCommand, + system: [{ text: systemMessage.content }] + }); + const response = await bedrockRuntime.send(command); + if (!response.stream) { + return new Response('No stream in response', { status: 500 }); + } + + const stream = new ReadableStream({ + async start(controller) { + if (!response.stream) { + controller.close(); + return; + } + + for await (const item of response.stream) { + controller.enqueue( + JSON.stringify({ data: { content: item.contentBlockDelta?.delta?.text } }) + '\n\n' + ); + } + + controller.close(); + }, + cancel(controller) { + logger.info('Stream cancelled'); + controller.close(); + } + }); + + return new Response(stream, { + headers: { + 'cache-control': 'no-cache', + 'content-type': 'text/event-stream' + } + }); +} diff --git a/src/routes/api/markdown2docx/+server.ts b/src/routes/api/markdown2docx/+server.ts new file mode 100644 index 0000000..312f52c --- /dev/null +++ b/src/routes/api/markdown2docx/+server.ts @@ -0,0 +1,23 @@ +import { PANDOC_SERVER_ENDPOINT } from '$lib/server/secrets.js'; +import { logger } from '$lib/server/utils'; + +export const POST = async ({ request, fetch }) => { + logger.info('Pandoc API called'); + + const markdown = await request.text(); + const blob = new Blob([markdown], { type: 'text/markdown' }); + const form = new FormData(); + form.append('to', 'docx'); + form.append('from', 'md'); + form.append('file', blob); + + const response = await fetch(PANDOC_SERVER_ENDPOINT, { + method: 'POST', + body: form + }); + + if (!response.ok) { + return new Response(await response.text(), { status: 500 }); + } + return new Response(await response.blob()); +}; diff --git a/src/routes/document-generation/+page.svelte b/src/routes/document-generation/+page.svelte new file mode 100644 index 0000000..4497b4f --- /dev/null +++ b/src/routes/document-generation/+page.svelte @@ -0,0 +1,82 @@ + + +{#if isLoading} + +{:else} +
+ + {}} /> + +
+{/if} diff --git a/src/routes/document-generation/SectionNode.svelte b/src/routes/document-generation/SectionNode.svelte new file mode 100644 index 0000000..89ac019 --- /dev/null +++ b/src/routes/document-generation/SectionNode.svelte @@ -0,0 +1,74 @@ + + +
+
+ {#if editable} + + {:else} + {section.title} + {/if} +
+ + + {#if !isRoot} + + {/if} +
+
+
+ {#if editable} + + + - - - - + + + + - - + {#if form?.urls} diff --git a/src/routes/diarize-submit/+page.svelte b/src/routes/diarize-submit/+page.svelte index fb57ee3..4fbd2f5 100644 --- a/src/routes/diarize-submit/+page.svelte +++ b/src/routes/diarize-submit/+page.svelte @@ -9,22 +9,16 @@ - - - - + + diff --git a/src/routes/document-intelligence/+page.svelte b/src/routes/document-intelligence/+page.svelte index c105d0c..341d18a 100644 --- a/src/routes/document-intelligence/+page.svelte +++ b/src/routes/document-intelligence/+page.svelte @@ -44,16 +44,14 @@ - - - + diff --git a/src/routes/embedding/+page.svelte b/src/routes/embedding/+page.svelte index 7841423..3b5a77b 100644 --- a/src/routes/embedding/+page.svelte +++ b/src/routes/embedding/+page.svelte @@ -20,18 +20,16 @@ text file like .txt.`; - - - - + + diff --git a/src/routes/gpt/+page.svelte b/src/routes/gpt/+page.svelte index 1c82b04..0c05c49 100644 --- a/src/routes/gpt/+page.svelte +++ b/src/routes/gpt/+page.svelte @@ -1,19 +1,19 @@ - {#each Object.keys(prompts.system) as name} @@ -34,6 +33,5 @@ rows="8" placeholder="Lorem ipsum dolor sit amet consectetur adipisicing elit." bind:value={systemPrompt} - {disabled} - /> + > diff --git a/src/routes/text-to-speech/+page.svelte b/src/routes/text-to-speech/+page.svelte index 9021c07..63a97ec 100644 --- a/src/routes/text-to-speech/+page.svelte +++ b/src/routes/text-to-speech/+page.svelte @@ -41,39 +41,37 @@ - - - - - + + - - + + - - - + + diff --git a/src/routes/transcription/+page.server.ts b/src/routes/transcription/+page.server.ts index 00a34c6..1044d57 100644 --- a/src/routes/transcription/+page.server.ts +++ b/src/routes/transcription/+page.server.ts @@ -3,7 +3,7 @@ import ffmpeg from 'fluent-ffmpeg'; import fs from 'fs'; import path from 'node:path'; import { memoryFileToDiskFile, diskFileToMemoryFile } from '$lib/fileHandling'; -import type { whisperLanguagesTypes } from '$lib/types'; +import type { whisperLanguagesTypes } from './whisperLanguages'; import { logger } from '$lib/server/utils'; import { getAzureOpenAiClient } from '$lib/server/azure'; import { AZURE_OPENAI_WHISPER_DEPLOYMENT_NAME } from '$lib/server/secrets'; diff --git a/src/routes/transcription/+page.svelte b/src/routes/transcription/+page.svelte index 6fe64f5..8535eba 100644 --- a/src/routes/transcription/+page.svelte +++ b/src/routes/transcription/+page.svelte @@ -21,27 +21,25 @@ - - - - - - + + + + diff --git a/src/routes/transcription/whisperLanguages.ts b/src/routes/transcription/whisperLanguages.ts index 5c1be23..af2057d 100644 --- a/src/routes/transcription/whisperLanguages.ts +++ b/src/routes/transcription/whisperLanguages.ts @@ -1,4 +1,61 @@ -import type { whisperLanguagesTypes } from '$lib/types'; +export type whisperLanguagesTypes = + | 'af' + | 'ar' + | 'hy' + | 'az' + | 'be' + | 'bs' + | 'bg' + | 'ca' + | 'zh' + | 'hr' + | 'cs' + | 'da' + | 'nl' + | 'en' + | 'et' + | 'fi' + | 'fr' + | 'gl' + | 'de' + | 'el' + | 'he' + | 'hi' + | 'hu' + | 'is' + | 'id' + | 'it' + | 'ja' + | 'kn' + | 'kk' + | 'ko' + | 'lv' + | 'lt' + | 'mk' + | 'ms' + | 'mr' + | 'mi' + | 'ne' + | 'no' + | 'fa' + | 'pl' + | 'pt' + | 'ro' + | 'ru' + | 'sr' + | 'sk' + | 'sl' + | 'es' + | 'sw' + | 'sv' + | 'tl' + | 'ta' + | 'th' + | 'tr' + | 'uk' + | 'ur' + | 'vi' + | 'cy'; export const whisperLanguages: Record = { English: 'en', diff --git a/tests/navigation.test.ts b/tests/navigation.test.ts index 434b238..7931049 100644 --- a/tests/navigation.test.ts +++ b/tests/navigation.test.ts @@ -27,7 +27,7 @@ test('clicking on a link changes the route', async ({ page }) => { for (const link of links) { const href = await link.getAttribute('href'); await link.click(); - await page.waitForTimeout(500); + await page.waitForTimeout(1000); expect(page.url()).toBe('http://localhost:4173' + href); } From bd50a018b8c8ab60bc1fcf45bc64d7a45497bd82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 15:37:23 -0400 Subject: [PATCH 4/8] Bump vite in the npm_and_yarn group across 1 directory (#90) Bumps the npm_and_yarn group with 1 update in the / directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). Updates `vite` from 5.4.4 to 5.4.8 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v5.4.8/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.4.8/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 92 ++++++++--------------------------------------- package.json | 2 +- 2 files changed, 15 insertions(+), 79 deletions(-) diff --git a/package-lock.json b/package-lock.json index d06b27a..5e90320 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,7 +50,7 @@ "tailwindcss": "3.4.3", "tslib": "^2.6.3", "typescript": "^5.5.3", - "vite": "^5.3.3", + "vite": "^5.4.8", "vite-plugin-tailwind-purgecss": "^0.2.1", "vitest": "^1.6.0" }, @@ -74,7 +74,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -874,7 +873,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "aix" @@ -890,7 +888,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -906,7 +903,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -922,7 +918,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -938,7 +933,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -954,7 +948,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -970,7 +963,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -986,7 +978,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -1002,7 +993,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1018,7 +1008,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1034,7 +1023,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1050,7 +1038,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1066,7 +1053,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1082,7 +1068,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1098,7 +1083,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1114,7 +1098,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1130,7 +1113,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1146,7 +1128,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -1162,7 +1143,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -1178,7 +1158,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -1194,7 +1173,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -1210,7 +1188,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -1226,7 +1203,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -1449,7 +1425,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1463,7 +1438,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1472,7 +1446,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1486,7 +1459,6 @@ "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1599,8 +1571,7 @@ "node_modules/@polka/url": { "version": "1.0.0-next.25", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", - "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", - "dev": true + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==" }, "node_modules/@rollup/plugin-commonjs": { "version": "26.0.1", @@ -2525,7 +2496,6 @@ "version": "2.5.26", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.5.26.tgz", "integrity": "sha512-8l1JTIM2L+bS8ebq1E+nGjv/YSKSnD9Q19bYIUkc41vaEG2JjVUx6ikvPIJv2hkQAuqJLzoPrXlKk4KcyWOv3Q==", - "dev": true, "hasInstallScript": true, "dependencies": { "@types/cookie": "^0.6.0", @@ -2557,7 +2527,6 @@ "version": "4.0.0-next.7", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.0-next.7.tgz", "integrity": "sha512-yMUnAqquoayvBDztk1rWUgdtvjv7YcHgopCAB7sWl9SQht8U/7lqwTlJU0ZTAY09pFFRe6bbakd7YoiyyIvJiA==", - "dev": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^3.0.0-next.0||^3.0.0", "debug": "^4.3.6", @@ -2578,7 +2547,6 @@ "version": "3.0.0-next.3", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.0-next.3.tgz", "integrity": "sha512-kuGJ2CZ5lAw3gKF8Kw0AfKtUJWbwdlDHY14K413B0MCyrzvQvsKTorwmwZcky0+QqY6RnVIZ/5FttB9bQmkLXg==", - "dev": true, "dependencies": { "debug": "^4.3.5" }, @@ -2621,8 +2589,7 @@ "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "dev": true + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" }, "node_modules/@types/eslint": { "version": "8.56.7", @@ -3035,7 +3002,6 @@ "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -3056,7 +3022,6 @@ "version": "1.4.13", "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", - "dev": true, "peerDependencies": { "acorn": ">=8.9.0" } @@ -3188,7 +3153,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -3262,7 +3226,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -3644,7 +3607,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -3810,8 +3772,7 @@ "node_modules/devalue": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.0.0.tgz", - "integrity": "sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==", - "dev": true + "integrity": "sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3920,7 +3881,6 @@ "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -4157,8 +4117,7 @@ "node_modules/esm-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", - "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", - "dev": true + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==" }, "node_modules/espree": { "version": "9.6.1", @@ -4193,7 +4152,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", - "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "@types/estree": "^1.0.1" @@ -4690,8 +4648,7 @@ "node_modules/globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" }, "node_modules/globby": { "version": "11.1.0", @@ -4716,8 +4673,7 @@ "node_modules/globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" }, "node_modules/gopd": { "version": "1.0.1", @@ -4903,7 +4859,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5173,7 +5128,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, "engines": { "node": ">=6" } @@ -5236,8 +5190,7 @@ "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "dev": true + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" }, "node_modules/locate-path": { "version": "6.0.0", @@ -5518,7 +5471,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, "engines": { "node": ">=4" } @@ -5527,7 +5479,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "dev": true, "engines": { "node": ">=10" } @@ -5558,7 +5509,6 @@ "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, "funding": [ { "type": "github", @@ -5985,8 +5935,7 @@ "node_modules/picocolors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -6608,7 +6557,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, "dependencies": { "mri": "^1.1.0" }, @@ -6750,8 +6698,7 @@ "node_modules/set-cookie-parser": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz", - "integrity": "sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==", - "dev": true + "integrity": "sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==" }, "node_modules/set-function-length": { "version": "1.2.2", @@ -6865,7 +6812,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "dev": true, "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", @@ -6903,7 +6849,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7121,7 +7066,6 @@ "version": "5.0.0-next.259", "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.259.tgz", "integrity": "sha512-trRFSjKD+11KbXerGmBT0Uc+ZSNUhxn0aQ02q9tjtig/FV24dpZlXmCrcZTZliOLS0P8JWjw6xaWgNheZZoYOg==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", @@ -7294,7 +7238,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dev": true, "dependencies": { "@types/estree": "*" } @@ -7488,7 +7431,6 @@ "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" @@ -7543,7 +7485,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, "engines": { "node": ">=6" } @@ -7739,10 +7680,9 @@ } }, "node_modules/vite": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.4.tgz", - "integrity": "sha512-RHFCkULitycHVTtelJ6jQLd+KSAAzOgEYorV32R2q++M6COBjKJR6BxqClwp5sf0XaBDjVMuJ9wnNfyAJwjMkA==", - "dev": true, + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -7845,7 +7785,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -7859,7 +7798,6 @@ "version": "8.4.45", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", - "dev": true, "funding": [ { "type": "opencollective", @@ -7887,7 +7825,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.2.tgz", "integrity": "sha512-0/iAvbXyM3RiPPJ4lyD4w6Mjgtf4ejTK6TPvTNG3H32PLwuT0N/ZjJLiXug7ETE/LWtTeHw9WRv7uX/tIKYyKg==", - "dev": true, "workspaces": [ "tests/deps/*", "tests/projects/*" @@ -8295,8 +8232,7 @@ "node_modules/zimmerframe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", - "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", - "dev": true + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==" } } } diff --git a/package.json b/package.json index 2dc219c..1e320db 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "tailwindcss": "3.4.3", "tslib": "^2.6.3", "typescript": "^5.5.3", - "vite": "^5.3.3", + "vite": "^5.4.8", "vite-plugin-tailwind-purgecss": "^0.2.1", "vitest": "^1.6.0" }, From 4fa514f3acb305491da993483dc831f0dae6c254 Mon Sep 17 00:00:00 2001 From: Reinder Vos de Wael Date: Mon, 30 Sep 2024 09:21:21 -0400 Subject: [PATCH 5/8] fix: remove o1-preview --- src/routes/api/gpt/+server.ts | 2 +- src/routes/gpt/+page.svelte | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/routes/api/gpt/+server.ts b/src/routes/api/gpt/+server.ts index 7b63004..ffca4da 100644 --- a/src/routes/api/gpt/+server.ts +++ b/src/routes/api/gpt/+server.ts @@ -1,7 +1,7 @@ import { getAzureOpenAiClient } from '$lib/server/azure'; -import type { Message } from '$lib/types'; import { logger } from '$lib/server/utils'; import { AZURE_OPENAI_GPT_DEPLOYMENT_NAME } from '$lib/server/secrets'; +import type { Message } from '$lib/chat.svelte.js'; export async function POST({ request, locals }) { const data = await request.json(); diff --git a/src/routes/gpt/+page.svelte b/src/routes/gpt/+page.svelte index 0c05c49..01e2dd5 100644 --- a/src/routes/gpt/+page.svelte +++ b/src/routes/gpt/+page.svelte @@ -20,10 +20,6 @@ name: 'GPT-4o', tag: 'gpt-4o' }, - { - name: 'GPT-o1', - tag: 'o1-preview' - }, { name: 'Claude 3 Opus', tag: 'anthropic.claude-3-opus-20240229-v1:0' From 9fd77554bd5cb30e93a22e507fa44f4f861391dd Mon Sep 17 00:00:00 2001 From: Reinder Vos de Wael Date: Tue, 24 Sep 2024 14:09:38 -0400 Subject: [PATCH 6/8] First working version --- package-lock.json | 13 +++ package.json | 2 + src/lib/components/Navigation.svelte | 1 + src/lib/icons/EditIcon.svelte | 1 + src/lib/icons/EyeIcon.svelte | 1 + src/lib/icons/PlusIcon.svelte | 1 + src/lib/icons/SaveIcon.svelte | 1 + src/lib/icons/TrashIcon.svelte | 1 + src/lib/server/secrets.ts | 2 + src/routes/+layout.svelte | 3 +- src/routes/api/claude/stream/+server.ts | 2 +- src/routes/api/markdown2docx/+server.ts | 23 ++++++ src/routes/document-generation/+page.svelte | 82 +++++++++++++++++++ .../document-generation/SectionNode.svelte | 74 +++++++++++++++++ src/routes/document-generation/presets.ts | 44 ++++++++++ src/routes/document-generation/section.ts | 66 +++++++++++++++ 16 files changed, 315 insertions(+), 2 deletions(-) create mode 100644 src/lib/icons/EditIcon.svelte create mode 100644 src/lib/icons/EyeIcon.svelte create mode 100644 src/lib/icons/PlusIcon.svelte create mode 100644 src/lib/icons/SaveIcon.svelte create mode 100644 src/lib/icons/TrashIcon.svelte create mode 100644 src/routes/api/markdown2docx/+server.ts create mode 100644 src/routes/document-generation/+page.svelte create mode 100644 src/routes/document-generation/SectionNode.svelte create mode 100644 src/routes/document-generation/presets.ts create mode 100644 src/routes/document-generation/section.ts diff --git a/package-lock.json b/package-lock.json index 5e90320..75d9238 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "highlight.js": "^11.10.0", "openai": "^4.52.4", "pdfjs-dist": "^4.4.168", + "sortablejs": "^1.15.3", "svelte-markdown": "^0.4.1", "winston": "^3.13.0" }, @@ -35,6 +36,7 @@ "@types/jsonwebtoken": "^9.0.6", "@types/node": "20.12.2", "@types/showdown": "^2.0.6", + "@types/sortablejs": "^1.15.8", "@typescript-eslint/eslint-plugin": "^7.16.0", "@typescript-eslint/parser": "^7.16.0", "autoprefixer": "10.4.19", @@ -2680,6 +2682,12 @@ "integrity": "sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ==", "dev": true }, + "node_modules/@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "dev": true + }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", @@ -6845,6 +6853,11 @@ "sorcery": "bin/sorcery" } }, + "node_modules/sortablejs": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.3.tgz", + "integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==" + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", diff --git a/package.json b/package.json index 1e320db..cda1758 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "@types/jsonwebtoken": "^9.0.6", "@types/node": "20.12.2", "@types/showdown": "^2.0.6", + "@types/sortablejs": "^1.15.8", "@typescript-eslint/eslint-plugin": "^7.16.0", "@typescript-eslint/parser": "^7.16.0", "autoprefixer": "10.4.19", @@ -60,6 +61,7 @@ "highlight.js": "^11.10.0", "openai": "^4.52.4", "pdfjs-dist": "^4.4.168", + "sortablejs": "^1.15.3", "svelte-markdown": "^0.4.1", "winston": "^3.13.0" }, diff --git a/src/lib/components/Navigation.svelte b/src/lib/components/Navigation.svelte index a9ec3e5..6cfed61 100644 --- a/src/lib/components/Navigation.svelte +++ b/src/lib/components/Navigation.svelte @@ -5,6 +5,7 @@ const drawerStore = getDrawerStore(); const pages = [ { name: 'Chatbot', href: '/gpt' }, + { name: 'Document Generation', href: '/document-generation' }, { name: 'Document Intelligence', href: '/document-intelligence' }, { name: 'Diarize (Submit)', href: '/diarize-submit' }, { name: 'Diarize (Retrieve)', href: '/diarize-retrieve' }, diff --git a/src/lib/icons/EditIcon.svelte b/src/lib/icons/EditIcon.svelte new file mode 100644 index 0000000..a758e38 --- /dev/null +++ b/src/lib/icons/EditIcon.svelte @@ -0,0 +1 @@ + diff --git a/src/lib/icons/EyeIcon.svelte b/src/lib/icons/EyeIcon.svelte new file mode 100644 index 0000000..07cf59d --- /dev/null +++ b/src/lib/icons/EyeIcon.svelte @@ -0,0 +1 @@ + diff --git a/src/lib/icons/PlusIcon.svelte b/src/lib/icons/PlusIcon.svelte new file mode 100644 index 0000000..80becd5 --- /dev/null +++ b/src/lib/icons/PlusIcon.svelte @@ -0,0 +1 @@ + diff --git a/src/lib/icons/SaveIcon.svelte b/src/lib/icons/SaveIcon.svelte new file mode 100644 index 0000000..e62cf3d --- /dev/null +++ b/src/lib/icons/SaveIcon.svelte @@ -0,0 +1 @@ + diff --git a/src/lib/icons/TrashIcon.svelte b/src/lib/icons/TrashIcon.svelte new file mode 100644 index 0000000..265d1ae --- /dev/null +++ b/src/lib/icons/TrashIcon.svelte @@ -0,0 +1 @@ + diff --git a/src/lib/server/secrets.ts b/src/lib/server/secrets.ts index 5c66c33..41551f8 100644 --- a/src/lib/server/secrets.ts +++ b/src/lib/server/secrets.ts @@ -18,3 +18,5 @@ export const AZURE_DOCUMENT_INTELLIGENCE_KEY = env.AZURE_DOCUMENT_INTELLIGENCE_K export const AWS_ACCESS_KEY = env.AWS_ACCESS_KEY || ''; export const AWS_SECRET_ACCESS_KEY = env.AWS_SECRET_ACCESS_KEY || ''; + +export const PANDOC_SERVER_ENDPOINT = env.PANDOC_SERVER_ENDPOINT || ''; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 1fb3305..b3d0a59 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -3,7 +3,7 @@ import Navigation from '$lib/components/Navigation.svelte'; import '@cmi-dair/skeleton-themes/cmi.postcss'; import { arrow, autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'; - import { Drawer, Toast, initializeStores, storePopup } from '@skeletonlabs/skeleton'; + import { Drawer, Toast, initializeStores, storePopup, Modal } from '@skeletonlabs/skeleton'; import hljs from 'highlight.js/lib/core'; import bash from 'highlight.js/lib/languages/bash'; @@ -38,6 +38,7 @@ Agate +

Navigation

diff --git a/src/routes/api/claude/stream/+server.ts b/src/routes/api/claude/stream/+server.ts index 2218640..5618fb1 100644 --- a/src/routes/api/claude/stream/+server.ts +++ b/src/routes/api/claude/stream/+server.ts @@ -1,6 +1,6 @@ import { AWS_ACCESS_KEY, AWS_SECRET_ACCESS_KEY } from '$lib/server/secrets.js'; import { logger } from '$lib/server/utils'; -import type { Message } from '$lib/chat'; +import type { Message } from '$lib/types'; import { BedrockRuntimeClient, ConverseStreamCommand } from '@aws-sdk/client-bedrock-runtime'; export async function POST({ request }) { diff --git a/src/routes/api/markdown2docx/+server.ts b/src/routes/api/markdown2docx/+server.ts new file mode 100644 index 0000000..312f52c --- /dev/null +++ b/src/routes/api/markdown2docx/+server.ts @@ -0,0 +1,23 @@ +import { PANDOC_SERVER_ENDPOINT } from '$lib/server/secrets.js'; +import { logger } from '$lib/server/utils'; + +export const POST = async ({ request, fetch }) => { + logger.info('Pandoc API called'); + + const markdown = await request.text(); + const blob = new Blob([markdown], { type: 'text/markdown' }); + const form = new FormData(); + form.append('to', 'docx'); + form.append('from', 'md'); + form.append('file', blob); + + const response = await fetch(PANDOC_SERVER_ENDPOINT, { + method: 'POST', + body: form + }); + + if (!response.ok) { + return new Response(await response.text(), { status: 500 }); + } + return new Response(await response.blob()); +}; diff --git a/src/routes/document-generation/+page.svelte b/src/routes/document-generation/+page.svelte new file mode 100644 index 0000000..4497b4f --- /dev/null +++ b/src/routes/document-generation/+page.svelte @@ -0,0 +1,82 @@ + + +{#if isLoading} + +{:else} +
+ + {}} /> + +
+{/if} diff --git a/src/routes/document-generation/SectionNode.svelte b/src/routes/document-generation/SectionNode.svelte new file mode 100644 index 0000000..89ac019 --- /dev/null +++ b/src/routes/document-generation/SectionNode.svelte @@ -0,0 +1,74 @@ + + +
+
+ {#if editable} + + {:else} + {section.title} + {/if} +
+ + + {#if !isRoot} + + {/if} +
+
+
+ {#if editable} + {:else} {#if (section.files?.length ?? 0) < section.n_required_files}