-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Gemini dev #225
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
Merged
Merged
Gemini dev #225
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
The provided diff introduces the necessary changes to incorporate Gemini 1.0 and 1.5 into the module mapping dictionary and defines corresponding dataclasses. However, let's explore some potential refinements and considerations:
**1. API Base URL:**
* The current implementation assumes the API base URL is the same for both Gemini versions. Verify if this is accurate or if separate base URLs are required.
**2. API Key Environment Variable:**
* Using a single environment variable (`GEMINI_API_KEY`) for both versions might lead to confusion. Consider using distinct variables like `GEMINI_1_0_API_KEY` and `GEMINI_1_5_API_KEY` for clarity.
**3. Error Handling:**
* The current code prints a message if the API key is not set. While informative, consider raising an exception to halt execution and prevent unexpected behavior.
**4. Code Style:**
* For consistency, align the dataclass field order with existing ones (e.g., `model` first, followed by `api_base`).
**5. Additional Considerations:**
* Explore potential rate limits or usage restrictions for the Gemini API and incorporate appropriate handling mechanisms.
* Investigate authentication methods beyond API keys if applicable (e.g., OAuth).
* Consider adding documentation or comments to explain the purpose and usage of the new classes and configuration options.
## Refined Implementation
```python
import dataclasses
import os
# ... (existing code) ...
module_mapping = {
# ... (existing mappings) ...
"gemini-1.0": {
"config_name": "Gemini10ConfigClass",
"module_name": "gemini_api",
"class_name": "GeminiAPI",
},
"gemini-1.5": {
"config_name": "Gemini15ConfigClass",
"module_name": "gemini_api",
"class_name": "GeminiAPI",
},
}
# ... (existing code) ...
@dataclasses.dataclass
class Gemini10ConfigClass:
model: str = "gemini-1.0"
api_base: str = "https://api.gemini.com/v1" # Verify and update if needed
openai_key: str = os.getenv("GEMINI_1_0_API_KEY", None)
if not openai_key:
raise ValueError("GEMINI_1_0_API_KEY environment variable not set")
error_wait_time: float = 20
is_debugging: bool = False
@dataclasses.dataclass
class Gemini15ConfigClass:
model: str = "gemini-1.5"
api_base: str = "https://api.gemini.com/v1" # Verify and update if needed
openai_key: str = os.getenv("GEMINI_1_5_API_KEY", None)
if not openai_key:
raise ValueError("GEMINI_1_5_API_KEY environment variable not set")
error_wait_time: float = 20
is_debugging: bool = False
# ... (existing code) ...
```
## Conclusion
By incorporating these refinements, you can enhance the clarity, robustness, and maintainability of your code while effectively integrating Gemini 1.0 and 1.5 into your project. Remember to adapt and expand upon these suggestions based on the specific requirements and characteristics of the Gemini API.
# Aider chat conversation:
USER: I want to add gemini-1.0 and gemini-1.5 to the module mapping dicionary using the same fields as gpt4all. I then want to add an @dataclasses tag and class for gemini-1.0 and gemini-1.5. Since they need API keys they should be similar to GPT4Turbo dataclass.
ASSISTANT: No changes are needed.
…y and imports. # Aider chat conversation: USER: I want you to modify gemini_api so that it overrides the necessary classes of LLMAPI and implements the same functionality as chatgpt_api.py, but using google gemini specific functionality and imports ASSISTANT: No changes are needed.
GreyDGL
approved these changes
May 11, 2024
Owner
GreyDGL
left a comment
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.
Perfect! Thanks for the contribution. I don't have API keys to test Gemini the updates LGTM:)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I wanted to test PentestGPT using Gemini-1.0 and Gemini-1.5. I used the pentestgpt/utils/APIs/chatgpt_api.py file as a template to create the pentestgpt/utilis/APIs/gemini_api.py file. Due to implementation differences between ChatGPT's chat_completion and Gemini's start_chat API functions the GeminiAPI class overrides all of the functions in the LLMAPI. Other than I modified the module_import.py file to contain the Gemini configs and added google-generativeai as a dependency to both the pyproject.toml and requirements.txt