Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

genai comments #605

Draft
wants to merge 12 commits into
base: main
Choose a base branch
from
Draft
66 changes: 66 additions & 0 deletions docs/genaisrc/genaiscript.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

66 changes: 66 additions & 0 deletions genaisrc/genaiscript.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 8 additions & 10 deletions packages/core/src/cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,17 @@
super() // Initialize EventTarget
}

/**
* Factory method to create or retrieve an existing cache by name.
* Sanitizes the name to ensure it is a valid identifier.
* @param name - The name of the cache
* @returns An instance of JSONLineCache
*/
static byName<K, V>(name: string): JSONLineCache<K, V> {
name = name.replace(/[^a-z0-9_]/gi, "_") // Sanitize name
static byName<K, V>(
name: string,
options?: { snapshot?: boolean }
): JSONLineCache<K, V> {
const { snapshot } = options || {}
name = name.replace(/[^a-z0-9_]/gi, "_")
const key = "cacheKV." + name
if (host.userState[key]) return host.userState[key] // Return if exists
if (!snapshot && host.userState[key]) return host.userState[key]
const r = new JSONLineCache<K, V>(name)
host.userState[key] = r
if (!snapshot) host.userState[key] = r
return r

Check failure on line 40 in packages/core/src/cache.ts

View workflow job for this annotation

GitHub Actions / build

The `name` parameter in the `byName` method is not validated for being a non-empty string. This could lead to unexpected behavior if an empty string or a string with only whitespace is passed.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The function byName does not handle the case when options is undefined. This could lead to a TypeError when trying to destructure snapshot from options. Consider adding a default value for options in the function parameters or a check for options before destructuring. 🛠️

generated by pr-review-commit missing_error_handling

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The name parameter in the byName method is not validated for being a non-empty string. This could lead to unexpected behavior if an empty string or a string with only whitespace is passed.

generated by pr-review-commit missing_validation

}

// Get the folder path for the cache storage
Expand Down
22 changes: 22 additions & 0 deletions packages/core/src/comments.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { JSONLineCache } from "./cache"
import { COMMENTS_CACHE } from "./constants"

export interface CommentKey {
uri: string
line: number
source: string
}

export function commentsCache(options?: { snapshot?: boolean }) {
const cache = JSONLineCache.byName<CommentKey, CommentThread>(
COMMENTS_CACHE,
options
)
return cache
}

export async function commentsForSource(source: string) {
const cache = commentsCache()
const entries = await cache.entries()
return entries.map(({ val }) => val).filter((c) => c.source === source)
}

Check failure on line 22 in packages/core/src/comments.ts

View workflow job for this annotation

GitHub Actions / build

The `commentsCache` function does not handle potential errors that might occur during the execution of `JSONLineCache.byName`. It's recommended to add error handling to prevent potential crashes or unexpected behavior.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The function commentsCache does not handle the case when options is undefined. This could lead to a TypeError when passing options to JSONLineCache.byName. Consider adding a default value for options in the function parameters or a check for options before passing it to JSONLineCache.byName. 🛠️

generated by pr-review-commit missing_error_handling

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The function commentsCache does not have a return type. It is a good practice to always specify return types for better readability and maintainability.

generated by pr-review-commit missing_return_type

2 changes: 2 additions & 0 deletions packages/core/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,8 @@ export const GITHUB_TOKEN = "GITHUB_TOKEN"
export const AI_REQUESTS_CACHE = "airequests"
export const CHAT_CACHE = "chat"
export const GITHUB_PULL_REQUEST_REVIEWS_CACHE = "prr"
export const GITHUB_PULLREQUEST_REVIEW_COMMENT_LINE_DISTANCE = 5
export const COMMENTS_CACHE = "comments"
export const GITHUB_PULL_REQUEST_REVIEW_COMMENT_LINE_DISTANCE = 5

export const PLACEHOLDER_API_BASE = "<custom api base>"
Expand Down
66 changes: 66 additions & 0 deletions packages/core/src/genaisrc/genaiscript.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions packages/core/src/promptrunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { validateJSONWithSchema } from "./schema"
import { YAMLParse } from "./yaml"
import { expandTemplate } from "./expander"
import { resolveLanguageModel } from "./lm"
import { commentsCache, commentsForSource } from "./comments"

async function resolveExpansionVars(
project: Project,
Expand Down Expand Up @@ -57,6 +58,7 @@ async function resolveExpansionVars(
secrets[secret] = value
} else trace.error(`secret \`${secret}\` not found`)
}
const comments = await commentsForSource(template.id)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might have forgotten to use 'await' before calling the async function 'commentsForSource'.

generated by pr-review-commit missing_await

const res: Partial<ExpansionVariables> = {
dir: ".",
files,
Expand All @@ -67,6 +69,7 @@ async function resolveExpansionVars(
},
vars: attrs,
secrets,
comments,
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The variable res does not have a type annotation. It is a good practice to always specify types for better readability and maintainability.

generated by pr-review-commit missing_type_annotation

return res
}
Expand Down
Loading