-
Notifications
You must be signed in to change notification settings - Fork 247
Add vertexAi session service #235
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?
Conversation
- Move vertexai session service to separate package. - Allow multiple app usage by having different reasoning engine. - Add create_engine example.
Summary of ChangesHello @baptmont, 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 enhances the application's ability to manage sessions within Google Cloud's Vertex AI platform. It introduces a specialized Vertex AI session service, moving from a more generalized approach to a dedicated, API-driven implementation. This change provides a more structured and robust way to handle session lifecycle and event logging, ensuring better integration and scalability with Vertex AI reasoning engines. 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
|
|
missing state scopes |
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 refactors the Vertex AI session service into its own session/vertexai package, which is a good structural improvement. It also adds a new example for creating a reasoning engine. The changes are mostly well-implemented, but I've found a few critical issues: a typo using a Cyrillic character that will break compilation, an unsafe type assertion, and a potential panic from incorrect slice indexing. I've also pointed out a high-severity race condition in state handling and a couple of medium-severity issues related to error handling and performance. Please address the critical issues before merging.
| func (s *state) All() iter.Seq2[string, any] { | ||
| return func(yield func(key string, val any) bool) { | ||
| s.mu.RLock() | ||
|
|
||
| for k, v := range s.state { | ||
| s.mu.RUnlock() | ||
| if !yield(k, v) { | ||
| return | ||
| } | ||
| s.mu.RLock() | ||
| } | ||
|
|
||
| s.mu.RUnlock() | ||
| } | ||
| } |
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.
This implementation of All() has a potential race condition. The mutex is unlocked before calling yield and re-locked after. Between the unlock and re-lock, another goroutine can modify s.state (e.g., by calling Set). Modifying a map while iterating over it can lead to unpredictable behavior. A safer approach is to create a copy of the state map while holding the lock, and then iterate over the copy.
func (s *state) All() iter.Seq2[string, any] {
s.mu.RLock()
// Create a copy of the state to iterate over it without holding the lock.
stateCopy := make(map[string]any, len(s.state))
for k, v := range s.state {
stateCopy[k] = v
}
s.mu.RUnlock()
return func(yield func(key string, val any) bool) {
for k, v := range stateCopy {
if !yield(k, v) {
return
}
}
}
}
python ref: https://github.com/google/adk-python/blob/0ccc43cf49dc0882dc896455d6603a602d8a28e7/src/google/adk/sessions/vertex_ai_session_service.py