From b9d8e46daff3df52a9a24d94aa2fb482cbc59087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tetsing?= Date: Fri, 1 Mar 2024 11:08:57 +0100 Subject: [PATCH] added cleaning copilot results --- .../copilot/suggestion-service/worker.js | 1 - apps/remix-ide/src/app/plugins/solcoderAI.tsx | 9 ++- .../lib/providers/inlineCompletionProvider.ts | 34 ++++++--- .../settings/src/lib/remix-ui-settings.tsx | 71 ++++--------------- 4 files changed, 46 insertions(+), 69 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/copilot/suggestion-service/worker.js b/apps/remix-ide/src/app/plugins/copilot/suggestion-service/worker.js index 04b77ba634..0623b3712f 100644 --- a/apps/remix-ide/src/app/plugins/copilot/suggestion-service/worker.js +++ b/apps/remix-ide/src/app/plugins/copilot/suggestion-service/worker.js @@ -22,7 +22,6 @@ class CodeCompletionPipeline { // Listen for messages from the main thread self.addEventListener('message', async (event) => { - console.log("worker message ", event.data) const { id, model, text, max_new_tokens, cmd, diff --git a/apps/remix-ide/src/app/plugins/solcoderAI.tsx b/apps/remix-ide/src/app/plugins/solcoderAI.tsx index aa99c74f3a..342308fc30 100644 --- a/apps/remix-ide/src/app/plugins/solcoderAI.tsx +++ b/apps/remix-ide/src/app/plugins/solcoderAI.tsx @@ -35,7 +35,8 @@ export class SolCoder extends Plugin { body: JSON.stringify({"data":[prompt, "code_generation", false,1000,0.2,0.8,50]}), }) ).json() - return result.data[0] + console.log + return "error" in result? result.error : result.data[0] } catch (e) { this.call('terminal', 'log', { type: 'typewritererror', value: `Unable to get a response ${e.message}` }) return @@ -135,6 +136,12 @@ export class SolCoder extends Plugin { }) ).json() + if ("error" in result){ + console.log("error", result.error) + this.call('terminal', 'log', { type: 'typewriterwarning', value: result.error }) + return result + } + return result.data } catch (e) { this.call('terminal', 'log', { type: 'typewritererror', value: `Unable to get a response ${e.message}` }) diff --git a/libs/remix-ui/editor/src/lib/providers/inlineCompletionProvider.ts b/libs/remix-ui/editor/src/lib/providers/inlineCompletionProvider.ts index 687b961233..1090c7c5d5 100644 --- a/libs/remix-ui/editor/src/lib/providers/inlineCompletionProvider.ts +++ b/libs/remix-ui/editor/src/lib/providers/inlineCompletionProvider.ts @@ -11,7 +11,6 @@ const result: string = '' export class RemixInLineCompletionProvider implements monacoTypes.languages.InlineCompletionsProvider { props: EditorUIProps monaco: any - running:boolean constructor(props: any, monaco: any) { this.props = props this.monaco = monaco @@ -50,9 +49,11 @@ export class RemixInLineCompletionProvider implements monacoTypes.languages.Inli const ask = split[split.length - 2].trimStart() if (split[split.length - 1].trim() === '' && ask.startsWith('///')) { // use the code generation model, only take max 1000 word as context - this.props.plugin.call('terminal', 'log', {type: 'typewritersuccess', value: 'Solcoder - generating code for following comment: ' + ask}) + this.props.plugin.call('terminal', 'log', {type: 'typewriterwarning', value: 'Solcoder - generating code for following comment: ' + ask.replace('///', '')}) const data = await this.props.plugin.call('solcoder', 'code_completion', word) + if ("error" in data) return + console.log("solcoder completion data", data) const parsedData = data[0].trimStart() //JSON.parse(data).trimStart() const item: monacoTypes.languages.InlineCompletion = { @@ -84,14 +85,13 @@ export class RemixInLineCompletionProvider implements monacoTypes.languages.Inli let result try { result = await this.props.plugin.call('copilot-suggestion', 'suggest', word) - this.running=false const generatedText = (result as any).output[0].generated_text as string let clean = generatedText - console.log('solcoder inline data:\n', clean) if (generatedText.indexOf('@custom:dev-run-script./') !== -1) { clean = generatedText.replace('@custom:dev-run-script', '@custom:dev-run-script ') } clean = clean.replace(word, '') + clean = this.process_completion(clean) const item: monacoTypes.languages.InlineCompletion = { insertText: clean @@ -101,16 +101,30 @@ export class RemixInLineCompletionProvider implements monacoTypes.languages.Inli enableForwardStability: true } } catch (err) { - this.running=false return } - - // abort if there is a signal - if (token.isCancellationRequested) { - return + } + + process_completion(data: any) { + const lines = data.split('\n') + const result = [] + let incode = 0 + for (const line of lines){ + if (line.includes('{')) incode += 1 + if (line.includes('}')) incode -= 1 + + if (!line.includes('//') || !line.endsWith('}')) result.push(line) + if (incode === 0) { + return result.join('\n').trimStart() + } + + if (incode <= 0 && line.includes('}')) { + return result.join('\n').trimStart() + } } - + return result.join('\n').trimStart() } + handleItemDidShow?(completions: monacoTypes.languages.InlineCompletions, item: monacoTypes.languages.InlineCompletion, updatedInsertText: string): void { } diff --git a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx index 4453b23aaf..78b5600bff 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -4,6 +4,12 @@ import React, {useState, useRef, useReducer, useEffect, useCallback} from 'react import {AppModal, AlertModal, ModalTypes} from '@remix-ui/app' import {labels, textDark, textSecondary} from './constants' +enum CONSENT { + GIVEN = 0, + NOT_GIVEN, + NOT_ASKED +} +let consentGivenForAI = CONSENT.NOT_ASKED import './remix-ui-settings.css' import { @@ -123,15 +129,6 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { if (props.useMatomoAnalytics !== null) useMatomoAnalytics(props.config, props.useMatomoAnalytics, dispatch) }, [props.useMatomoAnalytics]) - useEffect(() => { - console.log("useEffect on useCopilot") - if (props.useCopilot !== null) copilotActivate(props.config, props.useCopilot, dispatch) - if (props.useCopilot) { - onchangeCopilotActivate() - } - console.log("useEffect on useCopilot finish") - }, [props.useCopilot]) - const onchangeGenerateContractMetadata = (event) => { generateContractMetadat(props.config, event.target.checked, dispatch) } @@ -142,6 +139,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { const onchangeCopilotActivate = () => { console.log("onchangeCopilotActivate ", props.useCopilot) + const onchangeCopilotActivate = async () => { if (!props.useCopilot) { copilotActivate(props.config, props.useCopilot, dispatch) props.plugin.call('copilot-suggestion', 'uninstall') @@ -156,46 +154,6 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { await props.plugin.call('copilot-suggestion', 'init') if (await props.plugin.call('copilot-suggestion', 'status')) { copilotActivate(props.config, true, dispatch) -<<<<<<< HEAD - } else { - props.plugin.call('copilot-suggestion', 'uninstall') - copilotActivate(props.config, false, dispatch) - } - } - const modalActivate: AppModal = { - id: 'loadcopilotActivate', - title: 'Download Solidity copilot', - modalType: ModalTypes.default, - okLabel: 'Hide', - cancelLabel: 'Cancel', - message, - okFn: async() => { - consentGivenForAI = CONSENT.GIVEN - startCopilot() - }, - hideFn: async () => { - consentGivenForAI = CONSENT.NOT_GIVEN - props.plugin.off('copilot-suggestion', 'loading') - // if (await props.plugin.call('copilot-suggestion', 'status')) { - // copilotActivate(props.config, true, dispatch) - // } else { - // props.plugin.call('copilot-suggestion', 'uninstall') - // copilotActivate(props.config, false, dispatch) - // } - } - } - - if (consentGivenForAI === CONSENT.NOT_ASKED) { - console.log("CONSENT.NOT_ASKED modal") - props.plugin.call('notification', 'modal', modalActivate) - } else if (consentGivenForAI === CONSENT.GIVEN) { - startCopilot() - } else { - // NOT_GIVEN - } - - if (props.plugin.call('copilot-suggestion', 'status')) { -======= } } @@ -205,17 +163,16 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { }) if (await props.plugin.call('copilot-suggestion', 'status')) { ->>>>>>> f63484701 (removed user consens) copilotActivate(props.config, true, dispatch) - } else { + }else { startCopilot() } } - useEffect(() => { - if (props.useCopilot !== null) copilotActivate(props.config, props.useCopilot, dispatch) - onchangeCopilotActivate() - }, [props.useCopilot]) + useEffect(() => { + if (props.useCopilot !== null) copilotActivate(props.config, props.useCopilot, dispatch) + onchangeCopilotActivate() +}, [props.useCopilot]) const onchangeCopilotMaxNewToken = (event) => { @@ -489,8 +446,8 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { } let copilotTemperatureValue = (props.config.get('settings/copilot/suggest/temperature')) * 100 if (!copilotTemperatureValue) { - props.config.set('settings/copilot/suggest/temperature', 0.5) - copilotTemperatureValue = 0.5 + props.config.set('settings/copilot/suggest/temperature', 0.9) + copilotTemperatureValue = 0.9 } //if (isCopilotActivated) props.plugin.call('copilot-suggestion', 'init')