feat: support language field in CompletionRequest (#43)

* feat: support language in preset

* fix: add language in admin monaco editor

* fix: set unknown max length to 128
add-more-languages
Meng Zhang 2023-04-05 12:10:58 +08:00 committed by GitHub
parent 2fb462d514
commit 7c80ef3221
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 37 additions and 21 deletions

View File

@ -1,9 +1,9 @@
{
"files": {
"main.js": "./static/js/main.ab7e9a50.js",
"main.js": "./static/js/main.0db4b0d6.js",
"index.html": "./index.html"
},
"entrypoints": [
"static/js/main.ab7e9a50.js"
"static/js/main.0db4b0d6.js"
]
}

View File

@ -1 +1 @@
<!doctype html><html lang="en"><head><title>Streamlit Component</title><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Streamlit Component"/><link rel="stylesheet" href="bootstrap.min.css"/><script defer="defer" src="./static/js/main.ab7e9a50.js"></script></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html lang="en"><head><title>Streamlit Component</title><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Streamlit Component"/><link rel="stylesheet" href="bootstrap.min.css"/><script defer="defer" src="./static/js/main.0db4b0d6.js"></script></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

View File

@ -127,6 +127,7 @@ class CompletionProvider {
const request = (this.pendingRequest = axios.post(
`${TabbyServerURL}/v1/completions`,
{
language: "python",
prompt,
}
))

View File

@ -2,18 +2,24 @@ from typing import List
from pydantic import BaseModel, Field
from ..models import Language
class LanguagePreset(BaseModel):
max_length: int
stop_words: List[str]
PythonPreset = LanguagePreset(
max_length=128, stop_words=["\n\n", "\ndef", "\n#", "\nimport", "\nfrom", "\nclass"]
)
JavascriptPreset = LanguagePreset(
max_length=128, stop_words=["\n\n", "\nfunction", "\n//", "\nimport", "\nclass"]
)
LanguagePresets = {"python": PythonPreset, "javascript": JavascriptPreset}
LanguagePresets = {
Language.UNKNOWN: LanguagePreset(
max_length=128,
stop_words=["\n\n"],
),
Language.PYTHON: LanguagePreset(
max_length=128,
stop_words=["\n\n", "\ndef", "\n#", "\nimport", "\nfrom", "\nclass"],
),
Language.JAVASCRIPT: LanguagePreset(
max_length=128, stop_words=["\n\n", "\nfunction", "\n//", "\nimport", "\nclass"]
),
}

View File

@ -43,10 +43,7 @@ class PythonModelService:
)
def generate(self, request: CompletionRequest) -> List[Choice]:
# FIXME(meng): read preset from request.
preset_name = "python"
preset = LanguagePresets[preset_name]
preset = LanguagePresets[request.language]
input_ids = self.tokenizer.encode(request.prompt, return_tensors="pt").to(
self.device
)

View File

@ -29,9 +29,7 @@ class TritonService:
np_type = np.uint32
model_name = "fastertransformer"
# FIXME(meng): read preset from request.
preset_name = "python"
preset = LanguagePresets[preset_name]
preset = LanguagePresets[data.language]
prompt = data.prompt
input_start_ids = np.expand_dims(self.tokenizer.encode(prompt), 0)

View File

@ -9,7 +9,19 @@ class Choice(BaseModel):
text: str
class Language(str, Enum):
UNKNOWN = "unknown"
PYTHON = "python"
JAVASCRIPT = "javascript"
class CompletionRequest(BaseModel):
language: Language = Field(
example=Language.PYTHON,
default=Language.UNKNOWN,
description="Language for completion request",
)
prompt: str = Field(
example="def binarySearch(arr, left, right, x):\n mid = (left +",
description="The context to generate completions for, encoded as a string.",
@ -34,6 +46,7 @@ class Event(BaseModel):
class CompletionEvent(Event):
id: str
language: Language
prompt: str
created: int
choices: List[Choice]
@ -43,6 +56,7 @@ class CompletionEvent(Event):
return cls(
type=EventType.COMPLETION,
id=response.id,
language=request.language,
prompt=request.prompt,
created=response.created,
choices=response.choices,