Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions packages/bigframes/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
*.py[cod]
*.sw[op]

# C extensions
*.so

# Packages
*.egg
*.egg-info
dist
build
eggs
.eggs
parts
bin
var
sdist
develop-eggs
.installed.cfg
lib
lib64
__pycache__

# Installer logs
pip-log.txt

# Unit test / coverage reports
.coverage
.nox
.cache
.pytest_cache


# Mac
.DS_Store

# JetBrains
.idea

# VS Code
.vscode

# emacs
*~

# Built documentation
docs/_build
**/docs/_build
docs.metadata

# Virtual environment
env/
venv/

# Test logs
coverage.xml
*sponge_log.xml

# System test environment variables.
**/system_tests/local_test_setup
**/system_tests/data

# Make sure a generated file isn't accidentally committed.
pylintrc
pylintrc.test

# Ruff cache
.ruff_cache

# Bazel (created in packages/gapic-generator)
bazel-bin
bazel-gapic-generator
bazel-out
bazel-testlogs
20 changes: 20 additions & 0 deletions packages/bigframes/bigframes/_config/compute_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,26 @@ class ComputeOptions:
int | None: Number of rows, if set.
"""

semantic_ops_confirmation_threshold: Optional[int] = 0
"""
Deprecated.

.. deprecated:: 1.42.0
Semantic operators are deprecated. Please use the functions in
:mod:`bigframes.bigquery.ai` instead.

"""

semantic_ops_threshold_autofail = False
"""
Deprecated.

.. deprecated:: 1.42.0
Semantic operators are deprecated. Please use the functions in
:mod:`bigframes.bigquery.ai` instead.

"""

def assign_extra_query_labels(self, **kwargs: Any) -> None:
"""
Assigns additional custom labels for query configuration. The method updates the
Expand Down
43 changes: 43 additions & 0 deletions packages/bigframes/bigframes/_config/experiment_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,52 @@ class ExperimentOptions:
"""

def __init__(self):
self._semantic_operators: bool = False
self._ai_operators: bool = False
self._sql_compiler: Literal["legacy", "stable", "experimental"] = "stable"
self._enable_python_transpiler: bool = False

@property
def semantic_operators(self) -> bool:
"""Deprecated.

**Examples:**

>>> import bigframes.pandas as bpd
>>> bpd.options.experiments.semantic_operators = True # doctest: +SKIP
"""
return self._semantic_operators

@semantic_operators.setter
def semantic_operators(self, value: bool):
if value is True:
msg = bfe.format_message(
"Semantic operators are deprecated, and will be removed in the future"
)
warnings.warn(msg, category=FutureWarning)
self._semantic_operators = value

@property
def ai_operators(self) -> bool:
"""If True, allow using the AI operators.

**Examples:**

>>> import bigframes.pandas as bpd
>>> bpd.options.experiments.ai_operators = True # doctest: +SKIP
"""
return self._ai_operators

@ai_operators.setter
def ai_operators(self, value: bool):
if value is True:
msg = bfe.format_message(
"AI operators are still under experiments, and are subject "
"to change in the future."
)
warnings.warn(msg, category=bfe.PreviewWarning)
self._ai_operators = value

@property
def sql_compiler(self) -> Literal["legacy", "stable", "experimental"]:
"""Set to 'experimental' to try out the latest in compilation experiments..
Expand Down
19 changes: 19 additions & 0 deletions packages/bigframes/bigframes/dataframe.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,9 @@
import bigframes.functions
import bigframes.operations as ops
import bigframes.operations.aggregations as agg_ops
import bigframes.operations.ai
import bigframes.operations.plotting as plotting
import bigframes.operations.semantics
import bigframes.operations.structs
import bigframes.series
import bigframes.session._io.bigquery
Expand Down Expand Up @@ -5284,3 +5286,20 @@ def _throw_if_null_index(self, opname: str):
raise bigframes.exceptions.NullIndexError(
f"DataFrame cannot perform {opname} as it has no index. Set an index using set_index."
)

@property
def semantics(self):
msg = bfe.format_message(
"The 'semantics' property will be removed. Please use 'bigframes.bigquery.ai' instead."
)
warnings.warn(msg, category=FutureWarning)
return bigframes.operations.semantics.Semantics(self)

@property
def ai(self):
"""Returns the accessor for AI operators."""
msg = bfe.format_message(
"The 'ai' property will be removed. Please use 'bigframes.bigquery.ai' instead."
)
warnings.warn(msg, category=FutureWarning)
return bigframes.operations.ai.AIAccessor(self)
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

from bigframes import series, session
from bigframes.core import col, sentinels
from bigframes.extensions.core import abstract_series_accessor, series_mixins
from bigframes.extensions.core import abstract_series_accessor, series_tvf_mixins

