livekit-plugins-google 0.3.0__py3-none-any.whl → 1.3.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- livekit/plugins/google/__init__.py +25 -7
- livekit/plugins/google/beta/__init__.py +13 -0
- livekit/plugins/google/beta/gemini_tts.py +258 -0
- livekit/plugins/google/llm.py +501 -0
- livekit/plugins/google/log.py +3 -0
- livekit/plugins/google/models.py +145 -31
- livekit/plugins/google/realtime/__init__.py +9 -0
- livekit/plugins/google/realtime/api_proto.py +66 -0
- livekit/plugins/google/realtime/realtime_api.py +1252 -0
- livekit/plugins/google/stt.py +518 -272
- livekit/plugins/google/tools.py +11 -0
- livekit/plugins/google/tts.py +447 -0
- livekit/plugins/google/utils.py +286 -0
- livekit/plugins/google/version.py +1 -1
- livekit_plugins_google-1.3.8.dist-info/METADATA +63 -0
- livekit_plugins_google-1.3.8.dist-info/RECORD +18 -0
- {livekit_plugins_google-0.3.0.dist-info → livekit_plugins_google-1.3.8.dist-info}/WHEEL +1 -2
- livekit_plugins_google-0.3.0.dist-info/METADATA +0 -47
- livekit_plugins_google-0.3.0.dist-info/RECORD +0 -9
- livekit_plugins_google-0.3.0.dist-info/top_level.txt +0 -1
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from copy import deepcopy
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from pydantic import TypeAdapter
|
|
8
|
+
|
|
9
|
+
from google.genai import types
|
|
10
|
+
from livekit.agents import llm
|
|
11
|
+
from livekit.agents.llm import utils as llm_utils
|
|
12
|
+
from livekit.agents.llm.tool_context import (
|
|
13
|
+
FunctionTool,
|
|
14
|
+
RawFunctionTool,
|
|
15
|
+
get_raw_function_info,
|
|
16
|
+
is_function_tool,
|
|
17
|
+
is_raw_function_tool,
|
|
18
|
+
)
|
|
19
|
+
from livekit.agents.types import NOT_GIVEN, NotGivenOr
|
|
20
|
+
from livekit.agents.utils import is_given
|
|
21
|
+
|
|
22
|
+
from .log import logger
|
|
23
|
+
from .tools import _LLMTool
|
|
24
|
+
|
|
25
|
+
__all__ = ["to_fnc_ctx"]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def to_fnc_ctx(
|
|
29
|
+
fncs: list[FunctionTool | RawFunctionTool],
|
|
30
|
+
*,
|
|
31
|
+
use_parameters_json_schema: bool = True,
|
|
32
|
+
tool_behavior: NotGivenOr[types.Behavior] = NOT_GIVEN,
|
|
33
|
+
) -> list[types.FunctionDeclaration]:
|
|
34
|
+
tools: list[types.FunctionDeclaration] = []
|
|
35
|
+
for fnc in fncs:
|
|
36
|
+
if is_raw_function_tool(fnc):
|
|
37
|
+
info = get_raw_function_info(fnc)
|
|
38
|
+
fnc_kwargs = {
|
|
39
|
+
"name": info.name,
|
|
40
|
+
"description": info.raw_schema.get("description", ""),
|
|
41
|
+
}
|
|
42
|
+
if use_parameters_json_schema:
|
|
43
|
+
fnc_kwargs["parameters_json_schema"] = info.raw_schema.get("parameters", {})
|
|
44
|
+
else:
|
|
45
|
+
# https://github.com/googleapis/python-genai/issues/1147
|
|
46
|
+
fnc_kwargs["parameters"] = types.Schema.from_json_schema(
|
|
47
|
+
json_schema=types.JSONSchema.model_validate(
|
|
48
|
+
info.raw_schema.get("parameters", {})
|
|
49
|
+
)
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
if is_given(tool_behavior):
|
|
53
|
+
fnc_kwargs["behavior"] = tool_behavior
|
|
54
|
+
tools.append(types.FunctionDeclaration(**fnc_kwargs))
|
|
55
|
+
|
|
56
|
+
elif is_function_tool(fnc):
|
|
57
|
+
tools.append(_build_gemini_fnc(fnc, tool_behavior=tool_behavior))
|
|
58
|
+
|
|
59
|
+
return tools
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def create_tools_config(
|
|
63
|
+
*,
|
|
64
|
+
function_tools: list[types.FunctionDeclaration] | None = None,
|
|
65
|
+
gemini_tools: list[_LLMTool] | None = None,
|
|
66
|
+
) -> list[types.Tool]:
|
|
67
|
+
tools: list[types.Tool] = []
|
|
68
|
+
|
|
69
|
+
if function_tools:
|
|
70
|
+
tools.append(types.Tool(function_declarations=function_tools))
|
|
71
|
+
|
|
72
|
+
if gemini_tools:
|
|
73
|
+
for tool in gemini_tools:
|
|
74
|
+
if isinstance(tool, types.GoogleSearchRetrieval):
|
|
75
|
+
tools.append(types.Tool(google_search_retrieval=tool))
|
|
76
|
+
elif isinstance(tool, types.ToolCodeExecution):
|
|
77
|
+
tools.append(types.Tool(code_execution=tool))
|
|
78
|
+
elif isinstance(tool, types.GoogleSearch):
|
|
79
|
+
tools.append(types.Tool(google_search=tool))
|
|
80
|
+
elif isinstance(tool, types.UrlContext):
|
|
81
|
+
tools.append(types.Tool(url_context=tool))
|
|
82
|
+
elif isinstance(tool, types.GoogleMaps):
|
|
83
|
+
tools.append(types.Tool(google_maps=tool))
|
|
84
|
+
else:
|
|
85
|
+
logger.warning(f"Warning: Received unhandled tool type: {type(tool)}")
|
|
86
|
+
continue
|
|
87
|
+
|
|
88
|
+
if len(tools) > 1:
|
|
89
|
+
# https://github.com/google/adk-python/issues/53#issuecomment-2799538041
|
|
90
|
+
logger.warning(
|
|
91
|
+
"Multiple kinds of tools are not supported in Gemini. Only the first tool will be used."
|
|
92
|
+
)
|
|
93
|
+
tools = tools[:1]
|
|
94
|
+
|
|
95
|
+
return tools
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def get_tool_results_for_realtime(
|
|
99
|
+
chat_ctx: llm.ChatContext,
|
|
100
|
+
*,
|
|
101
|
+
vertexai: bool = False,
|
|
102
|
+
tool_response_scheduling: NotGivenOr[types.FunctionResponseScheduling] = NOT_GIVEN,
|
|
103
|
+
) -> types.LiveClientToolResponse | None:
|
|
104
|
+
function_responses: list[types.FunctionResponse] = []
|
|
105
|
+
for msg in chat_ctx.items:
|
|
106
|
+
if msg.type == "function_call_output":
|
|
107
|
+
res = types.FunctionResponse(
|
|
108
|
+
name=msg.name,
|
|
109
|
+
response={"output": msg.output},
|
|
110
|
+
)
|
|
111
|
+
if is_given(tool_response_scheduling):
|
|
112
|
+
# vertexai currently doesn't support the scheduling parameter, gemini api defaults to idle
|
|
113
|
+
# it's the user's responsibility to avoid this parameter when using vertexai
|
|
114
|
+
res.scheduling = tool_response_scheduling
|
|
115
|
+
if not vertexai:
|
|
116
|
+
# vertexai does not support id in FunctionResponse
|
|
117
|
+
# see: https://github.com/googleapis/python-genai/blob/85e00bc/google/genai/_live_converters.py#L1435
|
|
118
|
+
res.id = msg.call_id
|
|
119
|
+
function_responses.append(res)
|
|
120
|
+
return (
|
|
121
|
+
types.LiveClientToolResponse(function_responses=function_responses)
|
|
122
|
+
if function_responses
|
|
123
|
+
else None
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def _build_gemini_fnc(
|
|
128
|
+
function_tool: FunctionTool, *, tool_behavior: NotGivenOr[types.Behavior] = NOT_GIVEN
|
|
129
|
+
) -> types.FunctionDeclaration:
|
|
130
|
+
fnc = llm.utils.build_legacy_openai_schema(function_tool, internally_tagged=True)
|
|
131
|
+
json_schema = _GeminiJsonSchema(fnc["parameters"]).simplify()
|
|
132
|
+
|
|
133
|
+
kwargs = {
|
|
134
|
+
"name": fnc["name"],
|
|
135
|
+
"description": fnc["description"],
|
|
136
|
+
"parameters": types.Schema.model_validate(json_schema) if json_schema else None,
|
|
137
|
+
}
|
|
138
|
+
if is_given(tool_behavior):
|
|
139
|
+
kwargs["behavior"] = tool_behavior
|
|
140
|
+
return types.FunctionDeclaration(**kwargs)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def to_response_format(response_format: type | dict) -> types.SchemaUnion:
|
|
144
|
+
_, json_schema_type = llm_utils.to_response_format_param(response_format)
|
|
145
|
+
if isinstance(json_schema_type, TypeAdapter):
|
|
146
|
+
schema = json_schema_type.json_schema()
|
|
147
|
+
else:
|
|
148
|
+
schema = json_schema_type.model_json_schema()
|
|
149
|
+
|
|
150
|
+
return _GeminiJsonSchema(schema).simplify()
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class _GeminiJsonSchema:
|
|
154
|
+
"""
|
|
155
|
+
Transforms the JSON Schema from Pydantic to be suitable for Gemini.
|
|
156
|
+
based on pydantic-ai implementation
|
|
157
|
+
https://github.com/pydantic/pydantic-ai/blob/085a9542a7360b7e388ce575323ce189b397d7ad/pydantic_ai_slim/pydantic_ai/models/gemini.py#L809
|
|
158
|
+
"""
|
|
159
|
+
|
|
160
|
+
# Type mapping from JSON Schema to Gemini Schema
|
|
161
|
+
TYPE_MAPPING: dict[str, types.Type] = {
|
|
162
|
+
"string": types.Type.STRING,
|
|
163
|
+
"number": types.Type.NUMBER,
|
|
164
|
+
"integer": types.Type.INTEGER,
|
|
165
|
+
"boolean": types.Type.BOOLEAN,
|
|
166
|
+
"array": types.Type.ARRAY,
|
|
167
|
+
"object": types.Type.OBJECT,
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
def __init__(self, schema: dict[str, Any]):
|
|
171
|
+
self.schema = deepcopy(schema)
|
|
172
|
+
self.defs = self.schema.pop("$defs", {})
|
|
173
|
+
|
|
174
|
+
def simplify(self) -> dict[str, Any] | None:
|
|
175
|
+
self._simplify(self.schema, refs_stack=())
|
|
176
|
+
# If the schema is an OBJECT with no properties, return None.
|
|
177
|
+
if self.schema.get("type") == types.Type.OBJECT and not self.schema.get("properties"):
|
|
178
|
+
return None
|
|
179
|
+
return self.schema
|
|
180
|
+
|
|
181
|
+
def _simplify(self, schema: dict[str, Any], refs_stack: tuple[str, ...]) -> None:
|
|
182
|
+
schema.pop("title", None)
|
|
183
|
+
schema.pop("default", None)
|
|
184
|
+
schema.pop("additionalProperties", None)
|
|
185
|
+
schema.pop("$schema", None)
|
|
186
|
+
|
|
187
|
+
if (const := schema.pop("const", None)) is not None:
|
|
188
|
+
# Gemini doesn't support const, but it does support enum with a single value
|
|
189
|
+
schema["enum"] = [const]
|
|
190
|
+
|
|
191
|
+
schema.pop("discriminator", None)
|
|
192
|
+
schema.pop("examples", None)
|
|
193
|
+
|
|
194
|
+
if ref := schema.pop("$ref", None):
|
|
195
|
+
key = re.sub(r"^#/\$defs/", "", ref)
|
|
196
|
+
if key in refs_stack:
|
|
197
|
+
raise ValueError("Recursive `$ref`s in JSON Schema are not supported by Gemini")
|
|
198
|
+
refs_stack += (key,)
|
|
199
|
+
schema_def = self.defs[key]
|
|
200
|
+
self._simplify(schema_def, refs_stack)
|
|
201
|
+
schema.update(schema_def)
|
|
202
|
+
return
|
|
203
|
+
|
|
204
|
+
if "enum" in schema and "type" not in schema:
|
|
205
|
+
schema["type"] = self._infer_type(schema["enum"][0])
|
|
206
|
+
|
|
207
|
+
# Convert type value to Gemini format
|
|
208
|
+
if "type" in schema and schema["type"] != "null":
|
|
209
|
+
json_type = schema["type"]
|
|
210
|
+
if json_type in self.TYPE_MAPPING:
|
|
211
|
+
schema["type"] = self.TYPE_MAPPING[json_type]
|
|
212
|
+
elif isinstance(json_type, types.Type):
|
|
213
|
+
schema["type"] = json_type
|
|
214
|
+
else:
|
|
215
|
+
raise ValueError(f"Unsupported type in JSON Schema: {json_type}")
|
|
216
|
+
|
|
217
|
+
# Map field names that differ between JSON Schema and Gemini
|
|
218
|
+
self._map_field_names(schema)
|
|
219
|
+
|
|
220
|
+
# Handle anyOf - map to any_of
|
|
221
|
+
if any_of := schema.pop("anyOf", None):
|
|
222
|
+
if any_of:
|
|
223
|
+
mapped_any_of = []
|
|
224
|
+
has_null = False
|
|
225
|
+
non_null_schema = None
|
|
226
|
+
|
|
227
|
+
for item_schema in any_of:
|
|
228
|
+
self._simplify(item_schema, refs_stack)
|
|
229
|
+
if item_schema == {"type": "null"}:
|
|
230
|
+
has_null = True
|
|
231
|
+
else:
|
|
232
|
+
non_null_schema = item_schema
|
|
233
|
+
mapped_any_of.append(item_schema)
|
|
234
|
+
|
|
235
|
+
if has_null and len(any_of) == 2 and non_null_schema:
|
|
236
|
+
schema.update(non_null_schema)
|
|
237
|
+
schema["nullable"] = True
|
|
238
|
+
else:
|
|
239
|
+
schema["any_of"] = mapped_any_of
|
|
240
|
+
|
|
241
|
+
type_ = schema.get("type")
|
|
242
|
+
|
|
243
|
+
if type_ == types.Type.OBJECT:
|
|
244
|
+
self._object(schema, refs_stack)
|
|
245
|
+
elif type_ == types.Type.ARRAY:
|
|
246
|
+
self._array(schema, refs_stack)
|
|
247
|
+
|
|
248
|
+
def _infer_type(self, value: Any) -> str:
|
|
249
|
+
if isinstance(value, int):
|
|
250
|
+
return "integer"
|
|
251
|
+
elif isinstance(value, float):
|
|
252
|
+
return "number"
|
|
253
|
+
elif isinstance(value, str):
|
|
254
|
+
return "string"
|
|
255
|
+
elif isinstance(value, bool):
|
|
256
|
+
return "boolean"
|
|
257
|
+
else:
|
|
258
|
+
raise ValueError(f"Unsupported type in Schema: {type(value)}")
|
|
259
|
+
|
|
260
|
+
def _map_field_names(self, schema: dict[str, Any]) -> None:
|
|
261
|
+
"""Map JSON Schema field names to Gemini Schema field names."""
|
|
262
|
+
mappings = {
|
|
263
|
+
"minLength": "min_length",
|
|
264
|
+
"maxLength": "max_length",
|
|
265
|
+
"minItems": "min_items",
|
|
266
|
+
"maxItems": "max_items",
|
|
267
|
+
"minProperties": "min_properties",
|
|
268
|
+
"maxProperties": "max_properties",
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
for json_name, gemini_name in mappings.items():
|
|
272
|
+
if json_name in schema:
|
|
273
|
+
schema[gemini_name] = schema.pop(json_name)
|
|
274
|
+
|
|
275
|
+
def _object(self, schema: dict[str, Any], refs_stack: tuple[str, ...]) -> None:
|
|
276
|
+
if properties := schema.get("properties"):
|
|
277
|
+
for value in properties.values():
|
|
278
|
+
self._simplify(value, refs_stack)
|
|
279
|
+
|
|
280
|
+
def _array(self, schema: dict[str, Any], refs_stack: tuple[str, ...]) -> None:
|
|
281
|
+
if prefix_items := schema.get("prefixItems"):
|
|
282
|
+
for prefix_item in prefix_items:
|
|
283
|
+
self._simplify(prefix_item, refs_stack)
|
|
284
|
+
|
|
285
|
+
if items_schema := schema.get("items"):
|
|
286
|
+
self._simplify(items_schema, refs_stack)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: livekit-plugins-google
|
|
3
|
+
Version: 1.3.8
|
|
4
|
+
Summary: Agent Framework plugin for services from Google Cloud
|
|
5
|
+
Project-URL: Documentation, https://docs.livekit.io
|
|
6
|
+
Project-URL: Website, https://livekit.io/
|
|
7
|
+
Project-URL: Source, https://github.com/livekit/agents
|
|
8
|
+
Author: LiveKit
|
|
9
|
+
License-Expression: Apache-2.0
|
|
10
|
+
Keywords: ai,audio,gemini,google,livekit,realtime,video,voice
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Topic :: Multimedia :: Sound/Audio
|
|
18
|
+
Classifier: Topic :: Multimedia :: Video
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Requires-Dist: google-auth<3,>=2
|
|
22
|
+
Requires-Dist: google-cloud-speech<3,>=2
|
|
23
|
+
Requires-Dist: google-cloud-texttospeech<3,>=2.32
|
|
24
|
+
Requires-Dist: google-genai>=1.55; python_version >= '3.10'
|
|
25
|
+
Requires-Dist: livekit-agents>=1.3.6
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
|
|
28
|
+
# Google AI plugin for LiveKit Agents
|
|
29
|
+
|
|
30
|
+
Support for Gemini, Gemini Live, Cloud Speech-to-Text, and Cloud Text-to-Speech.
|
|
31
|
+
|
|
32
|
+
See [https://docs.livekit.io/agents/integrations/google/](https://docs.livekit.io/agents/integrations/google/) for more information.
|
|
33
|
+
|
|
34
|
+
## Installation
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pip install livekit-plugins-google
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Pre-requisites
|
|
41
|
+
|
|
42
|
+
For credentials, you'll need a Google Cloud account and obtain the correct credentials. Credentials can be passed directly or via Application Default Credentials as specified in [How Application Default Credentials works](https://cloud.google.com/docs/authentication/application-default-credentials).
|
|
43
|
+
|
|
44
|
+
To use the STT and TTS API, you'll need to enable the respective services for your Google Cloud project.
|
|
45
|
+
|
|
46
|
+
- Cloud Speech-to-Text API
|
|
47
|
+
- Cloud Text-to-Speech API
|
|
48
|
+
|
|
49
|
+
## Live API model support
|
|
50
|
+
|
|
51
|
+
LiveKit supports both Gemini Live API on both Gemini Developer API as well as Vertex AI. However, be aware they have slightly different behavior and use different model names.
|
|
52
|
+
|
|
53
|
+
The following models are supported by Gemini Developer API:
|
|
54
|
+
|
|
55
|
+
- gemini-2.0-flash-live-001
|
|
56
|
+
- gemini-live-2.5-flash-preview
|
|
57
|
+
- gemini-2.5-flash-native-audio-preview-09-2025
|
|
58
|
+
|
|
59
|
+
And these on Vertex AI:
|
|
60
|
+
|
|
61
|
+
- gemini-2.0-flash-exp
|
|
62
|
+
- gemini-live-2.5-flash-preview-native-audio
|
|
63
|
+
- gemini-live-2.5-flash-preview-native-audio-09-2025
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
livekit/plugins/google/__init__.py,sha256=bYHN04-Ttynj09POAnFP3mln-wrEc1vanUD_YpoWOE4,1434
|
|
2
|
+
livekit/plugins/google/llm.py,sha256=OSl-3DzYRGPUvmL4go-iCc_iag9woyvn5ZTpElLAnd0,21396
|
|
3
|
+
livekit/plugins/google/log.py,sha256=GI3YWN5YzrafnUccljzPRS_ZALkMNk1i21IRnTl2vNA,69
|
|
4
|
+
livekit/plugins/google/models.py,sha256=jsXHLSCDw-T5dZXeDE2nMT2lr0GooCYO4y4aW7Htps4,2816
|
|
5
|
+
livekit/plugins/google/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
livekit/plugins/google/stt.py,sha256=fsWoNnpjgLxqY43cx6GbRI-_QLvXmMvD4WczJFjnoOA,26846
|
|
7
|
+
livekit/plugins/google/tools.py,sha256=tD5HVDHO5JfUF029Cx3axHMJec0Gxalkl7s1FDgxLzI,259
|
|
8
|
+
livekit/plugins/google/tts.py,sha256=6qQDLRawqW5SSoN4JAqZYjyANxKT3165zJDfO6_7f08,18846
|
|
9
|
+
livekit/plugins/google/utils.py,sha256=U_h7kV3528uH-Ef946yaMjS-Y9rH_yreu32fQ6qwVNo,10657
|
|
10
|
+
livekit/plugins/google/version.py,sha256=QU6KNV-p6CdJv8bUwDgVMAemqOx2EwSsOFOuYh4-Re0,600
|
|
11
|
+
livekit/plugins/google/beta/__init__.py,sha256=4q5dx-Y6o9peCDziB03Skf5ngH4PTBsZC86ZawWrgnk,271
|
|
12
|
+
livekit/plugins/google/beta/gemini_tts.py,sha256=SpKorOteQ7GYoGWsxV5YPuGeMexoosmtDXQVz_1ZeLA,8743
|
|
13
|
+
livekit/plugins/google/realtime/__init__.py,sha256=_fW2NMN22F-hnQ4xAJ_g5lPbR7CvM_xXzSWlUQY-E-U,188
|
|
14
|
+
livekit/plugins/google/realtime/api_proto.py,sha256=6zZ5foiBkHfq6p9-fPf-fzBACAKFj5G7tJ_2PWPpoLg,1432
|
|
15
|
+
livekit/plugins/google/realtime/realtime_api.py,sha256=SMEJ6ENBwVBt5DapcIaTiwzY9ANbeMDv_5tjifiQ4Ec,55231
|
|
16
|
+
livekit_plugins_google-1.3.8.dist-info/METADATA,sha256=HMmh2kVB5WDIAbGostE7cUIWJ-6-xE9tY6ipJrJ2rHo,2466
|
|
17
|
+
livekit_plugins_google-1.3.8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
18
|
+
livekit_plugins_google-1.3.8.dist-info/RECORD,,
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: livekit-plugins-google
|
|
3
|
-
Version: 0.3.0
|
|
4
|
-
Summary: Agent Framework plugin for services from Google Cloud
|
|
5
|
-
Home-page: https://github.com/livekit/agents
|
|
6
|
-
License: Apache-2.0
|
|
7
|
-
Project-URL: Documentation, https://docs.livekit.io
|
|
8
|
-
Project-URL: Website, https://livekit.io/
|
|
9
|
-
Project-URL: Source, https://github.com/livekit/agents
|
|
10
|
-
Keywords: webrtc,realtime,audio,video,livekit
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
-
Classifier: Topic :: Multimedia :: Sound/Audio
|
|
14
|
-
Classifier: Topic :: Multimedia :: Video
|
|
15
|
-
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
16
|
-
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
-
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
|
-
Requires-Python: >=3.7.0
|
|
23
|
-
Description-Content-Type: text/markdown
|
|
24
|
-
Requires-Dist: numpy <2,>=1
|
|
25
|
-
Requires-Dist: google-api-core <3,>=2
|
|
26
|
-
Requires-Dist: google-auth <3,>=2
|
|
27
|
-
Requires-Dist: google-cloud-core <3,>=2
|
|
28
|
-
Requires-Dist: google-cloud-speech <3,>=2
|
|
29
|
-
Requires-Dist: google-cloud-texttospeech <3,>=2
|
|
30
|
-
Requires-Dist: google-cloud-translate <4,>=3
|
|
31
|
-
Requires-Dist: googleapis-common-protos <2,>=1
|
|
32
|
-
Requires-Dist: livekit >=0.9.2
|
|
33
|
-
Requires-Dist: livekit-agents ~=0.5.dev0
|
|
34
|
-
|
|
35
|
-
# LiveKit Plugins Google
|
|
36
|
-
|
|
37
|
-
Agent Framework plugin for services from Google Cloud. Currently supporting Google's [Speech-to-Text](https://cloud.google.com/speech-to-text) API.
|
|
38
|
-
|
|
39
|
-
## Installation
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
pip install livekit-plugins-google
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Pre-requisites
|
|
46
|
-
|
|
47
|
-
For credentials, you'll need a Google Cloud account and obtain the correct credentials. Credentials can be passed directly or set as [GOOGLE_APPLICATION_CREDENTIALS](https://cloud.google.com/docs/authentication/application-default-credentials) environment variable.
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
livekit/plugins/google/__init__.py,sha256=snPMHNLrurYbLWQOkV_o6qG1CEWsOCZ8ZfPMvmh5ejY,931
|
|
2
|
-
livekit/plugins/google/models.py,sha256=DgiXOvGDO8D9rfCKHJL28lbyQR8mXXB2kpku-szXLRs,1185
|
|
3
|
-
livekit/plugins/google/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
livekit/plugins/google/stt.py,sha256=lYA8hlkxG3YSw1Q34j8hgs4us5Ij-TLBQTRwtGPN9MY,15025
|
|
5
|
-
livekit/plugins/google/version.py,sha256=G5iYozum4q7UpHwW43F7QfhzUfwcncPxBZ0gmUGsd5I,600
|
|
6
|
-
livekit_plugins_google-0.3.0.dist-info/METADATA,sha256=sPd3OZxViD0Aq1uF1qJpbsYeqLAlq8tB720JXk-_RKw,1945
|
|
7
|
-
livekit_plugins_google-0.3.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
8
|
-
livekit_plugins_google-0.3.0.dist-info/top_level.txt,sha256=OoDok3xUmXbZRvOrfvvXB-Juu4DX79dlq188E19YHoo,8
|
|
9
|
-
livekit_plugins_google-0.3.0.dist-info/RECORD,,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
livekit
|