avartha-python-sdk 0.0.4__py3-none-any.whl → 0.0.6__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.
avartha/_config.py CHANGED
@@ -8,12 +8,28 @@ from urllib.parse import urlsplit, urlunsplit
8
8
 
9
9
  import httpx
10
10
 
11
- Tier = Literal["serverless", "dedicated"]
11
+ Tier = Literal["serverless"]
12
12
  DEFAULT_BASE_URL = "https://platform.preview.avartha.ai"
13
13
 
14
14
 
15
15
  class ConfigurationError(ValueError):
16
- """Missing credentials or an invalid service URL."""
16
+ """Missing credentials, an unsupported tier, or an invalid service URL."""
17
+
18
+
19
+ def validate_tier(tier: Tier) -> None:
20
+ if tier != "serverless":
21
+ raise ConfigurationError(
22
+ "Only tier='serverless' is supported. Dedicated capacity is unavailable."
23
+ )
24
+
25
+
26
+ def reject_dedicated_url(value: str) -> str:
27
+ """Reject the dedicated inference route, including behind a proxy prefix."""
28
+ if re.search(r"(?:^|/)inference/dedicated(?:/|$)", httpx.URL(value).path):
29
+ raise ConfigurationError(
30
+ "Dedicated capacity is unavailable. Use a serverless inference URL."
31
+ )
32
+ return value
17
33
 
18
34
 
19
35
  def api_key(value: str | None) -> str:
@@ -41,12 +57,13 @@ def http_url(value: str) -> str:
41
57
  or (parts.port is not None and not 1 <= parts.port <= 65535)
42
58
  ):
43
59
  raise ValueError("Invalid URL authority")
44
- return str(httpx.URL(value)).rstrip("/")
60
+ normalized = str(httpx.URL(value)).rstrip("/")
45
61
  except (ValueError, httpx.InvalidURL):
46
62
  raise ConfigurationError(
47
63
  "Use an absolute http(s) base URL without credentials, query, fragment, "
48
64
  "whitespace, or backslashes."
49
65
  ) from None
66
+ return reject_dedicated_url(normalized)
50
67
 
51
68
 
52
69
  def platform_url(value: str | None = None) -> str:
@@ -60,20 +77,18 @@ def platform_url(value: str | None = None) -> str:
60
77
 
61
78
 
62
79
  def openai_url(root: str | None = None, tier: Tier = "serverless") -> str:
63
- if tier not in {"serverless", "dedicated"}:
64
- raise ConfigurationError("tier must be 'serverless' or 'dedicated'.")
65
- return f"{platform_url(root)}/inference/{tier}/openai/v1"
80
+ validate_tier(tier)
81
+ return f"{platform_url(root)}/inference/serverless/openai/v1"
66
82
 
67
83
 
68
84
  def elevenlabs_url(
69
85
  value: str | None = None, *, root: str | None = None, tier: Tier = "serverless"
70
86
  ) -> str:
87
+ validate_tier(tier)
71
88
  override = value if value is not None else os.getenv("AVARTHA_ELEVENLABS_BASE_URL")
72
89
  if override is not None:
73
90
  return http_url(override)
74
- if tier not in {"serverless", "dedicated"}:
75
- raise ConfigurationError("tier must be 'serverless' or 'dedicated'.")
76
- return f"{platform_url(root)}/inference/{tier}/elevenlabs"
91
+ return f"{platform_url(root)}/inference/serverless/elevenlabs"
77
92
 
78
93
 
79
94
  def websocket_url(value: str) -> str:
@@ -147,4 +162,4 @@ def websocket_override(value: str) -> str:
147
162
  "websocket_base_url must be the service base before /realtime; "
148
163
  "the SDK appends /realtime when connecting."
149
164
  )
150
- return not_vendor_host(normalized, field="websocket_base_url")
165
+ return not_vendor_host(reject_dedicated_url(normalized), field="websocket_base_url")
avartha/_realtime_asr.py CHANGED
@@ -7,7 +7,7 @@ import json
7
7
  import logging
8
8
  from collections.abc import Callable
9
9
  from enum import Enum
10
- from typing import Any, Required, TypedDict, cast
10
+ from typing import Any, Literal, Required, TypedDict, cast
11
11
 
12
12
  from websockets.asyncio.client import ClientConnection
13
13
 
