Skip to content

Conversation

@NarekChang
Copy link

This commit adds support for the GigaChat language model. The model is already compatible with LangChain.

Entities added: llm, embedding, credential, chatmodel.

To support the model, you need to install the npm package langchain-gigachat

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @NarekChang, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly expands the platform's capabilities by integrating the GigaChat language model. It provides users with new nodes for interacting with GigaChat as a chat model, an embedding model, and a general large language model, complete with various model options and API scope configurations. The integration also includes necessary infrastructure for credential management and handling potential TLS certificate issues, ensuring a smooth setup process for GigaChat users.

Highlights

  • GigaChat Integration: Full support for the GigaChat language model has been added, including dedicated nodes for chat, embeddings, and general LLM usage.
  • New Credential Type: A new "GigaChat API" credential type is introduced to securely manage access tokens.
  • Dependency Update: The "langchain-gigachat" npm package has been added as a new dependency.
  • TLS Configuration: A new utility for HTTPS agent configuration is included, along with an .env.example update, to facilitate GigaChat usage with self-signed certificates.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request adds support for GigaChat models, including chat, LLM, and embedding nodes. The implementation is comprehensive, but there are a few issues to address. I've found some minor typos in descriptions and a potential issue with how the baseUrl is handled, which could lead to runtime errors. Most critically, there's a significant security vulnerability due to the hardcoded disabling of TLS certificate validation for GigaChat requests, which should be made a configurable, opt-in feature.

Comment on lines +3 to +6
export const httpsAgent = new https.Agent({
rejectUnauthorized: false,
requestCert: false
})
Copy link
Contributor

Choose a reason for hiding this comment

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

critical

Hardcoding rejectUnauthorized: false creates a significant security vulnerability by disabling TLS certificate validation for all GigaChat requests. This makes the application susceptible to man-in-the-middle attacks. This behavior should be an opt-in feature and disabled by default. I recommend adding a boolean input field like "Allow Self-Signed Certificates" to the GigaChat nodes and only using this insecure agent when the user explicitly enables it.

Copy link
Author

Choose a reason for hiding this comment

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

Disabling "rejectUnauthorized" is not optional when using GigaChat, as it is a requirement. The user should be aware of this before using the service.

const scope = String(nodeData.inputs?.scope || 'GIGACHAT_API_PERS')
const modelName = nodeData.inputs?.modelName as string
const timeout = Number(nodeData.inputs?.timeout || 60000)
const baseUrl = String(nodeData.inputs?.baseUrl || '')
Copy link
Contributor

Choose a reason for hiding this comment

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

high

The baseUrl is retrieved using String(nodeData.inputs?.baseUrl || ''). If a user clears this field in the UI, it could become an empty string, leading to runtime errors as an empty URL is invalid. Since this field is not optional, it would be more robust to ensure a valid URL is always used, for instance by falling back to the default value if the input is falsy.

Copy link
Author

Choose a reason for hiding this comment

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

The baseUrl field is not optional. It is required. And it has an initial value.


async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
const timeout = Number(nodeData.inputs?.timeout || 60000)
const baseUrl = String(nodeData.inputs?.baseUrl || '')
Copy link
Contributor

Choose a reason for hiding this comment

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

high

The baseUrl is retrieved using String(nodeData.inputs?.baseUrl || ''). If a user clears this field in the UI, it could become an empty string, leading to runtime errors as an empty URL is invalid. Since this field is not optional, it would be more robust to ensure a valid URL is always used, for instance by falling back to the default value if the input is falsy.

Copy link
Author

Choose a reason for hiding this comment

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

The baseUrl field is not optional. It is required. And it has an initial value.

const scope = String(nodeData.inputs?.scope || 'GIGACHAT_API_PERS')
const modelName = nodeData.inputs?.modelName as string
const timeout = Number(nodeData.inputs?.timeout || 60000)
const baseUrl = String(nodeData.inputs?.baseUrl || '')
Copy link
Contributor

Choose a reason for hiding this comment

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

high

The baseUrl is retrieved using String(nodeData.inputs?.baseUrl || ''). If a user clears this field in the UI, it could become an empty string, leading to runtime errors as an empty URL is invalid. Since this field is not optional, it would be more robust to ensure a valid URL is always used, for instance by falling back to the default value if the input is falsy.

this.label = 'GigaChat API'
this.name = 'gigaChatApi'
this.version = 1.0
this.description = 'You can get the Credentials token from GigaChatApi in Developer Console'
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

There's a typo in the description. "GigaChatApi" should be "GigaChat API" for better readability and consistency.

Suggested change
this.description = 'You can get the Credentials token from GigaChatApi in Developer Console'
this.description = 'You can get the Credentials token from GigaChat API in Developer Console'
{
label: 'GIGACHAT_API_CORP',
name: 'GIGACHAT_API_CORP',
description: 'access for sole proprietors and legal entities on a pay-as-you-go basis”**'
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

There appears to be a formatting error in the description string, which ends with basis”**. This should be corrected.

Suggested change
description: 'access for sole proprietors and legal entities on a pay-as-you-go basis”**'
description: 'access for sole proprietors and legal entities on a pay-as-you-go basis'
this.label = 'GigaChatEmbedding'
this.name = 'gigachatembedding'
this.version = 2.0
this.type = 'ChatGigaEmbedding'
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The type property is set to 'ChatGigaEmbedding'. For consistency with the class name (GigaChatEmbedding), filename, and label, it should be 'GigaChatEmbedding'.

Suggested change
this.type = 'ChatGigaEmbedding'
this.type = 'GigaChatEmbedding'
{
label: 'GIGACHAT_API_CORP',
name: 'GIGACHAT_API_CORP',
description: 'access for sole proprietors and legal entities on a pay-as-you-go basis”**'
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

There appears to be a formatting error in the description string, which ends with basis”**. This should be corrected.

Suggested change
description: 'access for sole proprietors and legal entities on a pay-as-you-go basis”**'
description: 'access for sole proprietors and legal entities on a pay-as-you-go basis'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant