MCPcopy Create free account
hub / github.com/Exafunction/codeium-chrome / computeTextAndOffsets

Function computeTextAndOffsets

src/notebook.ts:39–89  ·  view source on GitHub ↗
(maybeNotebook: MaybeNotebook<T>)

Source from the content-addressed store, hash-verified

37
38// Note: Assumes that all notebooks are Python.
39export function computeTextAndOffsets<T>(maybeNotebook: MaybeNotebook<T>): TextAndOffsets {
40 const textModels = maybeNotebook.textModels ?? [];
41 const modelLanguage = maybeNotebook.getLanguage(maybeNotebook.currentTextModel, undefined);
42 const modelIsMarkdown = modelLanguage === Language.MARKDOWN;
43 const modelIsExpected = isAllowedLanguage(modelLanguage);
44 const relevantDocumentTexts: string[] = [];
45 let additionalUtf8ByteOffset = 0;
46 let found = false;
47 for (const [idx, previousModel] of textModels.entries()) {
48 if (modelIsExpected && maybeNotebook.currentTextModel === previousModel) {
49 // There is an offset for all previous cells and the \n\n spacing after each one.
50 additionalUtf8ByteOffset =
51 relevantDocumentTexts
52 .map((el) => numCodeUnitsToNumUtf8Bytes(el))
53 .reduce((a, b) => a + b, 0) +
54 '\n\n'.length * relevantDocumentTexts.length;
55 found = true;
56 }
57 const previousModelLanguage = maybeNotebook.getLanguage(previousModel, idx);
58 if (modelIsExpected && !modelIsMarkdown) {
59 // Don't use markdown in the Python prompt construction.
60 // TODO(prem): Consider adding as comments.
61 if (previousModelLanguage === Language.MARKDOWN) {
62 continue;
63 } else if (previousModelLanguage === modelLanguage) {
64 relevantDocumentTexts.push(maybeNotebook.getText(previousModel));
65 }
66 } else if (modelIsMarkdown) {
67 if (previousModelLanguage === Language.MARKDOWN) {
68 relevantDocumentTexts.push(maybeNotebook.getText(previousModel));
69 } else if (isAllowedLanguage(previousModelLanguage)) {
70 relevantDocumentTexts.push(
71 `\`\`\`${
72 NOTEBOOK_LANGUAGES[previousModelLanguage as AllowedLanguages]
73 }\n${maybeNotebook.getText(previousModel)}\n\`\`\``
74 );
75 }
76 }
77 }
78 const currentModelText = maybeNotebook.getText(maybeNotebook.currentTextModel);
79 const text = found ? relevantDocumentTexts.join('\n\n') : currentModelText;
80 const utf8ByteOffset = numCodeUnitsToNumUtf8Bytes(
81 currentModelText,
82 maybeNotebook.utf16CodeUnitOffset
83 );
84 return {
85 text,
86 utf8ByteOffset,
87 additionalUtf8ByteOffset,
88 };
89}

Callers 2

computeTextAndOffsetsMethod · 0.90

Calls 4

isAllowedLanguageFunction · 0.85
getLanguageMethod · 0.80
getTextMethod · 0.80

Tested by

no test coverage detected