Skip to content

Commit 1f48c51

Browse files
committed
fix: monaco-ghost
1 parent fcb1851 commit 1f48c51

File tree

6 files changed

+110
-51
lines changed

6 files changed

+110
-51
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"@hookform/resolvers": "^3.10.0",
2929
"@reduxjs/toolkit": "^2.5.0",
3030
"@tanstack/react-table": "^8.20.6",
31-
"@ydb-platform/monaco-ghost": "^0.1.10",
31+
"@ydb-platform/monaco-ghost": "^0.1.11",
3232
"axios": "^1.7.9",
3333
"axios-retry": "^4.5.0",
3434
"colord": "^2.9.3",

src/containers/Tenant/Query/QueryEditor/helpers.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import React from 'react';
33
import type {AcceptEvent, DeclineEvent, IgnoreEvent, PromptFile} from '@ydb-platform/monaco-ghost';
44
import type Monaco from 'monaco-editor';
55

6-
import type {TelemetryOpenTabs} from '../../../../services/api/codeAssist';
76
import {codeAssistApi} from '../../../../store/reducers/codeAssist/codeAssist';
7+
import type {TelemetryOpenTabs} from '../../../../types/api/codeAssist';
88
import {AUTOCOMPLETE_ON_ENTER, ENABLE_AUTOCOMPLETE} from '../../../../utils/constants';
99
import {useSetting} from '../../../../utils/hooks';
1010

