Skip to content

Commit 597662c

Browse files
Update Extension (#719)
* Update Extension * Update Readme and vsix * Update package-lock --------- Co-authored-by: Ilya Lavrenov <ilya.lavrenov@intel.com>
1 parent 79dc880 commit 597662c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+790
-398
lines changed

modules/openvino_code/README.md

+8-60
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,16 @@
11
# OpenVINO Code - VSCode extension for AI code completion with OpenVINO™
22

3-
VSCode extension for helping developers writing code with AI code assistant. OpenVINO Code is working with Large Language Model for Code (Code LLM) deployed on local or remote server.
3+
VSCode extension for helping developers writing code with AI code assistant.
4+
OpenVINO Code is working with Large Language Model for Code (Code LLM) deployed on local server
5+
or remote server using [Remote Explorer](https://marketplace.visualstudio.com/items?itemName=ms-vscode.remote-explorer).
46

5-
## Installing Extension
7+
OpenVINO Code provides the following features:
8+
- Inline Code Completion
9+
- Summarization via docstring
610

7-
VSCode extension can be installed from built `*.vsix` file:
8-
9-
1. Open `Extensions` side bar in VSCode.
10-
2. Click on the menu icon (three dots menu icon aka "meatballs" icon) in the top right corner of Extensions side panel.
11-
3. Select "Instal from VSIX..." option and select extension file.
12-
13-
For instructions on how to build extension `vsix` file please refer to the [Build Extension](#build-extension) section.
14-
15-
## Extension Configuration
16-
17-
To work with extension you should configure endpoint to server with Code LLM where requests will be sent:
18-
19-
1. Open extension settings.
20-
2. Fill `Server URL` parameter with server endpoint URL.
21-
22-
For instructions on how to start server locally please refer to the [server README.md](./server/README.md).
23-
24-
Also in extension settings you can configure special tokens.
2511

2612
## Working with Extension
2713

28-
TDB
29-
3014
1. Create a new python file
3115
2. Try typing `def main():`
3216
3. Press shortcut buttons (TBD) for code completion
@@ -35,41 +19,5 @@ TDB
3519

3620
You can see input to and output from the code generation API:
3721

38-
1. Open VSCode `OUTPUT` panel
39-
2. Select extension output source from the dropdown menu
40-
41-
## Developing
42-
43-
> **Prerequisite:** You should have `Node.js` installed (v16 and above).
44-
45-
#### Install dependencies
46-
47-
To install dependencies run the following command from the project root directory:
48-
49-
```
50-
npm install
51-
```
52-
53-
#### Run Extension from Source & Debugging
54-
55-
Open `Run and Debug` side bar in VSCode and click `Launch Extension` (or press `F5`).
56-
57-
#### Build Extension
58-
59-
To build extension and generate `*.vsix` file for further installation in VSCode, run the following command:
60-
61-
```
62-
npm run vsce:package
63-
```
64-
65-
#### Linting
66-
67-
To perform linting with `ESLint`, execute the following command:
68-
69-
```
70-
npm run lint
71-
```
72-
73-
#### Testing
74-
75-
TBD
22+
1. Open VSCode Side Panel
23+
2. Click `Show Server Log` or `Show Extension Log`
Binary file not shown.
Binary file not shown.

modules/openvino_code/package-lock.json

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

modules/openvino_code/package.json

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"publisher": "OpenVINO",
33
"name": "openvino-code-completion",
4-
"version": "0.0.1",
4+
"version": "0.0.2",
55
"displayName": "OpenVINO Code Completion",
66
"description": "VSCode extension for AI code completion with OpenVINO",
77
"icon": "media/logo.png",
88
"author": "",
99
"contributors": [],
10-
"license": "License at https://github.com/openvinotoolkit/openvino_contrib/tree/master/modules/openvino_code",
10+
"license": "https://github.com/openvinotoolkit/openvino_contrib/blob/master/LICENSE",
1111
"homepage": "https://docs.openvino.ai/",
1212
"repository": {
1313
"type": "git",
@@ -51,6 +51,7 @@
5151
"lint": "eslint . --max-warnings 0",
5252
"lint:fix": "eslint . --fix",
5353
"lint:side-panel": "npm run lint -w side-panel-ui",
54+
"lint:all": "npm run lint && npm run lint --workspaces",
5455
"test": "node ./out/test/runTest.js",
5556
"vsce:package": "vsce package",
5657
"vsce:publish": "vsce publish",
@@ -164,6 +165,16 @@
164165
{
165166
"title": "OpenVINO Code",
166167
"properties": {
168+
"openvinoCode.model": {
169+
"order": 0,
170+
"type": "string",
171+
"default": "codet5p-220m-py",
172+
"enum": [
173+
"codet5p-220m-py",
174+
"decicoder-1b-openvino-int8"
175+
],
176+
"description": "Which model to use for code generation."
177+
},
167178
"openvinoCode.serverUrl": {
168179
"order": 1,
169180
"type": "string",
@@ -238,6 +249,7 @@
238249
"description": "(Optional) Stop token."
239250
},
240251
"openvinoCode.quoteStyle": {
252+
"order": 11,
241253
"type": "string",
242254
"default": "\"\"\"",
243255
"enum": [
@@ -247,6 +259,7 @@
247259
"description": "Style of quote used with generate docstring command"
248260
},
249261
"openvinoCode.docstringFormat": {
262+
"order": 12,
250263
"type": "string",
251264
"default": "google_summary_only",
252265
"enum": [

modules/openvino_code/server/main.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import uvicorn
1+
from src.utils import get_parser, setup_logger
22

3-
from src.app import app, get_generator_dummy
4-
from src.generators import get_generator_dependency
5-
from src.utils import get_logger, get_parser
63

4+
# Logger should be set up before other imports to propagate logging config to other packages
5+
setup_logger()
76

8-
logger = get_logger(__name__)
7+
import uvicorn # noqa: E402
8+
9+
from src.app import app, get_generator_dummy # noqa: E402
10+
from src.generators import get_generator_dependency # noqa: E402
911

1012

1113
def main():

modules/openvino_code/server/pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ dependencies = [
1212
'torch @ https://download.pytorch.org/whl/cpu-cxx11-abi/torch-2.0.1%2Bcpu.cxx11.abi-cp311-cp311-linux_x86_64.whl ; sys_platform=="linux" and python_version == "3.11"',
1313
'torch ; sys_platform != "linux"',
1414
'openvino==2023.1.0.dev20230811',
15-
'optimum-intel[openvino]==1.10.1',
15+
'optimum-intel[openvino]==1.11.0',
1616
]
1717

1818
[project.optional-dependencies]

modules/openvino_code/server/src/app.py

+43-15
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from fastapi import Depends, FastAPI
55
from fastapi.responses import RedirectResponse, StreamingResponse
6-
from pydantic import BaseModel
6+
from pydantic import BaseModel, Field
77

88
from src.generators import GeneratorFunctor
99
from src.utils import get_logger
@@ -26,6 +26,35 @@ class GenerationRequest(BaseModel):
2626
parameters: GenerationParameters
2727

2828

29+
class GenerationDocStringRequest(BaseModel):
30+
inputs: str = Field(
31+
...,
32+
description="Function or Class body",
33+
example=(
34+
"def fibonacci(n):\n if n == 0:\n return 0\n elif n == 1:\n"
35+
" return 1\n else:\n return fibonacci(n-1) + fibonacci(n-2)"
36+
),
37+
)
38+
template: str = Field(
39+
...,
40+
description=(
41+
"Doc string template with tab stops in format ${tab_stop_number:value[type | int | str | description]}"
42+
),
43+
example=(
44+
' """\n ${1:}\n\n Parameters\n ----------\n n : ${2:int}\n'
45+
" ${3:[description]}\n\n Returns\n -------\n ${4:[type]}\n"
46+
' ${5:[description]}\n """'
47+
),
48+
)
49+
format: str = Field(
50+
...,
51+
description="Doc string format passed from extension settings [google | numpy | sphinx | dockblockr | ...]",
52+
example="numpy",
53+
)
54+
definition: str = Field("", description="Function signature", example="def fibonacci(n):")
55+
parameters: GenerationParameters
56+
57+
2958
class GenerationResponse(BaseModel):
3059
generated_text: str
3160

@@ -40,7 +69,7 @@ def get_generator_dummy():
4069
@app.on_event("startup")
4170
async def startup_event():
4271
# This print is a anchor for vs code extension to track that server is started
43-
SERVER_STARTED_STDOUT_ANCHOR = 'OpenVINO Code Server started'
72+
SERVER_STARTED_STDOUT_ANCHOR = "OpenVINO Code Server started"
4473
logger.info(SERVER_STARTED_STDOUT_ANCHOR)
4574

4675

@@ -59,7 +88,7 @@ async def generate(
5988
request: GenerationRequest,
6089
generator: GeneratorFunctor = Depends(get_generator_dummy),
6190
) -> Dict[str, Union[int, str]]:
62-
logger.info(request)
91+
logger.info(f"Request:\n{request}")
6392

6493
start = perf_counter()
6594
generated_text: str = generator(request.inputs, request.parameters.model_dump())
@@ -70,7 +99,7 @@ async def generate(
7099
else:
71100
logger.info(f"Elapsed: {elapsed:.3f}s")
72101

73-
logger.info(f"Response: {generated_text}")
102+
logger.info(f"Response:\n{generated_text}")
74103
return {"generated_text": generated_text}
75104

76105

@@ -85,16 +114,15 @@ async def generate_stream(
85114

86115
@app.post("/api/summarize", status_code=200, response_model=GenerationResponse)
87116
async def summarize(
88-
request: GenerationRequest,
117+
request: GenerationDocStringRequest,
89118
generator: GeneratorFunctor = Depends(get_generator_dummy),
90119
):
91120
logger.info(request)
92121

93-
generation_params = request.parameters.model_dump()
94-
generation_params["repetition_penalty"] = 1.15
95-
96122
start = perf_counter()
97-
generated_text: str = generator.summarize(request.inputs, generation_params)
123+
generated_text: str = generator.summarize(
124+
request.inputs, request.template, request.definition, request.format, request.parameters.model_dump()
125+
)
98126
stop = perf_counter()
99127

100128
if (elapsed := stop - start) > 1.5:
@@ -108,12 +136,12 @@ async def summarize(
108136

109137
@app.post("/api/summarize_stream", status_code=200)
110138
async def summarize_stream(
111-
request: GenerationRequest,
139+
request: GenerationDocStringRequest,
112140
generator: GeneratorFunctor = Depends(get_generator_dummy),
113141
) -> StreamingResponse:
114142
logger.info(request)
115-
116-
generation_params = request.parameters.model_dump()
117-
generation_params["repetition_penalty"] = 1.15
118-
119-
return StreamingResponse(generator.summarize_stream(request.inputs, generation_params))
143+
return StreamingResponse(
144+
generator.summarize_stream(
145+
request.inputs, request.template, request.definition, request.format, request.parameters.model_dump()
146+
)
147+
)

0 commit comments

Comments
 (0)