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

feat: Cookbook Onboard (AI Assistant) integration #1731

Closed
wants to merge 1 commit into from

Conversation

ClockRide
Copy link

@ClockRide ClockRide commented Sep 25, 2024

Preview

Preview link: https://celestia-docs-cookbook.vercel.app/

Ask Cookbook AI Assistant

Cookbook's Ask Cookbook AI assistant and co-pilot is trained on all existing Celestia resources (source code, docs website, etc.) and is available as a standalone modal, embeddable as a button on any page (recommended for technical docs). It answers developer questions about using Celestia, acting as an enhanced and streamlined technical documentation search tool as well as a Solidity coding co-pilot.

Ask Cookbook AI can also access context from thousands of data sources indexed by Cookbook.dev in addition to Celestia-specific data sources, providing the best blockchain developer-focused answers of any chatbot on the market. Cookbook will assist in the tuning and calibration of the AI assistant to ensure the highest answer quality.

image

Summary by CodeRabbit

  • New Features
    • Introduced a Cookbook integration that enhances the application with new functionality when run in a browser.
    • Automatically creates necessary HTML elements and script tags for the Cookbook service if they do not already exist.

Copy link
Contributor

coderabbitai bot commented Sep 25, 2024

Walkthrough

The changes introduce a Cookbook integration within the .vitepress/theme/index.ts file. The integration checks for a browser environment and defines a public API key for the Cookbook service. It ensures the existence of an HTML element with the ID __cookbook, creating it if necessary, and appends it to the document body. Additionally, it manages the inclusion of a script element for the Cookbook functionality, enhancing the application when executed in a browser.

Changes

File Change Summary
.vitepress/theme/index.ts Introduced Cookbook integration, including element creation and script loading.

Poem

In a land of code where rabbits play,
A Cookbook blooms, brightening the day.
With scripts and keys, it hops in cheer,
Enhancing our app, oh so dear!
A little div here, a script there,
Together they dance in the digital air! 🐇✨


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

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

🧹 Outside diff range and nitpick comments (2)
.vitepress/theme/index.ts (2)

20-26: LGTM: Proper element creation and insertion.

The code correctly checks for an existing Cookbook element before creating a new one, ensuring that it's only added once. The use of dataset for storing the API key is appropriate.

Consider if there's a more specific container to append the Cookbook element to, rather than document.body. This could provide more control over the placement of the element in your layout.


27-37: LGTM: Proper script loading with room for improvement.

The code correctly checks for an existing Cookbook script before creating a new one, ensuring that it's only loaded once. The use of the defer attribute is good for non-blocking script loading.

Consider the following improvements:

  1. Error handling: Add error handling for script loading failures.
  2. Version pinning: Pin to a specific version of the script for better stability.
  3. Integrity check: Add an integrity check to ensure the loaded script hasn't been tampered with.

Here's an example of how you could implement these suggestions:

if (!script) {
  script = document.createElement("script");
  script.src = "https://cdn.jsdelivr.net/npm/@cookbookdev/[email protected]/dist/standalone/index.cjs.js"; // Pin to a specific version
  script.id = "__cookbook-script";
  script.defer = true;
  script.integrity = "sha384-HASH_VALUE_HERE"; // Add the actual hash value
  script.crossOrigin = "anonymous";
  script.onerror = () => console.error("Failed to load Cookbook script");
  document.body.appendChild(script);
}

Replace 1.0.0 with the actual version you want to use, and HASH_VALUE_HERE with the actual integrity hash of the script file.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 7a373e5 and c1bb05b.

📒 Files selected for processing (1)
  • .vitepress/theme/index.ts (1 hunks)
🧰 Additional context used
Gitleaks
.vitepress/theme/index.ts

18-18: Uncovered a JSON Web Token, which may lead to unauthorized access to web applications and sensitive user data.

(jwt)

🔇 Additional comments not posted (1)
.vitepress/theme/index.ts (1)

15-15: LGTM: Proper browser environment check.

The conditional check typeof window !== "undefined" ensures that the Cookbook integration only runs in a browser environment. This is a good practice for code that interacts with the DOM.

Comment on lines +16 to +18
/** It's a public API key, so it's safe to expose it here */
const COOKBOOK_API_KEY =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2NmVhZmRmNTE3MDkyYjQzMGUyOGFkYTgiLCJpYXQiOjE3MjY2NzY0NjksImV4cCI6MjA0MjI1MjQ2OX0.yfmY5Zm70Xt6rMHTi9g_2aRSQauYyiglzv9-pvOW8zg";
Copy link
Contributor

@coderabbitai coderabbitai bot Sep 25, 2024

Choose a reason for hiding this comment

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

⚠️ Potential issue

Consider using environment variables for API keys.

While the comment suggests that this is a public API key, it's generally not recommended to hardcode API keys directly in the source code. Even public keys should be managed securely to allow for easier rotation and to prevent potential misuse.

Consider the following suggestions:

  1. Use environment variables to store the API key.
  2. Implement a secure key management system.
  3. If the key must be public and accessible on the client-side, consider fetching it from a secure API endpoint.

Here's an example of how you could use an environment variable:

const COOKBOOK_API_KEY = import.meta.env.VITE_COOKBOOK_API_KEY;

Then, you would set the environment variable in your .env file:

VITE_COOKBOOK_API_KEY=your_api_key_here

Make sure to add .env to your .gitignore file to prevent accidentally committing it to version control.

🧰 Tools
Gitleaks

18-18: Uncovered a JSON Web Token, which may lead to unauthorized access to web applications and sensitive user data.

(jwt)

Copy link
Member

Choose a reason for hiding this comment

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

how can I see what it is trained on?

Copy link
Contributor

Choose a reason for hiding this comment

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

@jcstein, the Ask Cookbook AI assistant integrated here is trained on a comprehensive range of Celestia resources, including the source code and the documentation website. This enables it to effectively answer developer questions related to using Celestia. For more detailed information about its training data, you might check the Cookbook documentation or reach out to the Cookbook team for specifics.

(_/)
(•.•)
(> 🥕)

@jcstein
Copy link
Member

jcstein commented Sep 26, 2024

what's the catch?

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