diff options
author | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
---|---|---|
committer | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
commit | 4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch) | |
tree | ee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/google/genai/client.py | |
parent | cc961e04ba734dd72309fb548a2f97d67d578813 (diff) | |
download | gn-ai-master.tar.gz |
Diffstat (limited to '.venv/lib/python3.12/site-packages/google/genai/client.py')
-rw-r--r-- | .venv/lib/python3.12/site-packages/google/genai/client.py | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/google/genai/client.py b/.venv/lib/python3.12/site-packages/google/genai/client.py new file mode 100644 index 00000000..f29bfe72 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/google/genai/client.py @@ -0,0 +1,281 @@ +# 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 +# +# http://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 Optional, Union + +import google.auth +import pydantic + +from ._api_client import ApiClient, HttpOptions, HttpOptionsDict +from ._replay_api_client import ReplayApiClient +from .batches import AsyncBatches, Batches +from .caches import AsyncCaches, Caches +from .chats import AsyncChats, Chats +from .files import AsyncFiles, Files +from .live import AsyncLive +from .models import AsyncModels, Models +from .tunings import AsyncTunings, Tunings + + +class AsyncClient: + """Client for making asynchronous (non-blocking) requests.""" + + def __init__(self, api_client: ApiClient): + + self._api_client = api_client + self._models = AsyncModels(self._api_client) + self._tunings = AsyncTunings(self._api_client) + self._caches = AsyncCaches(self._api_client) + self._batches = AsyncBatches(self._api_client) + self._files = AsyncFiles(self._api_client) + self._live = AsyncLive(self._api_client) + + @property + def models(self) -> AsyncModels: + return self._models + + @property + def tunings(self) -> AsyncTunings: + return self._tunings + + @property + def caches(self) -> AsyncCaches: + return self._caches + + @property + def batches(self) -> AsyncBatches: + return self._batches + + @property + def chats(self) -> AsyncChats: + return AsyncChats(modules=self.models) + + @property + def files(self) -> AsyncFiles: + return self._files + + @property + def live(self) -> AsyncLive: + return self._live + + +class DebugConfig(pydantic.BaseModel): + """Configuration options that change client network behavior when testing.""" + + client_mode: Optional[str] = pydantic.Field( + default_factory=lambda: os.getenv('GOOGLE_GENAI_CLIENT_MODE', None) + ) + + replays_directory: Optional[str] = pydantic.Field( + default_factory=lambda: os.getenv('GOOGLE_GENAI_REPLAYS_DIRECTORY', None) + ) + + replay_id: Optional[str] = pydantic.Field( + default_factory=lambda: os.getenv('GOOGLE_GENAI_REPLAY_ID', None) + ) + + +class Client: + """Client for making synchronous requests. + + Use this client to make a request to the Gemini Developer API or Vertex AI + API and then wait for the response. + + Attributes: + api_key: The `API key <https://ai.google.dev/gemini-api/docs/api-key>`_ to + use for authentication. Applies to the Gemini Developer API only. + vertexai: Indicates whether the client should use the Vertex AI + API endpoints. Defaults to False (uses Gemini Developer API endpoints). + Applies to the Vertex AI API only. + credentials: The credentials to use for authentication when calling the + Vertex AI APIs. Credentials can be obtained from environment variables and + default credentials. For more information, see + `Set up Application Default Credentials + <https://cloud.google.com/docs/authentication/provide-credentials-adc>`_. + Applies to the Vertex AI API only. + project: The `Google Cloud project ID <https://cloud.google.com/vertex-ai/docs/start/cloud-environment>`_ to + use for quota. Can be obtained from environment variables (for example, + ``GOOGLE_CLOUD_PROJECT``). Applies to the Vertex AI API only. + location: The `location <https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations>`_ + to send API requests to (for example, ``us-central1``). Can be obtained + from environment variables. Applies to the Vertex AI API only. + debug_config: Config settings that control network behavior of the client. + This is typically used when running test code. + http_options: Http options to use for the client. Response_payload can't be + set when passing to the client constructor. + + Usage for the Gemini Developer API: + + .. code-block:: python + + from google import genai + + client = genai.Client(api_key='my-api-key') + + Usage for the Vertex AI API: + + .. code-block:: python + + from google import genai + + client = genai.Client( + vertexai=True, project='my-project-id', location='us-central1' + ) + """ + + def __init__( + self, + *, + vertexai: Optional[bool] = None, + api_key: Optional[str] = None, + credentials: Optional[google.auth.credentials.Credentials] = None, + project: Optional[str] = None, + location: Optional[str] = None, + debug_config: Optional[DebugConfig] = None, + http_options: Optional[Union[HttpOptions, HttpOptionsDict]] = None, + ): + """Initializes the client. + + Args: + vertexai (bool): + Indicates whether the client should use the Vertex AI + API endpoints. Defaults to False (uses Gemini Developer API + endpoints). Applies to the Vertex AI API only. + api_key (str): + The `API key + <https://ai.google.dev/gemini-api/docs/api-key>`_ to use for + authentication. Applies to the Gemini Developer API only. + credentials (google.auth.credentials.Credentials): + The credentials to + use for authentication when calling the Vertex AI APIs. Credentials + can be obtained from environment variables and default credentials. + For more information, see `Set up Application Default Credentials + <https://cloud.google.com/docs/authentication/provide-credentials-adc>`_. + Applies to the Vertex AI API only. + project (str): + The `Google Cloud project ID + <https://cloud.google.com/vertex-ai/docs/start/cloud-environment>`_ to + use for quota. Can be obtained from environment variables (for + example, ``GOOGLE_CLOUD_PROJECT``). Applies to the Vertex AI API only. + location (str): + The `location + <https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations>`_ + to send API requests to (for example, ``us-central1``). Can be + obtained from environment variables. Applies to the Vertex AI API + only. + debug_config (DebugConfig): + Config settings that control network + behavior of the client. This is typically used when running test code. + http_options (Union[HttpOptions, HttpOptionsDict]): + Http options to use for the client. Response_payload can't be + set when passing to the client constructor. + """ + + self._debug_config = debug_config or DebugConfig() + + # Throw ValueError if response_payload is set in http_options due to + # unpredictable behavior when running multiple coroutines through + # client.aio. + if http_options and 'response_payload' in http_options: + raise ValueError( + 'Setting response_payload in http_options is not supported.' + ) + + self._api_client = self._get_api_client( + vertexai=vertexai, + api_key=api_key, + credentials=credentials, + project=project, + location=location, + debug_config=self._debug_config, + http_options=http_options, + ) + + self._aio = AsyncClient(self._api_client) + self._models = Models(self._api_client) + self._tunings = Tunings(self._api_client) + self._caches = Caches(self._api_client) + self._batches = Batches(self._api_client) + self._files = Files(self._api_client) + + @staticmethod + def _get_api_client( + vertexai: Optional[bool] = None, + api_key: Optional[str] = None, + credentials: Optional[google.auth.credentials.Credentials] = None, + project: Optional[str] = None, + location: Optional[str] = None, + debug_config: Optional[DebugConfig] = None, + http_options: Optional[HttpOptions] = None, + ): + if debug_config and debug_config.client_mode in [ + 'record', + 'replay', + 'auto', + ]: + return ReplayApiClient( + mode=debug_config.client_mode, + replay_id=debug_config.replay_id, + replays_directory=debug_config.replays_directory, + vertexai=vertexai, + api_key=api_key, + credentials=credentials, + project=project, + location=location, + http_options=http_options, + ) + + return ApiClient( + vertexai=vertexai, + api_key=api_key, + credentials=credentials, + project=project, + location=location, + http_options=http_options, + ) + + @property + def chats(self) -> Chats: + return Chats(modules=self.models) + + @property + def aio(self) -> AsyncClient: + return self._aio + + @property + def models(self) -> Models: + return self._models + + @property + def tunings(self) -> Tunings: + return self._tunings + + @property + def caches(self) -> Caches: + return self._caches + + @property + def batches(self) -> Batches: + return self._batches + + @property + def files(self) -> Files: + return self._files + + @property + def vertexai(self) -> bool: + """Returns whether the client is using the Vertex AI API.""" + return self._api_client.vertexai or False |