Skip to content

docs: add new blog#2844

Merged
perkinsjr merged 8 commits intomainfrom
docs-ai-search-blog
Feb 20, 2025
Merged

docs: add new blog#2844
perkinsjr merged 8 commits intomainfrom
docs-ai-search-blog

Conversation

@ogzhanolguncu
Copy link
Contributor

@ogzhanolguncu ogzhanolguncu commented Jan 27, 2025

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

  • Bug fix (non-breaking change which fixes an issue)
  • Chore (refactoring code, technical debt, workflow improvements)
  • Enhancement (small improvements)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How should this be tested?

  • Test A
  • Test B

Checklist

Required

  • Filled out the "How to test" section in this PR
  • Read Contributing Guide
  • Self-reviewed my own code
  • Commented on my code in hard-to-understand areas
  • Ran pnpm build
  • Ran pnpm fmt
  • Checked for warnings, there are none
  • Removed all console.logs
  • Merged the latest changes from main onto my branch with git pull origin main
  • My changes don't cause any responsiveness issues

Appreciated

  • If a UI change was made: Added a screen recording or screenshots to this PR
  • Updated the Unkey Docs if changes were necessary

Summary by CodeRabbit

  • Documentation
    • Added a new blog post, Building complex UI queries in plain English with AI, showcasing how you can now search logs using plain language instead of traditional filter menus.
    • Updated blog content by adding a new contributor to the author lineup.

@changeset-bot
Copy link

changeset-bot bot commented Jan 27, 2025

⚠️ No Changeset found

Latest commit: ae05267

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@vercel
Copy link

vercel bot commented Jan 27, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
dashboard ✅ Ready (Inspect) Visit Preview 💬 Add feedback Feb 19, 2025 1:55pm
engineering ✅ Ready (Inspect) Visit Preview 💬 Add feedback Feb 19, 2025 1:55pm
play ✅ Ready (Inspect) Visit Preview 💬 Add feedback Feb 19, 2025 1:55pm
www ✅ Ready (Inspect) Visit Preview 💬 2 unresolved
✅ 8 resolved
Feb 19, 2025 1:55pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 27, 2025

📝 Walkthrough

Walkthrough

This pull request adds a new blog post detailing the integration of an AI-powered search feature for log queries. The post explains how natural language queries are parsed into structured filters with a custom parser and validated using Zod. It also introduces new constants (parseAsFilterValueArray, queryParamsPayload, and filterOutputSchema) used in the process. Additionally, a new author entry for Oguzhan Olguncu (Developer) has been added to the blog authors list.

Changes

File Change Summary
apps/www/content/blog/ai-search-for-logs.mdx Added a new blog post titled "Building complex UI queries in plain English with AI" that outlines the integration of AI-powered search for logs. New constants (parseAsFilterValueArray, queryParamsPayload, filterOutputSchema) were introduced, with details on parsing, validation, and processing flow.
apps/www/content/blog/authors.ts Added a new author entry for Oguzhan Olguncu with the role "Developer" and image source /images/team/oz.jpeg in the authors list.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant UI
    participant Parser
    participant SchemaValidator
    participant LogsService

    User->>UI: Submit natural language query
    UI->>Parser: Convert query into conditions
    Parser->>SchemaValidator: Validate structured filters using Zod
    SchemaValidator-->>Parser: Return validated filters
    Parser->>LogsService: Apply filters and retrieve logs
    LogsService-->>UI: Return filtered log data
    UI-->>User: Display filtered logs
Loading

Suggested labels

Needs Approval, 🕹️ oss.gg

Suggested reviewers

  • chronark
  • mcstepp
  • MichaelUnkey

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?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions
Copy link
Contributor

github-actions bot commented Jan 27, 2025

Thank you for following the naming conventions for pull request titles! 🙏

@vercel vercel bot temporarily deployed to Preview – engineering January 27, 2025 14:41 Inactive
@vercel vercel bot temporarily deployed to Preview – play January 27, 2025 14:41 Inactive
@vercel vercel bot temporarily deployed to Preview – www January 27, 2025 14:42 Inactive
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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:

  1. Extract operators into a const enum for type safety
  2. Add more specific error messages
  3. 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

📥 Commits

Reviewing files that changed from the base of the PR and between 3f8db32 and c467d71.

