Skip to content

Commit 2be58cc

Browse files
authored
Release 0.21.0 (#37)
* Bump openapi * Update room manager api * Update transcription demo * Format
1 parent 734d7c3 commit 2be58cc

File tree

17 files changed

+178
-25
lines changed

17 files changed

+178
-25
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ All available options are defined in [arguments.py](room_manager/arguments.py).
66

77
```console
88
uv sync --all-packages
9-
uv run room_manager # Room Manager has to be started in the project root directory
9+
uv run main.py # Room Manager has to be started in the project root directory
1010
```
1111

1212
## How does it work?

examples/room_manager/main.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import logging
22

3+
from arguments import parse_arguments
34
from flask import Flask
45
from flask_cors import CORS
5-
6-
from .arguments import parse_arguments
7-
from .room_service import RoomService
8-
from .routes import setup_routes
6+
from room_service import RoomService
7+
from routes import setup_routes
98

109
app = Flask(__name__)
1110
CORS(app)

examples/room_manager/routes.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
from dataclasses import asdict
22

33
from flask import Flask, abort, jsonify, request
4+
from room_service import RoomService
45

56
from fishjam import receive_binary
67
from fishjam.room import RoomConfigRoomType
78

8-
from .room_service import RoomService
9-
109

1110
def setup_routes(app: Flask, room_service: RoomService):
1211
@app.route("/health", methods=["GET"])

examples/transcription/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ GEMINI_API_KEY=<your-api-token> \
3131
uv run fastapi dev
3232
```
3333

34-
Now, you can create peer tokens by going to <http://localhost:3000>.
34+
Now, you can create peer tokens by going to <http://localhost:8000>.
3535
You can then use the [minimal-react](https://github.com/fishjam-cloud/web-client-sdk/tree/main/examples/react-client)
3636
demo app to connect as these peers and see your transcriptions live in the console!

examples/transcription/transcription/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from google.genai.types import AudioTranscriptionConfig, LiveConnectConfig, Modality
44

5-
FISHJAM_ID = os.environ["FISHJAM_ID"]
5+
FISHJAM_ID = os.getenv("FISHJAM_ID", "")
66
FISHJAM_TOKEN = os.environ["FISHJAM_MANAGEMENT_TOKEN"]
77
FISHJAM_URL = os.getenv("FISHJAM_URL")
88
TRANSCRIPTION_MODEL = "gemini-live-2.5-flash-preview"

fishjam/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
# Exceptions and Server Messages
1313
from fishjam import agent, errors, events, peer, room
14+
from fishjam._openapi_client.models import PeerMetadata
1415

1516
# API
1617
from fishjam._webhook_notifier import receive_binary
@@ -28,6 +29,7 @@
2829
"FishjamClient",
2930
"FishjamNotifier",
3031
"receive_binary",
32+
"PeerMetadata",
3133
"PeerOptions",
3234
"SubscribeOptions",
3335
"RoomOptions",

fishjam/_openapi_client/models/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
"""Contains all the data models used in inputs/outputs"""
1+
""" Contains all the data models used in inputs/outputs """
22

33
from .add_peer_body import AddPeerBody
44
from .error import Error
55
from .peer import Peer
66
from .peer_details_response import PeerDetailsResponse
77
from .peer_details_response_data import PeerDetailsResponseData
8+
from .peer_metadata import PeerMetadata
89
from .peer_options_agent import PeerOptionsAgent
910
from .peer_options_web_rtc import PeerOptionsWebRTC
1011
from .peer_options_web_rtc_metadata import PeerOptionsWebRTCMetadata
@@ -32,6 +33,7 @@
3233
from .subscribe_options_audio_format import SubscribeOptionsAudioFormat
3334
from .subscribe_options_audio_sample_rate import SubscribeOptionsAudioSampleRate
3435
from .track import Track
36+
from .track_metadata_type_0 import TrackMetadataType0
3537
from .track_type import TrackType
3638
from .viewer_token import ViewerToken
3739

@@ -41,6 +43,7 @@
4143
"Peer",
4244
"PeerDetailsResponse",
4345
"PeerDetailsResponseData",
46+
"PeerMetadata",
4447
"PeerOptionsAgent",
4548
"PeerOptionsWebRTC",
4649
"PeerOptionsWebRTCMetadata",
@@ -64,6 +67,7 @@
6467
"SubscribeOptionsAudioFormat",
6568
"SubscribeOptionsAudioSampleRate",
6669
"Track",
70+
"TrackMetadataType0",
6771
"TrackType",
6872
"ViewerToken",
6973
)

fishjam/_openapi_client/models/peer.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from ..models.peer_type import PeerType
1515

1616
if TYPE_CHECKING:
17+
from ..models.peer_metadata import PeerMetadata
1718
from ..models.subscribe_options import SubscribeOptions
1819
from ..models.track import Track
1920

@@ -27,7 +28,7 @@ class Peer:
2728
2829
Attributes:
2930
id (str): Assigned peer id Example: peer-1.
30-
metadata (Any): Custom metadata set by the peer Example: {'name': 'FishjamUser'}.
31+
metadata (Union['PeerMetadata', None]): Custom metadata set by the peer Example: {'name': 'FishjamUser'}.
3132
status (PeerStatus): Informs about the peer status Example: disconnected.
3233
subscribe (Union['SubscribeOptions', None]): Configuration of server-side subscriptions to the peer's tracks
3334
Example: {'audioFormat': 'pcm16'}.
@@ -36,19 +37,24 @@ class Peer:
3637
"""
3738

3839
id: str
39-
metadata: Any
40+
metadata: Union["PeerMetadata", None]
4041
status: PeerStatus
4142
subscribe: Union["SubscribeOptions", None]
4243
tracks: list["Track"]
4344
type_: PeerType
4445
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
4546

4647
def to_dict(self) -> dict[str, Any]:
48+
from ..models.peer_metadata import PeerMetadata
4749
from ..models.subscribe_options import SubscribeOptions
4850

4951
id = self.id
5052

51-
metadata = self.metadata
53+
metadata: Union[None, dict[str, Any]]
54+
if isinstance(self.metadata, PeerMetadata):
55+
metadata = self.metadata.to_dict()
56+
else:
57+
metadata = self.metadata
5258

5359
status = self.status.value
5460

@@ -82,13 +88,27 @@ def to_dict(self) -> dict[str, Any]:
8288

8389
@classmethod
8490
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
91+
from ..models.peer_metadata import PeerMetadata
8592
from ..models.subscribe_options import SubscribeOptions
8693
from ..models.track import Track
8794

8895
d = dict(src_dict)
8996
id = d.pop("id")
9097

91-
metadata = d.pop("metadata")
98+
def _parse_metadata(data: object) -> Union["PeerMetadata", None]:
99+
if data is None:
100+
return data
101+
try:
102+
if not isinstance(data, dict):
103+
raise TypeError()
104+
componentsschemas_peer_metadata_type_0 = PeerMetadata.from_dict(data)
105+
106+
return componentsschemas_peer_metadata_type_0
107+
except: # noqa: E722
108+
pass
109+
return cast(Union["PeerMetadata", None], data)
110+
111+
metadata = _parse_metadata(d.pop("metadata"))
92112

93113
status = PeerStatus(d.pop("status"))
94114

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from collections.abc import Mapping
2+
from typing import Any, TypeVar
3+
4+
from attrs import define as _attrs_define
5+
from attrs import field as _attrs_field
6+
7+
T = TypeVar("T", bound="PeerMetadata")
8+
9+
10+
@_attrs_define
11+
class PeerMetadata:
12+
"""Custom metadata set by the peer
13+
14+
Example:
15+
{'name': 'FishjamUser'}
16+
17+
"""
18+
19+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
20+
21+
def to_dict(self) -> dict[str, Any]:
22+
field_dict: dict[str, Any] = {}
23+
field_dict.update(self.additional_properties)
24+
25+
return field_dict
26+
27+
@classmethod
28+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
29+
d = dict(src_dict)
30+
peer_metadata = cls()
31+
32+
peer_metadata.additional_properties = d
33+
return peer_metadata
34+
35+
@property
36+
def additional_keys(self) -> list[str]:
37+
return list(self.additional_properties.keys())
38+
39+
def __getitem__(self, key: str) -> Any:
40+
return self.additional_properties[key]
41+
42+
def __setitem__(self, key: str, value: Any) -> None:
43+
self.additional_properties[key] = value
44+
45+
def __delitem__(self, key: str) -> None:
46+
del self.additional_properties[key]
47+
48+
def __contains__(self, key: str) -> bool:
49+
return key in self.additional_properties

fishjam/_openapi_client/models/track.py

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
from collections.abc import Mapping
22
from typing import (
3+
TYPE_CHECKING,
34
Any,
45
TypeVar,
56
Union,
7+
cast,
68
)
79

810
from attrs import define as _attrs_define
@@ -11,6 +13,10 @@
1113
from ..models.track_type import TrackType
1214
from ..types import UNSET, Unset
1315

16+
if TYPE_CHECKING:
17+
from ..models.track_metadata_type_0 import TrackMetadataType0
18+
19+
1420
T = TypeVar("T", bound="Track")
1521

1622

@@ -20,19 +26,27 @@ class Track:
2026
2127
Attributes:
2228
id (Union[Unset, str]):
23-
metadata (Union[Unset, Any]):
29+
metadata (Union['TrackMetadataType0', None, Unset]): Example: {'source': 'camera'}.
2430
type_ (Union[Unset, TrackType]):
2531
"""
2632

2733
id: Union[Unset, str] = UNSET
28-
metadata: Union[Unset, Any] = UNSET
34+
metadata: Union["TrackMetadataType0", None, Unset] = UNSET
2935
type_: Union[Unset, TrackType] = UNSET
3036
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
3137

3238
def to_dict(self) -> dict[str, Any]:
39+
from ..models.track_metadata_type_0 import TrackMetadataType0
40+
3341
id = self.id
3442

35-
metadata = self.metadata
43+
metadata: Union[None, Unset, dict[str, Any]]
44+
if isinstance(self.metadata, Unset):
45+
metadata = UNSET
46+
elif isinstance(self.metadata, TrackMetadataType0):
47+
metadata = self.metadata.to_dict()
48+
else:
49+
metadata = self.metadata
3650

3751
type_: Union[Unset, str] = UNSET
3852
if not isinstance(self.type_, Unset):
@@ -52,10 +66,27 @@ def to_dict(self) -> dict[str, Any]:
5266

5367
@classmethod
5468
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
69+
from ..models.track_metadata_type_0 import TrackMetadataType0
70+
5571
d = dict(src_dict)
5672
id = d.pop("id", UNSET)
5773

58-
metadata = d.pop("metadata", UNSET)
74+
def _parse_metadata(data: object) -> Union["TrackMetadataType0", None, Unset]:
75+
if data is None:
76+
return data
77+
if isinstance(data, Unset):
78+
return data
79+
try:
80+
if not isinstance(data, dict):
81+
raise TypeError()
82+
metadata_type_0 = TrackMetadataType0.from_dict(data)
83+
84+
return metadata_type_0
85+
except: # noqa: E722
86+
pass
87+
return cast(Union["TrackMetadataType0", None, Unset], data)
88+
89+
metadata = _parse_metadata(d.pop("metadata", UNSET))
5990

6091
_type_ = d.pop("type", UNSET)
6192
type_: Union[Unset, TrackType]

0 commit comments

Comments
 (0)