Skip to content

Commit

Permalink
feat(context-provider): move ContextItem interface to new BaseContext…
Browse files Browse the repository at this point in the history
…Provider

Moved the ContextItem interface from the retrieval module to a new BaseContextProvider module. This change also includes updates to import statements in various files to reflect the new location of the ContextItem interface.
  • Loading branch information
phodal committed May 27, 2024
1 parent 88d7757 commit 0b828af
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 21 deletions.
2 changes: 1 addition & 1 deletion src/code-context/_indexing/CodeSnippetsCodebaseIndex.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ import { getLanguageForFile } from "../../editor/language/parser/TreeSitterParse
import { getParserForFile } from "../../editor/language/parser/ParserUtil";
import { tagToString } from "../../code-search/refreshIndex";
import { getBasename } from "../../code-search/utils/IndexPathHelper";
import { ContextItem, ContextSubmenuItem } from "../../code-search/retrieval/Retrieval";
import { Point, TextRange } from "../../code-search/scope-graph/model/TextRange";
import { ContextItem, ContextSubmenuItem } from "../../context-provider/_base/BaseContextProvider";

/**
* for provider {@link CodeContextProvider}
Expand Down
3 changes: 2 additions & 1 deletion src/code-search/retrieval/DefaultRetrieval.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ import { EmbeddingsProvider } from "../embedding/_base/EmbeddingsProvider";
import { getBasename } from "../utils/IndexPathHelper";
import { RETRIEVAL_PARAMS } from "../utils/constants";
import { channel } from "../../channel";
import { ContextItem, Retrieval, RetrieveOption } from "./Retrieval";
import { Retrieval, RetrieveOption } from "./Retrieval";
import { RetrievalQueryTerm } from "./RetrievalQueryTerm";
import { Point, TextRange } from "../scope-graph/model/TextRange";
import { ContextItem } from "../../context-provider/_base/BaseContextProvider";

export class DefaultRetrieval extends Retrieval {
private static instance: DefaultRetrieval;
Expand Down
18 changes: 1 addition & 17 deletions src/code-search/retrieval/Retrieval.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,12 @@ import { Chunk } from "../chunk/_base/Chunk";
import { FullTextSearchCodebaseIndex } from "../search/FullTextSearch";
import { RETRIEVAL_PARAMS } from "../utils/constants";
import { RetrievalQueryTerm } from "./RetrievalQueryTerm";
import { TextRange } from "../scope-graph/model/TextRange";
import { GitAction } from "../../editor/editor-api/scm/GitAction";
import { Commit } from "../../types/git";
import { TfIdfChunkSearch } from "../search/TfIdfChunkSearch";
import { languageFromPath } from "../../editor/language/ExtensionLanguageMap";
import { JaccardSimilarity } from "../similar/algorithm/JaccardSimilarity";

export interface ContextSubmenuItem {
id: string;
title: string;
description: string;
}

export interface ContextItem {
content: string;
name: string;
path: string;
range: TextRange;
description: string;
editing?: boolean;
editable?: boolean;
}
import { ContextItem } from "../../context-provider/_base/BaseContextProvider";

export interface RetrieveOption {
/**
Expand Down
3 changes: 2 additions & 1 deletion src/code-search/search-strategy/HydeCodeStrategy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ import { HydeStep } from "./_base/HydeStep";
import { PromptManager } from "../../prompt-manage/PromptManager";
import { channel } from "../../channel";
import { DefaultRetrieval } from "../retrieval/DefaultRetrieval";
import { ContextItem, RetrieveOption } from "../retrieval/Retrieval";
import { RetrieveOption } from "../retrieval/Retrieval";
import { KeywordEvaluateContext, KeywordsProposeContext } from "./HydeKeywordsStrategy";
import { StreamingMarkdownCodeBlock } from "../../markdown/StreamingMarkdownCodeBlock";
import { StrategyFinalPrompt } from "./_base/StrategyFinalPrompt";
import { ContextItem } from "../../context-provider/_base/BaseContextProvider";

/**
* Generate hypothetical document base on user input, and then used to retrieve similar code by symbols.
Expand Down
3 changes: 2 additions & 1 deletion src/code-search/search-strategy/HydeKeywordsStrategy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ import { HydeKeywords } from "./_base/HydeKeywords";
import { DefaultRetrieval } from "../retrieval/DefaultRetrieval";
import { AutoDevExtension } from "../../AutoDevExtension";
import { channel } from "../../channel";
import { ContextItem, RetrieveOption } from "../retrieval/Retrieval";
import { RetrieveOption } from "../retrieval/Retrieval";
import { StrategyFinalPrompt } from "./_base/StrategyFinalPrompt";
import { ContextItem } from "../../context-provider/_base/BaseContextProvider";

/**
* The `HydeKeywordsStrategy` class is a part of the Hyde Strategy pattern and is used to generate keywords from a query.
Expand Down
93 changes: 93 additions & 0 deletions src/context-provider/_base/BaseContextProvider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { TextRange } from "../../code-search/scope-graph/model/TextRange";
import { Reranker } from "../../code-search/reranker/Reranker";
import { EmbeddingsProvider } from "../../code-search/embedding/_base/EmbeddingsProvider";
import { IdeAction } from "../../editor/editor-api/IdeAction";
import { OpenAICompletion } from "../../llm-provider/OpenAICompletion";

export interface ContextSubmenuItem {
id: string;
title: string;
description: string;
}

export interface ContextItem {
content: string;
name: string;
path: string;
range: TextRange;
description: string;
editing?: boolean;
editable?: boolean;
}

export type ContextProviderType = "normal" | "query" | "submenu";

export interface ContextProviderDescription {
title: string;
displayTitle: string;
description: string;
renderInlineAs?: string;
type: ContextProviderType;
}

export type FetchFunction = (url: string | URL, init?: any) => Promise<any>;

export interface LoadSubmenuItemsArgs {
ide: IdeAction;
fetch: FetchFunction;
}

export interface RangeInFile {
filepath: string;
range: Range;
}

export interface ContextProviderExtras {
fullInput: string;
embeddingsProvider: EmbeddingsProvider;
reranker: Reranker | undefined;
// todo: replace to other models
llm: OpenAICompletion;
ide: IdeAction;
selectedCode: RangeInFile[];
fetch: FetchFunction;
}


export interface IContextProvider {
get description(): ContextProviderDescription;

getContextItems(
query: string,
extras: ContextProviderExtras,
): Promise<ContextItem[]>;

loadSubmenuItems(args: LoadSubmenuItemsArgs): Promise<ContextSubmenuItem[]>;
}


export abstract class BaseContextProvider implements IContextProvider {
options: { [key: string]: any };

constructor(options: { [key: string]: any }) {
this.options = options;
}

static description: ContextProviderDescription;

get description(): ContextProviderDescription {
return (this.constructor as any).description;
}

// Maybe just include the chat message in here. Should never have to go back to the context provider once you have the information.
abstract getContextItems(
query: string,
extras: ContextProviderExtras,
): Promise<ContextItem[]>;

async loadSubmenuItems(
args: LoadSubmenuItemsArgs,
): Promise<ContextSubmenuItem[]> {
return [];
}
}
3 changes: 3 additions & 0 deletions src/editor/webview/AutoDevWebviewProtocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,9 @@ export class AutoDevWebviewProtocol {
reply,
});
break;
case "context/getContextItems":
channel.debug("(AutoDevWebview): context/getContextItems");
break;
case "command/run":
this.handleCommandRun(message);
break;
Expand Down

0 comments on commit 0b828af

Please sign in to comment.