From 24168056293d4e570f78fbd13068bb94b76d9d9c Mon Sep 17 00:00:00 2001 From: HugoCasa Date: Tue, 18 Jul 2023 12:55:35 +0200 Subject: [PATCH] feat(frontend): generate scripts in the flow and app builders (#1886) * feat: add inline code gen flow * feat(frontend): add script gen to flow and app builders * fix(backend): allow all users to use openai * Fix build * Fix build * Fix build --------- Co-authored-by: Faton Ramadani --- backend/windmill-api/src/openai.rs | 2 - backend/windmill-api/src/workspaces.rs | 2 - frontend/package-lock.json | 98 ++++ frontend/package.json | 1 + frontend/src/lib/components/DiffEditor.svelte | 27 +- .../src/lib/components/ModulePreview.svelte | 16 +- .../src/lib/components/ScriptEditor.svelte | 2 +- .../src/lib/components/SimpleEditor.svelte | 32 +- .../InlineScriptEditor.svelte | 19 +- .../lib/components/codeGen/ScriptGen.svelte | 99 ++-- frontend/src/lib/components/codeGen/lib.ts | 96 ++-- .../lib/components/codeGen/prompts/edit.yaml | 13 + .../lib/components/codeGen/prompts/fix.yaml | 14 + .../lib/components/codeGen/prompts/gen.yaml | 49 ++ .../lib/components/codeGen/prompts/index.ts | 25 + .../flows/content/FlowModuleComponent.svelte | 12 + .../svelvet/container/views/GraphView.svelte | 3 + frontend/tsconfig.json | 3 +- frontend/vite.config.js | 3 +- llm/.gitignore | 3 + llm/README.md | 42 ++ llm/requirements.txt | 4 + llm/sample_answers.yaml | 312 +++++++++++ llm/sample_queries.yaml | 45 ++ llm/src/__init__.py | 0 llm/src/gen_samples.py | 184 +++++++ llm/src/resources.py | 493 ++++++++++++++++++ llm/version.txt | 1 + 28 files changed, 1483 insertions(+), 117 deletions(-) create mode 100644 frontend/src/lib/components/codeGen/prompts/edit.yaml create mode 100644 frontend/src/lib/components/codeGen/prompts/fix.yaml create mode 100644 frontend/src/lib/components/codeGen/prompts/gen.yaml create mode 100644 frontend/src/lib/components/codeGen/prompts/index.ts create mode 100644 llm/.gitignore create mode 100644 llm/README.md create mode 100644 llm/requirements.txt create mode 100644 llm/sample_answers.yaml create mode 100644 llm/sample_queries.yaml create mode 100644 llm/src/__init__.py create mode 100644 llm/src/gen_samples.py create mode 100644 llm/src/resources.py create mode 100644 llm/version.txt diff --git a/backend/windmill-api/src/openai.rs b/backend/windmill-api/src/openai.rs index 9675b08af7..4e4bbc917d 100644 --- a/backend/windmill-api/src/openai.rs +++ b/backend/windmill-api/src/openai.rs @@ -27,8 +27,6 @@ async fn proxy( Path((w_id, openai_path)): Path<(String, String)>, body: Bytes, ) -> impl IntoResponse { - tracing::info!("reached openai endpoint"); - let mut tx = db.begin().await?; let settings = sqlx::query_as!( OpenAIKey, diff --git a/backend/windmill-api/src/workspaces.rs b/backend/windmill-api/src/workspaces.rs index 5e374e5a80..0a15396af9 100644 --- a/backend/windmill-api/src/workspaces.rs +++ b/backend/windmill-api/src/workspaces.rs @@ -707,9 +707,7 @@ async fn edit_openai_key( async fn exists_openai_key( Extension(db): Extension, Path(w_id): Path, - Authed { is_admin, username, .. }: Authed, ) -> JsonResult { - require_admin(is_admin, &username)?; let mut tx = db.begin().await?; let openai_key = sqlx::query_scalar!( diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7b7deec6b9..b92cdfeec2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -46,6 +46,7 @@ }, "devDependencies": { "@floating-ui/core": "^1.3.1", + "@modyfi/vite-plugin-yaml": "^1.0.4", "@playwright/test": "^1.34.3", "@rgossiaux/svelte-headlessui": "^1.0.2", "@sveltejs/adapter-static": "^2.0.2", @@ -703,6 +704,20 @@ "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", "dev": true }, + "node_modules/@modyfi/vite-plugin-yaml": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@modyfi/vite-plugin-yaml/-/vite-plugin-yaml-1.0.4.tgz", + "integrity": "sha512-qkT0KiR3AQQRfUvDzLv4+1rYAzXj+QmGhAbyUd0Ordf9xynK76i758lk5GiEfxuQxbvdqDaJ9oXkH/KacbSjQQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "5.0.2", + "js-yaml": "4.1.0", + "tosource": "2.0.0-alpha.3" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -792,6 +807,28 @@ "svelte": "^3.44.0" } }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@sveltejs/adapter-static": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.2.tgz", @@ -1219,6 +1256,12 @@ "@types/d3-selection": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, "node_modules/@types/geojson": { "version": "7946.0.10", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", @@ -3383,6 +3426,12 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -7844,6 +7893,15 @@ "node": ">=8.0" } }, + "node_modules/tosource": { + "version": "2.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/tosource/-/tosource-2.0.0-alpha.3.tgz", + "integrity": "sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/totalist": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", @@ -8861,6 +8919,17 @@ "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", "dev": true }, + "@modyfi/vite-plugin-yaml": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@modyfi/vite-plugin-yaml/-/vite-plugin-yaml-1.0.4.tgz", + "integrity": "sha512-qkT0KiR3AQQRfUvDzLv4+1rYAzXj+QmGhAbyUd0Ordf9xynK76i758lk5GiEfxuQxbvdqDaJ9oXkH/KacbSjQQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "5.0.2", + "js-yaml": "4.1.0", + "tosource": "2.0.0-alpha.3" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -8927,6 +8996,17 @@ "dev": true, "requires": {} }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, "@sveltejs/adapter-static": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.2.tgz", @@ -9291,6 +9371,12 @@ "@types/d3-selection": "*" } }, + "@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, "@types/geojson": { "version": "7946.0.10", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", @@ -10812,6 +10898,12 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -14040,6 +14132,12 @@ "is-number": "^7.0.0" } }, + "tosource": { + "version": "2.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/tosource/-/tosource-2.0.0-alpha.3.tgz", + "integrity": "sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==", + "dev": true + }, "totalist": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 94076c688f..c4be60cb59 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,6 +17,7 @@ }, "devDependencies": { "@floating-ui/core": "^1.3.1", + "@modyfi/vite-plugin-yaml": "^1.0.4", "@playwright/test": "^1.34.3", "@rgossiaux/svelte-headlessui": "^1.0.2", "@sveltejs/adapter-static": "^2.0.2", diff --git a/frontend/src/lib/components/DiffEditor.svelte b/frontend/src/lib/components/DiffEditor.svelte index 615b053711..23de875d88 100644 --- a/frontend/src/lib/components/DiffEditor.svelte +++ b/frontend/src/lib/components/DiffEditor.svelte @@ -10,7 +10,6 @@ import 'monaco-editor/esm/vs/basic-languages/typescript/typescript.contribution' import 'monaco-editor/esm/vs/basic-languages/sql/sql.contribution' import 'monaco-editor/esm/vs/language/typescript/monaco.contribution' - import { Breakpoints } from './apps/gridUtils' meditor.defineTheme('myTheme', { base: 'vs', @@ -23,17 +22,19 @@ }) meditor.setTheme('myTheme') + const SIDE_BY_SIDE_MIN_WIDTH = 650 + export let automaticLayout = true export let fixedOverflowWidgets = true - export let sideBySideMinWidth = Breakpoints.lg - let diffEditor: meditor.IStandaloneDiffEditor + let diffEditor: meditor.IStandaloneDiffEditor | undefined let diffDivEl: HTMLDivElement | null = null + let editorWidth: number = SIDE_BY_SIDE_MIN_WIDTH function loadDiffEditor() { diffEditor = meditor.createDiffEditor(diffDivEl!, { automaticLayout, - renderSideBySide: window.innerWidth >= sideBySideMinWidth, + renderSideBySide: editorWidth >= SIDE_BY_SIDE_MIN_WIDTH, domReadOnly: true, readOnly: true, minimap: { @@ -51,9 +52,9 @@ export function setDiff( original: string, modified: string, - lang: 'typescript' | 'python' | 'go' | 'shell' | 'sql' | 'graphql' + lang: 'typescript' | 'python' | 'go' | 'shell' | 'sql' | 'graphql' | 'javascript' ): void { - diffEditor.setModel({ + diffEditor?.setModel({ original: meditor.createModel(original, lang), modified: meditor.createModel(modified, lang) }) @@ -64,11 +65,11 @@ } export function getOriginal(): string { - return diffEditor.getModel()?.original.getValue() ?? '' + return diffEditor?.getModel()?.original.getValue() ?? '' } export function getModified(): string { - return diffEditor.getModel()?.modified.getValue() ?? '' + return diffEditor?.getModel()?.modified.getValue() ?? '' } export function show(): void { @@ -78,20 +79,20 @@ diffDivEl?.classList.add('hidden') } - function onResize() { - diffEditor.updateOptions({ renderSideBySide: window.innerWidth >= sideBySideMinWidth }) + function onWidthChange(editorWidth: number) { + diffEditor?.updateOptions({ renderSideBySide: editorWidth >= SIDE_BY_SIDE_MIN_WIDTH }) } + $: onWidthChange(editorWidth) + onMount(() => { if (BROWSER) { loadDiffEditor() - window.addEventListener('resize', onResize) return () => { diffEditor?.dispose() - window.removeEventListener('resize', onResize) } } }) -
+
diff --git a/frontend/src/lib/components/ModulePreview.svelte b/frontend/src/lib/components/ModulePreview.svelte index 13e60c64a8..cd0854ade1 100644 --- a/frontend/src/lib/components/ModulePreview.svelte +++ b/frontend/src/lib/components/ModulePreview.svelte @@ -1,6 +1,6 @@