From 3ea40661b7f8271a8b080566f746a8bbe98418a8 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Tue, 3 Dec 2024 00:16:38 +0000 Subject: [PATCH 01/11] docs(bigquery): update minor parts in base.py --- bigframes/ml/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bigframes/ml/base.py b/bigframes/ml/base.py index 4058647adb..5662e54d6d 100644 --- a/bigframes/ml/base.py +++ b/bigframes/ml/base.py @@ -33,7 +33,7 @@ class BaseEstimator(bigframes_vendored.sklearn.base.BaseEstimator, abc.ABC): """ - A BigQuery DataFrames machine learning component follows sklearn API + A BigQuery DataFrames machine learning component following the SKLearn API design Ref: https://bit.ly/3NyhKjN The estimator is the fundamental abstraction for all learning components. This includes learning From c70806789be950ca96651782c845d148a98d3c9b Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Tue, 3 Dec 2024 00:20:51 +0000 Subject: [PATCH 02/11] docs(bigquery): update minor changes for bigframes/ml/base.py --- bigframes/ml/base.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bigframes/ml/base.py b/bigframes/ml/base.py index 5662e54d6d..d89837b01d 100644 --- a/bigframes/ml/base.py +++ b/bigframes/ml/base.py @@ -33,7 +33,11 @@ class BaseEstimator(bigframes_vendored.sklearn.base.BaseEstimator, abc.ABC): """ +<<<<<<< HEAD A BigQuery DataFrames machine learning component following the SKLearn API +======= + A BigQuery DataFrames machine learning component follows sklearn API +>>>>>>> c9318d02 (docs(bigquery): update minor changes for bigframes/ml/base.py) design Ref: https://bit.ly/3NyhKjN The estimator is the fundamental abstraction for all learning components. This includes learning From d00cb6583ba5401e4a9056a7bfb5781418bc665f Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Wed, 11 Dec 2024 18:29:19 +0000 Subject: [PATCH 03/11] feat: Update lUpdate GeminiTextGenerator Tuning and Support score() method in Gemini-pro-1.5 \n Bug: b/381936588 and b/344891364 --- bigframes/ml/llm.py | 20 +++++++------------- tests/system/small/ml/test_llm.py | 2 +- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/bigframes/ml/llm.py b/bigframes/ml/llm.py index 9b7228fe83..ea6a6d3cf7 100644 --- a/bigframes/ml/llm.py +++ b/bigframes/ml/llm.py @@ -895,8 +895,7 @@ def fit( X: utils.ArrayType, y: utils.ArrayType, ) -> GeminiTextGenerator: - """Fine tune GeminiTextGenerator model. Only support "gemini-pro", "gemini-1.5-pro-002", - "gemini-1.5-flash-002" models for now. + """Fine tune GeminiTextGenerator model. Only support "gemini-pro" model for now. .. note:: @@ -914,11 +913,8 @@ def fit( Returns: GeminiTextGenerator: Fitted estimator. """ - if self.model_name not in _GEMINI_FINE_TUNE_SCORE_ENDPOINTS: - raise NotImplementedError( - "fit() only supports gemini-pro, \ - gemini-1.5-pro-002, or gemini-1.5-flash-002 model." - ) + if self._bqml_model.model_name.startswith("gemini-1.5"): + raise NotImplementedError("Fit is not supported for gemini-1.5 model.") X, y = utils.batch_convert_to_dataframe(X, y) @@ -1036,7 +1032,7 @@ def score( "text_generation", "classification", "summarization", "question_answering" ] = "text_generation", ) -> bpd.DataFrame: - """Calculate evaluation metrics of the model. Only support "gemini-pro" and "gemini-1.5-pro-002", and "gemini-1.5-flash-002". + """Calculate evaluation metrics of the model. Only "gemini-pro" model is supported for now. .. note:: @@ -1068,11 +1064,9 @@ def score( if not self._bqml_model: raise RuntimeError("A model must be fitted before score") - if self.model_name not in _GEMINI_FINE_TUNE_SCORE_ENDPOINTS: - raise NotImplementedError( - "score() only supports gemini-pro \ - , gemini-1.5-pro-002, and gemini-1.5-flash-2 model." - ) + # TODO(ashleyxu): Support gemini-1.5 when the rollout is ready. b/344891364. + if self._bqml_model.model_name.startswith("gemini-1.5"): + raise NotImplementedError("Score is not supported for gemini-1.5 model.") X, y = utils.batch_convert_to_dataframe(X, y, session=self._bqml_model.session) diff --git a/tests/system/small/ml/test_llm.py b/tests/system/small/ml/test_llm.py index a82be38017..fe7c1225f8 100644 --- a/tests/system/small/ml/test_llm.py +++ b/tests/system/small/ml/test_llm.py @@ -425,7 +425,7 @@ def test_llm_palm_score_params(llm_fine_tune_df_default_index): "gemini-1.5-flash-002", ), ) -def test_llm_gemini_score(llm_fine_tune_df_default_index, model_name): +def test_llm_gemini_pro_score(model_name, llm_fine_tune_df_default_index): model = llm.GeminiTextGenerator(model_name=model_name) # Check score to ensure the model was fitted From ed29763cc5637dd3db6b35df540ed11283bc8afc Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Wed, 11 Dec 2024 18:46:06 +0000 Subject: [PATCH 04/11] feat: Update lUpdate GeminiTextGenerator Tuning and Support score() method in Gemini-pro-1.5 \n Bug: b/381936588 and b/344891364 --- bigframes/ml/llm.py | 7 +++++-- tests/system/small/ml/test_llm.py | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/bigframes/ml/llm.py b/bigframes/ml/llm.py index ea6a6d3cf7..db1732f412 100644 --- a/bigframes/ml/llm.py +++ b/bigframes/ml/llm.py @@ -913,8 +913,11 @@ def fit( Returns: GeminiTextGenerator: Fitted estimator. """ - if self._bqml_model.model_name.startswith("gemini-1.5"): - raise NotImplementedError("Fit is not supported for gemini-1.5 model.") + supported_models = ["gemini-pro", "gemini-1.5-pro-002", "gemini-1.5-flash-002"] + if self.model_name not in supported_models: + raise NotImplementedError( + "Score is not supported models other than gemini-pro or gemini-1.5 model." + ) X, y = utils.batch_convert_to_dataframe(X, y) diff --git a/tests/system/small/ml/test_llm.py b/tests/system/small/ml/test_llm.py index fe7c1225f8..e17a81a7dd 100644 --- a/tests/system/small/ml/test_llm.py +++ b/tests/system/small/ml/test_llm.py @@ -417,6 +417,7 @@ def test_llm_palm_score_params(llm_fine_tune_df_default_index): ) +# test score() function for "gemini-pro" and "gemini-1.5" model @pytest.mark.parametrize( "model_name", ( @@ -425,7 +426,7 @@ def test_llm_palm_score_params(llm_fine_tune_df_default_index): "gemini-1.5-flash-002", ), ) -def test_llm_gemini_pro_score(model_name, llm_fine_tune_df_default_index): +def test_llm_gemini_score(llm_fine_tune_df_default_index, model_name): model = llm.GeminiTextGenerator(model_name=model_name) # Check score to ensure the model was fitted From 11e219a0693861707de0b1983e1064e5aba34a05 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Wed, 11 Dec 2024 23:46:34 +0000 Subject: [PATCH 05/11] update testcase and docs for better clarification --- bigframes/ml/llm.py | 17 ++++++++++++++++- tests/system/small/ml/test_llm.py | 1 - 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/bigframes/ml/llm.py b/bigframes/ml/llm.py index db1732f412..0b40c7e329 100644 --- a/bigframes/ml/llm.py +++ b/bigframes/ml/llm.py @@ -895,7 +895,12 @@ def fit( X: utils.ArrayType, y: utils.ArrayType, ) -> GeminiTextGenerator: +<<<<<<< HEAD """Fine tune GeminiTextGenerator model. Only support "gemini-pro" model for now. +======= + """Fine tune GeminiTextGenerator model. Only support "gemini-pro", "gemini-1.5-pro-002", + "gemini-1.5-flash-002" models for now. +>>>>>>> 8be16d3b (update testcase and docs for better clarification) .. note:: @@ -916,7 +921,8 @@ def fit( supported_models = ["gemini-pro", "gemini-1.5-pro-002", "gemini-1.5-flash-002"] if self.model_name not in supported_models: raise NotImplementedError( - "Score is not supported models other than gemini-pro or gemini-1.5 model." + "Score is not supported for models other than gemini-pro, \ + gemini-1.5-pro-002, or gemini-1.5-flash-002 model." ) X, y = utils.batch_convert_to_dataframe(X, y) @@ -1067,9 +1073,18 @@ def score( if not self._bqml_model: raise RuntimeError("A model must be fitted before score") +<<<<<<< HEAD # TODO(ashleyxu): Support gemini-1.5 when the rollout is ready. b/344891364. if self._bqml_model.model_name.startswith("gemini-1.5"): raise NotImplementedError("Score is not supported for gemini-1.5 model.") +======= + supported_models = ["gemini-pro", "gemini-1.5-pro-002", "gemini-1.5-flash-002"] + if self.model_name not in supported_models: + raise NotImplementedError( + "Score is not supported models other than gemini-pro \ + , gemini-1.5-pro-002, or gemini-1.5-flash-2 model." + ) +>>>>>>> 8be16d3b (update testcase and docs for better clarification) X, y = utils.batch_convert_to_dataframe(X, y, session=self._bqml_model.session) diff --git a/tests/system/small/ml/test_llm.py b/tests/system/small/ml/test_llm.py index e17a81a7dd..a82be38017 100644 --- a/tests/system/small/ml/test_llm.py +++ b/tests/system/small/ml/test_llm.py @@ -417,7 +417,6 @@ def test_llm_palm_score_params(llm_fine_tune_df_default_index): ) -# test score() function for "gemini-pro" and "gemini-1.5" model @pytest.mark.parametrize( "model_name", ( From 42fb6e19b66ef7fe358db8333e744d916110e534 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Tue, 3 Dec 2024 00:16:38 +0000 Subject: [PATCH 06/11] docs(bigquery): update minor parts in base.py --- bigframes/ml/base.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/bigframes/ml/base.py b/bigframes/ml/base.py index d89837b01d..4058647adb 100644 --- a/bigframes/ml/base.py +++ b/bigframes/ml/base.py @@ -33,11 +33,7 @@ class BaseEstimator(bigframes_vendored.sklearn.base.BaseEstimator, abc.ABC): """ -<<<<<<< HEAD - A BigQuery DataFrames machine learning component following the SKLearn API -======= A BigQuery DataFrames machine learning component follows sklearn API ->>>>>>> c9318d02 (docs(bigquery): update minor changes for bigframes/ml/base.py) design Ref: https://bit.ly/3NyhKjN The estimator is the fundamental abstraction for all learning components. This includes learning From da5bca0e6533f376606ee32b400d0b33e976920c Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Thu, 12 Dec 2024 20:23:51 +0000 Subject: [PATCH 07/11] fix syntax issue --- bigframes/ml/llm.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/bigframes/ml/llm.py b/bigframes/ml/llm.py index 0b40c7e329..8c8f73817a 100644 --- a/bigframes/ml/llm.py +++ b/bigframes/ml/llm.py @@ -79,7 +79,16 @@ _GEMINI_1P5_PRO_FLASH_PREVIEW_ENDPOINT, _GEMINI_2_FLASH_EXP_ENDPOINT, ) +<<<<<<< HEAD _GEMINI_FINE_TUNE_SCORE_ENDPOINTS = ( +======= +_GEMINI_FINE_TUNE_ENDPOINTS = ( + _GEMINI_PRO_ENDPOINT, + _GEMINI_1P5_PRO_002_ENDPOINT, + _GEMINI_1P5_FLASH_002_ENDPOINT, +) +_GEMINI_SCORE_ENDPOINTS = ( +>>>>>>> ed001b82 (fix syntax issue) _GEMINI_PRO_ENDPOINT, _GEMINI_1P5_PRO_002_ENDPOINT, _GEMINI_1P5_FLASH_002_ENDPOINT, @@ -918,10 +927,9 @@ def fit( Returns: GeminiTextGenerator: Fitted estimator. """ - supported_models = ["gemini-pro", "gemini-1.5-pro-002", "gemini-1.5-flash-002"] - if self.model_name not in supported_models: + if self.model_name not in _GEMINI_FINE_TUNE_ENDPOINTS: raise NotImplementedError( - "Score is not supported for models other than gemini-pro, \ + "fit() only supports gemini-pro, \ gemini-1.5-pro-002, or gemini-1.5-flash-002 model." ) @@ -1041,7 +1049,11 @@ def score( "text_generation", "classification", "summarization", "question_answering" ] = "text_generation", ) -> bpd.DataFrame: +<<<<<<< HEAD """Calculate evaluation metrics of the model. Only "gemini-pro" model is supported for now. +======= + """Calculate evaluation metrics of the model. Only support "gemini-pro" and "gemini-1.5-pro-002", and "gemini-1.5-flash-002". +>>>>>>> ed001b82 (fix syntax issue) .. note:: @@ -1073,6 +1085,7 @@ def score( if not self._bqml_model: raise RuntimeError("A model must be fitted before score") +<<<<<<< HEAD <<<<<<< HEAD # TODO(ashleyxu): Support gemini-1.5 when the rollout is ready. b/344891364. if self._bqml_model.model_name.startswith("gemini-1.5"): @@ -1080,9 +1093,12 @@ def score( ======= supported_models = ["gemini-pro", "gemini-1.5-pro-002", "gemini-1.5-flash-002"] if self.model_name not in supported_models: +======= + if self.model_name not in _GEMINI_SCORE_ENDPOINTS: +>>>>>>> ed001b82 (fix syntax issue) raise NotImplementedError( - "Score is not supported models other than gemini-pro \ - , gemini-1.5-pro-002, or gemini-1.5-flash-2 model." + "score() only supports gemini-pro \ + , gemini-1.5-pro-002, and gemini-1.5-flash-2 model." ) >>>>>>> 8be16d3b (update testcase and docs for better clarification) From e73dd642d9455d7d53212b53eafedf361213a2f6 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Mon, 16 Dec 2024 20:04:16 +0000 Subject: [PATCH 08/11] add bq studio supports for files under foldger gen_ai --- .../generative_ai/bq_dataframes_llm_code_generation.ipynb | 8 +++++++- notebooks/generative_ai/bq_dataframes_llm_kmeans.ipynb | 8 +++++++- .../bq_dataframes_ml_drug_name_generation.ipynb | 8 +++++++- .../getting_started/getting_started_bq_dataframes.ipynb | 8 +++++++- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/notebooks/generative_ai/bq_dataframes_llm_code_generation.ipynb b/notebooks/generative_ai/bq_dataframes_llm_code_generation.ipynb index f56472f1b5..97a67a6d16 100644 --- a/notebooks/generative_ai/bq_dataframes_llm_code_generation.ipynb +++ b/notebooks/generative_ai/bq_dataframes_llm_code_generation.ipynb @@ -49,7 +49,13 @@ " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", - " \n", + " \n", + " \n", + " \n", + " \"BQ\n", + " Open in BQ Studio\n", + " \n", + " \n", "" ] }, diff --git a/notebooks/generative_ai/bq_dataframes_llm_kmeans.ipynb b/notebooks/generative_ai/bq_dataframes_llm_kmeans.ipynb index d49a44a780..b9a9c6723b 100644 --- a/notebooks/generative_ai/bq_dataframes_llm_kmeans.ipynb +++ b/notebooks/generative_ai/bq_dataframes_llm_kmeans.ipynb @@ -46,7 +46,13 @@ " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", - " \n", + " \n", + " \n", + " \n", + " \"BQ\n", + " Open in BQ Studio\n", + " \n", + " \n", "" ] }, diff --git a/notebooks/generative_ai/bq_dataframes_ml_drug_name_generation.ipynb b/notebooks/generative_ai/bq_dataframes_ml_drug_name_generation.ipynb index 32e6cb7924..4c589abf95 100644 --- a/notebooks/generative_ai/bq_dataframes_ml_drug_name_generation.ipynb +++ b/notebooks/generative_ai/bq_dataframes_ml_drug_name_generation.ipynb @@ -48,7 +48,13 @@ " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", - " \n", + " \n", + " \n", + " \n", + " \"BQ\n", + " Open in BQ Studio\n", + " \n", + " \n", "" ] }, diff --git a/notebooks/getting_started/getting_started_bq_dataframes.ipynb b/notebooks/getting_started/getting_started_bq_dataframes.ipynb index e79db455fc..f0cc61d8d2 100644 --- a/notebooks/getting_started/getting_started_bq_dataframes.ipynb +++ b/notebooks/getting_started/getting_started_bq_dataframes.ipynb @@ -49,7 +49,13 @@ " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", - " \n", + " \n", + " \n", + " \n", + " \"BQ\n", + " Open in BQ Studio\n", + " \n", + " \n", "" ] }, From bef757cb6701adbbb6857a8875de770933b2ced9 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Mon, 16 Dec 2024 20:24:07 +0000 Subject: [PATCH 09/11] reset cropped file --- bigframes/ml/llm.py | 32 ++------------------------------ 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/bigframes/ml/llm.py b/bigframes/ml/llm.py index 8c8f73817a..9b7228fe83 100644 --- a/bigframes/ml/llm.py +++ b/bigframes/ml/llm.py @@ -79,16 +79,7 @@ _GEMINI_1P5_PRO_FLASH_PREVIEW_ENDPOINT, _GEMINI_2_FLASH_EXP_ENDPOINT, ) -<<<<<<< HEAD _GEMINI_FINE_TUNE_SCORE_ENDPOINTS = ( -======= -_GEMINI_FINE_TUNE_ENDPOINTS = ( - _GEMINI_PRO_ENDPOINT, - _GEMINI_1P5_PRO_002_ENDPOINT, - _GEMINI_1P5_FLASH_002_ENDPOINT, -) -_GEMINI_SCORE_ENDPOINTS = ( ->>>>>>> ed001b82 (fix syntax issue) _GEMINI_PRO_ENDPOINT, _GEMINI_1P5_PRO_002_ENDPOINT, _GEMINI_1P5_FLASH_002_ENDPOINT, @@ -904,12 +895,8 @@ def fit( X: utils.ArrayType, y: utils.ArrayType, ) -> GeminiTextGenerator: -<<<<<<< HEAD - """Fine tune GeminiTextGenerator model. Only support "gemini-pro" model for now. -======= """Fine tune GeminiTextGenerator model. Only support "gemini-pro", "gemini-1.5-pro-002", "gemini-1.5-flash-002" models for now. ->>>>>>> 8be16d3b (update testcase and docs for better clarification) .. note:: @@ -927,7 +914,7 @@ def fit( Returns: GeminiTextGenerator: Fitted estimator. """ - if self.model_name not in _GEMINI_FINE_TUNE_ENDPOINTS: + if self.model_name not in _GEMINI_FINE_TUNE_SCORE_ENDPOINTS: raise NotImplementedError( "fit() only supports gemini-pro, \ gemini-1.5-pro-002, or gemini-1.5-flash-002 model." @@ -1049,11 +1036,7 @@ def score( "text_generation", "classification", "summarization", "question_answering" ] = "text_generation", ) -> bpd.DataFrame: -<<<<<<< HEAD - """Calculate evaluation metrics of the model. Only "gemini-pro" model is supported for now. -======= """Calculate evaluation metrics of the model. Only support "gemini-pro" and "gemini-1.5-pro-002", and "gemini-1.5-flash-002". ->>>>>>> ed001b82 (fix syntax issue) .. note:: @@ -1085,22 +1068,11 @@ def score( if not self._bqml_model: raise RuntimeError("A model must be fitted before score") -<<<<<<< HEAD -<<<<<<< HEAD - # TODO(ashleyxu): Support gemini-1.5 when the rollout is ready. b/344891364. - if self._bqml_model.model_name.startswith("gemini-1.5"): - raise NotImplementedError("Score is not supported for gemini-1.5 model.") -======= - supported_models = ["gemini-pro", "gemini-1.5-pro-002", "gemini-1.5-flash-002"] - if self.model_name not in supported_models: -======= - if self.model_name not in _GEMINI_SCORE_ENDPOINTS: ->>>>>>> ed001b82 (fix syntax issue) + if self.model_name not in _GEMINI_FINE_TUNE_SCORE_ENDPOINTS: raise NotImplementedError( "score() only supports gemini-pro \ , gemini-1.5-pro-002, and gemini-1.5-flash-2 model." ) ->>>>>>> 8be16d3b (update testcase and docs for better clarification) X, y = utils.batch_convert_to_dataframe(X, y, session=self._bqml_model.session) From bddc853ad0f899e7d14d5a9c79c9bf08368ef902 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Mon, 16 Dec 2024 21:29:41 +0000 Subject: [PATCH 10/11] add bq studio supports for the remainging files --- .../getting_started/ml_fundamentals_bq_dataframes.ipynb | 8 +++++++- .../remote_function_vertex_claude_model.ipynb | 8 +++++++- .../visualization/bq_dataframes_covid_line_graphs.ipynb | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/notebooks/getting_started/ml_fundamentals_bq_dataframes.ipynb b/notebooks/getting_started/ml_fundamentals_bq_dataframes.ipynb index e7b69f017b..d8e277d6a8 100644 --- a/notebooks/getting_started/ml_fundamentals_bq_dataframes.ipynb +++ b/notebooks/getting_started/ml_fundamentals_bq_dataframes.ipynb @@ -49,7 +49,13 @@ " \"Vertex\n", " Open in Vertex AI Workbench\n", " \n", - " \n", + " \n", + " \n", + " \n", + " \"BQ\n", + " Open in BQ Studio\n", + " \n", + " \n", "" ] }, diff --git a/notebooks/remote_functions/remote_function_vertex_claude_model.ipynb b/notebooks/remote_functions/remote_function_vertex_claude_model.ipynb index b6c9029a01..c450f563c2 100644 --- a/notebooks/remote_functions/remote_function_vertex_claude_model.ipynb +++ b/notebooks/remote_functions/remote_function_vertex_claude_model.ipynb @@ -18,7 +18,13 @@ " \"GitHub\n", " View on GitHub\n", " \n", - " \n", + " \n", + " \n", + " \n", + " \"BQ\n", + " Open in BQ Studio\n", + " \n", + " \n", "" ] }, diff --git a/notebooks/visualization/bq_dataframes_covid_line_graphs.ipynb b/notebooks/visualization/bq_dataframes_covid_line_graphs.ipynb index 40efe9d18c..9e44a0a5c1 100644 --- a/notebooks/visualization/bq_dataframes_covid_line_graphs.ipynb +++ b/notebooks/visualization/bq_dataframes_covid_line_graphs.ipynb @@ -43,7 +43,13 @@ " \"GitHub\n", " View on GitHub\n", " \n", - " \n", + " \n", + " \n", + " \n", + " \"BQ\n", + " Open in BQ Studio\n", + " \n", + " \n", "" ] }, From 34d74d0e41b1d9d24ba5dc51522e9dc328d54257 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Mon, 16 Dec 2024 22:42:16 +0000 Subject: [PATCH 11/11] fix a wrong link --- notebooks/generative_ai/bq_dataframes_llm_code_generation.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebooks/generative_ai/bq_dataframes_llm_code_generation.ipynb b/notebooks/generative_ai/bq_dataframes_llm_code_generation.ipynb index 97a67a6d16..c7c302e5a9 100644 --- a/notebooks/generative_ai/bq_dataframes_llm_code_generation.ipynb +++ b/notebooks/generative_ai/bq_dataframes_llm_code_generation.ipynb @@ -51,7 +51,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \"BQ\n", " Open in BQ Studio\n", " \n",