diff --git a/agent/recordings/cody-chat_103640681/recording.har.yaml b/agent/recordings/cody-chat_103640681/recording.har.yaml
index aac87f52377e..bf28cc63bd6a 100644
--- a/agent/recordings/cody-chat_103640681/recording.har.yaml
+++ b/agent/recordings/cody-chat_103640681/recording.har.yaml
@@ -256,7 +256,7 @@ log:
text: Ok.
- speaker: human
text: >-
- Answer positively without apologizing.
+ Answer positively without apologizing.
You have access to the provided codebase context.
@@ -332,11 +332,11 @@ log:
send: 0
ssl: -1
wait: 1087
- - _id: 41376641b9273b25289527160cfac275
+ - _id: 4e18273d8ae5cff5662ebe8b0c813b4e
_order: 0
cache: {}
request:
- bodySize: 933
+ bodySize: 463
cookies: []
headers:
- name: accept-encoding
@@ -354,64 +354,148 @@ log:
value: cody-cli 6.0.0-SNAPSHOT
- name: host
value: sourcegraph.sourcegraph.com
- headersSize: 511
+ headersSize: 497
httpVersion: HTTP/1.1
method: POST
postData:
mimeType: application/json
params: []
textJSON:
- maxTokensToSample: 4000
+ maxTokensToSample: 100
messages:
- - speaker: system
- text: >-
- You are Cody, an AI coding assistant from Sourcegraph.If your
- answer contains fenced code blocks in Markdown, include the
- relevant full file path in the code block tag using this
- structure: ```$LANGUAGE:$FILEPATH```
-
- For executable terminal commands: enclose each command in individual "bash" language code block without comments and new lines inside.
- - cacheEnabled: true
- speaker: human
- text: |-
- Codebase context from file animal.ts:
- ```typescript:animal.ts
- interface StrangeAnimal {
- makesSound(): 'coo' | 'moo'
- }
- ```
- - speaker: assistant
- text: Ok.
- speaker: human
text: >-
- Answer positively without apologizing.
+ You are Cody, an AI coding assistant from Sourcegraph. Your
+ task is to generate a concise title (in about 10 words without
+ quotation) for respond with "hello" and nothing
+ else.
+ RULE: Your response should only contain the concise title and nothing else.
+ - speaker: assistant
+ model: google::v1::gemini-1.5-flash
+ temperature: 0.2
+ topK: -1
+ topP: -1
+ queryString:
+ - name: client-name
+ value: jetbrains
+ - name: client-version
+ value: 6.0.0-SNAPSHOT
+ url: https://sourcegraph.sourcegraph.com/.api/completions/stream?client-name=jetbrains&client-version=6.0.0-SNAPSHOT
+ response:
+ bodySize: 170
+ content:
+ mimeType: text/event-stream
+ size: 170
+ text: >+
+ event: completion
+ data: {"completion":"Simple \"Hello\" Response Function\n","stopReason":"STOP"}
- You have access to the provided codebase context.
+ event: done
- Question: implement a cow. Only print the code without any explanation.
- model: anthropic::2024-10-22::claude-3-5-sonnet-latest
+ data: {}
+
+ cookies: []
+ headers:
+ - name: date
+ value: Fri, 21 Feb 2025 22:46:10 GMT
+ - name: content-type
+ value: text/event-stream
+ - name: transfer-encoding
+ value: chunked
+ - name: connection
+ value: keep-alive
+ - name: access-control-allow-credentials
+ value: "true"
+ - name: access-control-allow-origin
+ value: ""
+ - name: cache-control
+ value: no-cache
+ - name: vary
+ value: Accept-Encoding, Authorization, Cookie, Authorization, X-Requested-With,
+ Cookie
+ - name: x-content-type-options
+ value: nosniff
+ - name: x-frame-options
+ value: DENY
+ - name: x-xss-protection
+ value: 1; mode=block
+ - name: strict-transport-security
+ value: max-age=31536000; includeSubDomains; preload
+ headersSize: 1390
+ httpVersion: HTTP/1.1
+ redirectURL: ""
+ status: 200
+ statusText: OK
+ startedDateTime: 2025-02-21T22:46:09.784Z
+ time: 1129
+ timings:
+ blocked: -1
+ connect: -1
+ dns: -1
+ receive: 0
+ send: 0
+ ssl: -1
+ wait: 1129
+ - _id: 1a932680a38d2702c78d0d744e3cc0a6
+ _order: 0
+ cache: {}
+ request:
+ bodySize: 485
+ cookies: []
+ headers:
+ - name: accept-encoding
+ value: gzip;q=0
+ - name: authorization
+ value: token
+ REDACTED_1858aad0e1ff07ae26d4042086acb9da455866ad617afd2cb9ab9419e1be1104
+ - name: connection
+ value: keep-alive
+ - name: content-type
+ value: application/json
+ - name: user-agent
+ value: cody-cli/6.0.0-SNAPSHOT (Node.js v20.4.0)
+ - name: x-requested-with
+ value: cody-cli 6.0.0-SNAPSHOT
+ - name: host
+ value: sourcegraph.sourcegraph.com
+ headersSize: 497
+ httpVersion: HTTP/1.1
+ method: POST
+ postData:
+ mimeType: application/json
+ params: []
+ textJSON:
+ maxTokensToSample: 100
+ messages:
+ - speaker: human
+ text: >-
+ You are Cody, an AI coding assistant from Sourcegraph. Your
+ task is to generate a concise title (in about 10 words without
+ quotation) for implement a cow. Only print the
+ code without any explanation..
+ RULE: Your response should only contain the concise title and nothing else.
+ - speaker: assistant
+ model: google::v1::gemini-1.5-flash
temperature: 0.2
topK: -1
topP: -1
queryString:
- - name: api-version
- value: "2"
- name: client-name
value: jetbrains
- name: client-version
value: 6.0.0-SNAPSHOT
- url: https://sourcegraph.sourcegraph.com/.api/completions/stream?api-version=2&client-name=jetbrains&client-version=6.0.0-SNAPSHOT
+ url: https://sourcegraph.sourcegraph.com/.api/completions/stream?client-name=jetbrains&client-version=6.0.0-SNAPSHOT
response:
- bodySize: 584
+ bodySize: 162
content:
mimeType: text/event-stream
- size: 584
+ size: 162
text: >+
event: completion
- data: {"deltaText":"```typescript:animal.ts\nclass Cow implements StrangeAnimal {\n makesSound(): 'coo' | 'moo' {\n return 'moo'\n }\n}\n```","stopReason":"end_turn"}
+ data: {"completion":"Cow Implementation: Code Only\n","stopReason":"STOP"}
event: done
@@ -421,7 +505,7 @@ log:
cookies: []
headers:
- name: date
- value: Mon, 10 Feb 2025 19:57:13 GMT
+ value: Fri, 21 Feb 2025 22:46:10 GMT
- name: content-type
value: text/event-stream
- name: transfer-encoding
@@ -450,8 +534,8 @@ log:
redirectURL: ""
status: 200
statusText: OK
- startedDateTime: 2025-02-10T19:57:12.335Z
- time: 1562
+ startedDateTime: 2025-02-21T22:46:09.883Z
+ time: 958
timings:
blocked: -1
connect: -1
@@ -459,7 +543,7 @@ log:
receive: 0
send: 0
ssl: -1
- wait: 1562
+ wait: 958
- _id: 5d0e29776bf0857beffb22b778ce488b
_order: 0
cache: {}
@@ -499,7 +583,7 @@ log:
params: []
textJSON:
query: >
-
+
query CodeSearchEnabled {
codeSearchEnabled: enterpriseLicenseHasFeature(feature:"code-search")
}
@@ -592,7 +676,7 @@ log:
params: []
textJSON:
query: |-
-
+
query ContextFilters {
site {
codyContextFilters(version: V1) {
@@ -700,7 +784,7 @@ log:
params: []
textJSON:
query: |-
-
+
query CurrentSiteCodyLlmConfiguration {
site {
codyLLMConfiguration {
@@ -820,7 +904,7 @@ log:
params: []
textJSON:
query: |-
-
+
query CurrentSiteCodyLlmConfiguration {
site {
codyLLMConfiguration {
@@ -928,7 +1012,7 @@ log:
params: []
textJSON:
query: |-
-
+
query CurrentSiteCodyLlmProvider {
site {
codyLLMConfiguration {
@@ -1036,7 +1120,7 @@ log:
params: []
textJSON:
query: |-
-
+
query CurrentUser {
currentUser {
id
@@ -1163,7 +1247,7 @@ log:
params: []
textJSON:
query: |-
-
+
query SiteProductVersion {
site {
productVersion
@@ -1273,7 +1357,7 @@ log:
params: []
textJSON:
query: |
-
+
query ViewerSettings {
viewerSettings {
final
diff --git a/agent/recordings/customCommandsClient_509552979/recording.har.yaml b/agent/recordings/customCommandsClient_509552979/recording.har.yaml
index d30dc79724fa..3d1218f3e763 100644
--- a/agent/recordings/customCommandsClient_509552979/recording.har.yaml
+++ b/agent/recordings/customCommandsClient_509552979/recording.har.yaml
@@ -350,11 +350,11 @@ log:
send: 0
ssl: -1
wait: 808
- - _id: 7f72c116f78d7588d22fe948c059381b
+ - _id: 4b3a65cb083f2c0c16a80a7105baeeb3
_order: 0
cache: {}
request:
- bodySize: 1768
+ bodySize: 2126
cookies: []
headers:
- name: accept-encoding
@@ -367,7 +367,7 @@ log:
- name: content-type
value: application/json
- name: traceparent
- value: 00-aeba78fadea4c98c4a53e0743172074b-b59daec458ea02cb-01
+ value: 00-f8aafe08143b0bb2b215a4bddb5936fa-b3d4dc52cfb7d927-01
- name: user-agent
value: customcommandsclient/v1 (Node.js v20.4.0)
- name: x-requested-with
@@ -391,13 +391,50 @@ log:
structure: ```$LANGUAGE:$FILEPATH```
For executable terminal commands: enclose each command in individual "bash" language code block without comments and new lines inside.
- - cacheEnabled: true
- speaker: human
+ - speaker: human
text: >
- My selected code from codebase file src/animal.ts:1-6:
-
- ```
-
+ Codebase context from file path src/sum.ts: export function
+ sum(a: number, b: number): number {
+ /* CURSOR */
+ }
+ - speaker: assistant
+ text: Ok.
+ - speaker: human
+ text: >
+ Codebase context from file path src/example4.ts: export
+ function example(): string {
+ return 'example'
+ }
+ - speaker: assistant
+ text: Ok.
+ - speaker: human
+ text: >
+ Codebase context from file path src/example3.ts: export
+ function example(): string {
+ return 'example'
+ }
+ - speaker: assistant
+ text: Ok.
+ - speaker: human
+ text: >
+ Codebase context from file path src/example2.ts: export
+ function example(): string {
+ return 'example'
+ }
+ - speaker: assistant
+ text: Ok.
+ - speaker: human
+ text: >
+ Codebase context from file path src/example1.ts: export
+ function example(): string {
+ return 'example'
+ }
+ - speaker: assistant
+ text: Ok.
+ - speaker: human
+ text: >
+ Codebase context from file path src/animal.ts: /*
+ SELECTION_START */
export interface Animal {
name: string
@@ -405,48 +442,20 @@ log:
isMammal: boolean
}
+ /* SELECTION_END */
+ - speaker: assistant
+ text: Ok.
+ - speaker: human
+ text: |-
+ My selected code from codebase file src/animal.ts:1-6:
```
-
- Codebase context from file path src/animal.ts: /* SELECTION_START */
-
export interface Animal {
name: string
makeAnimalSound(): string
isMammal: boolean
}
-
- /* SELECTION_END */
-
-
-
- Codebase context from file path src/example1.ts: export function example(): string {
- return 'example'
- }
-
-
-
- Codebase context from file path src/example2.ts: export function example(): string {
- return 'example'
- }
-
-
-
- Codebase context from file path src/example3.ts: export function example(): string {
- return 'example'
- }
-
-
-
- Codebase context from file path src/example4.ts: export function example(): string {
- return 'example'
- }
-
-
-
- Codebase context from file path src/sum.ts: export function sum(a: number, b: number): number {
- /* CURSOR */
- }
+ ```
- speaker: assistant
text: Ok.
- speaker: human
@@ -477,7 +486,7 @@ log:
size: 116
text: |+
event: completion
- data: {"deltaText":"6","stopReason":"end_turn"}
+ data: {"deltaText":"7","stopReason":"end_turn"}
event: done
data: {}
@@ -485,7 +494,7 @@ log:
cookies: []
headers:
- name: date
- value: Mon, 10 Feb 2025 19:57:13 GMT
+ value: Fri, 21 Feb 2025 22:46:11 GMT
- name: content-type
value: text/event-stream
- name: transfer-encoding
@@ -514,8 +523,8 @@ log:
redirectURL: ""
status: 200
statusText: OK
- startedDateTime: 2025-02-10T19:57:11.529Z
- time: 1766
+ startedDateTime: 2025-02-21T22:46:09.511Z
+ time: 2457
timings:
blocked: -1
connect: -1
@@ -523,12 +532,12 @@ log:
receive: 0
send: 0
ssl: -1
- wait: 1766
- - _id: c9c5b45f95029b259a84cd726de59a01
+ wait: 2457
+ - _id: 6bf2501884491cd1c6f6f52c22eaba8f
_order: 0
cache: {}
request:
- bodySize: 2263
+ bodySize: 2243
cookies: []
headers:
- name: accept-encoding
@@ -541,7 +550,7 @@ log:
- name: content-type
value: application/json
- name: traceparent
- value: 00-89c8a378d827e06424ac34ea658fe332-ae5725fefad9db64-01
+ value: 00-e921341a329062630398c1b0bc5c251a-233a1f539fd750a0-01
- name: user-agent
value: customcommandsclient/v1 (Node.js v20.4.0)
- name: x-requested-with
@@ -579,8 +588,7 @@ log:
- Only enclose your response in XML tags. Do use any other XML tags unless they are part of the generated code.
- Do not provide any additional commentary about the changes you made. Only respond with the generated code.
- - cacheEnabled: true
- speaker: human
+ - speaker: human
text: |-
My selected code from codebase file src/sum.ts:1-3:
```
@@ -644,15 +652,13 @@ log:
cookies: []
headers:
- name: date
- value: Tue, 11 Feb 2025 18:54:44 GMT
+ value: Fri, 21 Feb 2025 22:46:13 GMT
- name: content-type
value: text/event-stream
- name: transfer-encoding
value: chunked
- name: connection
value: keep-alive
- - name: retry-after
- value: "67"
- name: access-control-allow-credentials
value: "true"
- name: access-control-allow-origin
@@ -670,13 +676,13 @@ log:
value: 1; mode=block
- name: strict-transport-security
value: max-age=31536000; includeSubDomains; preload
- headersSize: 1405
+ headersSize: 1299
httpVersion: HTTP/1.1
redirectURL: ""
status: 200
statusText: OK
- startedDateTime: 2025-02-11T18:54:42.446Z
- time: 1894
+ startedDateTime: 2025-02-21T22:46:12.012Z
+ time: 1310
timings:
blocked: -1
connect: -1
@@ -684,12 +690,12 @@ log:
receive: 0
send: 0
ssl: -1
- wait: 1894
- - _id: 82aefa70a5ee53eee9a9b81eefc59c60
+ wait: 1310
+ - _id: 4a1005f2f803fcf7e22b9b3a2d322c6e
_order: 0
cache: {}
request:
- bodySize: 2381
+ bodySize: 2361
cookies: []
headers:
- name: accept-encoding
@@ -702,7 +708,7 @@ log:
- name: content-type
value: application/json
- name: traceparent
- value: 00-00ff2202f4b178a0c3ada66f2d21ba34-48a16ab077ec4be1-01
+ value: 00-fb5564ef4e5d5089f74fd084794e3380-82fdc0dc975831d5-01
- name: user-agent
value: customcommandsclient/v1 (Node.js v20.4.0)
- name: x-requested-with
@@ -740,8 +746,7 @@ log:
- Only enclose your response in XML tags. Do use any other XML tags unless they are part of the generated code.
- Do not provide any additional commentary about the changes you made. Only respond with the generated code.
- - cacheEnabled: true
- speaker: human
+ - speaker: human
text: >
Codebase context from file path src/animal.ts: /*
SELECTION_START */
@@ -801,14 +806,14 @@ log:
value: v1
url: https://sourcegraph.com/.api/completions/stream?api-version=2&client-name=customcommandsclient&client-version=v1
response:
- bodySize: 451
+ bodySize: 587
content:
mimeType: text/event-stream
- size: 451
+ size: 587
text: >+
event: completion
- data: {"deltaText":"export interface Animal {\n name: string\n makeAnimalSound(): string\n isMammal: boolean\n logName(): void\n}","stopReason":"stop_sequence"}
+ data: {"deltaText":"/* SELECTION_START */\nexport interface Animal {\n name: string\n makeAnimalSound(): string\n isMammal: boolean\n logAnimalName(): void\n}\n/* SELECTION_END */\n","stopReason":"stop_sequence"}
event: done
@@ -818,15 +823,13 @@ log:
cookies: []
headers:
- name: date
- value: Tue, 11 Feb 2025 18:54:46 GMT
+ value: Fri, 21 Feb 2025 22:46:15 GMT
- name: content-type
value: text/event-stream
- name: transfer-encoding
value: chunked
- name: connection
value: keep-alive
- - name: retry-after
- value: "65"
- name: access-control-allow-credentials
value: "true"
- name: access-control-allow-origin
@@ -844,13 +847,13 @@ log:
value: 1; mode=block
- name: strict-transport-security
value: max-age=31536000; includeSubDomains; preload
- headersSize: 1405
+ headersSize: 1299
httpVersion: HTTP/1.1
redirectURL: ""
status: 200
statusText: OK
- startedDateTime: 2025-02-11T18:54:44.359Z
- time: 1762
+ startedDateTime: 2025-02-21T22:46:13.353Z
+ time: 2186
timings:
blocked: -1
connect: -1
@@ -858,7 +861,7 @@ log:
receive: 0
send: 0
ssl: -1
- wait: 1762
+ wait: 2186
- _id: f1b1cde4cd57488b7f0137954f0302f5
_order: 0
cache: {}
diff --git a/agent/recordings/document-code_965949506/recording.har.yaml b/agent/recordings/document-code_965949506/recording.har.yaml
index 5f8b8c7c8244..f7d64cee9bd4 100644
--- a/agent/recordings/document-code_965949506/recording.har.yaml
+++ b/agent/recordings/document-code_965949506/recording.har.yaml
@@ -449,11 +449,11 @@ log:
send: 0
ssl: -1
wait: 1297
- - _id: c2cd55110c5891dd44665a65b9e6eae4
+ - _id: d4b7126134fbb6b0bd8e84cd9391d7c5
_order: 0
cache: {}
request:
- bodySize: 3004
+ bodySize: 2572
cookies: []
headers:
- name: accept-encoding
@@ -466,7 +466,7 @@ log:
- name: content-type
value: application/json
- name: traceparent
- value: 00-bc1c2779927b127f8ce19d458438e735-141708e418ae2c04-01
+ value: 00-556b4851df49b95f96f6d4397a4ffc67-5b4f84e8b0fcb556-01
- name: user-agent
value: document-code/v1 (Node.js v20.4.0)
- name: x-requested-with
@@ -504,38 +504,19 @@ log:
- Only enclose your response in XML tags. Do use any other XML tags unless they are part of the generated code.
- Do not provide any additional commentary about the changes you made. Only respond with the generated code.
- - cacheEnabled: true
- speaker: human
- text: >+
- Codebase context from file path src/TestLogger.ts: Codebase
- context from file src/TestLogger.ts:
-
- recordLog()
- },
- }
-
-
-
- Codebase context from file path src/TestLogger.ts: Codebase context from file src/TestLogger.ts:
-
- const foo = 42
-
- export const TestLogger = {
- startLogging: () => {
- // Do some stuff
-
- - speaker: assistant
- text: Ok.
- speaker: human
text: >-
- This is part of the file: src/TestLogger.ts
+ This is part of the file: src/Hello.kt
The user has the following code in their selection:
- function recordLog() {
- console.log(/* CURSOR */ 'Recording the log')
- }
+ class He/* CURSOR */llo {
+ fun greeting(): String {
+ return "Hello, world!"
+ }
+ }
+
@@ -553,7 +534,7 @@ log:
model: anthropic/claude-3-haiku-20240307
stopSequences:
-
- - " function recordLog() {"
+ - class He/* CURSOR */llo {
temperature: 0
topK: -1
topP: -1
@@ -566,14 +547,14 @@ log:
value: v1
url: https://sourcegraph.com/.api/completions/stream?api-version=2&client-name=document-code&client-version=v1
response:
- bodySize: 318
+ bodySize: 306
content:
mimeType: text/event-stream
- size: 318
+ size: 306
text: >+
event: completion
- data: {"deltaText":"\n/**\n * Logs a message indicating that a log is being recorded.\n */\n","stopReason":"stop_sequence"}
+ data: {"deltaText":"/**\n * Provides a simple \"Hello, world!\" greeting.\n */\n","stopReason":"stop_sequence"}
event: done
@@ -583,7 +564,7 @@ log:
cookies: []
headers:
- name: date
- value: Tue, 11 Feb 2025 18:54:48 GMT
+ value: Tue, 11 Feb 2025 18:54:50 GMT
- name: content-type
value: text/event-stream
- name: transfer-encoding
@@ -591,7 +572,7 @@ log:
- name: connection
value: keep-alive
- name: retry-after
- value: "62"
+ value: "60"
- name: access-control-allow-credentials
value: "true"
- name: access-control-allow-origin
@@ -614,8 +595,8 @@ log:
redirectURL: ""
status: 200
statusText: OK
- startedDateTime: 2025-02-11T18:54:47.434Z
- time: 862
+ startedDateTime: 2025-02-11T18:54:49.626Z
+ time: 1372
timings:
blocked: -1
connect: -1
@@ -623,12 +604,12 @@ log:
receive: 0
send: 0
ssl: -1
- wait: 862
- - _id: 7c6bfb662f305f30b728800a5f464d08
+ wait: 1372
+ - _id: d94ffaa46d88c0fbdeba278c66405b04
_order: 0
cache: {}
request:
- bodySize: 3257
+ bodySize: 3047
cookies: []
headers:
- name: accept-encoding
@@ -641,7 +622,7 @@ log:
- name: content-type
value: application/json
- name: traceparent
- value: 00-e8a4860176977ed241ec85bf791e689c-b3ec88bee0ad8b01-01
+ value: 00-54c36bcee75e9407a85dc2378150ef9c-c364897e60ee971b-01
- name: user-agent
value: document-code/v1 (Node.js v20.4.0)
- name: x-requested-with
@@ -679,47 +660,39 @@ log:
- Only enclose your response in XML tags. Do use any other XML tags unless they are part of the generated code.
- Do not provide any additional commentary about the changes you made. Only respond with the generated code.
- - cacheEnabled: true
- speaker: human
- text: >
- Codebase context from file path src/example.test.ts: Codebase
- context from file src/example.test.ts:
- })
- })
-
-
-
- Codebase context from file path src/example.test.ts: Codebase context from file src/example.test.ts:
-
- import { expect } from 'vitest'
-
- import { it } from 'vitest'
-
- import { describe } from 'vitest'
+ - speaker: human
+ text: >+
+ Codebase context from file path src/TestLogger.ts: Codebase
+ context from file src/TestLogger.ts:
+ const foo = 42
- describe('test block', () => {
- it('does 1', () => {
- expect(true).toBe(true)
- })
+ export const TestLogger = {
+ startLogging: () => {
+ // Do some stuff
- it('does 2', () => {
- expect(true).toBe(true)
- })
+ - speaker: assistant
+ text: Ok.
+ - speaker: human
+ text: >
+ Codebase context from file path src/TestLogger.ts: Codebase
+ context from file src/TestLogger.ts:
- it('does something else', () => {
- // This line will error due to incorrect usage of `performance.now`
+ recordLog()
+ },
+ }
- speaker: assistant
text: Ok.
- speaker: human
text: >-
- This is part of the file: src/example.test.ts
+ This is part of the file: src/TestLogger.ts
The user has the following code in their selection:
- const startTime = performance.now(/* CURSOR */)
-
+ function recordLog() {
+ console.log(/* CURSOR */ 'Recording the log')
+ }
@@ -737,7 +710,7 @@ log:
model: anthropic/claude-3-haiku-20240307
stopSequences:
-
- - " const startTime = performance.now(/* CURSOR */)"
+ - " function recordLog() {"
temperature: 0
topK: -1
topP: -1
@@ -750,14 +723,14 @@ log:
value: v1
url: https://sourcegraph.com/.api/completions/stream?api-version=2&client-name=document-code&client-version=v1
response:
- bodySize: 446
+ bodySize: 216
content:
mimeType: text/event-stream
- size: 446
+ size: 216
text: >+
event: completion
- data: {"deltaText":"\n/**\n * Retrieves the current time in milliseconds since the page was loaded.\n * This is useful for measuring the duration of an operation or event.\n */\n","stopReason":"stop_sequence"}
+ data: {"deltaText":"\n/**\n * Records a log message to the console.\n */\n","stopReason":"stop_sequence"}
event: done
@@ -767,15 +740,13 @@ log:
cookies: []
headers:
- name: date
- value: Tue, 11 Feb 2025 18:54:49 GMT
+ value: Fri, 21 Feb 2025 22:46:16 GMT
- name: content-type
value: text/event-stream
- name: transfer-encoding
value: chunked
- name: connection
value: keep-alive
- - name: retry-after
- value: "61"
- name: access-control-allow-credentials
value: "true"
- name: access-control-allow-origin
@@ -793,13 +764,13 @@ log:
value: 1; mode=block
- name: strict-transport-security
value: max-age=31536000; includeSubDomains; preload
- headersSize: 1405
+ headersSize: 1299
httpVersion: HTTP/1.1
redirectURL: ""
status: 200
statusText: OK
- startedDateTime: 2025-02-11T18:54:48.312Z
- time: 1252
+ startedDateTime: 2025-02-21T22:46:15.078Z
+ time: 1066
timings:
blocked: -1
connect: -1
@@ -807,12 +778,12 @@ log:
receive: 0
send: 0
ssl: -1
- wait: 1252
- - _id: d4b7126134fbb6b0bd8e84cd9391d7c5
+ wait: 1066
+ - _id: 11242d3d661836d08d91de36ee8dd1ce
_order: 0
cache: {}
request:
- bodySize: 2572
+ bodySize: 3300
cookies: []
headers:
- name: accept-encoding
@@ -825,7 +796,7 @@ log:
- name: content-type
value: application/json
- name: traceparent
- value: 00-556b4851df49b95f96f6d4397a4ffc67-5b4f84e8b0fcb556-01
+ value: 00-21d9b2e4143b07399e332d57c2dfae91-9a353f9548f25562-01
- name: user-agent
value: document-code/v1 (Node.js v20.4.0)
- name: x-requested-with
@@ -863,18 +834,47 @@ log:
- Only enclose your response in XML tags. Do use any other XML tags unless they are part of the generated code.
- Do not provide any additional commentary about the changes you made. Only respond with the generated code.
+ - speaker: human
+ text: >
+ Codebase context from file path src/example.test.ts: Codebase
+ context from file src/example.test.ts:
+
+ import { expect } from 'vitest'
+
+ import { it } from 'vitest'
+
+ import { describe } from 'vitest'
+
+
+ describe('test block', () => {
+ it('does 1', () => {
+ expect(true).toBe(true)
+ })
+
+ it('does 2', () => {
+ expect(true).toBe(true)
+ })
+
+ it('does something else', () => {
+ // This line will error due to incorrect usage of `performance.now`
+ - speaker: assistant
+ text: Ok.
+ - speaker: human
+ text: >
+ Codebase context from file path src/example.test.ts: Codebase
+ context from file src/example.test.ts:
+ })
+ })
+ - speaker: assistant
+ text: Ok.
- speaker: human
text: >-
- This is part of the file: src/Hello.kt
+ This is part of the file: src/example.test.ts
The user has the following code in their selection:
- class He/* CURSOR */llo {
- fun greeting(): String {
- return "Hello, world!"
- }
- }
+ const startTime = performance.now(/* CURSOR */)
@@ -893,7 +893,7 @@ log:
model: anthropic/claude-3-haiku-20240307
stopSequences:
-
- - class He/* CURSOR */llo {
+ - " const startTime = performance.now(/* CURSOR */)"
temperature: 0
topK: -1
topP: -1
@@ -906,14 +906,14 @@ log:
value: v1
url: https://sourcegraph.com/.api/completions/stream?api-version=2&client-name=document-code&client-version=v1
response:
- bodySize: 306
+ bodySize: 425
content:
mimeType: text/event-stream
- size: 306
+ size: 425
text: >+
event: completion
- data: {"deltaText":"/**\n * Provides a simple \"Hello, world!\" greeting.\n */\n","stopReason":"stop_sequence"}
+ data: {"deltaText":"\n/**\n * Captures the current timestamp using `performance.now()`.\n * This is useful for measuring the duration of an operation.\n */\n","stopReason":"stop_sequence"}
event: done
@@ -923,15 +923,13 @@ log:
cookies: []
headers:
- name: date
- value: Tue, 11 Feb 2025 18:54:50 GMT
+ value: Fri, 21 Feb 2025 22:46:17 GMT
- name: content-type
value: text/event-stream
- name: transfer-encoding
value: chunked
- name: connection
value: keep-alive
- - name: retry-after
- value: "60"
- name: access-control-allow-credentials
value: "true"
- name: access-control-allow-origin
@@ -949,13 +947,13 @@ log:
value: 1; mode=block
- name: strict-transport-security
value: max-age=31536000; includeSubDomains; preload
- headersSize: 1405
+ headersSize: 1299
httpVersion: HTTP/1.1
redirectURL: ""
status: 200
statusText: OK
- startedDateTime: 2025-02-11T18:54:49.626Z
- time: 1372
+ startedDateTime: 2025-02-21T22:46:16.168Z
+ time: 1530
timings:
blocked: -1
connect: -1
@@ -963,7 +961,7 @@ log:
receive: 0
send: 0
ssl: -1
- wait: 1372
+ wait: 1530
- _id: f1b1cde4cd57488b7f0137954f0302f5
_order: 0
cache: {}
diff --git a/agent/src/__snapshots__/custom-commands.test.ts.snap b/agent/src/__snapshots__/custom-commands.test.ts.snap
index 4f0050e9e0dc..c2ee2a39df87 100644
--- a/agent/src/__snapshots__/custom-commands.test.ts.snap
+++ b/agent/src/__snapshots__/custom-commands.test.ts.snap
@@ -8,12 +8,15 @@ exports[`Custom Commands > commands/custom, chat command, open tabs context 1`]
`;
exports[`Custom Commands > commands/custom, edit command, edit mode 1`] = `
-"export interface Animal {
+"/* SELECTION_START */
+export interface Animal {
name: string
makeAnimalSound(): string
isMammal: boolean
- logName(): void
-}"
+ logAnimalName(): void
+}
+/* SELECTION_END */
+"
`;
exports[`Custom Commands > commands/custom, edit command, insert mode 1`] = `
diff --git a/agent/src/__snapshots__/document-code.test.ts.snap b/agent/src/__snapshots__/document-code.test.ts.snap
index 694fbbf04af2..d59735ecd701 100644
--- a/agent/src/__snapshots__/document-code.test.ts.snap
+++ b/agent/src/__snapshots__/document-code.test.ts.snap
@@ -7,7 +7,7 @@ export const TestLogger = {
// Do some stuff
/**
- * Logs a message indicating that a log is being recorded.
+ * Records a log message to the console.
*/
function recordLog() {
console.log(/* CURSOR */ 'Recording the log')
@@ -87,8 +87,8 @@ describe('test block', () => {
it('does something else', () => {
// This line will error due to incorrect usage of \`performance.now\`
/**
- * Retrieves the current time in milliseconds since the page was loaded.
- * This is useful for measuring the duration of an operation or event.
+ * Captures the current timestamp using \`performance.now()\`.
+ * This is useful for measuring the duration of an operation.
*/
const startTime = performance.now(/* CURSOR */)
})
diff --git a/agent/src/custom-commands.test.ts b/agent/src/custom-commands.test.ts
index 2aeac543116b..032b6be4cfc9 100644
--- a/agent/src/custom-commands.test.ts
+++ b/agent/src/custom-commands.test.ts
@@ -82,7 +82,7 @@ describe('Custom Commands', () => {
expect(result.type).toBe('chat')
const lastMessage = await client.firstNonEmptyTranscript(result.chatResult as string)
const reply = trimEndOfLine(lastMessage.messages.at(-1)?.text ?? '')
- expect(reply).toMatchInlineSnapshot(`"6"`, explainPollyError)
+ expect(reply).toMatchInlineSnapshot(`"7"`, explainPollyError)
}, 30_000)
it('commands/custom, edit command, insert mode', async () => {
diff --git a/vscode/src/chat/chat-view/prompt.test.ts b/vscode/src/chat/chat-view/prompt.test.ts
index 18f11d8ef2bb..bb5aefd79a83 100644
--- a/vscode/src/chat/chat-view/prompt.test.ts
+++ b/vscode/src/chat/chat-view/prompt.test.ts
@@ -3,6 +3,7 @@ import {
CLIENT_CAPABILITIES_FIXTURE,
type ContextItem,
ContextItemSource,
+ FeatureFlag,
type Message,
ModelUsage,
type ModelsData,
@@ -43,18 +44,11 @@ describe('DefaultPrompter', () => {
})
vi.spyOn(localStorage, 'getEnrollmentHistory').mockReturnValue(false)
vi.spyOn(contextFiltersProvider, 'isUriIgnored').mockResolvedValue(false)
- vi.spyOn(graphqlClient, 'fetchSourcegraphAPI').mockImplementation(async () => ({
- data: {
- evaluateFeatureFlag: true,
- featureFlags: {
- evaluatedFeatureFlags: [
- { name: 'cody-intent-detection-api', value: true },
- { name: 'cody-unified-prompts', value: true },
- { name: 'cody-autocomplete-tracing', value: true },
- ],
- },
- },
- }))
+ vi.spyOn(graphqlClient, 'getEvaluatedFeatureFlags').mockResolvedValue({
+ [FeatureFlag.CodyUnifiedPrompts]: true,
+ [FeatureFlag.CodyAutocompleteTracing]: true,
+ [FeatureFlag.CodyPromptCachingOnMessages]: false,
+ })
mockAuthStatus(AUTH_STATUS_FIXTURE_AUTHED)
mockClientCapabilities(CLIENT_CAPABILITIES_FIXTURE)
})
diff --git a/vscode/src/prompt-builder/index.test.ts b/vscode/src/prompt-builder/index.test.ts
index bdf26b4d65d3..23efb2cae504 100644
--- a/vscode/src/prompt-builder/index.test.ts
+++ b/vscode/src/prompt-builder/index.test.ts
@@ -4,8 +4,10 @@ import {
ContextItemSource,
contextFiltersProvider,
displayPath,
+ featureFlagProvider,
ps,
} from '@sourcegraph/cody-shared'
+import { Observable } from 'observable-fns'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { URI } from 'vscode-uri'
import { mockLocalStorage } from '../services/LocalStorageProvider'
@@ -386,3 +388,39 @@ describe('PromptBuilder', () => {
})
})
})
+
+describe('PromptBuilder', () => {
+ beforeEach(() => {
+ vi.spyOn(featureFlagProvider, 'evaluatedFeatureFlag').mockReturnValue(Observable.of(false))
+ })
+ describe('isCacheEnabled', () => {
+ it('handles disabled feature flag correctly', async () => {
+ const promptBuilder = await PromptBuilder.create({
+ input: 8192,
+ output: 4096,
+ })
+
+ // First access should trigger enrollment but still return feature flag value
+ expect(promptBuilder.isCacheEnabled).toBe(false)
+
+ // Second access should use cached value
+ expect(promptBuilder.isCacheEnabled).toBe(false)
+ })
+
+ it('respects feature flag value and tracks enrollment', async () => {
+ // Mock feature flag provider
+ vi.spyOn(featureFlagProvider, 'evaluatedFeatureFlag').mockReturnValue(Observable.of(true))
+ const promptBuilder = await PromptBuilder.create({
+ input: 8192,
+ output: 4096,
+ })
+
+ // First access should trigger enrollment but still return feature flag value
+ expect(promptBuilder.isCacheEnabled).toBe(true)
+
+ // Second access should use cached value
+ expect(promptBuilder.isCacheEnabled).toBe(true)
+ vi.spyOn(featureFlagProvider, 'evaluatedFeatureFlag').mockReturnValue(Observable.of(false))
+ })
+ })
+})
diff --git a/vscode/src/prompt-builder/index.ts b/vscode/src/prompt-builder/index.ts
index aec215d668c7..1b2d769e9c1d 100644
--- a/vscode/src/prompt-builder/index.ts
+++ b/vscode/src/prompt-builder/index.ts
@@ -23,6 +23,11 @@ interface PromptBuilderContextResult {
added: ContextItem[]
}
+interface PromptCachingSetting {
+ featureFlag?: boolean
+ isEnrolled?: boolean
+}
+
const ASSISTANT_MESSAGE = { speaker: 'assistant', text: ps`Ok.` } as Message
/**
* PromptBuilder constructs a full prompt given a charLimit constraint.
@@ -48,17 +53,23 @@ export class PromptBuilder {
private constructor(private readonly tokenCounter: TokenCounter) {}
- private _isCacheEnabled: boolean | undefined
- private get isCacheEnabled(): boolean {
- if (this._isCacheEnabled === undefined) {
- this._isCacheEnabled = logFirstEnrollmentEvent(
+ private readonly hasCacheFeatureFlag = storeLastValue(
+ featureFlagProvider.evaluatedFeatureFlag(FeatureFlag.CodyPromptCachingOnMessages)
+ )
+ private readonly _isCacheEnabled: PromptCachingSetting = {
+ featureFlag: false,
+ isEnrolled: false,
+ }
+
+ public get isCacheEnabled(): boolean {
+ const isFlagEnabled = Boolean(this.hasCacheFeatureFlag?.value?.last ?? false)
+ if (!this._isCacheEnabled.isEnrolled) {
+ this._isCacheEnabled.isEnrolled = logFirstEnrollmentEvent(
FeatureFlag.CodyPromptCachingOnMessages,
- !!storeLastValue(
- featureFlagProvider.evaluatedFeatureFlag(FeatureFlag.CodyPromptCachingOnMessages)
- ).value
+ isFlagEnabled
)
}
- return this._isCacheEnabled
+ return isFlagEnabled
}
public build(): Message[] {