⛔ 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.

@vercel vercel bot temporarily deployed to Preview – engineering January 27, 2025 14:43 Inactive
@vercel vercel bot temporarily deployed to Preview – www January 27, 2025 14:44 Inactive
@vercel vercel bot temporarily deployed to Preview – play January 27, 2025 14:44 Inactive
@vercel vercel bot temporarily deployed to Preview – dashboard January 27, 2025 14:45 Inactive
Copy link
Collaborator

chronark commented Jan 27, 2025

😄
ah I missed this
the lack of articles in english from native turkish speaking people

@ogzhanolguncu
Copy link
Contributor Author

😄 ah I missed this the lack of articles in english from native turkish speaking people

Never gets old. LOL

@vercel vercel bot temporarily deployed to Preview – play January 27, 2025 15:27 Inactive
@vercel vercel bot temporarily deployed to Preview – engineering January 27, 2025 15:27 Inactive
@vercel vercel bot temporarily deployed to Preview – www January 27, 2025 15:28 Inactive
@vercel vercel bot temporarily deployed to Preview – play January 27, 2025 16:37 Inactive
@vercel vercel bot temporarily deployed to Preview – engineering January 27, 2025 16:37 Inactive
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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:

  1. The error handling could be more specific
  2. The serialize function's type is using any

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

📥 Commits

Reviewing files that changed from the base of the PR and between ad342fc and 84640a9.

📒 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:

  1. Incorrect model name "gpt-4o-mini"
  2. 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:

  1. Input sanitization
  2. Token limits
  3. User authentication

@vercel vercel bot temporarily deployed to Preview – www January 27, 2025 16:39 Inactive
Copy link
Collaborator

@chronark chronark left a 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

@vercel vercel bot temporarily deployed to Preview – play January 28, 2025 06:25 Inactive
@vercel vercel bot temporarily deployed to Preview – engineering January 28, 2025 06:28 Inactive
@vercel vercel bot temporarily deployed to Preview – dashboard January 28, 2025 06:29 Inactive
@vercel vercel bot temporarily deployed to Preview – www January 28, 2025 06:30 Inactive
@vercel vercel bot temporarily deployed to Preview – play February 19, 2025 13:22 Inactive
@vercel vercel bot temporarily deployed to Preview – www February 19, 2025 13:23 Inactive
@vercel vercel bot temporarily deployed to Preview – engineering February 19, 2025 13:25 Inactive
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (1)
apps/www/content/blog/ai-search-for-logs.mdx (1)

143-163: ⚠️ Potential issue

Update Model Name and Enhance Error Handling in OpenAI Configuration
The OpenAI configuration currently uses the model "gpt-4o-mini", which appears to be incorrect based on previous guidance. Additionally, error handling is missing for the API call. Consider updating the model name to a supported model (e.g., "gpt-4") and wrapping the API call in a try-catch block to gracefully handle API failures.

-  model: "gpt-4o-mini",
+  model: "gpt-4",
-const completion = await openai.beta.chat.completions.parse({
-  model: "gpt-4o-mini",
-  temperature: 0.2, // Lower temperature for more deterministic outputs
-  top_p: 0.1, // Focus on highest probability tokens
-  frequency_penalty: 0.5, // Maintain natural language variety
-  presence_penalty: 0.5, // Encourage diverse responses
-  n: 1, // Single, confident response
-  messages: [
-    {
-      role: "system",
-      content: systemPrompt,
-    },
-    {
-      role: "user",
-      content: userQuery,
-    },
-  ],
-  response_format: zodResponseFormat(filterOutputSchema, "searchQuery"),
-});
+try {
+  const completion = await openai.beta.chat.completions.parse({
+    model: "gpt-4", // Updated model name
+    temperature: 0.2, // Lower temperature for more deterministic outputs
+    top_p: 0.1, // Focus on highest probability tokens
+    frequency_penalty: 0.5, // Maintain natural language variety
+    presence_penalty: 0.5, // Encourage diverse responses
+    n: 1, // Single, confident response
+    messages: [
+      {
+        role: "system",
+        content: systemPrompt,
+      },
+      {
+        role: "user",
+        content: userQuery,
+      },
+    ],
+    response_format: zodResponseFormat(filterOutputSchema, "searchQuery"),
+  });
+} catch (error) {
+  console.error("OpenAI API error:", error);
+  throw new Error("Failed to process your query. Please try again.");
+}
🧹 Nitpick comments (3)
apps/www/content/blog/ai-search-for-logs.mdx (3)

