-
- Notifications
You must be signed in to change notification settings - Fork 23.1k
feat: Add GigaChat #5484
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
base: main
Are you sure you want to change the base?
feat: Add GigaChat #5484
Conversation
Summary of ChangesHello @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
Using Gemini Code AssistThe 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
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 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
|
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.
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.
| export const httpsAgent = new https.Agent({ | ||
| rejectUnauthorized: false, | ||
| requestCert: false | ||
| }) |
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.
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.
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.
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 || '') |
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.
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.
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.
| label: 'Base URL', |
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 || '') |
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.
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.
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.
Flowise/packages/components/nodes/embeddings/GigaChatEmbedding/GigaChatEmbedding.ts
Line 88 in b54ca3b
| optional: false |
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 || '') |
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.
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' |
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.
There's a typo in the description. "GigaChatApi" should be "GigaChat API" for better readability and consistency.
| 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”**' |
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.
There appears to be a formatting error in the description string, which ends with basis”**. This should be corrected.
| 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' |
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.
| { | ||
| label: 'GIGACHAT_API_CORP', | ||
| name: 'GIGACHAT_API_CORP', | ||
| description: 'access for sole proprietors and legal entities on a pay-as-you-go basis”**' |
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.
There appears to be a formatting error in the description string, which ends with basis”**. This should be corrected.
| 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 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