Skip to content

Commit 2c2998b

Browse files
committed
add test and code improvements
1 parent 0444c63 commit 2c2998b

File tree

5 files changed

+20
-47
lines changed

5 files changed

+20
-47
lines changed

packages/jupyter-ai-magics/jupyter_ai_magics/models/completion.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,11 @@ class InlineCompletionRequest(BaseModel):
2828
# previous cells and following cells can be used to learn the wider context
2929
cell_id: Optional[str]
3030

31-
32-
class InlineCompletionError(BaseModel):
33-
message: str
34-
35-
3631
class InlineCompletionItem(BaseModel):
3732
"""The inline completion suggestion to be displayed on the frontend.
3833
3934
See JupyterLab `InlineCompletionItem` documentation for the details.
4035
"""
41-
42-
error: Optional[InlineCompletionError]
4336
insertText: str
4437
filterText: Optional[str]
4538
isIncomplete: Optional[bool]

packages/jupyter-ai/jupyter_ai/completions/handlers/base.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ async def on_message(self, message):
118118
async def handle_request_and_catch():
119119
try:
120120
await handle_request
121-
# raise Exception("An error occured!")
122121
except Exception as e:
123122
await self.handle_exc(e, request)
124123

@@ -138,9 +137,7 @@ async def handle_exc(self, e: Exception, request: InlineCompletionRequest):
138137
)
139138
self.reply(
140139
InlineCompletionReply(
141-
list=InlineCompletionList(
142-
items=[{"error": {"message": title}, "insertText": ""}]
143-
),
140+
list=InlineCompletionList(items=[]),
144141
error=error,
145142
reply_to=request.number,
146143
)

packages/jupyter-ai/jupyter_ai/tests/completions/test_handlers.py

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import pytest
77
from jupyter_ai.completions.handlers.default import DefaultInlineCompletionHandler
88
from jupyter_ai.completions.models import (
9-
CompletionError,
10-
InlineCompletionList,
119
InlineCompletionReply,
1210
InlineCompletionRequest,
1311
InlineCompletionStreamChunk,
@@ -29,10 +27,16 @@ def __init__(self, **kwargs):
2927
if "responses" not in kwargs:
3028
kwargs["responses"] = ["Test response"]
3129
super().__init__(**kwargs)
30+
31+
def _acall(self, *args, **kwargs):
32+
if self.raise_exc:
33+
raise Exception("Test exception")
34+
else:
35+
return super()._call(*args, **kwargs)
3236

3337

3438
class MockCompletionHandler(DefaultInlineCompletionHandler):
35-
def __init__(self, lm_provider=None, lm_provider_params=None):
39+
def __init__(self, lm_provider=None, lm_provider_params=None, raise_exc=False):
3640
self.request = HTTPServerRequest()
3741
self.application = Application()
3842
self.messages = []
@@ -53,25 +57,6 @@ def reply(
5357
) -> None:
5458
self.messages.append(message)
5559

56-
async def handle_exc(self, e: Exception, _request: InlineCompletionRequest):
57-
# raise all exceptions during testing rather
58-
title = e.args[0] if e.args else "Exception"
59-
error = CompletionError(
60-
type=e.__class__.__name__,
61-
title=title,
62-
traceback=traceback.format_exc(),
63-
)
64-
self.reply(
65-
InlineCompletionReply(
66-
list=InlineCompletionList(
67-
items=[{"error": {"message": title}, "insertText": ""}]
68-
),
69-
error=error,
70-
reply_to=_request.number,
71-
)
72-
)
73-
74-
7560
@fixture
7661
def inline_handler() -> MockCompletionHandler:
7762
return MockCompletionHandler()
@@ -216,19 +201,13 @@ async def test_handle_request_with_error(inline_handler):
216201
lm_provider_params={
217202
"model_id": "model",
218203
"responses": ["test"],
219-
},
204+
"raise_exc": True
205+
}
220206
)
221207
dummy_request = InlineCompletionRequest(
222208
number=1, prefix="", suffix="", mime="", stream=True
223209
)
224210
await inline_handler.on_message(json.dumps(dict(dummy_request)))
225211
await inline_handler.tasks[0]
226-
error_message = (
227-
inline_handler.messages[-1]
228-
.dict()
229-
.get("list", {})
230-
.get("items", [{}])[0]
231-
.get("error", {})
232-
.get("message", None)
233-
)
234-
assert error_message is not None
212+
error = inline_handler.messages[-1].dict().get('error', None)
213+
assert error is not None

packages/jupyter-ai/src/completions/provider.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,18 @@ export class JaiInlineProvider
122122
label: 'Show Traceback',
123123
callback: () => {
124124
showErrorMessage('Inline completion failed on the server side', {
125-
message: error.traceback
125+
message: `${error.title}\n${error.traceback}`
126126
});
127127
}
128128
}
129129
]
130130
});
131-
throw new Error(
132-
`Inline completion failed: ${error.type}\n${error.traceback}`
133-
);
131+
const items = [{
132+
error: {message: error.title},
133+
insertText: ""
134+
}]
135+
console.log({items});
136+
return { items }
134137
}
135138
return result.list;
136139
}

packages/jupyter-ai/src/completions/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export namespace AiCompleterService {
3535
export type CompletionError = {
3636
type: string;
3737
traceback: string;
38+
title: string;
3839
};
3940

4041
export type InlineCompletionReply = {

0 commit comments

Comments
 (0)