@@ -45,6 +45,7 @@ class RealtimeEvents(str, Enum): # noqa: UP042 - preserve the upstream str() re
45
45
  COMMITTED_TRANSCRIPT = "committed_transcript"
46
46
  COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS = "committed_transcript_with_timestamps"
47
47
  COMMITTED_TRANSCRIPT_ENTITIES = "committed_transcript_entities"
48
+ WARNING = "warning"
48
49
  ERROR = "error"
49
50
  AUTH_ERROR = "auth_error"
50
51
  QUOTA_EXCEEDED = "quota_exceeded"
@@ -69,9 +70,15 @@ class _SharedOptions(TypedDict, total=False):
69
70
  vad_threshold: float
70
71
  min_speech_duration_ms: int
71
72
  min_silence_duration_ms: int
73
+ # Avartha turn controls require VAD; availability is validated by the server.
74
+ turn_model: Literal["silence", "smart_turn_v3"]
75
+ turn_threshold: float
72
76
  language_code: str
73
77
  secondary_languages: list[str]
74
78
  include_timestamps: bool
79
+ # Avartha extensions: diarization also requires include_timestamps=True.
80
+ diarize: bool
81
+ include_logprobs: bool
75
82
  include_language_detection: bool
76
83
  keyterms: list[str]
77
84
  no_verbatim: bool
@@ -105,6 +112,7 @@ _NON_ERRORS = {
105
112
  RealtimeEvents.COMMITTED_TRANSCRIPT,
106
113
  RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,
107
114
  RealtimeEvents.COMMITTED_TRANSCRIPT_ENTITIES,
115
+ RealtimeEvents.WARNING,
108
116
  RealtimeEvents.ERROR,
109
117
  }
110
118
 
avartha/_speech_http.py CHANGED
@@ -5,7 +5,7 @@ import email.utils
5
5
  import json
6
6
  import random
7
7
  import time
8
- from collections.abc import Mapping
8
+ from collections.abc import Callable, Mapping
9
9
  from datetime import UTC, datetime
10
10
  from typing import Any
11
11
  from urllib.parse import quote
@@ -38,6 +38,9 @@ class HttpResponse[T]:
38
38
  def close(self) -> None:
39
39
  self._response.close()
40
40
 
41
+ def map_data[U](self, transform: Callable[[T], U]) -> "HttpResponse[U]":
42
+ return HttpResponse(self._response, transform(self.data))
43
+
41
44
 
42
45
  class AsyncHttpResponse[T]:
43
46
  """Async variant of the typed HTTP response wrapper."""
@@ -57,6 +60,9 @@ class AsyncHttpResponse[T]:
57
60
  async def close(self) -> None:
58
61
  await self._response.aclose()
59
62
 
63
+ def map_data[U](self, transform: Callable[[T], U]) -> "AsyncHttpResponse[U]":
64
+ return AsyncHttpResponse(self._response, transform(self.data))
65
+
60
66
 
61
67
  def segment(value: str) -> str:
62
68
  if value in {".", ".."}:
@@ -8,6 +8,7 @@ an Avartha extension. Transport and credentials are handled inside the SDK.
8
8
  import builtins
9
9
  from collections.abc import Sequence
10
10
 
11
+ from ._exceptions import ApiError
11
12
  from ._speech_config import RequestOptions
