feat: add psagentai agent with deployment and configuration
Initial project setup including the main agent script, configuration files, profile JSON state, systemd service unit, startup script, deployment documentation, and Python dependencies. Includes .env, venv/, and __pycache__/ which should likely be excluded via .gitignore to avoid committing secrets and artifacts.
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# File generated from our OpenAPI spec by Stainless.
|
||||
|
||||
from .audio import (
|
||||
Audio,
|
||||
AsyncAudio,
|
||||
AudioWithRawResponse,
|
||||
AsyncAudioWithRawResponse,
|
||||
AudioWithStreamingResponse,
|
||||
AsyncAudioWithStreamingResponse,
|
||||
)
|
||||
from .speech import (
|
||||
Speech,
|
||||
AsyncSpeech,
|
||||
SpeechWithRawResponse,
|
||||
AsyncSpeechWithRawResponse,
|
||||
SpeechWithStreamingResponse,
|
||||
AsyncSpeechWithStreamingResponse,
|
||||
)
|
||||
from .translations import (
|
||||
Translations,
|
||||
AsyncTranslations,
|
||||
TranslationsWithRawResponse,
|
||||
AsyncTranslationsWithRawResponse,
|
||||
TranslationsWithStreamingResponse,
|
||||
AsyncTranslationsWithStreamingResponse,
|
||||
)
|
||||
from .transcriptions import (
|
||||
Transcriptions,
|
||||
AsyncTranscriptions,
|
||||
TranscriptionsWithRawResponse,
|
||||
AsyncTranscriptionsWithRawResponse,
|
||||
TranscriptionsWithStreamingResponse,
|
||||
AsyncTranscriptionsWithStreamingResponse,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
"Transcriptions",
|
||||
"AsyncTranscriptions",
|
||||
"TranscriptionsWithRawResponse",
|
||||
"AsyncTranscriptionsWithRawResponse",
|
||||
"TranscriptionsWithStreamingResponse",
|
||||
"AsyncTranscriptionsWithStreamingResponse",
|
||||
"Translations",
|
||||
"AsyncTranslations",
|
||||
"TranslationsWithRawResponse",
|
||||
"AsyncTranslationsWithRawResponse",
|
||||
"TranslationsWithStreamingResponse",
|
||||
"AsyncTranslationsWithStreamingResponse",
|
||||
"Speech",
|
||||
"AsyncSpeech",
|
||||
"SpeechWithRawResponse",
|
||||
"AsyncSpeechWithRawResponse",
|
||||
"SpeechWithStreamingResponse",
|
||||
"AsyncSpeechWithStreamingResponse",
|
||||
"Audio",
|
||||
"AsyncAudio",
|
||||
"AudioWithRawResponse",
|
||||
"AsyncAudioWithRawResponse",
|
||||
"AudioWithStreamingResponse",
|
||||
"AsyncAudioWithStreamingResponse",
|
||||
]
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,144 @@
|
||||
# File generated from our OpenAPI spec by Stainless.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from .speech import (
|
||||
Speech,
|
||||
AsyncSpeech,
|
||||
SpeechWithRawResponse,
|
||||
AsyncSpeechWithRawResponse,
|
||||
SpeechWithStreamingResponse,
|
||||
AsyncSpeechWithStreamingResponse,
|
||||
)
|
||||
from ..._compat import cached_property
|
||||
from ..._resource import SyncAPIResource, AsyncAPIResource
|
||||
from .translations import (
|
||||
Translations,
|
||||
AsyncTranslations,
|
||||
TranslationsWithRawResponse,
|
||||
AsyncTranslationsWithRawResponse,
|
||||
TranslationsWithStreamingResponse,
|
||||
AsyncTranslationsWithStreamingResponse,
|
||||
)
|
||||
from .transcriptions import (
|
||||
Transcriptions,
|
||||
AsyncTranscriptions,
|
||||
TranscriptionsWithRawResponse,
|
||||
AsyncTranscriptionsWithRawResponse,
|
||||
TranscriptionsWithStreamingResponse,
|
||||
AsyncTranscriptionsWithStreamingResponse,
|
||||
)
|
||||
|
||||
__all__ = ["Audio", "AsyncAudio"]
|
||||
|
||||
|
||||
class Audio(SyncAPIResource):
|
||||
@cached_property
|
||||
def transcriptions(self) -> Transcriptions:
|
||||
return Transcriptions(self._client)
|
||||
|
||||
@cached_property
|
||||
def translations(self) -> Translations:
|
||||
return Translations(self._client)
|
||||
|
||||
@cached_property
|
||||
def speech(self) -> Speech:
|
||||
return Speech(self._client)
|
||||
|
||||
@cached_property
|
||||
def with_raw_response(self) -> AudioWithRawResponse:
|
||||
return AudioWithRawResponse(self)
|
||||
|
||||
@cached_property
|
||||
def with_streaming_response(self) -> AudioWithStreamingResponse:
|
||||
return AudioWithStreamingResponse(self)
|
||||
|
||||
|
||||
class AsyncAudio(AsyncAPIResource):
|
||||
@cached_property
|
||||
def transcriptions(self) -> AsyncTranscriptions:
|
||||
return AsyncTranscriptions(self._client)
|
||||
|
||||
@cached_property
|
||||
def translations(self) -> AsyncTranslations:
|
||||
return AsyncTranslations(self._client)
|
||||
|
||||
@cached_property
|
||||
def speech(self) -> AsyncSpeech:
|
||||
return AsyncSpeech(self._client)
|
||||
|
||||
@cached_property
|
||||
def with_raw_response(self) -> AsyncAudioWithRawResponse:
|
||||
return AsyncAudioWithRawResponse(self)
|
||||
|
||||
@cached_property
|
||||
def with_streaming_response(self) -> AsyncAudioWithStreamingResponse:
|
||||
return AsyncAudioWithStreamingResponse(self)
|
||||
|
||||
|
||||
class AudioWithRawResponse:
|
||||
def __init__(self, audio: Audio) -> None:
|
||||
self._audio = audio
|
||||
|
||||
@cached_property
|
||||
def transcriptions(self) -> TranscriptionsWithRawResponse:
|
||||
return TranscriptionsWithRawResponse(self._audio.transcriptions)
|
||||
|
||||
@cached_property
|
||||
def translations(self) -> TranslationsWithRawResponse:
|
||||
return TranslationsWithRawResponse(self._audio.translations)
|
||||
|
||||
@cached_property
|
||||
def speech(self) -> SpeechWithRawResponse:
|
||||
return SpeechWithRawResponse(self._audio.speech)
|
||||
|
||||
|
||||
class AsyncAudioWithRawResponse:
|
||||
def __init__(self, audio: AsyncAudio) -> None:
|
||||
self._audio = audio
|
||||
|
||||
@cached_property
|
||||
def transcriptions(self) -> AsyncTranscriptionsWithRawResponse:
|
||||
return AsyncTranscriptionsWithRawResponse(self._audio.transcriptions)
|
||||
|
||||
@cached_property
|
||||
def translations(self) -> AsyncTranslationsWithRawResponse:
|
||||
return AsyncTranslationsWithRawResponse(self._audio.translations)
|
||||
|
||||
@cached_property
|
||||
def speech(self) -> AsyncSpeechWithRawResponse:
|
||||
return AsyncSpeechWithRawResponse(self._audio.speech)
|
||||
|
||||
|
||||
class AudioWithStreamingResponse:
|
||||
def __init__(self, audio: Audio) -> None:
|
||||
self._audio = audio
|
||||
|
||||
@cached_property
|
||||
def transcriptions(self) -> TranscriptionsWithStreamingResponse:
|
||||
return TranscriptionsWithStreamingResponse(self._audio.transcriptions)
|
||||
|
||||
@cached_property
|
||||
def translations(self) -> TranslationsWithStreamingResponse:
|
||||
return TranslationsWithStreamingResponse(self._audio.translations)
|
||||
|
||||
@cached_property
|
||||
def speech(self) -> SpeechWithStreamingResponse:
|
||||
return SpeechWithStreamingResponse(self._audio.speech)
|
||||
|
||||
|
||||
class AsyncAudioWithStreamingResponse:
|
||||
def __init__(self, audio: AsyncAudio) -> None:
|
||||
self._audio = audio
|
||||
|
||||
@cached_property
|
||||
def transcriptions(self) -> AsyncTranscriptionsWithStreamingResponse:
|
||||
return AsyncTranscriptionsWithStreamingResponse(self._audio.transcriptions)
|
||||
|
||||
@cached_property
|
||||
def translations(self) -> AsyncTranslationsWithStreamingResponse:
|
||||
return AsyncTranslationsWithStreamingResponse(self._audio.translations)
|
||||
|
||||
@cached_property
|
||||
def speech(self) -> AsyncSpeechWithStreamingResponse:
|
||||
return AsyncSpeechWithStreamingResponse(self._audio.speech)
|
||||
@@ -0,0 +1,206 @@
|
||||
# File generated from our OpenAPI spec by Stainless.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Union
|
||||
from typing_extensions import Literal
|
||||
|
||||
import httpx
|
||||
|
||||
from ... import _legacy_response
|
||||
from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven
|
||||
from ..._utils import maybe_transform
|
||||
from ..._compat import cached_property
|
||||
from ..._resource import SyncAPIResource, AsyncAPIResource
|
||||
from ..._response import (
|
||||
StreamedBinaryAPIResponse,
|
||||
AsyncStreamedBinaryAPIResponse,
|
||||
to_custom_streamed_response_wrapper,
|
||||
async_to_custom_streamed_response_wrapper,
|
||||
)
|
||||
from ...types.audio import speech_create_params
|
||||
from ..._base_client import (
|
||||
make_request_options,
|
||||
)
|
||||
|
||||
__all__ = ["Speech", "AsyncSpeech"]
|
||||
|
||||
|
||||
class Speech(SyncAPIResource):
|
||||
@cached_property
|
||||
def with_raw_response(self) -> SpeechWithRawResponse:
|
||||
return SpeechWithRawResponse(self)
|
||||
|
||||
@cached_property
|
||||
def with_streaming_response(self) -> SpeechWithStreamingResponse:
|
||||
return SpeechWithStreamingResponse(self)
|
||||
|
||||
def create(
|
||||
self,
|
||||
*,
|
||||
input: str,
|
||||
model: Union[str, Literal["tts-1", "tts-1-hd"]],
|
||||
voice: Literal["alloy", "echo", "fable", "onyx", "nova", "shimmer"],
|
||||
response_format: Literal["mp3", "opus", "aac", "flac"] | NotGiven = NOT_GIVEN,
|
||||
speed: float | NotGiven = NOT_GIVEN,
|
||||
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
||||
# The extra values given here take precedence over values defined on the client or passed to this method.
|
||||
extra_headers: Headers | None = None,
|
||||
extra_query: Query | None = None,
|
||||
extra_body: Body | None = None,
|
||||
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
||||
) -> _legacy_response.HttpxBinaryResponseContent:
|
||||
"""
|
||||
Generates audio from the input text.
|
||||
|
||||
Args:
|
||||
input: The text to generate audio for. The maximum length is 4096 characters.
|
||||
|
||||
model:
|
||||
One of the available [TTS models](https://platform.openai.com/docs/models/tts):
|
||||
`tts-1` or `tts-1-hd`
|
||||
|
||||
voice: The voice to use when generating the audio. Supported voices are `alloy`,
|
||||
`echo`, `fable`, `onyx`, `nova`, and `shimmer`. Previews of the voices are
|
||||
available in the
|
||||
[Text to speech guide](https://platform.openai.com/docs/guides/text-to-speech/voice-options).
|
||||
|
||||
response_format: The format to audio in. Supported formats are `mp3`, `opus`, `aac`, and `flac`.
|
||||
|
||||
speed: The speed of the generated audio. Select a value from `0.25` to `4.0`. `1.0` is
|
||||
the default.
|
||||
|
||||
extra_headers: Send extra headers
|
||||
|
||||
extra_query: Add additional query parameters to the request
|
||||
|
||||
extra_body: Add additional JSON properties to the request
|
||||
|
||||
timeout: Override the client-level default timeout for this request, in seconds
|
||||
"""
|
||||
return self._post(
|
||||
"/audio/speech",
|
||||
body=maybe_transform(
|
||||
{
|
||||
"input": input,
|
||||
"model": model,
|
||||
"voice": voice,
|
||||
"response_format": response_format,
|
||||
"speed": speed,
|
||||
},
|
||||
speech_create_params.SpeechCreateParams,
|
||||
),
|
||||
options=make_request_options(
|
||||
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
||||
),
|
||||
cast_to=_legacy_response.HttpxBinaryResponseContent,
|
||||
)
|
||||
|
||||
|
||||
class AsyncSpeech(AsyncAPIResource):
|
||||
@cached_property
|
||||
def with_raw_response(self) -> AsyncSpeechWithRawResponse:
|
||||
return AsyncSpeechWithRawResponse(self)
|
||||
|
||||
@cached_property
|
||||
def with_streaming_response(self) -> AsyncSpeechWithStreamingResponse:
|
||||
return AsyncSpeechWithStreamingResponse(self)
|
||||
|
||||
async def create(
|
||||
self,
|
||||
*,
|
||||
input: str,
|
||||
model: Union[str, Literal["tts-1", "tts-1-hd"]],
|
||||
voice: Literal["alloy", "echo", "fable", "onyx", "nova", "shimmer"],
|
||||
response_format: Literal["mp3", "opus", "aac", "flac"] | NotGiven = NOT_GIVEN,
|
||||
speed: float | NotGiven = NOT_GIVEN,
|
||||
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
||||
# The extra values given here take precedence over values defined on the client or passed to this method.
|
||||
extra_headers: Headers | None = None,
|
||||
extra_query: Query | None = None,
|
||||
extra_body: Body | None = None,
|
||||
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
||||
) -> _legacy_response.HttpxBinaryResponseContent:
|
||||
"""
|
||||
Generates audio from the input text.
|
||||
|
||||
Args:
|
||||
input: The text to generate audio for. The maximum length is 4096 characters.
|
||||
|
||||
model:
|
||||
One of the available [TTS models](https://platform.openai.com/docs/models/tts):
|
||||
`tts-1` or `tts-1-hd`
|
||||
|
||||
voice: The voice to use when generating the audio. Supported voices are `alloy`,
|
||||
`echo`, `fable`, `onyx`, `nova`, and `shimmer`. Previews of the voices are
|
||||
available in the
|
||||
[Text to speech guide](https://platform.openai.com/docs/guides/text-to-speech/voice-options).
|
||||
|
||||
response_format: The format to audio in. Supported formats are `mp3`, `opus`, `aac`, and `flac`.
|
||||
|
||||
speed: The speed of the generated audio. Select a value from `0.25` to `4.0`. `1.0` is
|
||||
the default.
|
||||
|
||||
extra_headers: Send extra headers
|
||||
|
||||
extra_query: Add additional query parameters to the request
|
||||
|
||||
extra_body: Add additional JSON properties to the request
|
||||
|
||||
timeout: Override the client-level default timeout for this request, in seconds
|
||||
"""
|
||||
return await self._post(
|
||||
"/audio/speech",
|
||||
body=maybe_transform(
|
||||
{
|
||||
"input": input,
|
||||
"model": model,
|
||||
"voice": voice,
|
||||
"response_format": response_format,
|
||||
"speed": speed,
|
||||
},
|
||||
speech_create_params.SpeechCreateParams,
|
||||
),
|
||||
options=make_request_options(
|
||||
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
||||
),
|
||||
cast_to=_legacy_response.HttpxBinaryResponseContent,
|
||||
)
|
||||
|
||||
|
||||
class SpeechWithRawResponse:
|
||||
def __init__(self, speech: Speech) -> None:
|
||||
self._speech = speech
|
||||
|
||||
self.create = _legacy_response.to_raw_response_wrapper(
|
||||
speech.create,
|
||||
)
|
||||
|
||||
|
||||
class AsyncSpeechWithRawResponse:
|
||||
def __init__(self, speech: AsyncSpeech) -> None:
|
||||
self._speech = speech
|
||||
|
||||
self.create = _legacy_response.async_to_raw_response_wrapper(
|
||||
speech.create,
|
||||
)
|
||||
|
||||
|
||||
class SpeechWithStreamingResponse:
|
||||
def __init__(self, speech: Speech) -> None:
|
||||
self._speech = speech
|
||||
|
||||
self.create = to_custom_streamed_response_wrapper(
|
||||
speech.create,
|
||||
StreamedBinaryAPIResponse,
|
||||
)
|
||||
|
||||
|
||||
class AsyncSpeechWithStreamingResponse:
|
||||
def __init__(self, speech: AsyncSpeech) -> None:
|
||||
self._speech = speech
|
||||
|
||||
self.create = async_to_custom_streamed_response_wrapper(
|
||||
speech.create,
|
||||
AsyncStreamedBinaryAPIResponse,
|
||||
)
|
||||
@@ -0,0 +1,245 @@
|
||||
# File generated from our OpenAPI spec by Stainless.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import List, Union, Mapping, cast
|
||||
from typing_extensions import Literal
|
||||
|
||||
import httpx
|
||||
|
||||
from ... import _legacy_response
|
||||
from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes
|
||||
from ..._utils import extract_files, maybe_transform, deepcopy_minimal
|
||||
from ..._compat import cached_property
|
||||
from ..._resource import SyncAPIResource, AsyncAPIResource
|
||||
from ..._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper
|
||||
from ...types.audio import Transcription, transcription_create_params
|
||||
from ..._base_client import (
|
||||
make_request_options,
|
||||
)
|
||||
|
||||
__all__ = ["Transcriptions", "AsyncTranscriptions"]
|
||||
|
||||
|
||||
class Transcriptions(SyncAPIResource):
|
||||
@cached_property
|
||||
def with_raw_response(self) -> TranscriptionsWithRawResponse:
|
||||
return TranscriptionsWithRawResponse(self)
|
||||
|
||||
@cached_property
|
||||
def with_streaming_response(self) -> TranscriptionsWithStreamingResponse:
|
||||
return TranscriptionsWithStreamingResponse(self)
|
||||
|
||||
def create(
|
||||
self,
|
||||
*,
|
||||
file: FileTypes,
|
||||
model: Union[str, Literal["whisper-1"]],
|
||||
language: str | NotGiven = NOT_GIVEN,
|
||||
prompt: str | NotGiven = NOT_GIVEN,
|
||||
response_format: Literal["json", "text", "srt", "verbose_json", "vtt"] | NotGiven = NOT_GIVEN,
|
||||
temperature: float | NotGiven = NOT_GIVEN,
|
||||
timestamp_granularities: List[Literal["word", "segment"]] | NotGiven = NOT_GIVEN,
|
||||
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
||||
# The extra values given here take precedence over values defined on the client or passed to this method.
|
||||
extra_headers: Headers | None = None,
|
||||
extra_query: Query | None = None,
|
||||
extra_body: Body | None = None,
|
||||
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
||||
) -> Transcription:
|
||||
"""
|
||||
Transcribes audio into the input language.
|
||||
|
||||
Args:
|
||||
file:
|
||||
The audio file object (not file name) to transcribe, in one of these formats:
|
||||
flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.
|
||||
|
||||
model: ID of the model to use. Only `whisper-1` is currently available.
|
||||
|
||||
language: The language of the input audio. Supplying the input language in
|
||||
[ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) format will
|
||||
improve accuracy and latency.
|
||||
|
||||
prompt: An optional text to guide the model's style or continue a previous audio
|
||||
segment. The
|
||||
[prompt](https://platform.openai.com/docs/guides/speech-to-text/prompting)
|
||||
should match the audio language.
|
||||
|
||||
response_format: The format of the transcript output, in one of these options: `json`, `text`,
|
||||
`srt`, `verbose_json`, or `vtt`.
|
||||
|
||||
temperature: The sampling temperature, between 0 and 1. Higher values like 0.8 will make the
|
||||
output more random, while lower values like 0.2 will make it more focused and
|
||||
deterministic. If set to 0, the model will use
|
||||
[log probability](https://en.wikipedia.org/wiki/Log_probability) to
|
||||
automatically increase the temperature until certain thresholds are hit.
|
||||
|
||||
timestamp_granularities: The timestamp granularities to populate for this transcription. Any of these
|
||||
options: `word`, or `segment`. Note: There is no additional latency for segment
|
||||
timestamps, but generating word timestamps incurs additional latency.
|
||||
|
||||
extra_headers: Send extra headers
|
||||
|
||||
extra_query: Add additional query parameters to the request
|
||||
|
||||
extra_body: Add additional JSON properties to the request
|
||||
|
||||
timeout: Override the client-level default timeout for this request, in seconds
|
||||
"""
|
||||
body = deepcopy_minimal(
|
||||
{
|
||||
"file": file,
|
||||
"model": model,
|
||||
"language": language,
|
||||
"prompt": prompt,
|
||||
"response_format": response_format,
|
||||
"temperature": temperature,
|
||||
"timestamp_granularities": timestamp_granularities,
|
||||
}
|
||||
)
|
||||
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
|
||||
if files:
|
||||
# It should be noted that the actual Content-Type header that will be
|
||||
# sent to the server will contain a `boundary` parameter, e.g.
|
||||
# multipart/form-data; boundary=---abc--
|
||||
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
|
||||
return self._post(
|
||||
"/audio/transcriptions",
|
||||
body=maybe_transform(body, transcription_create_params.TranscriptionCreateParams),
|
||||
files=files,
|
||||
options=make_request_options(
|
||||
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
||||
),
|
||||
cast_to=Transcription,
|
||||
)
|
||||
|
||||
|
||||
class AsyncTranscriptions(AsyncAPIResource):
|
||||
@cached_property
|
||||
def with_raw_response(self) -> AsyncTranscriptionsWithRawResponse:
|
||||
return AsyncTranscriptionsWithRawResponse(self)
|
||||
|
||||
@cached_property
|
||||
def with_streaming_response(self) -> AsyncTranscriptionsWithStreamingResponse:
|
||||
return AsyncTranscriptionsWithStreamingResponse(self)
|
||||
|
||||
async def create(
|
||||
self,
|
||||
*,
|
||||
file: FileTypes,
|
||||
model: Union[str, Literal["whisper-1"]],
|
||||
language: str | NotGiven = NOT_GIVEN,
|
||||
prompt: str | NotGiven = NOT_GIVEN,
|
||||
response_format: Literal["json", "text", "srt", "verbose_json", "vtt"] | NotGiven = NOT_GIVEN,
|
||||
temperature: float | NotGiven = NOT_GIVEN,
|
||||
timestamp_granularities: List[Literal["word", "segment"]] | NotGiven = NOT_GIVEN,
|
||||
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
||||
# The extra values given here take precedence over values defined on the client or passed to this method.
|
||||
extra_headers: Headers | None = None,
|
||||
extra_query: Query | None = None,
|
||||
extra_body: Body | None = None,
|
||||
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
||||
) -> Transcription:
|
||||
"""
|
||||
Transcribes audio into the input language.
|
||||
|
||||
Args:
|
||||
file:
|
||||
The audio file object (not file name) to transcribe, in one of these formats:
|
||||
flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.
|
||||
|
||||
model: ID of the model to use. Only `whisper-1` is currently available.
|
||||
|
||||
language: The language of the input audio. Supplying the input language in
|
||||
[ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) format will
|
||||
improve accuracy and latency.
|
||||
|
||||
prompt: An optional text to guide the model's style or continue a previous audio
|
||||
segment. The
|
||||
[prompt](https://platform.openai.com/docs/guides/speech-to-text/prompting)
|
||||
should match the audio language.
|
||||
|
||||
response_format: The format of the transcript output, in one of these options: `json`, `text`,
|
||||
`srt`, `verbose_json`, or `vtt`.
|
||||
|
||||
temperature: The sampling temperature, between 0 and 1. Higher values like 0.8 will make the
|
||||
output more random, while lower values like 0.2 will make it more focused and
|
||||
deterministic. If set to 0, the model will use
|
||||
[log probability](https://en.wikipedia.org/wiki/Log_probability) to
|
||||
automatically increase the temperature until certain thresholds are hit.
|
||||
|
||||
timestamp_granularities: The timestamp granularities to populate for this transcription. Any of these
|
||||
options: `word`, or `segment`. Note: There is no additional latency for segment
|
||||
timestamps, but generating word timestamps incurs additional latency.
|
||||
|
||||
extra_headers: Send extra headers
|
||||
|
||||
extra_query: Add additional query parameters to the request
|
||||
|
||||
extra_body: Add additional JSON properties to the request
|
||||
|
||||
timeout: Override the client-level default timeout for this request, in seconds
|
||||
"""
|
||||
body = deepcopy_minimal(
|
||||
{
|
||||
"file": file,
|
||||
"model": model,
|
||||
"language": language,
|
||||
"prompt": prompt,
|
||||
"response_format": response_format,
|
||||
"temperature": temperature,
|
||||
"timestamp_granularities": timestamp_granularities,
|
||||
}
|
||||
)
|
||||
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
|
||||
if files:
|
||||
# It should be noted that the actual Content-Type header that will be
|
||||
# sent to the server will contain a `boundary` parameter, e.g.
|
||||
# multipart/form-data; boundary=---abc--
|
||||
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
|
||||
return await self._post(
|
||||
"/audio/transcriptions",
|
||||
body=maybe_transform(body, transcription_create_params.TranscriptionCreateParams),
|
||||
files=files,
|
||||
options=make_request_options(
|
||||
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
||||
),
|
||||
cast_to=Transcription,
|
||||
)
|
||||
|
||||
|
||||
class TranscriptionsWithRawResponse:
|
||||
def __init__(self, transcriptions: Transcriptions) -> None:
|
||||
self._transcriptions = transcriptions
|
||||
|
||||
self.create = _legacy_response.to_raw_response_wrapper(
|
||||
transcriptions.create,
|
||||
)
|
||||
|
||||
|
||||
class AsyncTranscriptionsWithRawResponse:
|
||||
def __init__(self, transcriptions: AsyncTranscriptions) -> None:
|
||||
self._transcriptions = transcriptions
|
||||
|
||||
self.create = _legacy_response.async_to_raw_response_wrapper(
|
||||
transcriptions.create,
|
||||
)
|
||||
|
||||
|
||||
class TranscriptionsWithStreamingResponse:
|
||||
def __init__(self, transcriptions: Transcriptions) -> None:
|
||||
self._transcriptions = transcriptions
|
||||
|
||||
self.create = to_streamed_response_wrapper(
|
||||
transcriptions.create,
|
||||
)
|
||||
|
||||
|
||||
class AsyncTranscriptionsWithStreamingResponse:
|
||||
def __init__(self, transcriptions: AsyncTranscriptions) -> None:
|
||||
self._transcriptions = transcriptions
|
||||
|
||||
self.create = async_to_streamed_response_wrapper(
|
||||
transcriptions.create,
|
||||
)
|
||||
@@ -0,0 +1,219 @@
|
||||
# File generated from our OpenAPI spec by Stainless.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Union, Mapping, cast
|
||||
from typing_extensions import Literal
|
||||
|
||||
import httpx
|
||||
|
||||
from ... import _legacy_response
|
||||
from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes
|
||||
from ..._utils import extract_files, maybe_transform, deepcopy_minimal
|
||||
from ..._compat import cached_property
|
||||
from ..._resource import SyncAPIResource, AsyncAPIResource
|
||||
from ..._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper
|
||||
from ...types.audio import Translation, translation_create_params
|
||||
from ..._base_client import (
|
||||
make_request_options,
|
||||
)
|
||||
|
||||
__all__ = ["Translations", "AsyncTranslations"]
|
||||
|
||||
|
||||
class Translations(SyncAPIResource):
|
||||
@cached_property
|
||||
def with_raw_response(self) -> TranslationsWithRawResponse:
|
||||
return TranslationsWithRawResponse(self)
|
||||
|
||||
@cached_property
|
||||
def with_streaming_response(self) -> TranslationsWithStreamingResponse:
|
||||
return TranslationsWithStreamingResponse(self)
|
||||
|
||||
def create(
|
||||
self,
|
||||
*,
|
||||
file: FileTypes,
|
||||
model: Union[str, Literal["whisper-1"]],
|
||||
prompt: str | NotGiven = NOT_GIVEN,
|
||||
response_format: str | NotGiven = NOT_GIVEN,
|
||||
temperature: float | NotGiven = NOT_GIVEN,
|
||||
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
||||
# The extra values given here take precedence over values defined on the client or passed to this method.
|
||||
extra_headers: Headers | None = None,
|
||||
extra_query: Query | None = None,
|
||||
extra_body: Body | None = None,
|
||||
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
||||
) -> Translation:
|
||||
"""
|
||||
Translates audio into English.
|
||||
|
||||
Args:
|
||||
file: The audio file object (not file name) translate, in one of these formats: flac,
|
||||
mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.
|
||||
|
||||
model: ID of the model to use. Only `whisper-1` is currently available.
|
||||
|
||||
prompt: An optional text to guide the model's style or continue a previous audio
|
||||
segment. The
|
||||
[prompt](https://platform.openai.com/docs/guides/speech-to-text/prompting)
|
||||
should be in English.
|
||||
|
||||
response_format: The format of the transcript output, in one of these options: `json`, `text`,
|
||||
`srt`, `verbose_json`, or `vtt`.
|
||||
|
||||
temperature: The sampling temperature, between 0 and 1. Higher values like 0.8 will make the
|
||||
output more random, while lower values like 0.2 will make it more focused and
|
||||
deterministic. If set to 0, the model will use
|
||||
[log probability](https://en.wikipedia.org/wiki/Log_probability) to
|
||||
automatically increase the temperature until certain thresholds are hit.
|
||||
|
||||
extra_headers: Send extra headers
|
||||
|
||||
extra_query: Add additional query parameters to the request
|
||||
|
||||
extra_body: Add additional JSON properties to the request
|
||||
|
||||
timeout: Override the client-level default timeout for this request, in seconds
|
||||
"""
|
||||
body = deepcopy_minimal(
|
||||
{
|
||||
"file": file,
|
||||
"model": model,
|
||||
"prompt": prompt,
|
||||
"response_format": response_format,
|
||||
"temperature": temperature,
|
||||
}
|
||||
)
|
||||
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
|
||||
if files:
|
||||
# It should be noted that the actual Content-Type header that will be
|
||||
# sent to the server will contain a `boundary` parameter, e.g.
|
||||
# multipart/form-data; boundary=---abc--
|
||||
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
|
||||
return self._post(
|
||||
"/audio/translations",
|
||||
body=maybe_transform(body, translation_create_params.TranslationCreateParams),
|
||||
files=files,
|
||||
options=make_request_options(
|
||||
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
||||
),
|
||||
cast_to=Translation,
|
||||
)
|
||||
|
||||
|
||||
class AsyncTranslations(AsyncAPIResource):
|
||||
@cached_property
|
||||
def with_raw_response(self) -> AsyncTranslationsWithRawResponse:
|
||||
return AsyncTranslationsWithRawResponse(self)
|
||||
|
||||
@cached_property
|
||||
def with_streaming_response(self) -> AsyncTranslationsWithStreamingResponse:
|
||||
return AsyncTranslationsWithStreamingResponse(self)
|
||||
|
||||
async def create(
|
||||
self,
|
||||
*,
|
||||
file: FileTypes,
|
||||
model: Union[str, Literal["whisper-1"]],
|
||||
prompt: str | NotGiven = NOT_GIVEN,
|
||||
response_format: str | NotGiven = NOT_GIVEN,
|
||||
temperature: float | NotGiven = NOT_GIVEN,
|
||||
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
||||
# The extra values given here take precedence over values defined on the client or passed to this method.
|
||||
extra_headers: Headers | None = None,
|
||||
extra_query: Query | None = None,
|
||||
extra_body: Body | None = None,
|
||||
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
||||
) -> Translation:
|
||||
"""
|
||||
Translates audio into English.
|
||||
|
||||
Args:
|
||||
file: The audio file object (not file name) translate, in one of these formats: flac,
|
||||
mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.
|
||||
|
||||
model: ID of the model to use. Only `whisper-1` is currently available.
|
||||
|
||||
prompt: An optional text to guide the model's style or continue a previous audio
|
||||
segment. The
|
||||
[prompt](https://platform.openai.com/docs/guides/speech-to-text/prompting)
|
||||
should be in English.
|
||||
|
||||
response_format: The format of the transcript output, in one of these options: `json`, `text`,
|
||||
`srt`, `verbose_json`, or `vtt`.
|
||||
|
||||
temperature: The sampling temperature, between 0 and 1. Higher values like 0.8 will make the
|
||||
output more random, while lower values like 0.2 will make it more focused and
|
||||
deterministic. If set to 0, the model will use
|
||||
[log probability](https://en.wikipedia.org/wiki/Log_probability) to
|
||||
automatically increase the temperature until certain thresholds are hit.
|
||||
|
||||
extra_headers: Send extra headers
|
||||
|
||||
extra_query: Add additional query parameters to the request
|
||||
|
||||
extra_body: Add additional JSON properties to the request
|
||||
|
||||
timeout: Override the client-level default timeout for this request, in seconds
|
||||
"""
|
||||
body = deepcopy_minimal(
|
||||
{
|
||||
"file": file,
|
||||
"model": model,
|
||||
"prompt": prompt,
|
||||
"response_format": response_format,
|
||||
"temperature": temperature,
|
||||
}
|
||||
)
|
||||
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
|
||||
if files:
|
||||
# It should be noted that the actual Content-Type header that will be
|
||||
# sent to the server will contain a `boundary` parameter, e.g.
|
||||
# multipart/form-data; boundary=---abc--
|
||||
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
|
||||
return await self._post(
|
||||
"/audio/translations",
|
||||
body=maybe_transform(body, translation_create_params.TranslationCreateParams),
|
||||
files=files,
|
||||
options=make_request_options(
|
||||
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
||||
),
|
||||
cast_to=Translation,
|
||||
)
|
||||
|
||||
|
||||
class TranslationsWithRawResponse:
|
||||
def __init__(self, translations: Translations) -> None:
|
||||
self._translations = translations
|
||||
|
||||
self.create = _legacy_response.to_raw_response_wrapper(
|
||||
translations.create,
|
||||
)
|
||||
|
||||
|
||||
class AsyncTranslationsWithRawResponse:
|
||||
def __init__(self, translations: AsyncTranslations) -> None:
|
||||
self._translations = translations
|
||||
|
||||
self.create = _legacy_response.async_to_raw_response_wrapper(
|
||||
translations.create,
|
||||
)
|
||||
|
||||
|
||||
class TranslationsWithStreamingResponse:
|
||||
def __init__(self, translations: Translations) -> None:
|
||||
self._translations = translations
|
||||
|
||||
self.create = to_streamed_response_wrapper(
|
||||
translations.create,
|
||||
)
|
||||
|
||||
|
||||
class AsyncTranslationsWithStreamingResponse:
|
||||
def __init__(self, translations: AsyncTranslations) -> None:
|
||||
self._translations = translations
|
||||
|
||||
self.create = async_to_streamed_response_wrapper(
|
||||
translations.create,
|
||||
)
|
||||
Reference in New Issue
Block a user