Skip to content

Commit 8f4fe49

Browse files
committed
fix chat history in copilot
1 parent 6526212 commit 8f4fe49

File tree

3 files changed

+49
-13
lines changed

3 files changed

+49
-13
lines changed

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@
5858
{
5959
"name": "activity",
6060
"description": "Summarize the activity on the system"
61+
},
62+
{
63+
"name": "set-schema",
64+
"description": "Set the current schema"
6165
}
6266
]
6367
}

src/aiProviders/copilot/chat.ts

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import {
1010
refsToMarkdown,
1111
} from "../context";
1212
import { chatRequest } from "./send";
13+
import { JobManager } from "../../config";
1314

1415
const CHAT_ID = `vscode-db2i.chat`;
16+
let usingSchema = getDefaultSchema();
1517

1618
interface IDB2ChatResult extends vscode.ChatResult {
1719
metadata: {
@@ -36,7 +38,6 @@ export function activateChat(context: vscode.ExtensionContext) {
3638
let messages: vscode.LanguageModelChatMessage[];
3739

3840
if (canTalkToDb()) {
39-
const usingSchema = getDefaultSchema();
4041

4142
switch (request.command) {
4243
case `activity`:
@@ -59,6 +60,21 @@ export function activateChat(context: vscode.ExtensionContext) {
5960

6061
return { metadata: { command: "activity" } };
6162

63+
case `set-schema`:
64+
stream.progress(`Setting Current Schema for SQL Job`);
65+
const newSchema = request.prompt.split(' ')[0];
66+
if (newSchema) {
67+
const curJob = JobManager.getSelection();
68+
if (curJob) {
69+
const result = await curJob.job.setCurrentSchema(newSchema);
70+
if (result) {
71+
stream.progress(`Set Current Schema: ${newSchema}✅`);
72+
usingSchema = newSchema;
73+
}
74+
}
75+
return;
76+
}
77+
6278
default:
6379
stream.progress(
6480
`Getting information from ${Statement.prettyName(usingSchema)}...`
@@ -82,18 +98,20 @@ export function activateChat(context: vscode.ExtensionContext) {
8298
];
8399

84100
if (context.history.length > 0) {
85-
messages.push(...context.history.map(h => {
86-
if ('prompt' in h) {
87-
return vscode.LanguageModelChatMessage.Assistant(h.prompt);
88-
} else {
89-
return vscode.LanguageModelChatMessage.Assistant(
90-
h.response.filter(r => 'value' in r.value).map(r => r.value.value).join(`\n\n`)
91-
);
92-
}
93-
}));
94-
95-
messages = messages.filter(m => m.content.trim().length > 0);
96-
}
101+
const historyMessages = context.history.map(h => {
102+
if ('prompt' in h) {
103+
return vscode.LanguageModelChatMessage.Assistant(h.prompt);
104+
} else {
105+
const responseContent = h.response
106+
.filter(r => r.value instanceof vscode.MarkdownString)
107+
.map(r => (r.value as vscode.MarkdownString).value)
108+
.join('\n\n');
109+
return vscode.LanguageModelChatMessage.Assistant(responseContent);
110+
}
111+
});
112+
113+
messages.push(...historyMessages);
114+
}
97115

98116
if (Object.keys(refs).length > 0) {
99117
messages.push(

src/connection/sqlJob.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { SelfValue } from "../views/jobManager/selfCodes/nodes";
44
import { SQLJob } from "@ibm/mapepire-js";
55
import { ConnectionResult, JobStatus, QueryResult, ServerRequest, ServerResponse } from "@ibm/mapepire-js/dist/src/types";
66
import { JobLogEntry } from "./types";
7+
import Statement from "../database/statement";
78

89
const DB2I_VERSION = (process.env[`DB2I_VERSION`] || `<version unknown>`) + ((process.env.DEV) ? ``:`-dev`);
910

@@ -168,6 +169,19 @@ export class OldSQLJob extends SQLJob {
168169
throw e;
169170
}
170171
}
172+
173+
async setCurrentSchema(schema: string): Promise<QueryResult<any>> {
174+
if (schema) {
175+
const upperSchema = Statement.delimName(schema, true);
176+
const result = await this.execute(`set current schema = ?`, {parameters: [upperSchema]});
177+
if (result.success) {
178+
this.options.libraries[0] = upperSchema;
179+
}
180+
181+
return result;
182+
183+
}
184+
}
171185

172186
getJobLog(): Promise<QueryResult<JobLogEntry>> {
173187
return this.query<JobLogEntry>(`select * from table(qsys2.joblog_info('*')) a`).execute();

0 commit comments

Comments
 (0)