12
13
  from ._speech_http import (
13
14
  AsyncHttpResponse,
@@ -17,7 +18,42 @@ from ._speech_http import (
17
18
  segment,
18
19
  )
19
20
  from .types.speech import GetVoicesResponse, GetVoicesV2Response, Model, Voice, VoiceSettings
20
- from .types.speech_language import SpeechLanguageList
21
+ from .types.speech_language import SpeechLanguage, SpeechLanguageList
22
+
23
+
24
+ def _model_languages(models: list[Model], model_id: str) -> SpeechLanguageList:
25
+ matches = [model for model in models if model.model_id == model_id]
26
+ if len(matches) != 1:
27
+ raise ApiError(body=f"ASR model {model_id!r} is missing or ambiguous in the model catalog")
28
+ model = matches[0]
29
+ model_type = getattr(model, "model_type", None)
30
+ # Direct ASR runtimes expose vendor capabilities without Platform's type tag.
31
+ is_asr = model_type == "speech_to_text" or (
32
+ model_type is None
33
+ and model.can_do_text_to_speech is False
34
+ and model.can_do_voice_conversion is False
35
+ )
36
+ if not is_asr:
37
+ raise ApiError(body=f"Model {model_id!r} is not identified as ASR in the model catalog")
38
+ languages = model.languages
39
+ if languages is None:
40
+ raise ApiError(body=f"Language metadata is unavailable for ASR model {model_id!r}")
41
+ if not isinstance(languages, list) or any(
42
+ not isinstance(getattr(language, "language_id", None), str)
43
+ or not language.language_id
44
+ or not isinstance(getattr(language, "name", None), str)
45
+ or not language.name
46
+ for language in languages
47
+ ):
48
+ raise ApiError(body=f"Invalid language metadata for ASR model {model_id!r}")
49
+ return SpeechLanguageList(
50
+ object="list",
51
+ model=model_id,
52
+ language_hints_supported=bool(languages),
53
+ languages=[
54
+ SpeechLanguage(code=language.language_id, name=language.name) for language in languages
55
+ ],
56
+ )
21
57
 
22
58
 
23
59
  class RawVoices:
@@ -137,12 +173,13 @@ class RawLanguages:
137
173
  def list(
138
174
  self, *, model_id: str, request_options: RequestOptions | None = None
139
175
  ) -> HttpResponse[SpeechLanguageList]:
140
- return self._client.get(
141
- "v1/speech-to-text/languages",
142
- SpeechLanguageList,
143
- params={"model_id": model_id},
176
+ response = self._client.get(
177
+ "v1/models",
178
+ builtins.list[Model],
179
+ params={},
144
180
  request_options=request_options,
145
181
  )
182
+ return response.map_data(lambda models: _model_languages(models, model_id))
146
183
 
147
184
 
148
185
  class Voices:
@@ -361,12 +398,13 @@ class AsyncRawLanguages:
361
398
  async def list(
362
399
  self, *, model_id: str, request_options: RequestOptions | None = None
363
400
  ) -> AsyncHttpResponse[SpeechLanguageList]:
364
- return await self._client.get(
365
- "v1/speech-to-text/languages",
366
- SpeechLanguageList,
367
- params={"model_id": model_id},
401
+ response = await self._client.get(
402
+ "v1/models",
403
+ builtins.list[Model],
404
+ params={},
368
405
  request_options=request_options,
369
406
  )
407
+ return response.map_data(lambda models: _model_languages(models, model_id))
370
408
 
371
409
 
372
410
  class AsyncVoices:
avartha/client.py CHANGED
@@ -16,6 +16,12 @@ class Avartha:
16
16
 
17
17
  openai_options, elevenlabs_options and control_options are forwarded to
18
18
  their respective constructors (for timeouts, transports, retry settings).
19
+
20
+ Live STT through elevenlabs.speech_to_text.realtime remains asynchronous.
21
+ Await connect(), send(), commit(), and the transcription connection's close().
22
+ Register callbacks with on() without awaiting. Use AsyncAvartha for an async
23
+ application.
24
+ Close live sessions separately before closing this client.
19
25
  """
20
26
 
21
27
  def __init__(
@@ -30,6 +36,9 @@ class Avartha:
30
36
  elevenlabs_options: dict[str, Any] | None = None,
31
37
  control_options: dict[str, Any] | None = None,
32
38
  ) -> None:
39
+ _config.validate_tier(tier)
40
+ for options in (openai_options, elevenlabs_options):
41
+ _config.validate_tier((options or {}).get("tier", "serverless"))
33
42
  key, root = _config.api_key(api_key), _config.platform_url(base_url)
34
43
  self._elevenlabs_base_url = _config.elevenlabs_url(
35
44
  elevenlabs_base_url, root=root, tier=tier
@@ -99,6 +108,9 @@ class AsyncAvartha:
99
108
  elevenlabs_options: dict[str, Any] | None = None,
100
109
  control_options: dict[str, Any] | None = None,
101
110
  ) -> None:
111
+ _config.validate_tier(tier)
112
+ for options in (openai_options, elevenlabs_options):
113
+ _config.validate_tier((options or {}).get("tier", "serverless"))
102
114
  key, root = _config.api_key(api_key), _config.platform_url(base_url)
103
115
  self._elevenlabs_base_url = _config.elevenlabs_url(
104
116
  elevenlabs_base_url, root=root, tier=tier
avartha/elevenlabs.py CHANGED
@@ -45,6 +45,7 @@ class _Client:
45
45
  environment: str | Enum | None = None,
46
46
  websocket_limits: WebSocketLimits | None = None,
47
47
  ) -> None:
48
+ _config.validate_tier(tier)
48
49
  self.api_key = _config.api_key(api_key)
49
50
  if base_url is None and environment is not None:
50
51
  base_url = str(environment.value) if isinstance(environment, Enum) else environment
avartha/openai.py CHANGED
@@ -121,6 +121,7 @@ class _Client:
121
121
  _enforce_credentials: bool = True,
122
122
  tier: Tier = "serverless",
123
123
  ) -> None:
124
+ _config.validate_tier(tier)
124
125
  if data_residency is not None:
125
126
  raise ConfigurationError(
126
127
  "data_residency selects a vendor host; use an Avartha base_url."
@@ -3,4 +3,6 @@
3
3
  from typing import Literal, TypeAlias
4
4
 
5
5
  __all__ = ["RealtimeReasoningEffort"]
6
- RealtimeReasoningEffort: TypeAlias = Literal["minimal", "low", "medium", "high", "xhigh"]
6
+ RealtimeReasoningEffort: TypeAlias = Literal[
7
+ "none", "minimal", "low", "medium", "high", "xhigh", "max"
8
+ ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: avartha-python-sdk
3
- Version: 0.0.4
3
+ Version: 0.0.6
4
4
  Summary: Python clients for Avartha Realtime text, streaming speech, and platform management
5
5
  Author-email: "Avartha Inc." <team@avartha.ai>
6
6
  License-Expression: LicenseRef-Avartha-Proprietary
@@ -47,9 +47,10 @@ export AVARTHA_API_KEY='avk_...'
47
47
  export AVARTHA_BASE_URL='https://platform.preview.avartha.ai'
48
48
  ```
49
49
 
50
- Clients default to the preview platform and the `serverless` tier. Set
51
- `AVARTHA_BASE_URL` for another environment or `tier="dedicated"` for dedicated
52
- inference. Use model and voice IDs available to your workspace and tier.
50
+ Clients default to the preview platform and support only serverless inference.
51
+ Set `AVARTHA_BASE_URL` for another environment. Use model and voice IDs available
52
+ to your workspace. Unsupported tier values and dedicated inference URLs raise
53
+ `ConfigurationError` locally before any request.
53
54
 
54
55
  ## Discover models
55
56
 
@@ -107,7 +108,7 @@ Inference consumes credits.
107
108
  | Multi-context TTS | `ElevenLabs` / `AsyncElevenLabs`: `text_to_speech.connect_multi_context` |
108
109
  | Realtime ASR | `await client.speech_to_text.realtime.connect(...)` on either speech client |
109
110
  | Speech discovery | Speech clients: models, voices, voice settings, ASR languages |
110
- | Workspaces, members, invitations, endpoints | `Control` / `AsyncControl` |
111
+ | Workspaces, members, invitations | `Control` / `AsyncControl` |
111
112
  | Combined inference and management | `Avartha` / `AsyncAvartha` |
112
113
 
113
114
  Managed inference uses WebSockets; Chat Completions, Responses, HTTP TTS,
@@ -1,27 +1,27 @@
1
1
  avartha/__init__.py,sha256=fusR2DiiRSAaZCIhLrxRdyJWjA8p9uL4PAVGXbArjXM,2821
2
- avartha/_config.py,sha256=IqEdSm8MPQOXThcs_ew98Eys4R7d4l-5ZYAiPzEm29Y,5880
2
+ avartha/_config.py,sha256=mzaHiqYH_7N4okLijiRbJlCNyxvZn4Ni_A_OAZDtOTA,6314
3
3
  avartha/_exceptions.py,sha256=_QY7SEw2nqyOz3pNxDWi40GW1xqB3EZxJ0t4iJ-YBpQ,1588
4
4
  avartha/_http_errors.py,sha256=gU8eapqYcI7Q3M8lAxwVH-qwz-TnQf2loBThFKG0ka8,406
5
5
  avartha/_models.py,sha256=KB4PeFvktbSOKbT-qMX5tjsExEg9cwufZ3ourx8GcVI,7331
6
6
  avartha/_openai_http.py,sha256=8jA9ywFi4OqrAwYn9MThlgiEDXkao2Thja6VpX8fikU,10149
7
7
  avartha/_openai_http_errors.py,sha256=MRZJMddDPVFMEo_KOlwsmkKXMZB6H39tLut5KyDFRaI,2123
8
8
  avartha/_pacing.py,sha256=31ajT2i7ChcQJBZJCBwUDrTiMZrlSv6ziQwgqGIKvlc,1807
9
- avartha/_realtime_asr.py,sha256=nLqDGptSL46mjESDqQVHkcu5MtgQYBv1GIl1tRK2L44,11695
9
+ avartha/_realtime_asr.py,sha256=Cdy8xDuU4N6c-VCZof7UmVtkFsCq4UlSgx_rw1y88Mc,12038
10
10
  avartha/_realtime_openai.py,sha256=Su9xfsYmYCIMPwxBKuVbQp_tWoC9lUI8gidmexGmIow,23226
11
11
  avartha/_realtime_resources.py,sha256=rZj8hBYuLP9kTX56hhXTGE8R3crW_Wfmn46VY_dL3TM,7489
12
12
  avartha/_realtime_tts.py,sha256=j6X2REqTNr2een-G47K7248k29kamr113EG8CrmrXPA,33763
13
13
  avartha/_sentinels.py,sha256=eX9pg8L8DMWOLrNLfJKWjcFHC5GZO0I_snULCum0ehg,433
14
14
  avartha/_speech_config.py,sha256=jL0M8Z6MGXzfgf3Lm7QMMEKDtVXCW5-jrqz5WEtu9g4,1781
15
- avartha/_speech_http.py,sha256=LNcHPLleuLDQNfMIlUD-ijua5h4VPhqXAmcDrXB8Cdg,10632
16
- avartha/_speech_resources.py,sha256=61DKhTnz_bpOTjY_CpeR0mXs9ui9-XeaYgpSDNk_NpE,16954
15
+ avartha/_speech_http.py,sha256=DXTqPOzLsGsPnyvuuokmfN0eT9OScWGMZj1iJm6oWPc,10940
16
+ avartha/_speech_resources.py,sha256=zBJHkQkllmWG_bmTIhwmjz9Nf7w4JMNkKJimnaIL3_4,18628
17
17
  avartha/_unsupported.py,sha256=qrbsxi2SL6co5M2uLs4fTVOoISuUm58khoayeL22gPE,637
18
18
  avartha/_websocket.py,sha256=9R05huh1n8spuyg1n_aIJN0Uk_kLG7BbNPD88wogIKY,855
19
19
  avartha/_ws_state.py,sha256=Im2W-UJtCBimYU5vlYBbVRL06DGwuw0Q5ufy4sSGIeM,5049
20
- avartha/client.py,sha256=jm4CYnzORxtWn2LiVIfBff53dNsUiJjuFb6V01lxBTQ,5006
20
+ avartha/client.py,sha256=vNZmmWWdGhSxdwb-lqBbioP4DK4MpoUgFWLJfqR5zxo,5677
21
21
  avartha/control.py,sha256=jB7I4ccDBaVh2OMLZXhEeAsGNparMLURZQXnh-I__ss,23894
22
- avartha/elevenlabs.py,sha256=bZ0yoloj_I58CpeGe-UVQUdjUlQkGWXCx7qn017lXmQ,5426
22
+ avartha/elevenlabs.py,sha256=tFugwzE8XKbQZsK7P6w6fGXGz76Udp5vt039uVwzOi8,5462
23
23
  avartha/errors.py,sha256=8HMwf2P4VXwk4tRC5ZwceVOUFkRD0wEu9Bn1gljIj0Y,1333
24
- avartha/openai.py,sha256=Xfdf12krOkQv_r8NmCHTfi9JluiethE_NDni-gN3jEI,11919
24
+ avartha/openai.py,sha256=9xlmNdx0E2HWYUf5tEI1UbS82y7XerY1T76Jx7sQv18,11955
25
25
  avartha/pagination.py,sha256=_5qt1bAPKQiXjrHcD0J93yNpBKBhbTRzZfnL9WCUwMw,1471
26
26
  avartha/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  avartha/conversational_ai/__init__.py,sha256=Pc7h5OczniKnF54UvMYVILdU-pCXyZ9YnxtzggBc294,217
@@ -122,7 +122,7 @@ avartha/types/realtime/realtime_mcp_tool_execution_error_param.py,sha256=ESoZmAb
122
122
  avartha/types/realtime/realtime_mcphttp_error.py,sha256=LsYLVdqDZ4jUGvlUTpSdKAdgad73-0ls2tk4Z6M5nX8,269
123
123
  avartha/types/realtime/realtime_mcphttp_error_param.py,sha256=X1dGkZnFu8MQqQU78gvOLPHIWR0L7ZJKG_x7hb1zCPQ,370
124
124
  avartha/types/realtime/realtime_reasoning.py,sha256=5v3tvYRDDjnJTpT0amG9jLd1dxV2Qy7mAenDnhmDhTc,307
125
- avartha/types/realtime/realtime_reasoning_effort.py,sha256=ayokU5AgzVYViDq0nB7V0TBW_Ulbn5DTPKTdyjZK0n0,230
125
+ avartha/types/realtime/realtime_reasoning_effort.py,sha256=LFk2Oyv60GonPWfBI7FM0MFrnTCviZWNWPey6aYcRK8,251
126
126
  avartha/types/realtime/realtime_reasoning_param.py,sha256=YIMK-W-iZq3-PqBQFw8nYC4dIrhDbQJtkRqjvmZuwY8,355
127
127
  avartha/types/realtime/realtime_response.py,sha256=mCQWWODuBHpEjQfWevtJ8BZ7lYmWxhhc415hWrMjGl8,1493
128
128
  avartha/types/realtime/realtime_response_create_audio_output.py,sha256=h7Y4MqXEViQdliq81eLn601kGEnxam5ZCaPWNeO4VHU,741
@@ -248,9 +248,9 @@ avartha/types/speech/voice_sharing_response.py,sha256=KRO9Rq80wTYV5of2bRrFTVJSDf
248
248
  avartha/types/speech/voice_sharing_response_category.py,sha256=0yFm6b7R4piHdNTdBWTQYKpNPxW8r2HJvnMdVpT7s5U,241
249
249
  avartha/types/speech/voice_sharing_state.py,sha256=8EBRbrRaDhUEap39kDXmt54AYeG172fnuBmRV1TSHP4,201
250
250
  avartha/types/speech/voice_verification_response.py,sha256=IL_Z1OTIiR9mvuaWzF9-GsL7pMRZ5fJeV_W3FfjLTTY,770
251
- avartha_python_sdk-0.0.4.dist-info/licenses/LICENSE,sha256=1ulXrK7aq7kBXX1scK6IiOgnbwqpmK6kWIB3CYznVG8,1135
252
- avartha_python_sdk-0.0.4.dist-info/licenses/THIRD_PARTY_NOTICES,sha256=R62M0553miTc6E42IVFLUIYkLFim_mf_Abq1lty0IaQ,13081
253
- avartha_python_sdk-0.0.4.dist-info/METADATA,sha256=czBiWHsr1vStz2ovwxvukAfTPzYZDqDdmdstwZvGm_g,5579
254
- avartha_python_sdk-0.0.4.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
255
- avartha_python_sdk-0.0.4.dist-info/top_level.txt,sha256=cj2kDXl33tO2IPWPduSTukcwozPnYKOsVUVE9QZRUr0,8
256
- avartha_python_sdk-0.0.4.dist-info/RECORD,,
251
+ avartha_python_sdk-0.0.6.dist-info/licenses/LICENSE,sha256=1ulXrK7aq7kBXX1scK6IiOgnbwqpmK6kWIB3CYznVG8,1135
252
+ avartha_python_sdk-0.0.6.dist-info/licenses/THIRD_PARTY_NOTICES,sha256=R62M0553miTc6E42IVFLUIYkLFim_mf_Abq1lty0IaQ,13081
253
+ avartha_python_sdk-0.0.6.dist-info/METADATA,sha256=WVETx80YlFn1-OFO_CSQpGyMenSjNVrnQFD5Q-mNoPg,5633
254
+ avartha_python_sdk-0.0.6.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
255
+ avartha_python_sdk-0.0.6.dist-info/top_level.txt,sha256=cj2kDXl33tO2IPWPduSTukcwozPnYKOsVUVE9QZRUr0,8
256
+ avartha_python_sdk-0.0.6.dist-info/RECORD,,