|
| 1 | +import CopilotForXcodeKit |
| 2 | +import Foundation |
| 3 | +import Fundamental |
| 4 | + |
| 5 | +/// A special strategy for Tabby. |
| 6 | +struct TabbyRequestStrategy: RequestStrategy { |
| 7 | + var sourceRequest: SuggestionRequest |
| 8 | + var prefix: [String] |
| 9 | + var suffix: [String] |
| 10 | + |
| 11 | + var shouldSkip: Bool { |
| 12 | + prefix.last?.trimmingCharacters(in: .whitespaces) == "}" |
| 13 | + } |
| 14 | + |
| 15 | + func createPrompt() -> Prompt { |
| 16 | + Prompt( |
| 17 | + sourceRequest: sourceRequest, |
| 18 | + prefix: prefix, |
| 19 | + suffix: suffix |
| 20 | + ) |
| 21 | + } |
| 22 | + |
| 23 | + func createRawSuggestionPostProcessor() -> some RawSuggestionPostProcessingStrategy { |
| 24 | + NoOpRawSuggestionPostProcessingStrategy() |
| 25 | + } |
| 26 | + |
| 27 | + struct Prompt: PromptStrategy { |
| 28 | + let systemPrompt: String = "" |
| 29 | + var sourceRequest: SuggestionRequest |
| 30 | + var prefix: [String] |
| 31 | + var suffix: [String] |
| 32 | + var filePath: String { sourceRequest.relativePath ?? sourceRequest.fileURL.path } |
| 33 | + var relevantCodeSnippets: [RelevantCodeSnippet] { sourceRequest.relevantCodeSnippets } |
| 34 | + var stopWords: [String] { [] } |
| 35 | + var language: CodeLanguage? { sourceRequest.language } |
| 36 | + |
| 37 | + var suggestionPrefix: SuggestionPrefix { |
| 38 | + guard let prefix = prefix.last else { return .empty } |
| 39 | + return .unchanged(prefix) |
| 40 | + } |
| 41 | + |
| 42 | + init(sourceRequest: SuggestionRequest, prefix: [String], suffix: [String]) { |
| 43 | + self.sourceRequest = sourceRequest |
| 44 | + |
| 45 | + let prefix = sourceRequest.relevantCodeSnippets.map { $0.content + "\n\n" } |
| 46 | + + prefix |
| 47 | + |
| 48 | + self.prefix = prefix |
| 49 | + self.suffix = suffix |
| 50 | + } |
| 51 | + |
| 52 | + /// Not used by ``TabbyService``. |
| 53 | + func createPrompt( |
| 54 | + truncatedPrefix: [String], |
| 55 | + truncatedSuffix: [String], |
| 56 | + includedSnippets: [RelevantCodeSnippet] |
| 57 | + ) -> [PromptMessage] { |
| 58 | + [] |
| 59 | + } |
| 60 | + } |
| 61 | +} |
| 62 | + |
0 commit comments