From 89a932193227716b663f5d3d18315f65e8e705ca Mon Sep 17 00:00:00 2001 From: duwenxin Date: Tue, 3 Feb 2026 10:51:20 -0500 Subject: [PATCH] update more tools --- .../cloudsqlmssqlcreateinstance.go | 4 +-- .../cloudsqlmysqlcreateinstance.go | 4 +-- .../cloudsqlpgcreateinstances.go | 4 +-- .../cloudsqlpgupgradeprecheck.go | 4 +-- .../dataplexlookupentry.go | 4 +-- .../dataplexsearchaspecttypes.go | 4 +-- .../dataplexsearchentries.go | 4 +-- .../firestoreadddocuments.go | 4 +-- .../firestoredeletedocuments.go | 4 +-- .../firestoregetdocuments.go | 4 +-- .../firestoregetrules/firestoregetrules.go | 4 +-- .../firestorelistcollections.go | 18 +++++++---- .../firestorequery/firestorequery.go | 32 +++++++++++-------- 13 files changed, 53 insertions(+), 41 deletions(-) diff --git a/internal/tools/cloudsqlmssql/cloudsqlmssqlcreateinstance/cloudsqlmssqlcreateinstance.go b/internal/tools/cloudsqlmssql/cloudsqlmssqlcreateinstance/cloudsqlmssqlcreateinstance.go index 7927c50edd..0fc6e2fc7d 100644 --- a/internal/tools/cloudsqlmssql/cloudsqlmssqlcreateinstance/cloudsqlmssqlcreateinstance.go +++ b/internal/tools/cloudsqlmssql/cloudsqlmssqlcreateinstance/cloudsqlmssqlcreateinstance.go @@ -17,14 +17,14 @@ package cloudsqlmssqlcreateinstance import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" "strings" yaml "github.com/goccy/go-yaml" "github.com/googleapis/genai-toolbox/internal/embeddingmodels" "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" "google.golang.org/api/sqladmin/v1" ) diff --git a/internal/tools/cloudsqlmysql/cloudsqlmysqlcreateinstance/cloudsqlmysqlcreateinstance.go b/internal/tools/cloudsqlmysql/cloudsqlmysqlcreateinstance/cloudsqlmysqlcreateinstance.go index 800439acbf..aefe8dd3f3 100644 --- a/internal/tools/cloudsqlmysql/cloudsqlmysqlcreateinstance/cloudsqlmysqlcreateinstance.go +++ b/internal/tools/cloudsqlmysql/cloudsqlmysqlcreateinstance/cloudsqlmysqlcreateinstance.go @@ -17,14 +17,14 @@ package cloudsqlmysqlcreateinstance import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" "strings" yaml "github.com/goccy/go-yaml" "github.com/googleapis/genai-toolbox/internal/embeddingmodels" "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" sqladmin "google.golang.org/api/sqladmin/v1" ) diff --git a/internal/tools/cloudsqlpg/cloudsqlpgcreateinstances/cloudsqlpgcreateinstances.go b/internal/tools/cloudsqlpg/cloudsqlpgcreateinstances/cloudsqlpgcreateinstances.go index 03093ca01d..2b5c3fa35e 100644 --- a/internal/tools/cloudsqlpg/cloudsqlpgcreateinstances/cloudsqlpgcreateinstances.go +++ b/internal/tools/cloudsqlpg/cloudsqlpgcreateinstances/cloudsqlpgcreateinstances.go @@ -17,14 +17,14 @@ package cloudsqlpgcreateinstances import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" "strings" yaml "github.com/goccy/go-yaml" "github.com/googleapis/genai-toolbox/internal/embeddingmodels" "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" sqladmin "google.golang.org/api/sqladmin/v1" ) diff --git a/internal/tools/cloudsqlpg/cloudsqlpgupgradeprecheck/cloudsqlpgupgradeprecheck.go b/internal/tools/cloudsqlpg/cloudsqlpgupgradeprecheck/cloudsqlpgupgradeprecheck.go index eb2f89674b..c932e1835e 100644 --- a/internal/tools/cloudsqlpg/cloudsqlpgupgradeprecheck/cloudsqlpgupgradeprecheck.go +++ b/internal/tools/cloudsqlpg/cloudsqlpgupgradeprecheck/cloudsqlpgupgradeprecheck.go @@ -17,14 +17,14 @@ package cloudsqlpgupgradeprecheck import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" "time" yaml "github.com/goccy/go-yaml" "github.com/googleapis/genai-toolbox/internal/embeddingmodels" "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" sqladmin "google.golang.org/api/sqladmin/v1" ) diff --git a/internal/tools/dataplex/dataplexlookupentry/dataplexlookupentry.go b/internal/tools/dataplex/dataplexlookupentry/dataplexlookupentry.go index 726cbaad85..c8695862f7 100644 --- a/internal/tools/dataplex/dataplexlookupentry/dataplexlookupentry.go +++ b/internal/tools/dataplex/dataplexlookupentry/dataplexlookupentry.go @@ -17,14 +17,14 @@ package dataplexlookupentry import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" dataplexpb "cloud.google.com/go/dataplex/apiv1/dataplexpb" "github.com/goccy/go-yaml" "github.com/googleapis/genai-toolbox/internal/embeddingmodels" "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" ) diff --git a/internal/tools/dataplex/dataplexsearchaspecttypes/dataplexsearchaspecttypes.go b/internal/tools/dataplex/dataplexsearchaspecttypes/dataplexsearchaspecttypes.go index a542e954e8..202b6c5487 100644 --- a/internal/tools/dataplex/dataplexsearchaspecttypes/dataplexsearchaspecttypes.go +++ b/internal/tools/dataplex/dataplexsearchaspecttypes/dataplexsearchaspecttypes.go @@ -17,14 +17,14 @@ package dataplexsearchaspecttypes import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" "cloud.google.com/go/dataplex/apiv1/dataplexpb" "github.com/goccy/go-yaml" "github.com/googleapis/genai-toolbox/internal/embeddingmodels" "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" ) diff --git a/internal/tools/dataplex/dataplexsearchentries/dataplexsearchentries.go b/internal/tools/dataplex/dataplexsearchentries/dataplexsearchentries.go index 8bb1bf4e93..5648327082 100644 --- a/internal/tools/dataplex/dataplexsearchentries/dataplexsearchentries.go +++ b/internal/tools/dataplex/dataplexsearchentries/dataplexsearchentries.go @@ -17,14 +17,14 @@ package dataplexsearchentries import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" "cloud.google.com/go/dataplex/apiv1/dataplexpb" "github.com/goccy/go-yaml" "github.com/googleapis/genai-toolbox/internal/embeddingmodels" "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" ) diff --git a/internal/tools/firestore/firestoreadddocuments/firestoreadddocuments.go b/internal/tools/firestore/firestoreadddocuments/firestoreadddocuments.go index ddc66ff9b1..7e661276f1 100644 --- a/internal/tools/firestore/firestoreadddocuments/firestoreadddocuments.go +++ b/internal/tools/firestore/firestoreadddocuments/firestoreadddocuments.go @@ -17,7 +17,7 @@ package firestoreadddocuments import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" firestoreapi "cloud.google.com/go/firestore" yaml "github.com/goccy/go-yaml" @@ -25,7 +25,7 @@ import ( "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" fsUtil "github.com/googleapis/genai-toolbox/internal/tools/firestore/util" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" ) diff --git a/internal/tools/firestore/firestoredeletedocuments/firestoredeletedocuments.go b/internal/tools/firestore/firestoredeletedocuments/firestoredeletedocuments.go index 1eefeadda7..9e3ee98c62 100644 --- a/internal/tools/firestore/firestoredeletedocuments/firestoredeletedocuments.go +++ b/internal/tools/firestore/firestoredeletedocuments/firestoredeletedocuments.go @@ -17,7 +17,7 @@ package firestoredeletedocuments import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" firestoreapi "cloud.google.com/go/firestore" yaml "github.com/goccy/go-yaml" @@ -25,7 +25,7 @@ import ( "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" fsUtil "github.com/googleapis/genai-toolbox/internal/tools/firestore/util" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" ) diff --git a/internal/tools/firestore/firestoregetdocuments/firestoregetdocuments.go b/internal/tools/firestore/firestoregetdocuments/firestoregetdocuments.go index 4535299142..f6840b6a54 100644 --- a/internal/tools/firestore/firestoregetdocuments/firestoregetdocuments.go +++ b/internal/tools/firestore/firestoregetdocuments/firestoregetdocuments.go @@ -17,7 +17,7 @@ package firestoregetdocuments import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" firestoreapi "cloud.google.com/go/firestore" yaml "github.com/goccy/go-yaml" @@ -25,7 +25,7 @@ import ( "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" fsUtil "github.com/googleapis/genai-toolbox/internal/tools/firestore/util" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" ) diff --git a/internal/tools/firestore/firestoregetrules/firestoregetrules.go b/internal/tools/firestore/firestoregetrules/firestoregetrules.go index 56ecba6316..85982abcc5 100644 --- a/internal/tools/firestore/firestoregetrules/firestoregetrules.go +++ b/internal/tools/firestore/firestoregetrules/firestoregetrules.go @@ -17,13 +17,13 @@ package firestoregetrules import ( "context" "fmt" - "net/http" // Added for http.StatusInternalServerError + "net/http" yaml "github.com/goccy/go-yaml" "github.com/googleapis/genai-toolbox/internal/embeddingmodels" "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" - "github.com/googleapis/genai-toolbox/internal/util" // Added for util.ToolboxError + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" "google.golang.org/api/firebaserules/v1" ) diff --git a/internal/tools/firestore/firestorelistcollections/firestorelistcollections.go b/internal/tools/firestore/firestorelistcollections/firestorelistcollections.go index c4bcc451e0..b00c4d8ec7 100644 --- a/internal/tools/firestore/firestorelistcollections/firestorelistcollections.go +++ b/internal/tools/firestore/firestorelistcollections/firestorelistcollections.go @@ -17,13 +17,15 @@ package firestorelistcollections import ( "context" "fmt" + "net/http" firestoreapi "cloud.google.com/go/firestore" yaml "github.com/goccy/go-yaml" "github.com/googleapis/genai-toolbox/internal/embeddingmodels" "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" - "github.com/googleapis/genai-toolbox/internal/tools/firestore/util" + fsUtil "github.com/googleapis/genai-toolbox/internal/tools/firestore/util" + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" ) @@ -95,10 +97,10 @@ func (t Tool) ToConfig() tools.ToolConfig { return t.Config } -func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, params parameters.ParamValues, accessToken tools.AccessToken) (any, error) { +func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, params parameters.ParamValues, accessToken tools.AccessToken) (any, util.ToolboxError) { source, err := tools.GetCompatibleSource[compatibleSource](resourceMgr, t.Source, t.Name, t.Type) if err != nil { - return nil, err + return nil, util.NewClientServerError("source used is not compatible with the tool", http.StatusInternalServerError, err) } mapParams := params.AsMap() @@ -107,11 +109,15 @@ func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, para parentPath, _ := mapParams[parentPathKey].(string) if parentPath != "" { // Validate parent document path - if err := util.ValidateDocumentPath(parentPath); err != nil { - return nil, fmt.Errorf("invalid parent document path: %w", err) + if err := fsUtil.ValidateDocumentPath(parentPath); err != nil { + return nil, util.NewAgentError(fmt.Sprintf("invalid parent document path: %v", err), err) } } - return source.ListCollections(ctx, parentPath) + resp, err := source.ListCollections(ctx, parentPath) + if err != nil { + return nil, util.ProecessGcpError(err) + } + return resp, nil } func (t Tool) EmbedParams(ctx context.Context, paramValues parameters.ParamValues, embeddingModelsMap map[string]embeddingmodels.EmbeddingModel) (parameters.ParamValues, error) { diff --git a/internal/tools/firestore/firestorequery/firestorequery.go b/internal/tools/firestore/firestorequery/firestorequery.go index 21ecd1294e..3b0109d08c 100644 --- a/internal/tools/firestore/firestorequery/firestorequery.go +++ b/internal/tools/firestore/firestorequery/firestorequery.go @@ -18,6 +18,7 @@ import ( "context" "encoding/json" "fmt" + "net/http" "strconv" "strings" @@ -26,7 +27,8 @@ import ( "github.com/googleapis/genai-toolbox/internal/embeddingmodels" "github.com/googleapis/genai-toolbox/internal/sources" "github.com/googleapis/genai-toolbox/internal/tools" - "github.com/googleapis/genai-toolbox/internal/tools/firestore/util" + fsUtil "github.com/googleapis/genai-toolbox/internal/tools/firestore/util" + "github.com/googleapis/genai-toolbox/internal/util" "github.com/googleapis/genai-toolbox/internal/util/parameters" ) @@ -158,16 +160,16 @@ var validOperators = map[string]bool{ } // Invoke executes the Firestore query based on the provided parameters -func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, params parameters.ParamValues, accessToken tools.AccessToken) (any, error) { +func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, params parameters.ParamValues, accessToken tools.AccessToken) (any, util.ToolboxError) { source, err := tools.GetCompatibleSource[compatibleSource](resourceMgr, t.Source, t.Name, t.Type) if err != nil { - return nil, err + return nil, util.NewClientServerError("source used is not compatible with the tool", http.StatusInternalServerError, err) } paramsMap := params.AsMap() // Process collection path with template substitution collectionPath, err := parameters.PopulateTemplate("collectionPath", t.CollectionPath, paramsMap) if err != nil { - return nil, fmt.Errorf("failed to process collection path: %w", err) + return nil, util.NewAgentError(fmt.Sprintf("failed to process collection path: %v", err), err) } var filter firestoreapi.EntityFilter @@ -176,13 +178,13 @@ func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, para // Apply template substitution to filters filtersJSON, err := parameters.PopulateTemplateWithJSON("filters", t.Filters, paramsMap) if err != nil { - return nil, fmt.Errorf("failed to process filters template: %w", err) + return nil, util.NewAgentError(fmt.Sprintf("failed to process filters template: %v", err), err) } // Parse the simplified filter format var simplifiedFilter SimplifiedFilter if err := json.Unmarshal([]byte(filtersJSON), &simplifiedFilter); err != nil { - return nil, fmt.Errorf("failed to parse filters: %w", err) + return nil, util.NewAgentError(fmt.Sprintf("failed to parse filters: %v", err), err) } // Convert simplified filter to Firestore filter @@ -191,17 +193,17 @@ func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, para // Process and apply ordering orderBy, err := t.getOrderBy(paramsMap) if err != nil { - return nil, err + return nil, util.NewAgentError(fmt.Sprintf("failed to process order by: %v", err), err) } // Process select fields selectFields, err := t.processSelectFields(paramsMap) if err != nil { - return nil, err + return nil, util.NewAgentError(fmt.Sprintf("failed to process select fields: %v", err), err) } // Process and apply limit limit, err := t.getLimit(paramsMap) if err != nil { - return nil, err + return nil, util.NewAgentError(fmt.Sprintf("failed to process limit: %v", err), err) } // prevent panic when accessing orderBy incase it is nil @@ -215,10 +217,14 @@ func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, para // Build the query query, err := source.BuildQuery(collectionPath, filter, selectFields, orderByField, orderByDirection, limit, t.AnalyzeQuery) if err != nil { - return nil, err + return nil, util.ProecessGcpError(err) } // Execute the query and return results - return source.ExecuteQuery(ctx, query, t.AnalyzeQuery) + resp, err := source.ExecuteQuery(ctx, query, t.AnalyzeQuery) + if err != nil { + return nil, util.ProecessGcpError(err) + } + return resp, nil } // convertToFirestoreFilter converts simplified filter format to Firestore EntityFilter @@ -255,7 +261,7 @@ func (t Tool) convertToFirestoreFilter(source compatibleSource, filter Simplifie if filter.Field != "" && filter.Op != "" && filter.Value != nil { if validOperators[filter.Op] { // Convert the value using the Firestore native JSON converter - convertedValue, err := util.JSONToFirestoreValue(filter.Value, source.FirestoreClient()) + convertedValue, err := fsUtil.JSONToFirestoreValue(filter.Value, source.FirestoreClient()) if err != nil { // If conversion fails, use the original value convertedValue = filter.Value @@ -367,7 +373,7 @@ func (t Tool) getLimit(params map[string]any) (int, error) { if processedValue != "" { parsedLimit, err := strconv.Atoi(processedValue) if err != nil { - return 0, fmt.Errorf("failed to parse limit value '%s': %w", processedValue, err) + return 0, err } limit = parsedLimit }