fix: deduplicate Continue system messages
This commit is contained in:
@@ -78,6 +78,7 @@ async function createDistribution(version = '1.5.47'): Promise<{
|
|||||||
'async function SCt(e){return n5e||',
|
'async function SCt(e){return n5e||',
|
||||||
'shouldUseResponsesEndpoint(t){return this.config.useResponsesApi===!1?!1:this.apiBase==="https://api.openai.com/v1/"&&A0e(t)}',
|
'shouldUseResponsesEndpoint(t){return this.config.useResponsesApi===!1?!1:this.apiBase==="https://api.openai.com/v1/"&&A0e(t)}',
|
||||||
'function uAe(e,t){let n={provider:e.provider,model:e.model,apiKey:e.apiKey,apiBase:e.apiBase,requestOptions:e.requestOptions,env:e.env};return CGn(n)??null}',
|
'function uAe(e,t){let n={provider:e.provider,model:e.model,apiKey:e.apiKey,apiBase:e.apiBase,requestOptions:e.requestOptions,env:e.env};return CGn(n)??null}',
|
||||||
|
'function Sin(e,t){let n=[];n.push({role:"system",content:t});let r=oot(e);return n.push(...r),n}',
|
||||||
'function Csa(e){return process.platform==="win32"?{shell:"powershell.exe",args:["-NoLogo","-ExecutionPolicy","Bypass","-Command",e]}',
|
'function Csa(e){return process.platform==="win32"?{shell:"powershell.exe",args:["-NoLogo","-ExecutionPolicy","Bypass","-Command",e]}',
|
||||||
'let{shell:d,args:p}=Csa(e),f=Esa(d,p),g="",y="",A,S=!1,x=18e4;',
|
'let{shell:d,args:p}=Csa(e),f=Esa(d,p),g="",y="",A,S=!1,x=18e4;',
|
||||||
'let r=[eS.join(n,".continue",AKt),eS.join(n,".claude",AKt),eS.join(hu.continueHome,AKt)],o=',
|
'let r=[eS.join(n,".continue",AKt),eS.join(n,".claude",AKt),eS.join(hu.continueHome,AKt)],o=',
|
||||||
@@ -151,6 +152,9 @@ describe('ContinueHostAdapter', () => {
|
|||||||
expect(bundle).toContain(
|
expect(bundle).toContain(
|
||||||
'useResponsesApi:e.useResponsesApi'
|
'useResponsesApi:e.useResponsesApi'
|
||||||
)
|
)
|
||||||
|
expect(bundle).toContain(
|
||||||
|
'let r=oot(e).filter(o=>o.role!=="system")'
|
||||||
|
)
|
||||||
expect(bundle).toContain('"-NoProfile"')
|
expect(bundle).toContain('"-NoProfile"')
|
||||||
expect(bundle).toContain('[Console]::OutputEncoding')
|
expect(bundle).toContain('[Console]::OutputEncoding')
|
||||||
expect(bundle).toContain(
|
expect(bundle).toContain(
|
||||||
@@ -1155,9 +1159,16 @@ describe('ContinueHostAdapter', () => {
|
|||||||
)
|
)
|
||||||
temporaryDirectories.push(root)
|
temporaryDirectories.push(root)
|
||||||
const requestPaths: string[] = []
|
const requestPaths: string[] = []
|
||||||
const server = createServer((request, response) => {
|
const requestBodies: unknown[] = []
|
||||||
|
const server = createServer(async (request, response) => {
|
||||||
requestPaths.push(request.url ?? '')
|
requestPaths.push(request.url ?? '')
|
||||||
request.resume()
|
let body = ''
|
||||||
|
for await (const chunk of request) {
|
||||||
|
body += chunk
|
||||||
|
}
|
||||||
|
if (body) {
|
||||||
|
requestBodies.push(JSON.parse(body))
|
||||||
|
}
|
||||||
response.writeHead(400, {
|
response.writeHead(400, {
|
||||||
'content-type': 'application/json'
|
'content-type': 'application/json'
|
||||||
})
|
})
|
||||||
@@ -1209,6 +1220,24 @@ describe('ContinueHostAdapter', () => {
|
|||||||
.catch(() => undefined)
|
.catch(() => undefined)
|
||||||
expect(requestPaths).toContain(expectedPath)
|
expect(requestPaths).toContain(expectedPath)
|
||||||
expect(requestPaths).not.toContain(unexpectedPath)
|
expect(requestPaths).not.toContain(unexpectedPath)
|
||||||
|
if (protocol === 'openai-chat-completions') {
|
||||||
|
const chatRequest = requestBodies.find(
|
||||||
|
(body): body is { messages: Array<{ role?: unknown }> } =>
|
||||||
|
Boolean(
|
||||||
|
body &&
|
||||||
|
typeof body === 'object' &&
|
||||||
|
'messages' in body &&
|
||||||
|
Array.isArray(body.messages)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
expect(chatRequest).toBeDefined()
|
||||||
|
expect(chatRequest?.messages[0]?.role).toBe('system')
|
||||||
|
expect(
|
||||||
|
chatRequest?.messages.filter(
|
||||||
|
(message) => message.role === 'system'
|
||||||
|
)
|
||||||
|
).toHaveLength(1)
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
clearTimeout(timeout)
|
clearTimeout(timeout)
|
||||||
adapter.dispose()
|
adapter.dispose()
|
||||||
|
|||||||
@@ -609,6 +609,8 @@ export class ContinueHostAdapter {
|
|||||||
'shouldUseResponsesEndpoint(t){return this.config.useResponsesApi===!1?!1:this.apiBase==="https://api.openai.com/v1/"&&A0e(t)}'
|
'shouldUseResponsesEndpoint(t){return this.config.useResponsesApi===!1?!1:this.apiBase==="https://api.openai.com/v1/"&&A0e(t)}'
|
||||||
const modelConfigurationMarker =
|
const modelConfigurationMarker =
|
||||||
'function uAe(e,t){let n={provider:e.provider,model:e.model,apiKey:e.apiKey,apiBase:e.apiBase,requestOptions:e.requestOptions,env:e.env};return CGn(n)??null}'
|
'function uAe(e,t){let n={provider:e.provider,model:e.model,apiKey:e.apiKey,apiBase:e.apiBase,requestOptions:e.requestOptions,env:e.env};return CGn(n)??null}'
|
||||||
|
const messageOrderingMarker =
|
||||||
|
'function Sin(e,t){let n=[];n.push({role:"system",content:t});let r=oot(e);return n.push(...r),n}'
|
||||||
const windowsShellMarker =
|
const windowsShellMarker =
|
||||||
'function Csa(e){return process.platform==="win32"?{shell:"powershell.exe",args:["-NoLogo","-ExecutionPolicy","Bypass","-Command",e]}'
|
'function Csa(e){return process.platform==="win32"?{shell:"powershell.exe",args:["-NoLogo","-ExecutionPolicy","Bypass","-Command",e]}'
|
||||||
const terminalOutputMarker =
|
const terminalOutputMarker =
|
||||||
@@ -677,6 +679,11 @@ export class ContinueHostAdapter {
|
|||||||
modelConfigurationMarker,
|
modelConfigurationMarker,
|
||||||
'function uAe(e,t){let n={provider:e.provider,model:e.model,apiKey:e.apiKey,apiBase:e.apiBase,requestOptions:e.requestOptions,env:e.env,useResponsesApi:e.useResponsesApi};return CGn(n)??null}'
|
'function uAe(e,t){let n={provider:e.provider,model:e.model,apiKey:e.apiKey,apiBase:e.apiBase,requestOptions:e.requestOptions,env:e.env,useResponsesApi:e.useResponsesApi};return CGn(n)??null}'
|
||||||
)
|
)
|
||||||
|
patched = replaceExactly(
|
||||||
|
patched,
|
||||||
|
messageOrderingMarker,
|
||||||
|
'function Sin(e,t){let n=[];n.push({role:"system",content:t});let r=oot(e).filter(o=>o.role!=="system");return n.push(...r),n}'
|
||||||
|
)
|
||||||
patched = replaceExactly(
|
patched = replaceExactly(
|
||||||
patched,
|
patched,
|
||||||
windowsShellMarker,
|
windowsShellMarker,
|
||||||
|
|||||||
Reference in New Issue
Block a user