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": { "files": {
"main.js": "./static/js/main.ab7e9a50.js", "main.js": "./static/js/main.0db4b0d6.js",
"index.html": "./index.html" "index.html": "./index.html"
}, },
"entrypoints": [ "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( const request = (this.pendingRequest = axios.post(
`${TabbyServerURL}/v1/completions`, `${TabbyServerURL}/v1/completions`,
{ {
language: "python",
prompt, prompt,
} }
)) ))

View File

@ -2,18 +2,24 @@ from typing import List
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from ..models import Language
class LanguagePreset(BaseModel): class LanguagePreset(BaseModel):
max_length: int max_length: int
stop_words: List[str] stop_words: List[str]
PythonPreset = LanguagePreset( LanguagePresets = {
max_length=128, stop_words=["\n\n", "\ndef", "\n#", "\nimport", "\nfrom", "\nclass"] Language.UNKNOWN: LanguagePreset(
) max_length=128,
stop_words=["\n\n"],
JavascriptPreset = LanguagePreset( ),
max_length=128, stop_words=["\n\n", "\nfunction", "\n//", "\nimport", "\nclass"] Language.PYTHON: LanguagePreset(
) max_length=128,
stop_words=["\n\n", "\ndef", "\n#", "\nimport", "\nfrom", "\nclass"],
LanguagePresets = {"python": PythonPreset, "javascript": JavascriptPreset} ),
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]: def generate(self, request: CompletionRequest) -> List[Choice]:
# FIXME(meng): read preset from request. preset = LanguagePresets[request.language]
preset_name = "python"
preset = LanguagePresets[preset_name]
input_ids = self.tokenizer.encode(request.prompt, return_tensors="pt").to( input_ids = self.tokenizer.encode(request.prompt, return_tensors="pt").to(
self.device self.device
) )

View File

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

View File

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