agora-python-server-sdk 2.4.2__tar.gz → 2.4.4__tar.gz

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.
Files changed (49) hide show
  1. {agora_python_server_sdk-2.4.2/agora_python_server_sdk.egg-info → agora_python_server_sdk-2.4.4}/PKG-INFO +11 -1
  2. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/README.md +11 -1
  3. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/__init__.py +6 -1
  4. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/_ctypes_handle/_local_user_observer.py +1 -1
  5. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/agora_base.py +74 -2
  6. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/external_audio_processor.py +4 -3
  7. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/rtc_connection.py +5 -0
  8. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/utils/audio_consumer.py +1 -1
  9. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4/agora_python_server_sdk.egg-info}/PKG-INFO +11 -1
  10. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/setup.py +5 -3
  11. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/MANIFEST.in +0 -0
  12. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/__init__.py +0 -0
  13. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/_ctypes_handle/_audio_frame_observer.py +0 -0
  14. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/_ctypes_handle/_ctypes_data.py +0 -0
  15. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/_ctypes_handle/_rtc_connection_observer.py +0 -0
  16. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/_ctypes_handle/_video_encoded_frame_observer.py +0 -0
  17. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/_ctypes_handle/_video_frame_observer.py +0 -0
  18. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/_utils/globals.py +0 -0
  19. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/agora_parameter.py +0 -0
  20. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/agora_service.py +0 -0
  21. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/audio_encoded_frame_sender.py +0 -0
  22. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/audio_frame_observer.py +0 -0
  23. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/audio_pcm_data_sender.py +0 -0
  24. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/audio_sessionctrl.py +0 -0
  25. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/audio_vad_manager.py +0 -0
  26. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/local_audio_track.py +0 -0
  27. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/local_user.py +0 -0
  28. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/local_user_observer.py +0 -0
  29. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/local_video_track.py +0 -0
  30. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/media_node_factory.py +0 -0
  31. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/remote_audio_track.py +0 -0
  32. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/remote_video_track.py +0 -0
  33. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/rtc_connection_observer.py +0 -0
  34. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/utils/vad_dump.py +0 -0
  35. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/video_encoded_frame_observer.py +0 -0
  36. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/video_encoded_image_sender.py +0 -0
  37. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/video_frame_observer.py +0 -0
  38. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/video_frame_sender.py +0 -0
  39. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtc/voice_detection.py +0 -0
  40. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtm/__init__.py +0 -0
  41. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtm/_ctypes_handle/_ctypes_data.py +0 -0
  42. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtm/rtm_base.py +0 -0
  43. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtm/rtm_client.py +0 -0
  44. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora/rtm/rtm_event_handler.py +0 -0
  45. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora_python_server_sdk.egg-info/SOURCES.txt +0 -0
  46. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora_python_server_sdk.egg-info/dependency_links.txt +0 -0
  47. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/agora_python_server_sdk.egg-info/top_level.txt +0 -0
  48. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/pyproject.toml +0 -0
  49. {agora_python_server_sdk-2.4.2 → agora_python_server_sdk-2.4.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: agora_python_server_sdk
3
- Version: 2.4.2
3
+ Version: 2.4.4
4
4
  Summary: A Python SDK for Agora Server
5
5
  Home-page: https://github.com/AgoraIO-Extensions/Agora-Python-Server-SDK
6
6
  Classifier: Intended Audience :: Developers
@@ -64,6 +64,16 @@ python agora_rtc/examples/example_audio_pcm_send.py --appId=xxx --channelId=xxx
64
64
  ```
65
65
 
66
66
  # Change log
67
+
68
+ ## 2026.04.30 Release Version 2.4.4
69
+
70
+ - **Bugfix**: Remove a print info
71
+ - **Update**: Update arm rtc sdk
72
+
73
+ ## 2026.01.15 Release Version 2.4.3
74
+
75
+ - **Bugfix**: Fixed a bug to reset `pcm_consumer_` when calling `interrupt_audio`.
76
+
67
77
  ## 2025.12.29 Release Version 2.4.2
68
78
 
69
79
  - Added **incremental send mode** support.
@@ -49,6 +49,16 @@ python agora_rtc/examples/example_audio_pcm_send.py --appId=xxx --channelId=xxx
49
49
  ```
50
50
 
51
51
  # Change log
52
+
53
+ ## 2026.04.30 Release Version 2.4.4
54
+
55
+ - **Bugfix**: Remove a print info
56
+ - **Update**: Update arm rtc sdk
57
+
58
+ ## 2026.01.15 Release Version 2.4.3
59
+
60
+ - **Bugfix**: Fixed a bug to reset `pcm_consumer_` when calling `interrupt_audio`.
61
+
52
62
  ## 2025.12.29 Release Version 2.4.2
53
63
 
54
64
  - Added **incremental send mode** support.
@@ -577,4 +587,4 @@ VAD: Good afternoon, what are some fun places to visit in Beijing?
577
587
 
578
588
 
579
589
 
580
- If latency is a concern, you can lower this value, or consult with the development team to determine how to manage latency while ensuring semantic continuity in speech recognition. This will help avoid the AI being interrupted too sensitively.
590
+ If latency is a concern, you can lower this value, or consult with the development team to determine how to manage latency while ensuring semantic continuity in speech recognition. This will help avoid the AI being interrupted too sensitively.
@@ -142,6 +142,10 @@ def _check_download_and_extract_sdk():
142
142
  mac_sdk="https://download.agora.io/sdk/release/agora_sdk_mac_v4.4.32.154_26308_FULL_20251210_1756_994156_20251021_1427-3a.zip"
143
143
 
144
144
 
145
+ #date:20260413 for new apm algorithm test
146
+ linux_sdk="https://download.agora.io/sdk/release/agora_rtc_sdk_x86_64-linux-gnu-Agora_Native_SDK_for_Linux_x64_zhourui_27758_SERVER_20260413_2228_1072329_20251021_1427-3a.zip"
147
+ mac_sdk="https://download.agora.io/sdk/release/agora_sdk_mac_Agora_Native_SDK_for_Mac_zhourui_27299_FULL_20260402_1852_1059349_20251021_1427-3a.zip"
148
+
145
149
 
146
150
 
147
151
  linux_libfile_path = os.path.join(sdk_library_dir, "libagora_rtc_sdk.so")
@@ -170,7 +174,8 @@ def _check_download_and_extract_sdk():
170
174
  #url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.31-20250307_175457-603878.zip"
171
175
  #url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20250425_150503-675674.zip"
172
176
  #url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20251009_145437-921455.zip"
173
- url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20251009_145437-921455_20251023_1538.zip"
177
+ #url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20251009_145437-921455_20251023_1538.zip"
178
+ url = "https://download.agora.io/sdk/release/agora_rtc_sdk_aarch64-linux-gnu-v4.4.32.163_27411_SERVER_20260211_103529-1009669.zip"
174
179
  rtc_md5 = "5c002f25d2b381e353082da4f835b4f2"
175
180
 
176
181
  '''
@@ -171,7 +171,7 @@ class RTCLocalUserObserverInner(ctypes.Structure):
171
171
  def _on_audio_track_publication_failure(self, local_user_handle, local_audio_track_handle, error_code):
172
172
  logger.debug(f"LocalUserCB _on_audio_track_publication_failure: {local_user_handle}, {local_audio_track_handle}, {error_code}")
173
173
  audio_track = self.local_user.get_audio_map(local_audio_track_handle)
174
- self.local_user.del_audio_map(local_audio_track_handle)
174
+ self.local_user._del_audio_map(local_audio_track_handle)
175
175
  self.local_user_observer.on_audio_track_publication_failure(self.local_user, audio_track, error_code)
176
176
 
177
177
  def _on_local_audio_track_state_changed(self, local_user_handle, local_audio_track_handle, state, error):
@@ -312,7 +312,43 @@ class AiAecConfig:
312
312
  @dataclass(kw_only=True)
313
313
  class BghvsCConfig:
314
314
  enabled: bool = True
315
- vad_thr: float = 0.8
315
+ frmSz: int = 160
316
+ smplFrq: int = 16000
317
+ inBuildVadOpen: int = 1
318
+ mainPoolFN: int = 1000
319
+ farPoolFN: int = 6000
320
+ mainTimeOutFN: int = 30000
321
+ farTimeOutFN: int = 60000
322
+ sosPersistentLen: int = 160
323
+ postPaddingLenOfEOS: int = 480
324
+ unVoiceLenOfTriggerEOS: int = 480
325
+ bvcSOSLen: int = 160
326
+ bvcPostEOSLen: int = 480
327
+ bvcEOSLen: int = 480
328
+ vobvcDelay: int = 12
329
+ bvcVoMthOpen: int = 1
330
+ bvcSpecMtOpen: int = 0
331
+ logLv: int = 0
332
+ voiceProbThr: float = 0.5
333
+ vadVolumeThr: int = 60
334
+ bvcBabbleVolumeThr: int = 60
335
+ powScale: float = 0.2
336
+ powRatio: float = 0.1
337
+ bvcSppGain: float = 0
338
+ bvcEnvTailDownFN: int = 0
339
+ bvcEnvMaxSpeed: int = 5
340
+ envTrackMode: int = 1
341
+ bvcDownRatio: float = 0.95
342
+ bvcDownDB: float = -20
343
+ bvcFarEnvThr: float = 0.000
344
+ bvcMainEnvRatio: float = 0.8
345
+ bvcFarEnvRatio: float = 0.8
346
+ bvcMainVadThr: float = 0.5
347
+ bvcFarVadThr: float = 0.4
348
+ bvcEnvResultSmoothRatio: float = 0.97
349
+ bvcEnvResultSmoothRatio1: float = 0.98
350
+ bvcMainSpkSmoothRatio: float = 0.99
351
+ quickSelectInterval: int = 1
316
352
 
317
353
  @dataclass(kw_only=True)
318
354
  class AgcConfig:
@@ -335,7 +371,43 @@ class APMConfig:
335
371
  },
336
372
  "bghvs": {
337
373
  "enabled": self.bghvs_c_config.enabled,
338
- "vadThr": self.bghvs_c_config.vad_thr
374
+ "frmSz": self.bghvs_c_config.frmSz,
375
+ "smplFrq": self.bghvs_c_config.smplFrq,
376
+ "inBuildVadOpen": self.bghvs_c_config.inBuildVadOpen,
377
+ "mainPoolFN": self.bghvs_c_config.mainPoolFN,
378
+ "farPoolFN": self.bghvs_c_config.farPoolFN,
379
+ "mainTimeOutFN": self.bghvs_c_config.mainTimeOutFN,
380
+ "farTimeOutFN": self.bghvs_c_config.farTimeOutFN,
381
+ "sosPersistentLen": self.bghvs_c_config.sosPersistentLen,
382
+ "postPaddingLenOfEOS": self.bghvs_c_config.postPaddingLenOfEOS,
383
+ "unVoiceLenOfTriggerEOS": self.bghvs_c_config.unVoiceLenOfTriggerEOS,
384
+ "bvcSOSLen": self.bghvs_c_config.bvcSOSLen,
385
+ "bvcPostEOSLen": self.bghvs_c_config.bvcPostEOSLen,
386
+ "bvcEOSLen": self.bghvs_c_config.bvcEOSLen,
387
+ "vobvcDelay": self.bghvs_c_config.vobvcDelay,
388
+ "bvcVoMthOpen": self.bghvs_c_config.bvcVoMthOpen,
389
+ "bvcSpecMtOpen": self.bghvs_c_config.bvcSpecMtOpen,
390
+ "logLv": self.bghvs_c_config.logLv,
391
+ "voiceProbThr": self.bghvs_c_config.voiceProbThr,
392
+ "vadVolumeThr": self.bghvs_c_config.vadVolumeThr,
393
+ "bvcBabbleVolumeThr": self.bghvs_c_config.bvcBabbleVolumeThr,
394
+ "powScale": self.bghvs_c_config.powScale,
395
+ "powRatio": self.bghvs_c_config.powRatio,
396
+ "bvcSppGain": self.bghvs_c_config.bvcSppGain,
397
+ "bvcEnvTailDownFN": self.bghvs_c_config.bvcEnvTailDownFN,
398
+ "bvcEnvMaxSpeed": self.bghvs_c_config.bvcEnvMaxSpeed,
399
+ "envTrackMode": self.bghvs_c_config.envTrackMode,
400
+ "bvcDownRatio": self.bghvs_c_config.bvcDownRatio,
401
+ "bvcDownDB": self.bghvs_c_config.bvcDownDB,
402
+ "bvcFarEnvThr": self.bghvs_c_config.bvcFarEnvThr,
403
+ "bvcMainEnvRatio": self.bghvs_c_config.bvcMainEnvRatio,
404
+ "bvcFarEnvRatio": self.bghvs_c_config.bvcFarEnvRatio,
405
+ "bvcMainVadThr": self.bghvs_c_config.bvcMainVadThr,
406
+ "bvcFarVadThr": self.bghvs_c_config.bvcFarVadThr,
407
+ "bvcEnvResultSmoothRatio": self.bghvs_c_config.bvcEnvResultSmoothRatio,
408
+ "bvcEnvResultSmoothRatio1": self.bghvs_c_config.bvcEnvResultSmoothRatio1,
409
+ "bvcMainSpkSmoothRatio": self.bghvs_c_config.bvcMainSpkSmoothRatio,
410
+ "quickSelectInterval": self.bghvs_c_config.quickSelectInterval,
339
411
  },
340
412
  "agc": {
341
413
  "enabled": self.agc_config.enabled
@@ -87,7 +87,7 @@ class ExternalAudioProcessor:
87
87
  self._is_initialized = False
88
88
  #do create sender and track
89
89
  self._pcm_sender = self._engine.media_node_factory.create_audio_pcm_data_sender()
90
- self._local_audio_track = self._engine._create_custom_audio_track_pcm(self._pcm_sender, AudioScenarioType.AUDIO_SCENARIO_DEFAULT)
90
+ self._local_audio_track = self._engine._create_custom_audio_track_pcm(self._pcm_sender, AudioScenarioType.AUDIO_SCENARIO_DEFAULT, False)
91
91
  self._audio_sink = self._create_audio_sink()
92
92
  self._vad_instance = None
93
93
  self._observer = None
@@ -207,12 +207,13 @@ class ExternalAudioProcessor:
207
207
 
208
208
  return ret
209
209
  def _do_result_frame(self, audio_frame: AudioFrame):
210
- print(f"ExternalAudioProcessor _do_result_frame: audio_frame voice_prob {audio_frame.voice_prob}, rms {audio_frame.rms}, pitch {audio_frame.pitch}, far_field_flag {audio_frame.far_field_flag}")
210
+ #print(f"ExternalAudioProcessor _do_result_frame: audio_frame voice_prob {audio_frame.voice_prob}, rms {audio_frame.rms}, pitch {audio_frame.pitch}, far_field_flag {audio_frame.far_field_flag}")
211
+ #pass
211
212
  ret = 0
212
213
  data = None
213
214
  if self._vad_instance is not None:
214
215
  ret, data = self._vad_instance.process(audio_frame)
215
- print(f"ExternalAudioProcessor _do_result_frame: vad result ret {ret}, data length {len(data)}")
216
+ #print(f"ExternalAudioProcessor _do_result_frame: vad result ret {ret}, data length {len(data)}")
216
217
  #do callback now
217
218
  if self._observer is not None:
218
219
  self._observer.on_processed_audio_frame(self, audio_frame, ret, data)
@@ -354,6 +354,8 @@ class RTCConnection:
354
354
  ret = -1000
355
355
  if self.local_user and self._audio_track:
356
356
  ret = self.local_user._unpublish_audio(self._audio_track)
357
+ #reset pcm consumer state now
358
+ self._pcm_consume_stats.reset()
357
359
  return ret
358
360
  def publish_video(self)->int:
359
361
  ret = -1000
@@ -374,6 +376,9 @@ class RTCConnection:
374
376
  self.publish_audio()
375
377
  elif self._audio_track:
376
378
  self._audio_track.clear_sender_buffer()
379
+
380
+ # reset pcm consumer to new state now
381
+ self._pcm_consume_stats.reset()
377
382
  return ret
378
383
  def send_audio_meta_data(self, data)->int:
379
384
  ret = -1000
@@ -187,7 +187,7 @@ class PcmConsumeStats:
187
187
  def is_push_to_rtc_completed(self) -> bool:
188
188
  now = int(time.time()*1000)
189
189
  diff = now - self.startTime
190
- print(f"is_push_to_rtc_completed: {diff}, {self.duration}")
190
+ #print(f"is_push_to_rtc_completed: {diff}, {self.duration}")
191
191
  if diff > self.duration + int(180):
192
192
  return True
193
193
  return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: agora_python_server_sdk
3
- Version: 2.4.2
3
+ Version: 2.4.4
4
4
  Summary: A Python SDK for Agora Server
5
5
  Home-page: https://github.com/AgoraIO-Extensions/Agora-Python-Server-SDK
6
6
  Classifier: Intended Audience :: Developers
@@ -64,6 +64,16 @@ python agora_rtc/examples/example_audio_pcm_send.py --appId=xxx --channelId=xxx
64
64
  ```
65
65
 
66
66
  # Change log
67
+
68
+ ## 2026.04.30 Release Version 2.4.4
69
+
70
+ - **Bugfix**: Remove a print info
71
+ - **Update**: Update arm rtc sdk
72
+
73
+ ## 2026.01.15 Release Version 2.4.3
74
+
75
+ - **Bugfix**: Fixed a bug to reset `pcm_consumer_` when calling `interrupt_audio`.
76
+
67
77
  ## 2025.12.29 Release Version 2.4.2
68
78
 
69
79
  - Added **incremental send mode** support.
@@ -92,14 +92,16 @@ class CustomInstallCommand(install):
92
92
  url="https://download.agora.io/sdk/release/agora_rtc_sdk_x86_64-linux-gnu-v4.4.32.154_26982_SERVER_20251210_1745_994155_20251021_1427-3a.zip"
93
93
  mac_sdk="https://download.agora.io/sdk/release/agora_sdk_mac_v4.4.32.154_26308_FULL_20251210_1756_994156_20251021_1427-3a.zip"
94
94
 
95
-
95
+ #date:20260413 for new apm algorithm test
96
+ #url="https://download.agora.io/sdk/release/agora_rtc_sdk_x86_64-linux-gnu-Agora_Native_SDK_for_Linux_x64_zhourui_27758_SERVER_20260413_2228_1072329_20251021_1427-3a.zip"
97
+ #mac_sdk="https://download.agora.io/sdk/release/agora_sdk_mac_Agora_Native_SDK_for_Mac_zhourui_27299_FULL_20260402_1852_1059349_20251021_1427-3a.zip"
96
98
 
97
99
  if sys.platform == 'darwin':
98
100
  url = mac_sdk
99
101
 
100
102
 
101
103
  if arch == "aarch64" and sys.platform == 'linux':
102
- url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20251009_145437-921455.zip"
104
+ url = "https://download.agora.io/sdk/release/agora_rtc_sdk_aarch64-linux-gnu-v4.4.32.163_27411_SERVER_20260211_103529-1009669.zip"
103
105
 
104
106
 
105
107
 
@@ -126,7 +128,7 @@ class CustomInstallCommand(install):
126
128
 
127
129
  setup(
128
130
  name='agora_python_server_sdk',
129
- version='2.4.2',
131
+ version='2.4.4',
130
132
  description='A Python SDK for Agora Server',
131
133
  long_description=open('README.md').read(),
132
134
  long_description_content_type='text/markdown',