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 128add-more-languages
parent
2fb462d514
commit
7c80ef3221
|
|
@ -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"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -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,
|
||||||
}
|
}
|
||||||
))
|
))
|
||||||
|
|
|
||||||
|
|
@ -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"]
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue