feat: Update playground to support fim. (#223)

improve-workflow
Zhiming Ma 2023-06-09 11:36:46 +08:00 committed by GitHub
parent 4ea3298bc9
commit c461e3ce12
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 10 deletions

View File

@ -51,11 +51,11 @@ class CompletionProvider {
} }
async provideInlineCompletions(document, position, context, token) { async provideInlineCompletions(document, position, context, token) {
const prompt = this.getPrompt(document, position) const segments = this.getSegments(document, position)
const emptyResponse = Promise.resolve({ items: [] }) const emptyResponse = Promise.resolve({ items: [] })
if (this.isNil(prompt)) { if (this.isNil(segments.prefix)) {
console.debug("Prompt is empty, skipping") console.debug("Prefix is empty, skipping")
return emptyResponse return emptyResponse
} }
@ -70,7 +70,7 @@ class CompletionProvider {
let response let response
try { try {
response = await this.callTabbyApi(currentTimestamp, prompt) response = await this.callTabbyApi(currentTimestamp, segments)
} catch (err) { } catch (err) {
console.error("error", err) console.error("error", err)
return emptyResponse return emptyResponse
@ -99,16 +99,25 @@ class CompletionProvider {
freeInlineCompletions() {} freeInlineCompletions() {}
getPrompt(document, position) { getSegments(document, position) {
const firstLine = Math.max(position.lineNumber - 120, 0) const firstLine = Math.max(position.lineNumber - 120, 0)
const prefixRange = new this.monaco.Range(
const range = new this.monaco.Range(
firstLine, firstLine,
0, 0,
position.lineNumber, position.lineNumber,
position.column position.column
) )
return document.getValueInRange(range) const lastLine = Math.min(position.lineNumber + 120, document.getLineCount() - 1)
const suffixRange = new this.monaco.Range(
position.lineNumber,
position.column,
lastLine,
document.getLineLength(lastLine)
)
return {
prefix: document.getValueInRange(prefixRange),
suffix: document.getValueInRange(suffixRange),
}
} }
isNil(value) { isNil(value) {
@ -119,12 +128,12 @@ class CompletionProvider {
return new Promise((r) => setTimeout(r, milliseconds)) return new Promise((r) => setTimeout(r, milliseconds))
} }
async callTabbyApi(timestamp, prompt) { async callTabbyApi(timestamp, segments) {
const request = (this.pendingRequest = axios.post( const request = (this.pendingRequest = axios.post(
`${TabbyServerURL}/v1/completions`, `${TabbyServerURL}/v1/completions`,
{ {
language: "python", language: "python",
prompt, segments,
} }
)) ))
const response = await request const response = await request