update changelog and context default (#1045)

This commit is contained in:
ekko
2026-05-26 19:35:48 +08:00
committed by GitHub
parent 82680f5c0b
commit 42f7b64ffb
17 changed files with 150 additions and 44 deletions
+8 -8
View File
@@ -71,7 +71,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('does not scan other providers when the configured provider exists without that model', async () => {
@@ -79,7 +79,7 @@ describe('getModelContextLength', () => {
writeModelsCache({
'openai-codex': {
models: {
'gpt-5.4': { limit: { context: 200_000 } },
'gpt-5.4': { limit: { context: 256_000 } },
},
},
openai: {
@@ -91,7 +91,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('uses the configured provider cache entry when the provider matches', async () => {
@@ -241,7 +241,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('does not trust custom:name alone when the matched custom provider entry points at an unknown proxy url', async () => {
@@ -256,7 +256,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('does not fall through to a unique global match after a resolved custom:name provider misses in its scoped cache provider', async () => {
@@ -276,7 +276,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('allows a unique global model-name fallback for unresolved custom providers', async () => {
@@ -321,7 +321,7 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
it('does not guess across multiple cache providers when a custom provider remains unresolved', async () => {
@@ -341,6 +341,6 @@ describe('getModelContextLength', () => {
const { getModelContextLength } = await loadModelContext()
expect(getModelContextLength()).toBe(200_000)
expect(getModelContextLength()).toBe(256_000)
})
})
+10 -10
View File
@@ -87,7 +87,7 @@ describe('run chat compression trigger', () => {
readConfigYamlForProfileMock.mockReset()
getSessionMock.mockReturnValue({ id: 'session-1', profile: 'default' })
getModelContextLengthMock.mockReturnValue(200_000)
getModelContextLengthMock.mockReturnValue(256_000)
calcAndUpdateUsageMock.mockResolvedValue({ inputTokens: 1_000, outputTokens: 0 })
estimateUsageTokensFromMessagesMock.mockReturnValue({ inputTokens: 0, outputTokens: 0 })
getCompressionSnapshotMock.mockReturnValue(null)
@@ -142,7 +142,7 @@ describe('run chat compression trigger', () => {
readConfigYamlForProfileMock.mockResolvedValue({
compression: { threshold: 0.25, target_ratio: 0.1, protect_last_n: 7, protect_first_n: 2 },
})
calcAndUpdateUsageMock.mockResolvedValue({ inputTokens: 60_000, outputTokens: 0 })
calcAndUpdateUsageMock.mockResolvedValue({ inputTokens: 70_000, outputTokens: 0 })
compressorCompressMock.mockResolvedValue({
messages: [{ role: 'user', content: 'compressed' }],
meta: {
@@ -212,7 +212,7 @@ describe('run chat compression trigger', () => {
emit,
new Map(),
{},
vi.fn(async () => 120_000),
vi.fn(async () => 160_000),
)
expect(history).toEqual([{ role: 'user', content: 'compressed by local context estimate' }])
@@ -356,7 +356,7 @@ describe('run chat compression trigger', () => {
emit,
new Map(),
{},
vi.fn(async () => 120_000),
vi.fn(async () => 160_000),
700,
)
@@ -387,7 +387,7 @@ describe('run chat compression trigger', () => {
emit,
new Map(),
{},
vi.fn(async () => 120_000),
vi.fn(async () => 160_000),
)).rejects.toBeInstanceOf(ContextWindowTooSmallError)
expect(emit).not.toHaveBeenCalledWith('usage.updated', expect.anything())
@@ -420,7 +420,7 @@ describe('run chat compression trigger', () => {
vi.fn(),
new Map(),
{},
vi.fn(async () => 120_000),
vi.fn(async () => 160_000),
)).rejects.toBeInstanceOf(ContextWindowTooSmallError)
expect(compressorCompressMock).not.toHaveBeenCalled()
@@ -443,7 +443,7 @@ describe('run chat compression trigger', () => {
readConfigYamlForProfileMock.mockResolvedValue({
compression: { protect_last_n: 5 },
})
calcAndUpdateUsageMock.mockResolvedValue({ inputTokens: 120_000, outputTokens: 0 })
calcAndUpdateUsageMock.mockResolvedValue({ inputTokens: 160_000, outputTokens: 0 })
compressorCompressMock.mockResolvedValue({
messages: [{ role: 'user', content: 'compressed' }],
meta: {
@@ -468,8 +468,8 @@ describe('run chat compression trigger', () => {
expect(compressorConstructorMock).toHaveBeenCalledWith({
config: {
triggerTokens: 100_000,
summaryBudget: 40_000,
triggerTokens: 128_000,
summaryBudget: 51_200,
headMessageCount: 3,
tailMessageCount: 5,
},
@@ -544,7 +544,7 @@ describe('run chat compression trigger', () => {
readConfigYamlForProfileMock.mockResolvedValue({
compression: { protect_first_n: 2, protect_last_n: 3 },
})
estimateUsageTokensFromMessagesMock.mockReturnValue({ inputTokens: 120_000, outputTokens: 0 })
estimateUsageTokensFromMessagesMock.mockReturnValue({ inputTokens: 160_000, outputTokens: 0 })
compressorCompressMock.mockResolvedValue({
messages: [{ role: 'user', content: 'updated stale compressed' }],
meta: {
+1 -1
View File
@@ -16,7 +16,7 @@ const listWorkspaceFoldersMock = vi.fn(async (ctx: any) => { ctx.body = { folder
const usageBatchMock = vi.fn(async (ctx: any) => { ctx.body = {} })
const usageSingleMock = vi.fn(async (ctx: any) => { ctx.body = { input_tokens: 0, output_tokens: 0 } })
const usageStatsMock = vi.fn(async (ctx: any) => { ctx.body = { total_input_tokens: 0, total_output_tokens: 0 } })
const contextLengthMock = vi.fn(async (ctx: any) => { ctx.body = { context_length: 200000 } })
const contextLengthMock = vi.fn(async (ctx: any) => { ctx.body = { context_length: 256000 } })
const batchRemoveMock = vi.fn(async (ctx: any) => { ctx.body = { deleted: 1, failed: 0, errors: [] } })
const exportSessionMock = vi.fn(async (ctx: any) => { ctx.body = JSON.stringify({ id: ctx.params.id }) })