Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { IDE } from "../.."
import { AutocompleteCodeSnippet, AutocompleteSnippetType, AutocompleteStaticSnippet } from "../snippets/types"
import { AutocompleteCodeSnippet, AutocompleteSnippetType, AutocompleteStaticSnippet } from "../types"
import { HelperVars } from "../util/HelperVars"

import { ImportDefinitionsService } from "./ImportDefinitionsService"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { describe, expect, it } from "vitest"
import { rankAndOrderSnippets, fillPromptWithSnippets } from "./index"
import { AutocompleteSnippetDeprecated } from "../../types"
import { RankedSnippet } from "../../types"

// vibecoded
describe("rankAndOrderSnippets", () => {
Expand All @@ -16,7 +16,7 @@ describe("rankAndOrderSnippets", () => {
} as any

// Create test snippets with different levels of similarity to the cursor context
const snippets: AutocompleteSnippetDeprecated[] = [
const snippets: RankedSnippet[] = [
{
filepath: "utils.ts",
range: {
Expand Down Expand Up @@ -71,7 +71,7 @@ describe("rankAndOrderSnippets", () => {
describe("fillPromptWithSnippets", () => {
it("should fill token budget with snippets until limit is reached", () => {
// Create snippets with required properties (including score)
const snippets: Required<AutocompleteSnippetDeprecated>[] = [
const snippets: Required<RankedSnippet>[] = [
{
filepath: "math.ts",
range: {
Expand Down
27 changes: 10 additions & 17 deletions src/services/continuedev/core/autocomplete/context/ranking/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { RangeInFileWithContents } from "../../../"
import { countTokens } from "../../../llm/countTokens"
import { AutocompleteSnippetDeprecated } from "../../types"
import { RankedSnippet } from "../../types"
import { HelperVars } from "../../util/HelperVars"

const rx = /[\s.,/#!$%^&*;:{}=\-_`~()[\]]/g
Expand Down Expand Up @@ -38,15 +38,12 @@ function jaccardSimilarity(a: string, b: string): number {
/**
* Rank code snippets to be used in tab-autocomplete prompt. Returns a sorted version of the snippet array.
*/
export function rankAndOrderSnippets( //MINIMAL_REPO - this isn't actually used in continue
ranges: AutocompleteSnippetDeprecated[],
helper: HelperVars,
): Required<AutocompleteSnippetDeprecated>[] {
export function rankAndOrderSnippets(ranges: RankedSnippet[], helper: HelperVars): Required<RankedSnippet>[] { //MINIMAL_REPO - this isn't actually used in continue
const windowAroundCursor =
helper.fullPrefix.slice(-helper.options.slidingWindowSize * helper.options.slidingWindowPrefixPercentage) +
helper.fullSuffix.slice(helper.options.slidingWindowSize * (1 - helper.options.slidingWindowPrefixPercentage))

const snippets: Required<AutocompleteSnippetDeprecated>[] = ranges.map((snippet) => ({
const snippets: Required<RankedSnippet>[] = ranges.map((snippet) => ({
score: snippet.score ?? jaccardSimilarity(snippet.contents, windowAroundCursor),
...snippet,
}))
Expand All @@ -57,12 +54,10 @@ export function rankAndOrderSnippets( //MINIMAL_REPO - this isn't actually used
/**
* Deduplicate code snippets by merging overlapping ranges into a single range.
*/
function deduplicateSnippets(
snippets: Required<AutocompleteSnippetDeprecated>[],
): Required<AutocompleteSnippetDeprecated>[] {
function deduplicateSnippets(snippets: Required<RankedSnippet>[]): Required<RankedSnippet>[] {
// Group by file
const fileGroups: {
[key: string]: Required<AutocompleteSnippetDeprecated>[]
[key: string]: Required<RankedSnippet>[]
} = {}
for (const snippet of snippets) {
if (!fileGroups[snippet.filepath]) {
Expand All @@ -79,15 +74,13 @@ function deduplicateSnippets(
return allRanges
}

function mergeSnippetsByRange(
snippets: Required<AutocompleteSnippetDeprecated>[],
): Required<AutocompleteSnippetDeprecated>[] {
function mergeSnippetsByRange(snippets: Required<RankedSnippet>[]): Required<RankedSnippet>[] {
if (snippets.length <= 1) {
return snippets
}

const sorted = snippets.sort((a, b) => a.range.start.line - b.range.start.line)
const merged: Required<AutocompleteSnippetDeprecated>[] = []
const merged: Required<RankedSnippet>[] = []

while (sorted.length > 0) {
const next = sorted.shift()!
Expand Down Expand Up @@ -120,12 +113,12 @@ function mergeOverlappingRangeContents(first: RangeInFileWithContents, second: R
* It is assumed that the snippets are sorted by score.
*/
export function fillPromptWithSnippets( //MINIMAL_REPO - this isn't actually used in continue
snippets: Required<AutocompleteSnippetDeprecated>[],
snippets: Required<RankedSnippet>[],
maxSnippetTokens: number,
modelName: string,
): Required<AutocompleteSnippetDeprecated>[] {
): Required<RankedSnippet>[] {
let tokensRemaining = maxSnippetTokens
const keptSnippets: Required<AutocompleteSnippetDeprecated>[] = []
const keptSnippets: Required<RankedSnippet>[] = []
for (let i = 0; i < snippets.length; i++) {
const snippet = snippets[i]
const tokenCount = countTokens(snippet.contents, modelName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import { Node as SyntaxNode, Query, Point } from "web-tree-sitter"

import { IDE } from "../../.."
import { getFullLanguageName, getQueryForFile, IGNORE_PATH_PATTERNS, LanguageName } from "../../../util/treeSitter"
import { AutocompleteCodeSnippet, AutocompleteSnippetType } from "../../snippets/types"
import { AutocompleteSnippetDeprecated } from "../../types"
import { AutocompleteCodeSnippet, AutocompleteSnippetType } from "../../types"
import { RankedSnippet } from "../../types"
import { AstPath } from "../../util/ast"
import { ImportDefinitionsService } from "../ImportDefinitionsService"

Expand All @@ -26,7 +26,7 @@ import { ImportDefinitionsService } from "../ImportDefinitionsService"
// }

export class RootPathContextService {
private cache = new LRUCache<string, AutocompleteSnippetDeprecated[]>({
private cache = new LRUCache<string, RankedSnippet[]>({
max: 100,
})

Expand Down Expand Up @@ -62,8 +62,8 @@ export class RootPathContextService {
.digest("hex")
}

private async getSnippetsForNode(filepath: string, node: SyntaxNode): Promise<AutocompleteSnippetDeprecated[]> {
const snippets: AutocompleteSnippetDeprecated[] = []
private async getSnippetsForNode(filepath: string, node: SyntaxNode): Promise<RankedSnippet[]> {
const snippets: RankedSnippet[] = []
const language = getFullLanguageName(filepath)

let query: Query | undefined
Expand Down Expand Up @@ -96,11 +96,7 @@ export class RootPathContextService {
return snippets
}

private async getSnippets(
filepath: string,
endPosition: Point,
language: LanguageName,
): Promise<AutocompleteSnippetDeprecated[]> {
private async getSnippets(filepath: string, endPosition: Point, language: LanguageName): Promise<RankedSnippet[]> {
const definitions = await this.ide.gotoDefinition({
filepath,
position: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Node as SyntaxNode } from "web-tree-sitter"
import { IDE, Position } from "../../.."
import { localPathOrUriToPath } from "../../../util/pathToUri"
import { getFullLanguageName, getQueryForFile } from "../../../util/treeSitter"
import { AutocompleteSnippetType, AutocompleteStaticSnippet } from "../../snippets/types"
import { AutocompleteSnippetType, AutocompleteStaticSnippet } from "../../types"
import { getAst } from "../../util/ast"
import { HelperVars } from "../../util/HelperVars"
import {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"
import { getAllSnippets, getAllSnippetsWithoutRace } from "./getAllSnippets"
import { AutocompleteSnippetType } from "./types"
import { AutocompleteSnippetType } from "../types"
import type { HelperVars } from "../util/HelperVars"
import type { IDE } from "../../index"
import type { GetLspDefinitionsFunction } from "../types"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
AutocompleteDiffSnippet,
AutocompleteSnippetType,
AutocompleteStaticSnippet,
} from "./types"
} from "../types"

const IDE_SNIPPETS_ENABLED = false // ideSnippets is not used, so it's temporarily disabled

Expand Down
36 changes: 0 additions & 36 deletions src/services/continuedev/core/autocomplete/snippets/types.ts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import { CompletionOptions } from "../../index.js"
import { getLastNUriRelativePathParts, getShortestUniqueRelativeUriPaths } from "../../util/uri.js"
import { AutocompleteCodeSnippet, AutocompleteSnippet, AutocompleteSnippetType } from "../snippets/types.js"
import { AutocompleteCodeSnippet, AutocompleteSnippet, AutocompleteSnippetType } from "../types.js"

type TemplateRenderer = (
prefix: string,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

import { describe, expect, test } from "vitest"
import { AutocompleteCodeSnippet, AutocompleteDiffSnippet, AutocompleteSnippetType } from "../../snippets/types"
import { AutocompleteCodeSnippet, AutocompleteDiffSnippet, AutocompleteSnippetType } from "../../types"
import { HelperVars } from "../../util/HelperVars"
import { formatOpenedFilesContext } from "../formatOpenedFilesContext"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
AutocompleteSnippet,
AutocompleteSnippetType,
AutocompleteStaticSnippet,
} from "../snippets/types"
} from "../types"
import { HelperVars } from "../util/HelperVars"
import { formatOpenedFilesContext } from "./formatOpenedFilesContext"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { countTokens, pruneStringFromBottom } from "../../llm/countTokens"
import { AutocompleteCodeSnippet, AutocompleteSnippet, AutocompleteSnippetType } from "../snippets/types"
import { AutocompleteCodeSnippet, AutocompleteSnippet, AutocompleteSnippetType } from "../types"
import { HelperVars } from "../util/HelperVars"

let logMin: number
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
AutocompleteSnippet,
AutocompleteSnippetType,
AutocompleteStaticSnippet,
} from "../snippets/types"
} from "../types"
import { HelperVars } from "../util/HelperVars"

const getCommentMark = (helper: HelperVars) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
} from "../../llm/countTokens"
import { getUriPathBasename } from "../../util/uri"
import { SnippetPayload } from "../snippets"
import { AutocompleteSnippet } from "../snippets/types"
import { AutocompleteSnippet } from "../types"
import { AutocompleteTemplate, getTemplateForModel } from "./AutocompleteTemplate"
import { getSnippets } from "./filtering"
import { formatSnippets } from "./formatting"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {
AutocompleteCodeSnippet,
AutocompleteSnippet,
AutocompleteSnippetType,
} from "../snippets/types"
} from "../types"

const MAX_CLIPBOARD_AGE = 5 * 60 * 1000

Expand Down
47 changes: 39 additions & 8 deletions src/services/continuedev/core/autocomplete/types.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,44 @@
import { IDE, RangeInFileWithContents } from "../index"
import { AutocompleteLanguageInfo } from "./constants/AutocompleteLanguageInfo"
import { AutocompleteCodeSnippet } from "./snippets/types"

/**
* @deprecated This type should be removed in the future or renamed.
* We have a new interface called AutocompleteSnippet which is more
* general.
*/
export type AutocompleteSnippetDeprecated = RangeInFileWithContents & {

export enum AutocompleteSnippetType {
Code = "code",
Diff = "diff",
Clipboard = "clipboard",
Static = "static",
}

interface BaseAutocompleteSnippet {
content: string
type: AutocompleteSnippetType
}

export interface AutocompleteCodeSnippet extends BaseAutocompleteSnippet {
filepath: string
type: AutocompleteSnippetType.Code
}

export interface AutocompleteDiffSnippet extends BaseAutocompleteSnippet {
type: AutocompleteSnippetType.Diff
}

export interface AutocompleteClipboardSnippet extends BaseAutocompleteSnippet {
type: AutocompleteSnippetType.Clipboard
copiedAt: string
}

export interface AutocompleteStaticSnippet extends BaseAutocompleteSnippet {
type: AutocompleteSnippetType.Static
filepath: string
}

export type AutocompleteSnippet =
| AutocompleteCodeSnippet
| AutocompleteDiffSnippet
| AutocompleteClipboardSnippet
| AutocompleteStaticSnippet

export type RankedSnippet = RangeInFileWithContents & {
score?: number
}

Expand Down
2 changes: 1 addition & 1 deletion src/services/continuedev/core/autocomplete/util/types.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Position, Range, RangeInFile, TabAutocompleteOptions } from "../.."
import { AutocompleteCodeSnippet } from "../snippets/types"
import { AutocompleteCodeSnippet } from "../types"

export type RecentlyEditedRange = RangeInFile & {
timestamp: number
Expand Down
2 changes: 1 addition & 1 deletion src/services/continuedev/core/nextEdit/NextEditProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { ContextRetrievalService } from "../autocomplete/context/ContextRetrieva
import { postprocessCompletion } from "../autocomplete/postprocessing/index.js"
import { shouldPrefilter } from "../autocomplete/prefiltering/index.js"
import { getAllSnippetsWithoutRace } from "../autocomplete/snippets/index.js"
import { AutocompleteCodeSnippet } from "../autocomplete/snippets/types.js"
import { AutocompleteCodeSnippet } from "../autocomplete/types.js"
import { GetLspDefinitionsFunction } from "../autocomplete/types.js"
import { getAst } from "../autocomplete/util/ast.js"
import { AutocompleteDebouncer } from "../autocomplete/util/AutocompleteDebouncer.js"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Position } from "../.."
import { ContextRetrievalService } from "../../autocomplete/context/ContextRetrievalService"
import { getAllSnippetsWithoutRace } from "../../autocomplete/snippets/getAllSnippets"
import { AutocompleteCodeSnippet } from "../../autocomplete/snippets/types"
import { AutocompleteCodeSnippet } from "../../autocomplete/types"
import { renderPrompt } from "../../autocomplete/templating"
import { GetLspDefinitionsFunction } from "../../autocomplete/types"
import { HelperVars } from "../../autocomplete/util/HelperVars"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { IDE, Position } from "../.."
import { AutocompleteCodeSnippet } from "../../autocomplete/snippets/types"
import { AutocompleteCodeSnippet } from "../../autocomplete/types"
import { GetLspDefinitionsFunction } from "../../autocomplete/types"
import { MinimalConfigProvider } from "../../autocomplete/MinimalConfig"
import { NextEditProvider } from "../NextEditProvider"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { IDE } from "../../../"
import { AutocompleteCodeSnippet, AutocompleteSnippetType } from "../../../autocomplete/snippets/types"
import { AutocompleteCodeSnippet, AutocompleteSnippetType } from "../../../autocomplete/types"
import { isSecurityConcern } from "../../../indexing/ignore"
import { LRUCache } from "lru-cache"
import * as vscode from "vscode"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { AutocompleteLanguageInfo } from "../../../autocomplete/constants/AutocompleteLanguageInfo"
import { AutocompleteCodeSnippet, AutocompleteSnippetType } from "../../../autocomplete/snippets/types"
import { AutocompleteCodeSnippet, AutocompleteSnippetType } from "../../../autocomplete/types"
import { GetLspDefinitionsFunction } from "../../../autocomplete/types"
import { getAst, getTreePathAtCursor } from "../../../autocomplete/util/ast"
import { intersection } from "../../../util/ranges"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { describe, it, expect, beforeEach, vi } from "vitest"
import { getProcessedSnippets } from "../getProcessedSnippets"
import { AutocompleteInput, GhostContextProvider } from "../../types"
import { AutocompleteSnippetType } from "../../../continuedev/core/autocomplete/snippets/types"
import { AutocompleteSnippetType } from "../../../continuedev/core/autocomplete/types"
import { GhostModel } from "../../GhostModel"
import { RooIgnoreController } from "../../../../core/ignore/RooIgnoreController"
import crypto from "crypto"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, vi } from "vitest"
import { HoleFiller, parseGhostResponse } from "../HoleFiller"
import { AutocompleteInput, GhostContextProvider } from "../../types"
import crypto from "crypto"
import { AutocompleteSnippetType } from "../../../continuedev/core/autocomplete/snippets/types"
import { AutocompleteSnippetType } from "../../../continuedev/core/autocomplete/types"

// Mock the getProcessedSnippets module
vi.mock("../getProcessedSnippets", () => ({
Expand Down
Loading