mirror of
https://github.com/googleapis/genai-toolbox.git
synced 2026-02-08 14:15:36 -05:00
This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [github.com/openai/openai-go](https://redirect.github.com/openai/openai-go) | `v1.12.0` -> `v3.8.1` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>openai/openai-go (github.com/openai/openai-go)</summary> ### [`v3.8.1`](https://redirect.github.com/openai/openai-go/releases/tag/v3.8.1) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.8.0...v3.8.1) #### 3.8.1 (2025-11-04) Full Changelog: [v3.8.0...v3.8.1](https://redirect.github.com/openai/openai-\[go/compare/v3.8.0...v3.8.1]\(https://www.golinks.io/compare/v3.8.0...v3.8.1?trackSource=github\)) ##### Bug Fixes - **api:** fix nullability of logprobs ([b5aeb99](b5aeb999e5\))) ### [`v3.8.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#381-2025-11-04) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.7.0...v3.8.0) Full Changelog: [v3.8.0...v3.8.1](https://redirect.github.com/openai/openai-go/compare/v3.8.0...v3.8.1) ##### Bug Fixes - **api:** fix nullability of logprobs ([b5aeb99](b5aeb999e5)) ### [`v3.7.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#380-2025-11-03) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.6.1...v3.7.0) Full Changelog: [v3.7.0...v3.8.0](https://redirect.github.com/openai/openai-go/compare/v3.7.0...v3.8.0) ##### Features - **api:** Realtime API token\_limits, Hybrid searching ranking options ([9495f4a](9495f4aa72)) ##### Chores - **internal:** grammar fix (it's -> its) ([879772d](879772dc88)) ### [`v3.6.1`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#361-2025-10-20) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.6.0...v3.6.1) Full Changelog: [v3.6.0...v3.6.1](https://redirect.github.com/openai/openai-go/compare/v3.6.0...v3.6.1) ##### Bug Fixes - **api:** fix discriminator propertyName for ResponseFormatJsonSchema ([57b0505](57b0505361)) ### [`v3.6.0`](https://redirect.github.com/openai/openai-go/releases/tag/v3.6.0) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.5.0...v3.6.0) #### 3.6.0 (2025-10-20) Full Changelog: [v3.5.0...v3.6.0](https://redirect.github.com/openai/openai-go/compare/v3.5.0...v3.6.0) ##### Features - **api:** Add responses.input\_tokens.count ([a43f2ce](a43f2cef13)) ##### Bug Fixes - **api:** internal openapi updates ([7ad9b02](7ad9b02d1e)) ### [`v3.5.0`](https://redirect.github.com/openai/openai-go/releases/tag/v3.5.0) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.4.0...v3.5.0) #### 3.5.0 (2025-10-17) Full Changelog: [v3.4.0...v3.5.0](https://redirect.github.com/openai/openai-go/compare/v3.4.0...v3.5.0) ##### Features - **api:** api update ([1aa78dd](1aa78dda7a)) ### [`v3.4.0`](https://redirect.github.com/openai/openai-go/releases/tag/v3.4.0) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.3.0...v3.4.0) #### 3.4.0 (2025-10-16) Full Changelog: [v3.3.0...v3.4.0](https://redirect.github.com/openai/openai-go/compare/v3.3.0...v3.4.0) ##### Features - **api:** Add support for gpt-4o-transcribe-diarize on audio/transcriptions endpoint ([ee32400](ee32400f70)) ##### Chores - **api:** internal updates ([74c8031](74c8031304)) - **client:** undo more naming changes ([db441bc](db441bcb7f)) - **client:** undo some naming changes ([a5aa3d6](a5aa3d6e0d)) ### [`v3.3.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#340-2025-10-16) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.2.0...v3.3.0) Full Changelog: [v3.3.0...v3.4.0](https://redirect.github.com/openai/openai-go/compare/v3.3.0...v3.4.0) ##### Features - **api:** Add support for gpt-4o-transcribe-diarize on audio/transcriptions endpoint ([ee32400](ee32400f70)) ##### Chores - **api:** internal updates ([74c8031](74c8031304)) - **client:** undo more naming changes ([db441bc](db441bcb7f)) - **client:** undo some naming changes ([a5aa3d6](a5aa3d6e0d)) ### [`v3.2.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#330-2025-10-10) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.1.0...v3.2.0) Full Changelog: [v3.2.0...v3.3.0](https://redirect.github.com/openai/openai-go/compare/v3.2.0...v3.3.0) ##### Features - **api:** comparison filter in/not in ([d6daca0](d6daca0eed)) ### [`v3.1.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#320-2025-10-06) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.0.1...v3.1.0) Full Changelog: [v3.1.0...v3.2.0](https://redirect.github.com/openai/openai-go/compare/v3.1.0...v3.2.0) ##### Features - **api:** dev day 2025 launches ([d40a768](d40a7689c7)) ### [`v3.0.1`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#310-2025-10-02) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v3.0.0...v3.0.1) Full Changelog: [v3.0.1...v3.1.0](https://redirect.github.com/openai/openai-go/compare/v3.0.1...v3.1.0) ##### Features - **api:** add support for realtime calls ([565ca67](565ca67872)) ### [`v3.0.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#301-2025-10-01) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.7.1...v3.0.0) Full Changelog: [v3.0.0...v3.0.1](https://redirect.github.com/openai/openai-go/compare/v3.0.0...v3.0.1) ##### Bug Fixes - **api:** add status, approval\_request\_id to MCP tool call ([a7f95e4](a7f95e4ef4)) ### [`v2.7.1`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#300-2025-09-30) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.7.0...v2.7.1) Full Changelog: [v2.7.1...v3.0.0](https://redirect.github.com/openai/openai-go/compare/v2.7.1...v3.0.0) ##### ⚠ BREAKING CHANGES - **api:** `ResponseFunctionToolCallOutputItem.output` and `ResponseCustomToolCallOutput.output` now return `string | Array<ResponseInputText | ResponseInputImage | ResponseInputFile>` instead of `string` only. This may break existing callsites that assume `output` is always a string. ##### Features - **api:** Support images and files for function call outputs in responses, BatchUsage ([21901ef](21901ef84e)) ### [`v2.7.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#271-2025-09-29) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.6.1...v2.7.0) Full Changelog: [v2.7.0...v2.7.1](https://redirect.github.com/openai/openai-go/compare/v2.7.0...v2.7.1) ##### Bug Fixes - bugfix for setting JSON keys with special characters ([f9ae028](f9ae0283fe)) ### [`v2.6.1`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#270-2025-09-23) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.6.0...v2.6.1) Full Changelog: [v2.6.1...v2.7.0](https://redirect.github.com/openai/openai-go/compare/v2.6.1...v2.7.0) ##### Features - **api:** gpt-5-codex ([b0eac3e](b0eac3ed2b)) ### [`v2.6.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#261-2025-09-22) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.5.0...v2.6.0) Full Changelog: [v2.6.0...v2.6.1](https://redirect.github.com/openai/openai-go/compare/v2.6.0...v2.6.1) ##### Bug Fixes - **api:** fix mcp tool name ([6de601a](6de601aa71)) - use slices.Concat instead of sometimes modifying r.Options ([7312ee7](7312ee73ef)) ##### Chores - **api:** openapi updates for conversations ([4a7d204](4a7d204a4e)) - bump minimum go version to 1.22 ([8396ab5](8396ab5d91)) - do not install brew dependencies in ./scripts/bootstrap by default ([d519b81](d519b81000)) - update more docs for 1.22 ([1b0514d](1b0514df95)) ### [`v2.5.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#260-2025-09-19) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.4.3...v2.5.0) Full Changelog: [v2.5.0...v2.6.0](https://redirect.github.com/openai/openai-go/compare/v2.5.0...v2.6.0) ##### Features - **api:** add reasoning\_text ([6ebf50d](6ebf50d756)) ### [`v2.4.3`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#250-2025-09-17) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.4.2...v2.4.3) Full Changelog: [v2.4.3...v2.5.0](https://redirect.github.com/openai/openai-go/compare/v2.4.3...v2.5.0) ##### Features - **api:** type updates for conversations, reasoning\_effort and results for evals ([3e68a60](3e68a60d76)) ### [`v2.4.2`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#243-2025-09-15) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.4.1...v2.4.2) Full Changelog: [v2.4.2...v2.4.3](https://redirect.github.com/openai/openai-go/compare/v2.4.2...v2.4.3) ##### Chores - **api:** docs and spec refactoring ([e67af66](e67af66b35)) ### [`v2.4.1`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#242-2025-09-12) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.4.0...v2.4.1) Full Changelog: [v2.4.1...v2.4.2](https://redirect.github.com/openai/openai-go/compare/v2.4.1...v2.4.2) ##### Chores - **api:** Minor docs and type updates for realtime ([d92ea48](d92ea4850f)) ### [`v2.4.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#241-2025-09-10) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.3.1...v2.4.0) Full Changelog: [v2.4.0...v2.4.1](https://redirect.github.com/openai/openai-go/compare/v2.4.0...v2.4.1) ##### Chores - **api:** fix realtime GA types ([012b83e](012b83e3fa)) ### [`v2.3.1`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#240-2025-09-08) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.3.0...v2.3.1) Full Changelog: [v2.3.1...v2.4.0](https://redirect.github.com/openai/openai-go/compare/v2.3.1...v2.4.0) ##### Features - **api:** ship the RealtimeGA API shape ([2b6c6db](2b6c6db63e)) ### [`v2.3.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#231-2025-09-05) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.2.2...v2.3.0) Full Changelog: [v2.3.0...v2.3.1](https://redirect.github.com/openai/openai-go/compare/v2.3.0...v2.3.1) ##### Bug Fixes - **internal:** unmarshal correctly when there are multiple discriminators ([98596b2](98596b2183)) ### [`v2.2.2`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#230-2025-09-03) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.2.1...v2.2.2) Full Changelog: [v2.2.2...v2.3.0](https://redirect.github.com/openai/openai-go/compare/v2.2.2...v2.3.0) ##### Features - **api:** Add gpt-realtime models ([3cf6a34](3cf6a34841)) ### [`v2.2.1`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#222-2025-09-02) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.2.0...v2.2.1) Full Changelog: [v2.2.1...v2.2.2](https://redirect.github.com/openai/openai-go/compare/v2.2.1...v2.2.2) ##### Bug Fixes - update url to refresh pkg.go.dev ([edf94ce](edf94ce95a)) - use release please annotations on more places ([2ff82f9](2ff82f98ae)) ### [`v2.2.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#221-2025-09-02) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.1.1...v2.2.0) Full Changelog: [v2.2.0...v2.2.1](https://redirect.github.com/openai/openai-go/compare/v2.2.0...v2.2.1) ##### Chores - **api:** manual updates for ResponseInputAudio ([8c0ebe5](8c0ebe566f)) ### [`v2.1.1`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#220-2025-09-02) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.1.0...v2.1.1) Full Changelog: [v2.1.1...v2.2.0](https://redirect.github.com/openai/openai-go/compare/v2.1.1...v2.2.0) ##### Features - **api:** Add connectors support for MCP tool ([35888bc](35888bcd26)) - **api:** add web search filters ([6f2c71d](6f2c71d4e2)) - **api:** adding support for /v1/conversations to the API ([5b7c31b](5b7c31bde9)) - **api:** realtime API updates ([130fc8e](130fc8ea5b)) - **client:** add support for verifying signatures on incoming webhooks ([f7c8dbb](f7c8dbb6b5)) ##### Bug Fixes - **azure:** compatibility with edit image endpoint ([#​477](https://redirect.github.com/openai/openai-go/issues/477)) ([d156eec](d156eeca37)) - close body before retrying ([8dfed35](8dfed35f11)) ##### Chores - **internal/ci:** setup breaking change detection ([0af0cd0](0af0cd0130)) - **internal:** version bump ([3265795](3265795fff)) ### [`v2.1.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#211-2025-08-20) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.0.2...v2.1.0) Full Changelog: [v2.1.0...v2.1.1](https://redirect.github.com/openai/openai-go/compare/v2.1.0...v2.1.1) ##### Chores - **api:** accurately represent shape for verbosity on Chat Completions ([f81197b](f81197b4b0)) ### [`v2.0.2`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#210-2025-08-18) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.0.1...v2.0.2) Full Changelog: [v2.0.2...v2.1.0](https://redirect.github.com/openai/openai-go/compare/v2.0.2...v2.1.0) ##### Features - **api:** add new text parameters, expiration options ([323154c](323154ccec)) ##### Documentation - give https its missing "h" in Azure OpenAI REST API link ([#​480](https://redirect.github.com/openai/openai-go/issues/480)) ([8a401c9](8a401c9eec)) ### [`v2.0.1`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#202-2025-08-09) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v2.0.0...v2.0.1) Full Changelog: [v2.0.1...v2.0.2](https://redirect.github.com/openai/openai-go/compare/v2.0.1...v2.0.2) ##### Chores - **internal:** update comment in script ([4be24de](4be24dee6a)) - update [@​stainless-api/prism-cli](https://redirect.github.com/stainless-api/prism-cli) to v5.15.0 ([eca22af](eca22af6f1)) ### [`v2.0.0`](https://redirect.github.com/openai/openai-go/blob/HEAD/CHANGELOG.md#201-2025-08-08) [Compare Source](https://redirect.github.com/openai/openai-go/compare/v1.12.0...v2.0.0) Full Changelog: [v2.0.0...v2.0.1](https://redirect.github.com/openai/openai-go/compare/v2.0.0...v2.0.1) ##### Bug Fixes - **client:** fix verbosity parameter location in Responses ([6e2e903](6e2e903e7c)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/googleapis/genai-toolbox). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNTkuNCIsInVwZGF0ZWRJblZlciI6IjQxLjE3My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> --------- Co-authored-by: dishaprakash <57954147+dishaprakash@users.noreply.github.com>
144 lines
4.1 KiB
Go
144 lines
4.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/googleapis/mcp-toolbox-sdk-go/core"
|
|
openai "github.com/openai/openai-go/v3"
|
|
)
|
|
|
|
// ConvertToOpenAITool converts a ToolboxTool into the go-openai library's Tool format.
|
|
func ConvertToOpenAITool(toolboxTool *core.ToolboxTool) openai.ChatCompletionToolUnionParam {
|
|
// Get the input schema
|
|
jsonSchemaBytes, err := toolboxTool.InputSchema()
|
|
if err != nil {
|
|
return openai.ChatCompletionToolUnionParam{}
|
|
}
|
|
|
|
// Unmarshal the JSON bytes into FunctionParameters
|
|
var paramsSchema openai.FunctionParameters
|
|
if err := json.Unmarshal(jsonSchemaBytes, ¶msSchema); err != nil {
|
|
return openai.ChatCompletionToolUnionParam{}
|
|
}
|
|
|
|
// Create and return the final tool parameter struct.
|
|
return openai.ChatCompletionToolUnionParam{
|
|
OfFunction: &openai.ChatCompletionFunctionToolParam{
|
|
Function: openai.FunctionDefinitionParam{
|
|
Name: toolboxTool.Name(),
|
|
Description: openai.String(toolboxTool.Description()),
|
|
Parameters: paramsSchema,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
const systemPrompt = `
|
|
You're a helpful hotel assistant. You handle hotel searching, booking, and
|
|
cancellations. When the user searches for a hotel, mention its name, id,
|
|
location and price tier. Always mention hotel ids while performing any
|
|
searches. This is very important for any operations. For any bookings or
|
|
cancellations, please provide the appropriate confirmation. Be sure to
|
|
update checkin or checkout dates if mentioned by the user.
|
|
Don't ask for confirmations from the user.
|
|
`
|
|
|
|
var queries = []string{
|
|
"Find hotels in Basel with Basel in its name.",
|
|
"Can you book the hotel Hilton Basel for me?",
|
|
"Oh wait, this is too expensive. Please cancel it and book the Hyatt Regency instead.",
|
|
"My check in dates would be from April 10, 2024 to April 19, 2024.",
|
|
}
|
|
|
|
func main() {
|
|
// Setup
|
|
ctx := context.Background()
|
|
toolboxURL := "http://localhost:5000"
|
|
openAIClient := openai.NewClient()
|
|
|
|
// Initialize the MCP Toolbox client.
|
|
toolboxClient, err := core.NewToolboxClient(toolboxURL)
|
|
if err != nil {
|
|
log.Fatalf("Failed to create Toolbox client: %v", err)
|
|
}
|
|
|
|
// Load the tools using the MCP Toolbox SDK.
|
|
tools, err := toolboxClient.LoadToolset("my-toolset", ctx)
|
|
if err != nil {
|
|
log.Fatalf("Failed to load tool : %v\nMake sure your Toolbox server is running and the tool is configured.", err)
|
|
}
|
|
|
|
openAITools := make([]openai.ChatCompletionToolUnionParam, len(tools))
|
|
toolsMap := make(map[string]*core.ToolboxTool, len(tools))
|
|
|
|
for i, tool := range tools {
|
|
// Convert the Toolbox tool into the openAI FunctionDeclaration format.
|
|
openAITools[i] = ConvertToOpenAITool(tool)
|
|
// Add tool to a map for lookup later
|
|
toolsMap[tool.Name()] = tool
|
|
|
|
}
|
|
|
|
params := openai.ChatCompletionNewParams{
|
|
Messages: []openai.ChatCompletionMessageParamUnion{
|
|
openai.SystemMessage(systemPrompt),
|
|
},
|
|
Tools: openAITools,
|
|
Seed: openai.Int(0),
|
|
Model: openai.ChatModelGPT4o,
|
|
}
|
|
|
|
for _, query := range queries {
|
|
|
|
params.Messages = append(params.Messages, openai.UserMessage(query))
|
|
|
|
// Make initial chat completion request
|
|
completion, err := openAIClient.Chat.Completions.New(ctx, params)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
toolCalls := completion.Choices[0].Message.ToolCalls
|
|
|
|
// Return early if there are no tool calls
|
|
if len(toolCalls) == 0 {
|
|
log.Println("No function call")
|
|
}
|
|
|
|
// If there was a function call, continue the conversation
|
|
params.Messages = append(params.Messages, completion.Choices[0].Message.ToParam())
|
|
for _, toolCall := range toolCalls {
|
|
|
|
toolName := toolCall.Function.Name
|
|
toolToInvoke := toolsMap[toolName]
|
|
|
|
var args map[string]any
|
|
err := json.Unmarshal([]byte(toolCall.Function.Arguments), &args)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
result, err := toolToInvoke.Invoke(ctx, args)
|
|
if err != nil {
|
|
log.Fatal("Could not invoke tool", err)
|
|
}
|
|
|
|
params.Messages = append(params.Messages, openai.ToolMessage(result.(string), toolCall.ID))
|
|
}
|
|
|
|
completion, err = openAIClient.Chat.Completions.New(ctx, params)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
params.Messages = append(params.Messages, openai.AssistantMessage(query))
|
|
|
|
fmt.Println("\n", completion.Choices[0].Message.Content)
|
|
|
|
}
|
|
|
|
}
|