Skip to content

Commit 2d5d333

Browse files
authored
refactor: remove ParseParams() from Tool interface (googleapis#2375)
The `ParseParams` Tool interface is only passing the tool's parameter into a generic `parameters.ParseParams()` helper. Instead of keeping it as a tool interface, we add a `GetParameters()` method (googleapis#2374) to the tool interface and call it directly from the API handlers. This way we keep the parameter parsing logic independent from the tools.
1 parent 252fc30 commit 2d5d333

193 files changed

Lines changed: 14 additions & 776 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

internal/server/api.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/go-chi/render"
2727
"github.com/googleapis/genai-toolbox/internal/tools"
2828
"github.com/googleapis/genai-toolbox/internal/util"
29+
"github.com/googleapis/genai-toolbox/internal/util/parameters"
2930
"go.opentelemetry.io/otel/attribute"
3031
"go.opentelemetry.io/otel/codes"
3132
"go.opentelemetry.io/otel/metric"
@@ -231,7 +232,7 @@ func toolInvokeHandler(s *Server, w http.ResponseWriter, r *http.Request) {
231232
return
232233
}
233234

234-
params, err := tool.ParseParams(data, claimsFromAuth)
235+
params, err := parameters.ParseParams(tool.GetParameters(), data, claimsFromAuth)
235236
if err != nil {
236237
// If auth error, return 401
237238
if errors.Is(err, util.ErrUnauthorized) {

internal/server/mcp/v20241105/method.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/googleapis/genai-toolbox/internal/server/resources"
2929
"github.com/googleapis/genai-toolbox/internal/tools"
3030
"github.com/googleapis/genai-toolbox/internal/util"
31+
"github.com/googleapis/genai-toolbox/internal/util/parameters"
3132
)
3233

3334
// ProcessMethod returns a response for the request.
@@ -176,7 +177,7 @@ func toolsCallHandler(ctx context.Context, id jsonrpc.RequestId, resourceMgr *re
176177
}
177178
logger.DebugContext(ctx, "tool invocation authorized")
178179

179-
params, err := tool.ParseParams(data, claimsFromAuth)
180+
params, err := parameters.ParseParams(tool.GetParameters(), data, claimsFromAuth)
180181
if err != nil {
181182
err = fmt.Errorf("provided parameters were invalid: %w", err)
182183
return jsonrpc.NewError(id, jsonrpc.INVALID_PARAMS, err.Error(), nil), err

internal/server/mcp/v20250326/method.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/googleapis/genai-toolbox/internal/server/resources"
2929
"github.com/googleapis/genai-toolbox/internal/tools"
3030
"github.com/googleapis/genai-toolbox/internal/util"
31+
"github.com/googleapis/genai-toolbox/internal/util/parameters"
3132
)
3233

3334
// ProcessMethod returns a response for the request.
@@ -176,7 +177,7 @@ func toolsCallHandler(ctx context.Context, id jsonrpc.RequestId, resourceMgr *re
176177
}
177178
logger.DebugContext(ctx, "tool invocation authorized")
178179

179-
params, err := tool.ParseParams(data, claimsFromAuth)
180+
params, err := parameters.ParseParams(tool.GetParameters(), data, claimsFromAuth)
180181
if err != nil {
181182
err = fmt.Errorf("provided parameters were invalid: %w", err)
182183
return jsonrpc.NewError(id, jsonrpc.INVALID_PARAMS, err.Error(), nil), err

internal/server/mcp/v20250618/method.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/googleapis/genai-toolbox/internal/server/resources"
2929
"github.com/googleapis/genai-toolbox/internal/tools"
3030
"github.com/googleapis/genai-toolbox/internal/util"
31+
"github.com/googleapis/genai-toolbox/internal/util/parameters"
3132
)
3233

3334
// ProcessMethod returns a response for the request.
@@ -169,7 +170,7 @@ func toolsCallHandler(ctx context.Context, id jsonrpc.RequestId, resourceMgr *re
169170
}
170171
logger.DebugContext(ctx, "tool invocation authorized")
171172

172-
params, err := tool.ParseParams(data, claimsFromAuth)
173+
params, err := parameters.ParseParams(tool.GetParameters(), data, claimsFromAuth)
173174
if err != nil {
174175
err = fmt.Errorf("provided parameters were invalid: %w", err)
175176
return jsonrpc.NewError(id, jsonrpc.INVALID_PARAMS, err.Error(), nil), err

internal/server/mcp/v20251125/method.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/googleapis/genai-toolbox/internal/server/resources"
2929
"github.com/googleapis/genai-toolbox/internal/tools"
3030
"github.com/googleapis/genai-toolbox/internal/util"
31+
"github.com/googleapis/genai-toolbox/internal/util/parameters"
3132
)
3233

3334
// ProcessMethod returns a response for the request.
@@ -169,7 +170,7 @@ func toolsCallHandler(ctx context.Context, id jsonrpc.RequestId, resourceMgr *re
169170
}
170171
logger.DebugContext(ctx, "tool invocation authorized")
171172

172-
params, err := tool.ParseParams(data, claimsFromAuth)
173+
params, err := parameters.ParseParams(tool.GetParameters(), data, claimsFromAuth)
173174
if err != nil {
174175
err = fmt.Errorf("provided parameters were invalid: %w", err)
175176
return jsonrpc.NewError(id, jsonrpc.INVALID_PARAMS, err.Error(), nil), err

internal/tools/alloydb/alloydbcreatecluster/alloydbcreatecluster.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,6 @@ func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, para
162162
return source.CreateCluster(ctx, project, location, network, user, password, clusterID, string(accessToken))
163163
}
164164

165-
// ParseParams parses the parameters for the tool.
166-
func (t Tool) ParseParams(data map[string]any, claims map[string]map[string]any) (parameters.ParamValues, error) {
167-
return parameters.ParseParams(t.AllParams, data, claims)
168-
}
169-
170165
func (t Tool) EmbedParams(ctx context.Context, paramValues parameters.ParamValues, embeddingModelsMap map[string]embeddingmodels.EmbeddingModel) (parameters.ParamValues, error) {
171166
return parameters.EmbedParams(ctx, t.AllParams, paramValues, embeddingModelsMap, nil)
172167
}

internal/tools/alloydb/alloydbcreateinstance/alloydbcreateinstance.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,6 @@ func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, para
168168
return source.CreateInstance(ctx, project, location, cluster, instanceID, instanceType, displayName, nodeCount, string(accessToken))
169169
}
170170

171-
// ParseParams parses the parameters for the tool.
172-
func (t Tool) ParseParams(data map[string]any, claims map[string]map[string]any) (parameters.ParamValues, error) {
173-
return parameters.ParseParams(t.AllParams, data, claims)
174-
}
175-
176171
func (t Tool) EmbedParams(ctx context.Context, paramValues parameters.ParamValues, embeddingModelsMap map[string]embeddingmodels.EmbeddingModel) (parameters.ParamValues, error) {
177172
return parameters.EmbedParams(ctx, t.AllParams, paramValues, embeddingModelsMap, nil)
178173
}

internal/tools/alloydb/alloydbcreateuser/alloydbcreateuser.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,6 @@ func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, para
173173
return source.CreateUser(ctx, userType, password, roles, string(accessToken), project, location, cluster, userID)
174174
}
175175

