Speechly Public Protobuf Stubs
Project description
Python Speechly API
See the generic Speechly gRPC stubs documentation for more information about using the API.
Install
Install the latest package using pip
:
pip install speechly-api
Using Python Stubs
The stubs are generated for the default grpcio
python package, and the examples are using asyncio
.
Creating a Channel
In python, the default authority of the channel needs to be overridden, as it defaults to a string containing the port number. This will not work with the API, so we set the DNS name manually:
channel = grpc.aio.secure_channel(
target='api.speechly.com:443',
credentials=grpc.ssl_channel_credentials(),
options=[('grpc.default_authority', 'api.speechly.com')]
)
IdentityAPI
Login with speechly.identity.v2.IdentityAPI
using an app_id
:
async def login(channel, device_id, app_id=None, project_id=None):
assert device_id, 'UUID device_is required'
assert (app_id or project_id), 'app_id or project_id is required'
identity_api = IdentityAPIStub(channel)
req = LoginRequest(device_id=device_id)
if app_id:
# if a token with a single app_id is required:
req.application.app_id = app_id
else:
# get a token that is usable for all apps in project:
req.project.project_id = project_id
response = await identity_api.Login(req)
token = response.token
expires = datetime.fromisoformat(response.expires_at)
return token, expires
SLU
Open a bidirectional stream to speechly.slu.v1.SLU/Stream
and send audio from a source generator to the API. The following example assumes that the audio_stream
is an iterator that yields audio with 1 channel and sample rate 16000KHz, in bytes chunks:
async def stream_speech(channel, token, audio_stream, app_id=None):
auth = ('authorization', f'Bearer {token}')
async def read_responses(stream):
transcript = []
intent = ''
entities = []
resp = await stream.read()
while resp != grpc.aio.EOF:
if resp.HasField('started'):
print(f'audioContext {resp.audio_context} started')
elif resp.HasField('transcript'):
transcript.append(resp.transcript.word)
elif resp.HasField('entity'):
entities.append(resp.entity.entity)
elif resp.HasField('intent'):
intent = resp.intent.intent
elif resp.HasField('finished'):
print(f'audioContext {resp.audio_context} finished')
resp = await stream.read()
return intent, entities, transcript
async def send_audio(stream, source):
await stream.write(SLURequest(event=SLUEvent(event='START', app_id=app_id)))
for chunk in source:
await stream.write(SLURequest(audio=chunk))
await stream.write(SLURequest(event=SLUEvent(event='STOP')))
await stream.done_writing()
async with channel:
slu = SLUStub(channel)
try:
stream = slu.Stream(metadata=[auth])
config = SLUConfig(channels=1, sample_rate_hertz=16000)
await stream.write(SLURequest(config=config))
recv = read_responses(stream)
send = send_audio(stream, audio_stream)
r = await asyncio.gather(recv, send)
intent, entities, transcript = r[0]
print('Intent:', intent)
print('Entities:', ', '.join(entities))
print('Transcript:', ' '.join(transcript))
except grpc.aio.AioRpcError as e:
print('Error in SLU', str(e.code()), e.details())
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file speechly_api-0.1.2.tar.gz
.
File metadata
- Download URL: speechly_api-0.1.2.tar.gz
- Upload date:
- Size: 24.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 06dcd410d820284e2c268447b69a6be5cf1619ea93e15869547d4348d1b6a9f3 |
|
MD5 | 39ad3d0fa34a503a77c4fc113d470527 |
|
BLAKE2b-256 | 3559f73c40ffded5499e898689217a7be09e8a59d6d2dbaee268be4a1bbc7d1c |
File details
Details for the file speechly_api-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: speechly_api-0.1.2-py3-none-any.whl
- Upload date:
- Size: 30.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3b3d5f8e38f4da754b6468c744d134ca3d2f2490ccd36d9654ab2053adb29aea |
|
MD5 | e6df2f3b4b5f39f8690d24aceaa29666 |
|
BLAKE2b-256 | 9e65c9efc6ce5956f21db6dd1ceb9311bde235538ee54beabd5a7ceccec8ae53 |