@@ -44,11 +44,9 @@ export function useCodeAssist() {
4444
const [sendUserQueriesData] = codeAssistApi.useLazySendUserQueriesDataQuery();
4545

4646
const getCodeAssistSuggestions = React.useCallback(
47-
async (prompt: PromptFile[]) => {
47+
async (promptFiles: PromptFile[]) => {
4848
try {
49-
const {items} = await sendCodeAssistPrompt(prompt).unwrap();
50-
51-
return {items};
49+
return sendCodeAssistPrompt(promptFiles).unwrap();
5250
} catch {
5351
return {items: []};
5452
}
@@ -59,7 +57,7 @@ export function useCodeAssist() {
5957
const onCompletionAccept = React.useCallback(
6058
async (event: AcceptEvent) => {
6159
try {
62-
return await acceptSuggestion(event).unwrap();
60+
return acceptSuggestion(event).unwrap();
6361
} catch {
6462
return {items: []};
6563
}
@@ -70,7 +68,7 @@ export function useCodeAssist() {
7068
const onCompletionDecline = React.useCallback(
7169
async (event: DeclineEvent) => {
7270
try {
73-
return await discardSuggestion(event).unwrap();
71+
return discardSuggestion(event).unwrap();
7472
} catch {
7573
return {items: []};
7674
}
@@ -81,7 +79,7 @@ export function useCodeAssist() {
8179
const onCompletionIgnore = React.useCallback(
8280
async (event: IgnoreEvent) => {
8381
try {
84-
return await ignoreSuggestion(event).unwrap();
82+
return ignoreSuggestion(event).unwrap();
8583
} catch {
8684
return {items: []};
8785
}
@@ -96,7 +94,7 @@ export function useCodeAssist() {
9694
Text: query.text,
9795
}));
9896
try {
99-
return await sendUserQueriesData(preparedData).unwrap();
97+
return sendUserQueriesData(preparedData).unwrap();
10098
} catch {
10199
return {items: []};
102100
}

src/services/api/codeAssist.ts

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import type {PromptFile, Suggestions} from '@ydb-platform/monaco-ghost';
22

33
import {codeAssistBackend as CODE_ASSISTANT_BACKEND} from '../../store';
4+
import type {
5+
CodeAssistSuggestionsFiles,
6+
CodeAssistSuggestionsResponse,
7+
TelemetryEvent,
8+
TelemetryOpenTabs,
9+
} from '../../types/api/codeAssist';
410

511
import {BaseYdbAPI} from './base';
612
const ideInfo = {
@@ -10,49 +16,41 @@ const ideInfo = {
1016
PluginVersion: '0.2',
1117
};
1218

13-
interface AcceptSuggestionEvent {
14-
Accepted: {
15-
RequestId: string;
16-
Timestamp: number;
17-
AcceptedText: string;
18-
ConvertedText: string;
19-
};
20-
}
21-
interface DiscardSuggestionEvent {
22-
Discarded: {
23-
RequestId: string;
24-
Timestamp: number;
25-
DiscardReason: 'OnCancel';
26-
DiscardedText: string;
27-
CacheHitCount: number;
28-
};
29-
}
30-
interface IgnoreSuggestionEvent {
31-
Ignored: {
32-
RequestId: string;
33-
Timestamp: number;
34-
IgnoredText: string;
35-
};
19+
function prepareCodeAssistPrompt(promptFiles: PromptFile[]): CodeAssistSuggestionsFiles {
20+
return promptFiles.map((file) => ({
21+
Fragments: file.fragments.map((fragment) => ({
22+
Text: fragment.text,
23+
Start: {
24+
Ln: fragment.start.lineNumber,
25+
Col: fragment.start.column,
26+
},
27+
End: {
28+
Ln: fragment.end.lineNumber,
29+
Col: fragment.end.column,
30+
},
31+
})),
32+
Cursor: {
33+
Ln: file.cursorPostion.lineNumber,
34+
Col: file.cursorPostion.column,
35+
},
36+
Path: `${file.path}.yql`,
37+
}));
3638
}
3739

38-
type OpenTab = {
39-
FileName: string;
40-
Text: string;
41-
};
42-
43-
export type TelemetryOpenTabs = OpenTab[];
44-
45-
export type TelemetryEvent = AcceptSuggestionEvent | DiscardSuggestionEvent | IgnoreSuggestionEvent;
40+
// In the future code assist api will be provided to ydb-ui component explicitly by consumer service.
41+
// Current solution is temporary and aimed to satisfy internal puproses.
4642
export class CodeAssistAPI extends BaseYdbAPI {
4743
getPath(path: string) {
4844
return `${CODE_ASSISTANT_BACKEND ?? ''}${path}`;
4945
}
5046

51-
getCodeAssistSuggestions(data: PromptFile[]) {
52-
return this.post<Suggestions>(
47+
async getCodeAssistSuggestions(data: PromptFile[]): Promise<Suggestions> {
48+
const request: CodeAssistSuggestionsFiles = prepareCodeAssistPrompt(data);
49+
50+
const response = await this.post<CodeAssistSuggestionsResponse>(
5351
this.getPath('/code-assist-suggestion'),
5452
{
55-
Files: data,
53+
Files: request,
5654
ContextCreateType: 1,
5755
IdeInfo: ideInfo,
5856
},
@@ -62,6 +60,11 @@ export class CodeAssistAPI extends BaseYdbAPI {
6260
collectRequest: false,
6361
},
6462
);
63+
64+
return {
65+
items: response.Suggests.map((suggestion) => suggestion.Text),
66+
requestId: response.RequestId,
67+
};
6568
}
6669

6770
sendCodeAssistTelemetry(data: TelemetryEvent) {

src/store/reducers/codeAssist/codeAssist.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@ import type {
66
Suggestions,
77
} from '@ydb-platform/monaco-ghost';
88

9-
import type {TelemetryOpenTabs} from '../../../services/api/codeAssist';
9+
import type {TelemetryOpenTabs} from '../../../types/api/codeAssist';
1010
import {api} from '../api';
1111

1212
export const codeAssistApi = api.injectEndpoints({
1313
endpoints: (builder) => ({
1414
getCodeAssistSuggestions: builder.query<Suggestions, PromptFile[]>({
15-
queryFn: async (prompt: PromptFile[]) => {
15+
queryFn: async (promptFiles: PromptFile[]) => {
1616
try {
1717
if (window.api.codeAssist) {
18-
const data = await window.api.codeAssist.getCodeAssistSuggestions(prompt);
18+
const data =
19+
await window.api.codeAssist.getCodeAssistSuggestions(promptFiles);
1920
return {data};
2021
} else {
2122
throw new Error('Method is not implemented.');

src/types/api/codeAssist.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
interface AcceptSuggestionEvent {
2+
Accepted: {
3+
RequestId: string;
4+
Timestamp: number;
5+
AcceptedText: string;
6+
ConvertedText: string;
7+
};
8+
}
9+
interface DiscardSuggestionEvent {
10+
Discarded: {
11+
RequestId: string;
12+
Timestamp: number;
13+
DiscardReason: 'OnCancel';
14+
DiscardedText: string;
15+
CacheHitCount: number;
16+
};
17+
}
18+
interface IgnoreSuggestionEvent {
19+
Ignored: {
20+
RequestId: string;
21+
Timestamp: number;
22+
IgnoredText: string;
23+
};
24+
}
25+
26+
type OpenTab = {
27+
FileName: string;
28+
Text: string;
29+
};
30+
31+
interface Position {
32+
Ln: number;
33+
Col: number;
34+
}
35+
36+
interface Fragment {
37+
Text: string;
38+
Start: Position;
39+
End: Position;
40+
}
41+
42+
interface File {
43+
Fragments: Fragment[];
44+
Cursor: Position;
45+
Path: string;
46+
}
47+
48+
export type CodeAssistSuggestionsFiles = File[];
49+
50+
export type CodeAssistSuggestionsResponse = {
51+
RequestId: string;
52+
Suggests: {Text: string}[];
53+
};
54+
55+
export type TelemetryOpenTabs = OpenTab[];
56+
57+
export type TelemetryEvent = AcceptSuggestionEvent | DiscardSuggestionEvent | IgnoreSuggestionEvent;

0 commit comments

Comments
 (0)