176-
// ParseParams parses the parameters for the tool.
177-
func (t Tool) ParseParams(data map[string]any, claims map[string]map[string]any) (parameters.ParamValues, error) {
178-
return parameters.ParseParams(t.AllParams, data, claims)
179-
}
180-
181176
func (t Tool) EmbedParams(ctx context.Context, paramValues parameters.ParamValues, embeddingModelsMap map[string]embeddingmodels.EmbeddingModel) (parameters.ParamValues, error) {
182177
return parameters.EmbedParams(ctx, t.AllParams, paramValues, embeddingModelsMap, nil)
183178
}

internal/tools/alloydb/alloydbgetcluster/alloydbgetcluster.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,6 @@ func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, para
144144
return source.GetCluster(ctx, project, location, cluster, string(accessToken))
145145
}
146146

147-
// ParseParams parses the parameters for the tool.
148-
func (t Tool) ParseParams(data map[string]any, claims map[string]map[string]any) (parameters.ParamValues, error) {
149-
return parameters.ParseParams(t.AllParams, data, claims)
150-
}
151-
152147
func (t Tool) EmbedParams(ctx context.Context, paramValues parameters.ParamValues, embeddingModelsMap map[string]embeddingmodels.EmbeddingModel) (parameters.ParamValues, error) {
153148
return parameters.EmbedParams(ctx, t.AllParams, paramValues, embeddingModelsMap, nil)
154149
}

internal/tools/alloydb/alloydbgetinstance/alloydbgetinstance.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,6 @@ func (t Tool) Invoke(ctx context.Context, resourceMgr tools.SourceProvider, para
148148
return source.GetInstance(ctx, project, location, cluster, instance, string(accessToken))
149149
}
150150

151-
// ParseParams parses the parameters for the tool.
152-
func (t Tool) ParseParams(data map[string]any, claims map[string]map[string]any) (parameters.ParamValues, error) {
153-
return parameters.ParseParams(t.AllParams, data, claims)
154-
}
155-
156151
func (t Tool) EmbedParams(ctx context.Context, paramValues parameters.ParamValues, embeddingModelsMap map[string]embeddingmodels.EmbeddingModel) (parameters.ParamValues, error) {
157152
return parameters.EmbedParams(ctx, t.AllParams, paramValues, embeddingModelsMap, nil)
158153
}

0 commit comments

Comments
 (0)