-
Notifications
You must be signed in to change notification settings - Fork 6.5k
feat(vertex-ai): function calling: convert markdown 'samples' to python #12811
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?
Changes from 4 commits
ac8aaaa
9134412
b0788f5
693f914
ade95c7
d7f744b
5b9e49b
2772747
1f8c008
6e34636
9e73443
98df51c
87aa2a4
26f725a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
# Copyright 2024 Google LLC | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# https://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
import os | ||
|
||
from typing import List | ||
|
||
from vertexai.generative_models import FunctionDeclaration | ||
|
||
|
||
PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT") | ||
|
||
|
||
def function_declaration_from_func(): | ||
# [START generativeaionvertexai_gemini_function_calling_declare_from_function] | ||
# Define a function. Could be a local function or you can import the requests library to call an API | ||
def multiply_numbers(numbers: List[int]) -> int: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is almost a copy of the original function declaration.
The unit-test utilizing a chat message is necessary to test correctness of the function declaration. |
||
""" | ||
Calculates the product of all numbers in an array. | ||
|
||
Args: | ||
numbers: An array of numbers to be multiplied. | ||
|
||
Returns: | ||
The product of all the numbers. If the array is empty, returns 1. | ||
""" | ||
|
||
if not numbers: # Handle empty array | ||
return 1 | ||
|
||
product = 1 | ||
for num in numbers: | ||
product *= num | ||
|
||
return product | ||
|
||
multiply_number_func = FunctionDeclaration.from_func(multiply_numbers) | ||
|
||
''' | ||
multiply_number_func contains the following schema: | ||
|
||
name: "multiply_numbers" | ||
description: "Calculates the product of all numbers in an array." | ||
parameters { | ||
type_: OBJECT | ||
properties { | ||
key: "numbers" | ||
value { | ||
description: "An array of numbers to be multiplied." | ||
title: "Numbers" | ||
} | ||
} | ||
required: "numbers" | ||
description: "Calculates the product of all numbers in an array." | ||
title: "multiply_numbers" | ||
} | ||
''' | ||
# [END generativeaionvertexai_gemini_function_calling_declare_from_function] | ||
return multiply_number_func | ||
|
||
|
||
if __name__ == "__main__": | ||
function_declaration_from_func() |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,15 +13,18 @@ | |
# limitations under the License. | ||
|
||
import backoff | ||
import pytest | ||
|
||
from google.api_core.exceptions import ResourceExhausted | ||
from vertexai.generative_models import GenerativeModel, Tool | ||
|
||
import advanced_example | ||
import basic_example | ||
import chat_example | ||
import chat_function_calling_basic | ||
import chat_function_calling_config | ||
import parallel_function_calling_example | ||
import declare_function_from_function | ||
|
||
|
||
@backoff.on_exception(backoff.expo, ResourceExhausted, max_time=10) | ||
|
@@ -52,12 +55,14 @@ def test_function_calling_advanced_function_selection() -> None: | |
) | ||
|
||
|
||
@pytest.mark.skip(reason="Blocked on b/... ") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Both samples that use OpenAI client are not working anymore (log):
Link to the doc section with OpenAI samples: https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/function-calling#python-openai There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Created a general issue to initiate the discussion about current CI process. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The error
The issue you've created is a good first step to track this problem. Consider adding more details about your environment (Python version, OpenAI library version, proxy configuration if applicable) to help diagnose the root cause. |
||
@backoff.on_exception(backoff.expo, ResourceExhausted, max_time=10) | ||
def test_function_calling_basic() -> None: | ||
response = chat_function_calling_basic.generate_text() | ||
assert "get_current_weather" in response.choices[0].message.tool_calls[0].id | ||
|
||
|
||
@pytest.mark.skip(reason="Blocked on b/... ") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I will need help with creating a real ticket in Buganizer. |
||
@backoff.on_exception(backoff.expo, ResourceExhausted, max_time=10) | ||
def test_function_calling_config() -> None: | ||
response = chat_function_calling_config.generate_text() | ||
|
@@ -85,3 +90,13 @@ def test_function_calling_chat() -> None: | |
def test_parallel_function_calling() -> None: | ||
response = parallel_function_calling_example.parallel_function_calling_example() | ||
assert response is not None | ||
|
||
|
||
def test_prototype() -> None: | ||
func_declaration = declare_function_from_function.function_declaration_as_func() | ||
tools = Tool(function_declarations=[func_declaration]) | ||
model = GenerativeModel(model_name="gemini-1.5-pro-002", tools=[tools]) | ||
chat_session = model.start_chat() | ||
response = chat_session.send_message("What will be 1 multiplied by 2?") | ||
|
||
assert response is not None |
Uh oh!
There was an error while loading. Please reload this page.
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.
Gemini Flash is not working anymore with this code sample (see the log):
The actual response from the model is now:
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.
Created a general issue to initiate the discussion about current CI process.
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.
Thanks for reporting this, Valeriy-Burlaka. The Gemini Flash model appears to have been deprecated. The change to
gemini-1.5-pro-002
in the pull request reflects the current, supported model. Your created issue is the appropriate place to track the broader CI implications.