T = TypeVar("T")
S = TypeVar("S")
Expand Down Expand Up @@ -1112,7 +1112,7 @@ def unix_date(
return self._to_series(cast(series.Series, result))


class AiSeriesAccessor(series_mixins.AIMixin[T, S]):
class AiSeriesAccessor(series_tvf_mixins.AITVFMixin[T, S]):
"""Series accessor for BigQuery ai functions."""


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,19 @@

from __future__ import annotations

from typing import Any, List, Literal, Mapping, TypeVar
from typing import List, Mapping, TypeVar

import pandas as pd

from bigframes import series
from bigframes import session as bf_session
from bigframes.bigquery import ai
from bigframes import session
from bigframes.extensions.core import abstract_series_accessor
from bigframes.ml import base as ml_base

T = TypeVar("T")
S = TypeVar("S")


class AIMixin(abstract_series_accessor.AbstractBigQuerySeriesAccessor[T, S]):
class AITVFMixin(abstract_series_accessor.AbstractBigQuerySeriesAccessor[T, S]):
def generate_embedding(
self,
model: ml_base.BaseEstimator | str | pd.Series,
Expand All @@ -39,17 +37,18 @@ def generate_embedding(
end_second: float | None = None,
interval_seconds: float | None = None,
trial_id: int | None = None,
session: bf_session.Session | None = None,
session: session.Session | None = None,
) -> T:
"""
Creates embeddings that describe an entity — for example, a piece of text or an image.

This is an accessor for :func:`bigframes.bigquery.ai.generate_embedding`. See that
function's documentation for detailed parameter descriptions and examples.
"""
import bigframes.bigquery.ai

bf_series = self._bf_from_series(session)
result = ai.generate_embedding(
result = bigframes.bigquery.ai.generate_embedding(
model,
bf_series,
output_dimensionality=output_dimensionality,
Expand All @@ -72,16 +71,18 @@ def generate_text(
stop_sequences: List[str] | None = None,
ground_with_google_search: bool | None = None,
request_type: str | None = None,
session: bf_session.Session | None = None,
session: session.Session | None = None,
) -> T:
"""
Generates text using a BigQuery ML model.

This is an accessor for :func:`bigframes.bigquery.ai.generate_text`. See that
function's documentation for detailed parameter descriptions and examples.
"""
import bigframes.bigquery.ai

bf_series = self._bf_from_series(session)
result = ai.generate_text(
result = bigframes.bigquery.ai.generate_text(
model,
bf_series,
temperature=temperature,
Expand All @@ -104,16 +105,18 @@ def generate_table(
max_output_tokens: int | None = None,
stop_sequences: List[str] | None = None,
request_type: str | None = None,
session: bf_session.Session | None = None,
session: session.Session | None = None,
) -> T:
"""
Generates a table using a BigQuery ML model.

This is an accessor for :func:`bigframes.bigquery.ai.generate_table`. See that
function's documentation for detailed parameter descriptions and examples.
"""
import bigframes.bigquery.ai

bf_series = self._bf_from_series(session)
result = ai.generate_table(
result = bigframes.bigquery.ai.generate_table(
model,
bf_series,
output_schema=output_schema,
Expand All @@ -124,73 +127,3 @@ def generate_table(
request_type=request_type,
)
return self._to_dataframe(result)

def embed(
self,
*,
endpoint: str | None = None,
model: str | None = None,
task_type: (
Literal[
"retrieval_query",
"retrieval_document",
"semantic_similarity",
"classification",
"clustering",
"question_answering",
"fact_verification",
"code_retrieval_query",
]
| None
) = None,
title: str | None = None,
model_params: Mapping[Any, Any] | None = None,
connection_id: str | None = None,
session: bf_session.Session | None = None,
) -> S:
"""
Creates embeddings from text or image data in BigQuery.

This is an accessor for :func:`bigframes.bigquery.ai.embed`. See that
function's documentation for detailed parameter descriptions and examples.
"""

bf_series = self._bf_from_series(session)
result = ai.embed(
bf_series,
endpoint=endpoint,
model=model,
task_type=task_type,
title=title,
model_params=model_params,
connection_id=connection_id,
)
return self._to_series(result)

def similarity(
self,
other: str | series.Series | pd.Series,
*,
endpoint: str | None = None,
model: str | None = None,
model_params: Mapping[Any, Any] | None = None,
connection_id: str | None = None,
session: bf_session.Session | None = None,
) -> S:
"""
Returns a FLOAT64 value that represents the cosine similarity between the two inputs.

This is an accessor for :func:`bigframes.bigquery.ai.similarity`. See that
function's documentation for detailed parameter descriptions and examples.
"""

bf_series = self._bf_from_series(session)
result = ai.similarity(
bf_series,
other,
endpoint=endpoint,
model=model,
model_params=model_params,
connection_id=connection_id,
)
return self._to_series(result)
Loading
Loading