-
Notifications
You must be signed in to change notification settings - Fork 534
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
docs: add new blog #2844
base: main
Are you sure you want to change the base?
docs: add new blog #2844
Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
📝 WalkthroughWalkthroughThis pull request introduces a new blog post titled "Building complex UI queries in plain English with AI," which discusses the integration of AI-powered search functionality into a logs page. The post outlines the implementation of a custom parser for translating natural language into structured filters, the use of Zod for schema validation, and the configuration of the OpenAI API. Additionally, a new author entry is added, and minor formatting changes are made to an error handling block in the codebase. Changes
Possibly related PRs
Suggested labels
Suggested reviewers
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
Thank you for following the naming conventions for pull request titles! 🙏 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (2)
apps/www/content/blog/ai-search-for-logs.mdx (2)
41-69
: Consider enhancing type safety and error handling.A few suggestions to improve the implementation:
- Extract operators into a const enum for type safety
- Add more specific error messages
- Consider adding input validation for the value part
Here's a suggested improvement:
+const enum FilterOperator { + Is = "is", + Contains = "contains", + StartsWith = "startsWith", + EndsWith = "endsWith", +} +const VALID_OPERATORS = Object.values(FilterOperator); export const parseAsFilterValueArray: Parser<FilterUrlValue[]> = { parse: (str: string | null) => { if (!str) { return []; } try { return str.split(",").map((item) => { const [operator, val] = item.split(/:(.+)/); - if (!["is", "contains", "startsWith", "endsWith"].includes(operator)) { - throw new Error("Invalid operator"); + if (!VALID_OPERATORS.includes(operator as FilterOperator)) { + throw new Error(`Invalid operator: ${operator}. Valid operators are: ${VALID_OPERATORS.join(", ")}`); } + if (!val) { + throw new Error("Filter value cannot be empty"); + } return { - operator: operator as FilterOperator, + operator: operator as FilterOperator, value: val, }; }); } catch { - return []; + throw new Error("Failed to parse filter value array"); } }, serialize: (value: any[]) => { if (!value?.length) { return ""; } return value.map((v) => `${v.operator}:${v.value}`).join(","); }, };
136-136
: Improve writing style.Consider rephrasing "lots of" to be more precise and professional.
Suggested revision:
-In our prompt there are lots of examples for each search variation +In our prompt we include comprehensive examples for each search variation🧰 Tools
🪛 LanguageTool
[style] ~136-~136: The phrase ‘lots of’ might be wordy and overused. Consider using an alternative.
Context: ...}] } ]`; ``` > In our prompt there are lots of examples for each search variation, but...(A_LOT_OF)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
apps/www/public/images/team/oz.jpeg
is excluded by!**/*.jpeg
📒 Files selected for processing (2)
apps/www/content/blog/ai-search-for-logs.mdx
(1 hunks)apps/www/content/blog/authors.ts
(1 hunks)
🧰 Additional context used
🪛 LanguageTool
apps/www/content/blog/ai-search-for-logs.mdx
[style] ~136-~136: The phrase ‘lots of’ might be wordy and overused. Consider using an alternative.
Context: ...}] } ]`; ``` > In our prompt there are lots of examples for each search variation, but...
(A_LOT_OF)
⏰ Context from checks skipped due to timeout of 90000ms (16)
- GitHub Check: Test Packages / Test ./packages/nextjs
- GitHub Check: Test Packages / Test ./packages/cache
- GitHub Check: Test Packages / Test ./packages/api
- GitHub Check: Test Packages / Test ./internal/clickhouse
- GitHub Check: Test Packages / Test ./internal/resend
- GitHub Check: Test Packages / Test ./internal/keys
- GitHub Check: Test Packages / Test ./internal/id
- GitHub Check: Test Packages / Test ./internal/hash
- GitHub Check: Test Packages / Test ./internal/encryption
- GitHub Check: Test Packages / Test ./internal/billing
- GitHub Check: Test GO API Local / test_agent_local
- GitHub Check: Test API / API Test Local
- GitHub Check: Test Agent Local / test_agent_local
- GitHub Check: Build / Build
- GitHub Check: autofix
- GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (2)
apps/www/content/blog/authors.ts (1)
40-44
: LGTM! Author entry follows established pattern.The new author entry is well-structured and consistent with existing entries, following the same format for name, role, and image path conventions.
apps/www/content/blog/ai-search-for-logs.mdx (1)
1-8
: Verify the blog post image path.The image path references "approximating-row-counts.png" which seems unrelated to the blog post content about AI-powered log searching.
Consider updating to a more relevant image that reflects the content about AI-powered log searching.
😄 |
Never gets old. LOL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (3)
apps/www/content/blog/ai-search-for-logs.mdx (3)
32-60
: Consider enhancing the parser implementation.The parser implementation is solid but could be improved:
- The error handling could be more specific
- The
serialize
function's type is usingany
Consider these improvements:
export const parseAsFilterValueArray: Parser<FilterUrlValue[]> = { parse: (str: string | null) => { if (!str) { return []; } try { // Format: operator:value,operator:value (e.g., "is:200,is:404") return str.split(",").map((item) => { const [operator, val] = item.split(/:(.+)/); if (!["is", "contains", "startsWith", "endsWith"].includes(operator)) { - throw new Error("Invalid operator"); + throw new Error(`Invalid operator: ${operator}. Valid operators are: is, contains, startsWith, endsWith`); } return { operator: operator as FilterOperator, value: val, }; }); } catch { - return []; + console.warn("Failed to parse filter value array:", str); + return []; } }, // In our app we pass a valid type but for brevity it's omitted - serialize: (value: any[]) => { + serialize: (value: FilterUrlValue[]) => { if (!value?.length) { return ""; } return value.map((v) => `${v.operator}:${v.value}`).join(","); }, };
81-102
: Consider improving type safety of the schema.The schema definition is good, but we can make it more type-safe and maintainable.
Consider these improvements:
+// Define reusable constants for better maintainability +const FIELDS = ["host", "requestId", "methods", "paths", "status", "startTime", "endTime", "since"] as const; +const OPERATORS = ["is", "contains", "startsWith", "endsWith"] as const; + export const filterOutputSchema = z.object({ filters: z.array( z.object({ - field: z.enum([ - "host", - "requestId", - "methods", - "paths", - "status", - "startTime", - "endTime", - "since", - ]), + field: z.enum(FIELDS), filters: z.array( z.object({ - operator: z.enum(["is", "contains", "startsWith", "endsWith"]), + operator: z.enum(OPERATORS), value: z.union([z.string(), z.number()]), }) ), }) ), }); + +// Export types for use in other parts of the application +export type FilterField = typeof FIELDS[number]; +export type FilterOperator = typeof OPERATORS[number];
137-137
: Improve writing clarity.The phrase "lots of" is informal and could be replaced with more precise language.
Consider this improvement:
-> In our prompt there are lots of examples for each search variation, but in here it's omitted for brevity. +> In our prompt there are numerous examples for each search variation, but they are omitted here for brevity.🧰 Tools
🪛 LanguageTool
[style] ~137-~137: The phrase ‘lots of’ might be wordy and overused. Consider using an alternative.
Context: ... ] } ] ``` > In our prompt there are lots of examples for each search variation, but...(A_LOT_OF)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
apps/www/content/blog/ai-search-for-logs.mdx
(1 hunks)
🧰 Additional context used
🪛 LanguageTool
apps/www/content/blog/ai-search-for-logs.mdx
[style] ~137-~137: The phrase ‘lots of’ might be wordy and overused. Consider using an alternative.
Context: ... ] } ] ``` > In our prompt there are lots of examples for each search variation, but...
(A_LOT_OF)
⏰ Context from checks skipped due to timeout of 90000ms (18)
- GitHub Check: Test Packages / Test ./packages/rbac
- GitHub Check: Test Packages / Test ./packages/nextjs
- GitHub Check: Test Packages / Test ./packages/hono
- GitHub Check: Test Packages / Test ./packages/cache
- GitHub Check: Test Packages / Test ./packages/api
- GitHub Check: Test Packages / Test ./internal/clickhouse
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: Test Packages / Test ./internal/resend
- GitHub Check: Test Packages / Test ./internal/keys
- GitHub Check: Test Packages / Test ./internal/id
- GitHub Check: Test Packages / Test ./internal/hash
- GitHub Check: Test Packages / Test ./internal/encryption
- GitHub Check: Test Packages / Test ./internal/billing
- GitHub Check: Test GO API Local / test_agent_local
- GitHub Check: Test API / API Test Local
- GitHub Check: Test Agent Local / test_agent_local
- GitHub Check: Build / Build
- GitHub Check: autofix
🔇 Additional comments (2)
apps/www/content/blog/ai-search-for-logs.mdx (2)
144-162
: Fix model name and add error handling.The OpenAI integration needs improvements as previously identified.
Please refer to the previous review comment about:
- Incorrect model name "gpt-4o-mini"
- Missing error handling for API failures
213-218
: Enhance security considerations section.The security considerations section needs to be more comprehensive.
Please refer to the previous review comment about adding important security aspects such as:
- Input sanitization
- Token limits
- User authentication
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to update the image before merging
What does this PR do?
Fixes # (issue)
If there is not an issue for this, please create one first. This is used to tracking purposes and also helps use understand why this PR exists
Type of change
How should this be tested?
Checklist
Required
pnpm build
pnpm fmt
console.logs
git pull origin main
Appreciated
Summary by CodeRabbit
New Blog Post
Author Update
Style