@@ -12,7 +12,13 @@ generations:
1212 cli_version: unknown
1313 generator_versions:
1414 fernapi/fern-python-sdk: 4.61.0
15- current_generation: fe01fd08770ba763f2599c946a16b6b338e6e86f
15+ - commit_sha: b21155d165c5eda96bfae671e090ae9c98eceabb
16+ tree_hash: 068f2ae7fcb9908bbbafaf7be57a4354252aac95
17+ timestamp: 2026-08-17T21:03:59.718Z
18+ cli_version: unknown
19+ generator_versions:
20+ fernapi/fern-python-sdk: 4.61.0
21+ current_generation: b21155d165c5eda96bfae671e090ae9c98eceabb
1622patches:
1723 - id: patch-ece510a1
1824 content_hash: sha256:2296c327028f8024cba5c6ffccf276bca01550441a8ddc9ec88499b9e056f429
@@ -171,3 +177,279 @@ patches:
171177 examples=["jupyter"]
172178 microphone=["sounddevice"]
173179 status: unresolved
180+ - id: patch-660ad969
181+ content_hash: sha256:a199931206f95b99cdf7c48c199c60c6d567cebaf9884f65e824be4d8a895d97
182+ original_commit: 660ad9694a7a4fa844262c17134bc06011588a8a
183+ original_message: bump version to 0.14.0 (#488)
184+ original_author: Zachary Greathouse <26175515+zgreathouse@users.noreply.github.com>
185+ base_generation: 3955934c6659aac3d3cac19ef77ac519e7146fb3
186+ files:
187+ - pyproject.toml
188+ - src/hume/core/client_wrapper.py
189+ patch_content: |
190+ diff --git a/pyproject.toml b/pyproject.toml
191+ index f0fe992..29341d2 100644
192+ --- a/pyproject.toml
193+ +++ b/pyproject.toml
194+ @@ -4,7 +4,7 @@ dynamic = ["version"]
195+
196+ [tool.poetry]
197+ name = "hume"
198+ -version = "0.13.14"
199+ +version = "0.14.0"
200+ description = "A Python SDK for Hume AI"
201+ readme = "README.md"
202+ authors = []
203+ diff --git a/src/hume/core/client_wrapper.py b/src/hume/core/client_wrapper.py
204+ index df93ad4..b22e882 100644
205+ --- a/src/hume/core/client_wrapper.py
206+ +++ b/src/hume/core/client_wrapper.py
207+ @@ -28,12 +28,12 @@ class BaseClientWrapper:
208+ import platform
209+
210+ headers: typing.Dict[str, str] = {
211+ - "User-Agent": "hume/0.13.14",
212+ + "User-Agent": "hume/0.14.0",
213+ "X-Fern-Language": "Python",
214+ "X-Fern-Runtime": f"python/{platform.python_version()}",
215+ "X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}",
216+ "X-Fern-SDK-Name": "hume",
217+ - "X-Fern-SDK-Version": "0.13.14",
218+ + "X-Fern-SDK-Version": "0.14.0",
219+ **(self.get_custom_headers() or {}),
220+ }
221+ if self.api_key is not None:
222+ theirs_snapshot:
223+ pyproject.toml: |
224+ [project]
225+ name = "hume"
226+ dynamic = ["version"]
227+
228+ [tool.poetry]
229+ name = "hume"
230+ version = "0.14.0"
231+ description = "A Python SDK for Hume AI"
232+ readme = "README.md"
233+ authors = []
234+ keywords = [
235+ "hume",
236+ "ai",
237+ "evi",
238+ "empathic",
239+ "multimodal",
240+ "expression",
241+ "analysis",
242+ "sentiment",
243+ "voice",
244+ "recognition",
245+ "detection",
246+ "emotion",
247+ "interface",
248+ "speech",
249+ "audio",
250+ "vision",
251+ "expressive",
252+ "embeddings",
253+ "communication",
254+ "learning"
255+ ]
256+ license = "MIT"
257+ classifiers = [
258+ "Intended Audience :: Developers",
259+ "Programming Language :: Python",
260+ "Programming Language :: Python :: 3",
261+ "Programming Language :: Python :: 3.9",
262+ "Programming Language :: Python :: 3.10",
263+ "Programming Language :: Python :: 3.11",
264+ "Programming Language :: Python :: 3.12",
265+ "Programming Language :: Python :: 3.13",
266+ "Programming Language :: Python :: 3.14",
267+ "Programming Language :: Python :: 3.15",
268+ "Operating System :: OS Independent",
269+ "Operating System :: POSIX",
270+ "Operating System :: MacOS",
271+ "Operating System :: POSIX :: Linux",
272+ "Operating System :: Microsoft :: Windows",
273+ "Topic :: Software Development :: Libraries :: Python Modules",
274+ "Typing :: Typed",
275+ "License :: OSI Approved :: MIT License"
276+ ]
277+ packages = [
278+ { include = "hume", from = "src"}
279+ ]
280+
281+ [tool.poetry.urls]
282+ Documentation = 'https://dev.hume.ai'
283+ Homepage = 'https://www.hume.ai/'
284+ Repository = 'https://github.com/HumeAI/hume-python-sdk'
285+
286+ [tool.poetry.dependencies]
287+ python = ">=3.9,<4"
288+ eval-type-backport = "^0.2.0"
289+ exceptiongroup = "^1.3.0"
290+ httpx = ">=0.21.2"
291+ jupyter = { version = "^1.0.0", optional = true}
292+ pydantic = ">= 1.9.2"
293+ pydantic-core = ">=2.18.2"
294+ sounddevice = { version = "^0.4.6", optional = true}
295+ typing_extensions = ">= 4.0.0"
296+ websockets = ">=12.0"
297+
298+ [tool.poetry.group.dev.dependencies]
299+ mypy = "==1.13.0"
300+ pytest = "^7.4.0"
301+ pytest-asyncio = "^0.23.5"
302+ pytest-xdist = "^3.6.1"
303+ python-dateutil = "^2.9.0"
304+ types-python-dateutil = "^2.9.0.20240316"
305+ requests = "^2.31.0"
306+ types-requests = "^2.31.0"
307+ covcheck = { version = "^0.4.3", extras = ["toml"]}
308+ pydocstyle = "^6.1.1"
309+ pydub-stubs = "^0.25.1"
310+ pylint = "^2.16.2"
311+ pytest-cov = "^4.0.0"
312+ ruff = "==0.11.5"
313+ semver = "^2.13.0"
314+ testbook = "^0.4.2"
315+
316+ [tool.pytest.ini_options]
317+ testpaths = [ "tests" ]
318+ asyncio_mode = "auto"
319+
320+ [tool.mypy]
321+ plugins = ["pydantic.mypy"]
322+
323+ [tool.ruff]
324+ line-length = 120
325+
326+ [tool.ruff.lint]
327+ select = [
328+ "E", # pycodestyle errors
329+ "F", # pyflakes
330+ "I", # isort
331+ ]
332+ ignore = [
333+ "E402", # Module level import not at top of file
334+ "E501", # Line too long
335+ "E711", # Comparison to `None` should be `cond is not None`
336+ "E712", # Avoid equality comparisons to `True`; use `if ...:` checks
337+ "E721", # Use `is` and `is not` for type comparisons, or `isinstance()` for insinstance checks
338+ "E722", # Do not use bare `except`
339+ "E731", # Do not assign a `lambda` expression, use a `def`
340+ "F821", # Undefined name
341+ "F841" # Local variable ... is assigned to but never used
342+ ]
343+
344+ [tool.ruff.lint.isort]
345+ section-order = ["future", "standard-library", "third-party", "first-party"]
346+
347+ [build-system]
348+ requires = ["poetry-core"]
349+ build-backend = "poetry.core.masonry.api"
350+
351+ [tool.poetry.extras]
352+ examples=["jupyter"]
353+ microphone=["sounddevice"]
354+ src/hume/core/client_wrapper.py: |
355+ # This file was auto-generated by Fern from our API Definition.
356+
357+ import typing
358+
359+ import httpx
360+ from ..environment import HumeClientEnvironment
361+ from .http_client import AsyncHttpClient, HttpClient
362+ from .logging import LogConfig, Logger
363+
364+
365+ class BaseClientWrapper:
366+ def __init__(
367+ self,
368+ *,
369+ api_key: typing.Optional[str] = None,
370+ headers: typing.Optional[typing.Dict[str, str]] = None,
371+ environment: HumeClientEnvironment,
372+ timeout: typing.Optional[float] = None,
373+ logging: typing.Optional[typing.Union[LogConfig, Logger]] = None,
374+ ):
375+ self.api_key = api_key
376+ self._headers = headers
377+ self._environment = environment
378+ self._timeout = timeout
379+ self._logging = logging
380+
381+ def get_headers(self) -> typing.Dict[str, str]:
382+ import platform
383+
384+ headers: typing.Dict[str, str] = {
385+ "User-Agent": "hume/0.14.0",
386+ "X-Fern-Language": "Python",
387+ "X-Fern-Runtime": f"python/{platform.python_version()}",
388+ "X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}",
389+ "X-Fern-SDK-Name": "hume",
390+ "X-Fern-SDK-Version": "0.14.0",
391+ **(self.get_custom_headers() or {}),
392+ }
393+ if self.api_key is not None:
394+ headers["X-Hume-Api-Key"] = self.api_key
395+ return headers
396+
397+ def get_custom_headers(self) -> typing.Optional[typing.Dict[str, str]]:
398+ return self._headers
399+
400+ def get_environment(self) -> HumeClientEnvironment:
401+ return self._environment
402+
403+ def get_timeout(self) -> typing.Optional[float]:
404+ return self._timeout
405+
406+
407+ class SyncClientWrapper(BaseClientWrapper):
408+ def __init__(
409+ self,
410+ *,
411+ api_key: typing.Optional[str] = None,
412+ headers: typing.Optional[typing.Dict[str, str]] = None,
413+ environment: HumeClientEnvironment,
414+ timeout: typing.Optional[float] = None,
415+ logging: typing.Optional[typing.Union[LogConfig, Logger]] = None,
416+ httpx_client: httpx.Client,
417+ ):
418+ super().__init__(api_key=api_key, headers=headers, environment=environment, timeout=timeout, logging=logging)
419+ self.httpx_client = HttpClient(
420+ httpx_client=httpx_client,
421+ base_headers=self.get_headers,
422+ base_timeout=self.get_timeout,
423+ logging_config=self._logging,
424+ )
425+
426+
427+ class AsyncClientWrapper(BaseClientWrapper):
428+ def __init__(
429+ self,
430+ *,
431+ api_key: typing.Optional[str] = None,
432+ headers: typing.Optional[typing.Dict[str, str]] = None,
433+ environment: HumeClientEnvironment,
434+ timeout: typing.Optional[float] = None,
435+ logging: typing.Optional[typing.Union[LogConfig, Logger]] = None,
436+ async_token: typing.Optional[typing.Callable[[], typing.Awaitable[str]]] = None,
437+ httpx_client: httpx.AsyncClient,
438+ ):
439+ super().__init__(api_key=api_key, headers=headers, environment=environment, timeout=timeout, logging=logging)
440+ self._async_token = async_token
441+ self.httpx_client = AsyncHttpClient(
442+ httpx_client=httpx_client,
443+ base_headers=self.get_headers,
444+ base_timeout=self.get_timeout,
445+ async_base_headers=self.async_get_headers,
446+ logging_config=self._logging,
447+ )
448+
449+ async def async_get_headers(self) -> typing.Dict[str, str]:
450+ headers = self.get_headers()
451+ if self._async_token is not None:
452+ token = await self._async_token()
453+ headers["Authorization"] = f"Bearer {token}"
454+ return headers
455+ status: unresolved
0 commit comments