From 0aa81e39705d8c2109c8ec30855bb5f68eae133b Mon Sep 17 00:00:00 2001 From: HugoCasa Date: Wed, 26 Jul 2023 12:34:04 +0200 Subject: [PATCH] feat(frontend): AI edit / fix improvements (#1923) * feat(frontend): db schema explorer + db aware AI * fix: explorer button consistency * fix: explorer btn really consistent * feat: improve autocompletion regex * feat(forntend): AI edit / fix improvements * fix: correct typos --- .../lib/components/codeGen/ScriptFix.svelte | 20 +- .../lib/components/codeGen/ScriptGen.svelte | 10 +- frontend/src/lib/components/codeGen/lib.ts | 142 ++++--- .../lib/components/codeGen/prompts/edit.yaml | 97 ++++- .../lib/components/codeGen/prompts/fix.yaml | 103 ++++- .../lib/components/codeGen/prompts/gen.yaml | 8 +- .../lib/components/codeGen/prompts/index.ts | 13 +- llm/sample_answers.yaml | 369 ++++++++++++++---- llm/sample_queries.yaml | 8 +- llm/src/gen_samples.py | 109 ++---- 10 files changed, 634 insertions(+), 245 deletions(-) diff --git a/frontend/src/lib/components/codeGen/ScriptFix.svelte b/frontend/src/lib/components/codeGen/ScriptFix.svelte index 3573cf10f6..411d111706 100644 --- a/frontend/src/lib/components/codeGen/ScriptFix.svelte +++ b/frontend/src/lib/components/codeGen/ScriptFix.svelte @@ -6,9 +6,10 @@ import { sendUserToast } from '$lib/toast' import type Editor from '../Editor.svelte' import { faCheck, faClose, faMagicWandSparkles } from '@fortawesome/free-solid-svg-icons' - import { existsOpenaiResourcePath } from '$lib/stores' + import { dbSchema, existsOpenaiResourcePath } from '$lib/stores' import type DiffEditor from '../DiffEditor.svelte' import { scriptLangToEditorLang } from '$lib/scripts' + import Popover from '../Popover.svelte' // props export let lang: SupportedLanguage @@ -20,6 +21,7 @@ let genLoading: boolean = false let openaiAvailable: boolean | undefined = undefined let generatedCode = '' + let explanation = '' async function onFix() { if (!error) { @@ -33,11 +35,14 @@ } genLoading = true - generatedCode = await fixScript({ + const result = await fixScript({ language: lang, code: editor?.getCode() || '', - error + error, + dbSchema: lang === 'postgresql' ? $dbSchema : undefined }) + generatedCode = result.code + explanation = result.explanation } catch (err) { sendUserToast('Failed to generate code', true) console.error(err) @@ -50,11 +55,13 @@ editor?.setCode(diffEditor?.getModified() || '') editor?.format() generatedCode = '' + explanation = '' error = '' } function rejectDiff() { generatedCode = '' + explanation = '' } function checkIfOpenaiAvailable( @@ -108,6 +115,13 @@ > Accept + {#if explanation} + + {explanation} + + {/if} {:else}