Merge pull request #4319 from ethereum/endpoint_ai

add custom endpoint for AI suggestion
pull/5370/head
yann300 11 months ago committed by GitHub
commit bd56defe28
  1. 21
      apps/remix-ide/src/app/plugins/copilot/suggestion-service/copilot-suggestion.ts
  2. 6
      libs/remix-ui/editor/src/lib/providers/inlineCompletionProvider.ts

@ -1,18 +1,20 @@
import {Plugin} from '@remixproject/engine' import {Plugin} from '@remixproject/engine'
import {SuggestionService, SuggestOptions} from './suggestion-service' import {SuggestionService, SuggestOptions} from './suggestion-service'
import axios, {AxiosResponse} from 'axios'
const _paq = (window._paq = window._paq || []) //eslint-disable-line const _paq = (window._paq = window._paq || []) //eslint-disable-line
const profile = { const profile = {
name: 'copilot-suggestion', name: 'copilot-suggestion',
displayName: 'copilot-suggestion', displayName: 'copilot-suggestion',
description: 'Get Solidity suggestions in editor', description: 'Get Solidity suggestions in editor',
methods: ['suggest', 'init', 'uninstall', 'status', 'isActivate'], methods: ['suggest', 'init', 'uninstall', 'status', 'isActivate', 'useRemoteService', 'discardRemoteService'],
version: '0.1.0-alpha', version: '0.1.0-alpha',
maintainedBy: "Remix" maintainedBy: "Remix"
} }
export class CopilotSuggestion extends Plugin { export class CopilotSuggestion extends Plugin {
service: SuggestionService service: SuggestionService
remoteService: string
context: string context: string
ready: boolean ready: boolean
constructor() { constructor() {
@ -29,6 +31,14 @@ export class CopilotSuggestion extends Plugin {
}) })
} }
useRemoteService(service: string) {
this.remoteService = service
}
discardRemoteService() {
this.remoteService = null
}
status () { status () {
return this.ready return this.ready
} }
@ -53,7 +63,14 @@ export class CopilotSuggestion extends Plugin {
temperature: temperature || 0, temperature: temperature || 0,
max_new_tokens: max_new_tokens || 0 max_new_tokens: max_new_tokens || 0
} }
return this.service.suggest(this.context ? this.context + '\n\n' + content : content, options)
if (this.remoteService) {
const {data} = await axios.post(this.remoteService, {context: content, max_new_words: options.max_new_tokens, temperature: options.temperature})
const parsedData = JSON.parse(data).trimStart()
return {output: [{generated_text: parsedData}]}
} else {
return this.service.suggest(this.context ? this.context + '\n\n' + content : content, options)
}
} }
async loadModeContent() { async loadModeContent() {

@ -70,7 +70,11 @@ export class RemixInLineCompletionProvider implements monacoTypes.languages.Inli
const generatedText = (result as any).output[0].generated_text as string const generatedText = (result as any).output[0].generated_text as string
// the generated text remove a space from the context... // the generated text remove a space from the context...
const clean = generatedText.replace('@custom:dev-run-script', '@custom:dev-run-script ').replace(word, '') let clean = generatedText
if (generatedText.indexOf('@custom:dev-run-script./') !== -1) {
clean = generatedText.replace('@custom:dev-run-script', '@custom:dev-run-script ')
}
clean = clean.replace(word, '')
const item: monacoTypes.languages.InlineCompletion = { const item: monacoTypes.languages.InlineCompletion = {
insertText: clean insertText: clean
}; };

Loading…
Cancel
Save