31-60: Robust Parser Implementation with a Consideration for Debugging
The parseAsFilterValueArray function is well written and handles edge cases appropriately. As an optional improvement, consider logging the error inside the catch block to aid in debugging if an unexpected format is encountered.

-    } catch {
-      return [];
-    }
+    } catch (error) {
+      console.error("Error parsing filter value array:", error);
+      return [];
+    }

137-137: Polish Wording in Prompt Explanation
In the note following the prompt examples, the phrase “lots of examples” appears. Consider replacing it with a more concise alternative (e.g., “many examples”) to improve clarity and readability.

🧰 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)


211-218: Clarify Error Handling and Rate Limiting Considerations
The bullet points in the "Important Considerations" section succinctly cover error handling and rate limiting. For improved clarity, consider revising phrases such as "without ratelimit" to "without rate limiting."

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 84640a9 and 9819670.

⛔ Files ignored due to path filters (1)
  • apps/www/public/images/blog-images/ai-logs/og-image.png is excluded by !**/*.png
📒 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 (4)
  • GitHub Check: Test Go API Local / test_agent_local
  • GitHub Check: Build / Build
  • GitHub Check: Test API / API Test Local
  • GitHub Check: Test Agent Local / test_agent_local
🔇 Additional comments (8)
apps/www/content/blog/ai-search-for-logs.mdx (8)

1-8: Review Frontmatter: Update Publication Date and Validate Image
The frontmatter currently sets the publication date to "2025-01-27," which is a future date. It’s advisable to update this to a current or past date before publication. Also, ensure that the image path ("/images/blog-images/ai-logs/og-image.png") uniquely represents this blog post and isn’t shared unintentionally with another post.


10-12: Engaging Introduction Text
The introductory paragraphs create a relatable scenario and clearly set the context for the post. No changes required here.


22-27: Clear Example for Query Parameter Syntax
The bash snippet demonstrating the query parameter format is concise and easy to understand. This example effectively illustrates the syntax without unnecessary complexity.


62-71: Ensure Dependencies are Available
The definition of queryParamsPayload relies on helpers such as parseAsInteger and parseAsRelativeTime. Please verify that these functions are correctly imported or defined in the scope to avoid runtime issues.


80-103: Solid Schema Definition with Zod
The filterOutputSchema is comprehensive and clearly defines the expected output structure. The use of enums and unions effectively enforces type safety for filter validation.


111-135: System Prompt: Dynamic Instruction and Variable Check
The system prompt is detailed and instructs the AI well. However, ensure that the template placeholder ${usersReferenceMS} is defined in the context where this prompt is rendered, so the substitution works correctly at runtime.


171-209: Process Flow Diagram is Clear and Informative
The bash code diagram effectively illustrates the end-to-end process—from the user's query to the display of filtered logs. This visual aid enhances understanding and aligns well with the post’s instructional tone.


219-229: Effective Conclusion
The conclusion neatly summarizes the core insights and reinforces the balanced approach between AI-powered features and traditional interfaces. This section effectively wraps up the post.

@vercel vercel bot temporarily deployed to Preview – dashboard February 19, 2025 13:53 Inactive
@vercel vercel bot temporarily deployed to Preview – play February 19, 2025 13:54 Inactive
@vercel vercel bot temporarily deployed to Preview – www February 19, 2025 13:54 Inactive
@vercel vercel bot temporarily deployed to Preview – engineering February 19, 2025 13:55 Inactive
@perkinsjr perkinsjr merged commit 42c52a2 into main Feb 20, 2025
29 checks passed
@perkinsjr perkinsjr deleted the docs-ai-search-blog branch February 20, 2025 14:01
mcstepp pushed a commit that referenced this pull request Feb 21, 2025
* docs: add new blog

* [autofix.ci] apply automated fixes

* chore: revert formatter

* chore: update blog post

* add og image

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Andreas Thomas <dev@chronark.com>
Co-authored-by: James Perkins <james@unkey.dev>
Co-authored-by: James P <jamesperkins@hey.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants