|
|
|
@ -1,4 +1,6 @@ |
|
|
|
|
/* eslint-disable no-control-regex */ |
|
|
|
|
import { EditorUIProps, monacoTypes } from '@remix-ui/editor'; |
|
|
|
|
import axios, {AxiosResponse} from 'axios' |
|
|
|
|
const controller = new AbortController(); |
|
|
|
|
const { signal } = controller; |
|
|
|
|
const result: string = '' |
|
|
|
@ -29,6 +31,34 @@ export class RemixInLineCompletionProvider implements monacoTypes.languages.Inli |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
const isActivate = await this.props.plugin.call('copilot-suggestion', 'isActivate') |
|
|
|
|
if (!isActivate) return |
|
|
|
|
} catch (err) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
const split = word.split('\n') |
|
|
|
|
if (!split.length) return |
|
|
|
|
const ask = split[split.length - 2].trimStart() |
|
|
|
|
if (split[split.length - 1].trim() === '' && ask.startsWith('///')) { |
|
|
|
|
// use the code generation model
|
|
|
|
|
const {data} = await axios.post('https://gpt-chat.remixproject.org/infer', {comment: ask.replace('///', '')}) |
|
|
|
|
const parsedData = JSON.parse(data).trimStart() |
|
|
|
|
console.log('parsedData', parsedData) |
|
|
|
|
const item: monacoTypes.languages.InlineCompletion = { |
|
|
|
|
insertText: parsedData |
|
|
|
|
}; |
|
|
|
|
return { |
|
|
|
|
items: [item], |
|
|
|
|
enableForwardStability: true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (e) { |
|
|
|
|
console.error(e) |
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// abort if there is a signal
|
|
|
|
|
if (token.isCancellationRequested) { |
|
|
|
|
console.log('aborted') |
|
|
|
@ -43,9 +73,8 @@ export class RemixInLineCompletionProvider implements monacoTypes.languages.Inli |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const generatedText = (result as any).output[0].generated_text as string |
|
|
|
|
// the generated text remove a space from the context. that why we need to remove all the spaces
|
|
|
|
|
const clean = generatedText.replace(/ /g, '').replace(word.replace(/ /g, ''), '') |
|
|
|
|
console.log('suggest result', clean) |
|
|
|
|
// the generated text remove a space from the context...
|
|
|
|
|
const clean = generatedText.replace('@custom:dev-run-script', '@custom:dev-run-script ').replace(word, '') |
|
|
|
|
const item: monacoTypes.languages.InlineCompletion = { |
|
|
|
|
insertText: clean |
|
|
|
|
}; |
|
|
|
|