Fishjam Python Server SDK
  1try:
  2    from google import genai
  3    from google.auth.credentials import Credentials
  4    from google.genai import types
  5    from google.genai.client import DebugConfig
  6except ImportError:
  7    raise ImportError(
  8        "To use the Fishjam Gemini integration, you need to import the `gemini` extra. "
  9        "Install it with `pip install 'fishjam-server-sdk[gemini]'`"
 10    )
 11
 12from typing import Optional, Union
 13
 14from fishjam import AgentOutputOptions
 15from fishjam.agent import OutgoingAudioTrackOptions
 16from fishjam.events import TrackEncoding
 17from fishjam.version import get_version
 18
 19
 20def _get_headers():
 21    return {"x-goog-api-client": f"fishjam-python-server-sdk/{get_version()}"}
 22
 23
 24def _add_fishjam_header(
 25    http_options: Optional[Union[types.HttpOptions, types.HttpOptionsDict]],
 26) -> Union[types.HttpOptions, types.HttpOptionsDict]:
 27    if http_options is None:
 28        return _add_fishjam_header_none()
 29    if isinstance(http_options, types.HttpOptions):
 30        return _add_fishjam_header_object(http_options)
 31    return _add_fishjam_header_dict(http_options)
 32
 33
 34def _add_fishjam_header_object(http_options: types.HttpOptions) -> types.HttpOptions:
 35    http_options.headers = (http_options.headers or {}) | _get_headers()
 36    return http_options
 37
 38
 39def _add_fishjam_header_dict(
 40    http_options: types.HttpOptionsDict,
 41) -> types.HttpOptionsDict:
 42    headers = (http_options.get("headers") or {}) | _get_headers()
 43    return http_options | {"headers": headers}
 44
 45
 46def _add_fishjam_header_none() -> types.HttpOptionsDict:
 47    return {"headers": _get_headers()}
 48
 49
 50class _GeminiIntegration:
 51    def create_client(
 52        self,
 53        vertexai: Optional[bool] = None,
 54        api_key: Optional[str] = None,
 55        credentials: Optional[Credentials] = None,
 56        project: Optional[str] = None,
 57        location: Optional[str] = None,
 58        debug_config: Optional[DebugConfig] = None,
 59        http_options: Optional[Union[types.HttpOptions, types.HttpOptionsDict]] = None,
 60    ):
 61        """Creates and configures a Fishjam-compatible Google GenAI Client.
 62
 63        See `genai.Client` for configuration options.
 64
 65        Returns:
 66            genai.Client: An instantiated and configured Gemini client.
 67        """
 68        full_http_options = _add_fishjam_header(http_options)
 69
 70        return genai.Client(
 71            vertexai=vertexai,
 72            api_key=api_key,
 73            credentials=credentials,
 74            project=project,
 75            location=location,
 76            debug_config=debug_config,
 77            http_options=full_http_options,
 78        )
 79
 80    @property
 81    def GEMINI_INPUT_AUDIO_SETTINGS(self) -> AgentOutputOptions:
 82        """Audio configuration required for Gemini input.
 83
 84        Gemini consumes PCM16 audio at 16,000 Hz.
 85
 86        Returns:
 87            AgentOutputOptions: Agent options compatible with the Gemini Live API.
 88        """
 89        return AgentOutputOptions(
 90            audio_format="pcm16",
 91            audio_sample_rate=16_000,
 92        )
 93
 94    @property
 95    def GEMINI_OUTPUT_AUDIO_SETTINGS(self) -> OutgoingAudioTrackOptions:
 96        """Audio configuration for an agent's output track.
 97
 98        Gemini produces PCM16 audio at 24,000 Hz.
 99
100        Returns:
101            OutgoingAudioTrackOptions: Track options compatible with the Gemini Live API
102        """
103        return OutgoingAudioTrackOptions(
104            encoding=TrackEncoding.TRACK_ENCODING_PCM16,
105            sample_rate=24_000,
106            channels=1,
107        )
108
109    @property
110    def GEMINI_AUDIO_MIME_TYPE(self) -> str:
111        """The mime type for Gemini audio input."""
112        return "audio/pcm;rate=16000"
113
114
115GeminiIntegration = _GeminiIntegration()
116"""Integration with the Gemini Live API."""
GeminiIntegration = <fishjam.integrations.gemini._GeminiIntegration object>

Integration with the Gemini Live API.