Skip to content

Commit dc705ff

Browse files
committed
docs(semantic): add Hyde Code and Keywords strategy documentation
Added documentation for Hyde Code and Keywords strategy with detailed steps and code snippets.
1 parent 321deb6 commit dc705ff

File tree

7 files changed

+114
-31
lines changed

7 files changed

+114
-31
lines changed

docs/development/prompt-example.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
---
22
layout: default
3-
title: Prompt Example
3+
title: Unit Test Prompt Example
44
nav_order: 999
5+
parent: Development
56
---
67

78
```devin

docs/semantic/hyde-code-strategy.md

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
layout: default
3+
title: Hyde Code Strategy
4+
nav_order: 3
5+
parent: Semantic
6+
---
7+
8+
Code file: HydeCodeStrategy.ts
9+
10+
1. generate hyde doc code from the user query
11+
2. retrieve code snippets by hyde code from the codebase
12+
3. summarize the code snippets and return the result
13+
14+
```typescript
15+
channel.appendLine("=".repeat(80));
16+
channel.appendLine(`= Hyde Keywords Strategy: ${this.constructor.name} =`);
17+
channel.appendLine("=".repeat(80));
18+
19+
this.step = HydeStep.Propose;
20+
let documents = await this.generateDocument();
21+
let hydeCode = documents.content;
22+
23+
this.step = HydeStep.Retrieve;
24+
let chunks = await this.retrieveChunks(hydeCode);
25+
26+
this.step = HydeStep.Evaluate;
27+
let evaluateContext: KeywordEvaluateContext = {
28+
step: this.step,
29+
question: this.query,
30+
code: chunks.map(item => item.text).join("\n"),
31+
language: ""
32+
};
33+
34+
if (chunks.length === 0) {
35+
channel.appendLine("No code snippets found.");
36+
return new StrategyOutput("", []);
37+
}
38+
39+
channel.appendLine("\n");
40+
channel.appendLine(" --- Summary --- ");
41+
let evaluateIns = await PromptManager.getInstance().renderHydeTemplate(this.step, this.documentType, evaluateContext);
42+
return new StrategyOutput(await executeIns(evaluateIns), chunks);
43+
```
+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
layout: default
3+
title: Hyde Keywords Strategy
4+
nav_order: 2
5+
parent: Semantic
6+
---
7+
8+
Code file: HydeKeywordsStrategy.ts
9+
10+
1. generate keywords from the user query
11+
2. retrieve code snippets by query from the codebase
12+
3. summarize the code snippets and return the result
13+
14+
```typescript
15+
this.step = HydeStep.Propose;
16+
let documents = await this.generateDocument();
17+
let keywords = documents.content;
18+
19+
this.step = HydeStep.Retrieve;
20+
let queryTerm = this.createQueryTerm(keywords);
21+
let chunkItems = await this.retrieveChunks(queryTerm);
22+
23+
this.step = HydeStep.Evaluate;
24+
let evaluateContext: KeywordEvaluateContext = {
25+
step: this.step,
26+
question: keywords.question,
27+
code: chunkItems.map(item => item.text).join("\n"),
28+
language: ""
29+
};
30+
31+
if (chunkItems.length === 0) {
32+
channel.appendLine("No code snippets found.");
33+
return new StrategyOutput("", []);
34+
}
35+
36+
channel.appendLine("\n");
37+
channel.appendLine(" --- Summary --- ");
38+
let evaluateIns = await PromptManager.getInstance().renderHydeTemplate(this.step, this.documentType, evaluateContext);
39+
return new StrategyOutput(await executeIns(evaluateIns), chunkItems);
40+
```

docs/semantic/rag-strategy.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ parent: Semantic
2020

2121
### Our Strategy
2222

23-
- HydeCodeStrategy
24-
- HydeKeywordsStrategy
23+
- HydeCodeStrategy reference to GitHub Copilot
24+
- HydeKeywordsStrategy reference to Bloop: HydeDoc
2525

src/code-search/search-strategy/HydeCodeStrategy.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ChunkItem } from "../embedding/_base/Embedding";
2-
import { HydeQuery, HydeStrategy } from "./_base/HydeStrategy";
2+
import { executeIns, HydeQuery, HydeStrategy } from "./_base/HydeStrategy";
33
import { HydeDocument, HydeDocumentType } from "./_base/HydeDocument";
44
import { AutoDevExtension } from "../../AutoDevExtension";
55
import { ChatMessage } from "../../llm-provider/ChatMessage";
@@ -9,8 +9,7 @@ import { channel } from "../../channel";
99
import { LocalEmbeddingProvider } from "../embedding/LocalEmbeddingProvider";
1010
import { DefaultRetrieval } from "../retrieval/DefaultRetrieval";
1111
import { ContextItem, RetrieveOption } from "../retrieval/Retrieval";
12-
import { TextRange } from "../scope-graph/model/TextRange";
13-
import { executeIns, KeywordEvaluateContext, KeywordsProposeContext } from "./HydeKeywordsStrategy";
12+
import { KeywordEvaluateContext, KeywordsProposeContext } from "./HydeKeywordsStrategy";
1413
import { StreamingMarkdownCodeBlock } from "../../markdown/StreamingMarkdownCodeBlock";
1514
import { StrategyOutput } from "./_base/StrategyOutput";
1615

src/code-search/search-strategy/HydeKeywordsStrategy.ts

+1-25
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { HydeQuery, HydeStrategy } from "./_base/HydeStrategy";
1+
import { executeIns, HydeQuery, HydeStrategy } from "./_base/HydeStrategy";
22
import { ChunkItem } from "../embedding/_base/Embedding";
33
import { HydeDocument, HydeDocumentType } from "./_base/HydeDocument";
44
import { PromptManager } from "../../prompt-manage/PromptManager";
@@ -8,35 +8,11 @@ import { ChatMessage } from "../../llm-provider/ChatMessage";
88
import { HydeKeywords } from "./_base/HydeKeywords";
99
import { DefaultRetrieval } from "../retrieval/DefaultRetrieval";
1010
import { AutoDevExtension } from "../../AutoDevExtension";
11-
import { CustomActionPrompt } from "../../prompt-manage/custom-action/CustomActionPrompt";
12-
import { AutoDevStatus, AutoDevStatusManager } from "../../editor/editor-api/AutoDevStatusManager";
13-
import { LlmProvider } from "../../llm-provider/LlmProvider";
1411
import { channel } from "../../channel";
1512
import { LocalEmbeddingProvider } from "../embedding/LocalEmbeddingProvider";
1613
import { ContextItem, RetrieveOption } from "../retrieval/Retrieval";
1714
import { StrategyOutput } from "./_base/StrategyOutput";
1815

19-
export async function executeIns(instruction: string) {
20-
console.log("\ninstruction: \n" + instruction);
21-
let result = "";
22-
try {
23-
let chatMessages = CustomActionPrompt.parseChatMessage(instruction);
24-
AutoDevStatusManager.instance.setStatus(AutoDevStatus.InProgress);
25-
let response = await LlmProvider.codeCompletion()._streamChat(chatMessages);
26-
for await (let chatMessage of response) {
27-
channel.append(chatMessage.content);
28-
result += chatMessage.content;
29-
}
30-
31-
AutoDevStatusManager.instance.setStatus(AutoDevStatus.Done);
32-
return result;
33-
} catch (e) {
34-
console.log("error:" + e);
35-
AutoDevStatusManager.instance.setStatus(AutoDevStatus.Error);
36-
return "";
37-
}
38-
}
39-
4016
/**
4117
* The `HydeKeywordsStrategy` class is a part of the Hyde Strategy pattern and is used to generate keywords from a query.
4218
* These keywords are then used to retrieve similar code by symbols.

src/code-search/search-strategy/_base/HydeStrategy.ts

+24
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { ChunkItem, Embedding } from "../../embedding/_base/Embedding";
22
import { HydeDocument, HydeDocumentType } from "./HydeDocument";
33
import { StrategyOutput } from "./StrategyOutput";
4+
import { CustomActionPrompt } from "../../../prompt-manage/custom-action/CustomActionPrompt";
5+
import { AutoDevStatus, AutoDevStatusManager } from "../../../editor/editor-api/AutoDevStatusManager";
6+
import { LlmProvider } from "../../../llm-provider/LlmProvider";
7+
import { channel } from "../../../channel";
48

59
export type HydeQuery = string | RegExp | Embedding;
610

@@ -64,3 +68,23 @@ export interface HydeStrategy<T> {
6468
execute(): Promise<StrategyOutput>;
6569
}
6670

71+
export async function executeIns(instruction: string) {
72+
console.log("\ninstruction: \n" + instruction);
73+
let result = "";
74+
try {
75+
let chatMessages = CustomActionPrompt.parseChatMessage(instruction);
76+
AutoDevStatusManager.instance.setStatus(AutoDevStatus.InProgress);
77+
let response = await LlmProvider.codeCompletion()._streamChat(chatMessages);
78+
for await (let chatMessage of response) {
79+
channel.append(chatMessage.content);
80+
result += chatMessage.content;
81+
}
82+
83+
AutoDevStatusManager.instance.setStatus(AutoDevStatus.Done);
84+
return result;
85+
} catch (e) {
86+
console.log("error:" + e);
87+
AutoDevStatusManager.instance.setStatus(AutoDevStatus.Error);
88+
return "";
89+
}
90+
}

0 commit comments

Comments
 (0)