chainlit 1.1.202__py3-none-any.whl → 1.1.300__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.
Potentially problematic release.
This version of chainlit might be problematic. Click here for more details.
- chainlit/__init__.py +22 -4
- chainlit/cli/__init__.py +53 -6
- chainlit/config.py +25 -18
- chainlit/context.py +9 -0
- chainlit/copilot/dist/index.js +443 -410
- chainlit/data/__init__.py +19 -5
- chainlit/data/dynamodb.py +586 -0
- chainlit/data/sql_alchemy.py +47 -28
- chainlit/discord/app.py +4 -2
- chainlit/element.py +36 -20
- chainlit/emitter.py +8 -7
- chainlit/frontend/dist/assets/{DailyMotion-53376209.js → DailyMotion-578b63e6.js} +1 -1
- chainlit/frontend/dist/assets/{Facebook-aee41f5b.js → Facebook-b825e5bb.js} +1 -1
- chainlit/frontend/dist/assets/{FilePlayer-b2cdb30f.js → FilePlayer-bcba3b4e.js} +1 -1
- chainlit/frontend/dist/assets/{Kaltura-51db0377.js → Kaltura-fc1c9497.js} +1 -1
- chainlit/frontend/dist/assets/{Mixcloud-cb900886.js → Mixcloud-4cfb2724.js} +1 -1
- chainlit/frontend/dist/assets/{Mux-79ac59e6.js → Mux-aa92055c.js} +1 -1
- chainlit/frontend/dist/assets/{Preview-cfe7584c.js → Preview-9f55905a.js} +1 -1
- chainlit/frontend/dist/assets/{SoundCloud-a985707c.js → SoundCloud-f991fe03.js} +1 -1
- chainlit/frontend/dist/assets/{Streamable-3d89aab5.js → Streamable-53128f49.js} +1 -1
- chainlit/frontend/dist/assets/{Twitch-bf016588.js → Twitch-fce8b9f5.js} +1 -1
- chainlit/frontend/dist/assets/{Vidyard-1891ecd7.js → Vidyard-e35c6102.js} +1 -1
- chainlit/frontend/dist/assets/{Vimeo-0645662c.js → Vimeo-fff35f8e.js} +1 -1
- chainlit/frontend/dist/assets/{Wistia-3b449fe2.js → Wistia-ec07dc64.js} +1 -1
- chainlit/frontend/dist/assets/{YouTube-5ea2381e.js → YouTube-ad068e2a.js} +1 -1
- chainlit/frontend/dist/assets/index-aaf974a9.css +1 -0
- chainlit/frontend/dist/assets/index-d40d41cc.js +727 -0
- chainlit/frontend/dist/assets/{react-plotly-2ff19c9f.js → react-plotly-b2c6442b.js} +1 -1
- chainlit/frontend/dist/index.html +2 -3
- chainlit/langchain/callbacks.py +4 -2
- chainlit/llama_index/callbacks.py +2 -2
- chainlit/message.py +30 -25
- chainlit/oauth_providers.py +118 -0
- chainlit/server.py +208 -83
- chainlit/slack/app.py +2 -3
- chainlit/socket.py +27 -23
- chainlit/step.py +44 -30
- chainlit/teams/__init__.py +6 -0
- chainlit/teams/app.py +332 -0
- chainlit/translations/en-US.json +2 -4
- chainlit/types.py +17 -17
- chainlit/user.py +9 -1
- chainlit/utils.py +47 -3
- {chainlit-1.1.202.dist-info → chainlit-1.1.300.dist-info}/METADATA +22 -14
- chainlit-1.1.300.dist-info/RECORD +79 -0
- chainlit/cli/utils.py +0 -24
- chainlit/frontend/dist/assets/index-a0c5a67e.js +0 -698
- chainlit/frontend/dist/assets/index-d088547c.css +0 -1
- chainlit/playground/__init__.py +0 -2
- chainlit/playground/config.py +0 -36
- chainlit/playground/provider.py +0 -108
- chainlit/playground/providers/__init__.py +0 -11
- chainlit/playground/providers/anthropic.py +0 -118
- chainlit/playground/providers/huggingface.py +0 -75
- chainlit/playground/providers/langchain.py +0 -89
- chainlit/playground/providers/openai.py +0 -386
- chainlit/playground/providers/vertexai.py +0 -171
- chainlit-1.1.202.dist-info/RECORD +0 -86
- {chainlit-1.1.202.dist-info → chainlit-1.1.300.dist-info}/WHEEL +0 -0
- {chainlit-1.1.202.dist-info → chainlit-1.1.300.dist-info}/entry_points.txt +0 -0
chainlit/data/sql_alchemy.py
CHANGED
|
@@ -2,14 +2,14 @@ import json
|
|
|
2
2
|
import ssl
|
|
3
3
|
import uuid
|
|
4
4
|
from dataclasses import asdict
|
|
5
|
-
from datetime import datetime
|
|
5
|
+
from datetime import datetime
|
|
6
6
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
|
|
7
7
|
|
|
8
8
|
import aiofiles
|
|
9
9
|
import aiohttp
|
|
10
10
|
from chainlit.context import context
|
|
11
11
|
from chainlit.data import BaseDataLayer, BaseStorageClient, queue_until_user_message
|
|
12
|
-
from chainlit.element import
|
|
12
|
+
from chainlit.element import ElementDict
|
|
13
13
|
from chainlit.logger import logger
|
|
14
14
|
from chainlit.step import StepDict
|
|
15
15
|
from chainlit.types import (
|
|
@@ -57,13 +57,17 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
57
57
|
self.async_session = sessionmaker(bind=self.engine, expire_on_commit=False, class_=AsyncSession) # type: ignore
|
|
58
58
|
if storage_provider:
|
|
59
59
|
self.storage_provider: Optional[BaseStorageClient] = storage_provider
|
|
60
|
-
if self.show_logger:
|
|
60
|
+
if self.show_logger:
|
|
61
|
+
logger.info("SQLAlchemyDataLayer storage client initialized")
|
|
61
62
|
else:
|
|
62
63
|
self.storage_provider = None
|
|
63
64
|
logger.warn(
|
|
64
65
|
"SQLAlchemyDataLayer storage client is not initialized and elements will not be persisted!"
|
|
65
66
|
)
|
|
66
67
|
|
|
68
|
+
async def build_debug_url(self) -> str:
|
|
69
|
+
return ""
|
|
70
|
+
|
|
67
71
|
###### SQL Helpers ######
|
|
68
72
|
async def execute_sql(
|
|
69
73
|
self, query: str, parameters: dict
|
|
@@ -104,7 +108,8 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
104
108
|
|
|
105
109
|
###### User ######
|
|
106
110
|
async def get_user(self, identifier: str) -> Optional[PersistedUser]:
|
|
107
|
-
if self.show_logger:
|
|
111
|
+
if self.show_logger:
|
|
112
|
+
logger.info(f"SQLAlchemy: get_user, identifier={identifier}")
|
|
108
113
|
query = "SELECT * FROM users WHERE identifier = :identifier"
|
|
109
114
|
parameters = {"identifier": identifier}
|
|
110
115
|
result = await self.execute_sql(query=query, parameters=parameters)
|
|
@@ -114,20 +119,23 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
114
119
|
return None
|
|
115
120
|
|
|
116
121
|
async def create_user(self, user: User) -> Optional[PersistedUser]:
|
|
117
|
-
if self.show_logger:
|
|
122
|
+
if self.show_logger:
|
|
123
|
+
logger.info(f"SQLAlchemy: create_user, user_identifier={user.identifier}")
|
|
118
124
|
existing_user: Optional["PersistedUser"] = await self.get_user(user.identifier)
|
|
119
125
|
user_dict: Dict[str, Any] = {
|
|
120
126
|
"identifier": str(user.identifier),
|
|
121
127
|
"metadata": json.dumps(user.metadata) or {},
|
|
122
128
|
}
|
|
123
129
|
if not existing_user: # create the user
|
|
124
|
-
if self.show_logger:
|
|
130
|
+
if self.show_logger:
|
|
131
|
+
logger.info("SQLAlchemy: create_user, creating the user")
|
|
125
132
|
user_dict["id"] = str(uuid.uuid4())
|
|
126
133
|
user_dict["createdAt"] = await self.get_current_timestamp()
|
|
127
134
|
query = """INSERT INTO users ("id", "identifier", "createdAt", "metadata") VALUES (:id, :identifier, :createdAt, :metadata)"""
|
|
128
135
|
await self.execute_sql(query=query, parameters=user_dict)
|
|
129
136
|
else: # update the user
|
|
130
|
-
if self.show_logger:
|
|
137
|
+
if self.show_logger:
|
|
138
|
+
logger.info("SQLAlchemy: update user metadata")
|
|
131
139
|
query = """UPDATE users SET "metadata" = :metadata WHERE "identifier" = :identifier"""
|
|
132
140
|
await self.execute_sql(
|
|
133
141
|
query=query, parameters=user_dict
|
|
@@ -136,18 +144,20 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
136
144
|
|
|
137
145
|
###### Threads ######
|
|
138
146
|
async def get_thread_author(self, thread_id: str) -> str:
|
|
139
|
-
if self.show_logger:
|
|
147
|
+
if self.show_logger:
|
|
148
|
+
logger.info(f"SQLAlchemy: get_thread_author, thread_id={thread_id}")
|
|
140
149
|
query = """SELECT "userIdentifier" FROM threads WHERE "id" = :id"""
|
|
141
150
|
parameters = {"id": thread_id}
|
|
142
151
|
result = await self.execute_sql(query=query, parameters=parameters)
|
|
143
|
-
if isinstance(result, list) and result
|
|
152
|
+
if isinstance(result, list) and result:
|
|
144
153
|
author_identifier = result[0].get("userIdentifier")
|
|
145
154
|
if author_identifier is not None:
|
|
146
155
|
return author_identifier
|
|
147
156
|
raise ValueError(f"Author not found for thread_id {thread_id}")
|
|
148
157
|
|
|
149
158
|
async def get_thread(self, thread_id: str) -> Optional[ThreadDict]:
|
|
150
|
-
if self.show_logger:
|
|
159
|
+
if self.show_logger:
|
|
160
|
+
logger.info(f"SQLAlchemy: get_thread, thread_id={thread_id}")
|
|
151
161
|
user_threads: Optional[List[ThreadDict]] = await self.get_all_user_threads(
|
|
152
162
|
thread_id=thread_id
|
|
153
163
|
)
|
|
@@ -164,7 +174,8 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
164
174
|
metadata: Optional[Dict] = None,
|
|
165
175
|
tags: Optional[List[str]] = None,
|
|
166
176
|
):
|
|
167
|
-
if self.show_logger:
|
|
177
|
+
if self.show_logger:
|
|
178
|
+
logger.info(f"SQLAlchemy: update_thread, thread_id={thread_id}")
|
|
168
179
|
if context.session.user is not None:
|
|
169
180
|
user_identifier = context.session.user.identifier
|
|
170
181
|
else:
|
|
@@ -201,7 +212,8 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
201
212
|
await self.execute_sql(query=query, parameters=parameters)
|
|
202
213
|
|
|
203
214
|
async def delete_thread(self, thread_id: str):
|
|
204
|
-
if self.show_logger:
|
|
215
|
+
if self.show_logger:
|
|
216
|
+
logger.info(f"SQLAlchemy: delete_thread, thread_id={thread_id}")
|
|
205
217
|
# Delete feedbacks/elements/steps/thread
|
|
206
218
|
feedbacks_query = """DELETE FROM feedbacks WHERE "forId" IN (SELECT "id" FROM steps WHERE "threadId" = :id)"""
|
|
207
219
|
elements_query = """DELETE FROM elements WHERE "threadId" = :id"""
|
|
@@ -216,9 +228,10 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
216
228
|
async def list_threads(
|
|
217
229
|
self, pagination: Pagination, filters: ThreadFilter
|
|
218
230
|
) -> PaginatedResponse:
|
|
219
|
-
if self.show_logger:
|
|
220
|
-
|
|
221
|
-
|
|
231
|
+
if self.show_logger:
|
|
232
|
+
logger.info(
|
|
233
|
+
f"SQLAlchemy: list_threads, pagination={pagination}, filters={filters}"
|
|
234
|
+
)
|
|
222
235
|
if not filters.userId:
|
|
223
236
|
raise ValueError("userId is required")
|
|
224
237
|
all_user_threads: List[ThreadDict] = (
|
|
@@ -276,7 +289,8 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
276
289
|
###### Steps ######
|
|
277
290
|
@queue_until_user_message()
|
|
278
291
|
async def create_step(self, step_dict: "StepDict"):
|
|
279
|
-
if self.show_logger:
|
|
292
|
+
if self.show_logger:
|
|
293
|
+
logger.info(f"SQLAlchemy: create_step, step_id={step_dict.get('id')}")
|
|
280
294
|
if not getattr(context.session.user, "id", None):
|
|
281
295
|
raise ValueError("No authenticated user in context")
|
|
282
296
|
step_dict["showInput"] = (
|
|
@@ -306,16 +320,18 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
306
320
|
|
|
307
321
|
@queue_until_user_message()
|
|
308
322
|
async def update_step(self, step_dict: "StepDict"):
|
|
309
|
-
if self.show_logger:
|
|
323
|
+
if self.show_logger:
|
|
324
|
+
logger.info(f"SQLAlchemy: update_step, step_id={step_dict.get('id')}")
|
|
310
325
|
await self.create_step(step_dict)
|
|
311
326
|
|
|
312
327
|
@queue_until_user_message()
|
|
313
328
|
async def delete_step(self, step_id: str):
|
|
314
|
-
if self.show_logger:
|
|
329
|
+
if self.show_logger:
|
|
330
|
+
logger.info(f"SQLAlchemy: delete_step, step_id={step_id}")
|
|
315
331
|
# Delete feedbacks/elements/steps
|
|
316
332
|
feedbacks_query = """DELETE FROM feedbacks WHERE "forId" = :id"""
|
|
317
333
|
elements_query = """DELETE FROM elements WHERE "forId" = :id"""
|
|
318
|
-
steps_query = """DELETE FROM steps WHERE "
|
|
334
|
+
steps_query = """DELETE FROM steps WHERE "id" = :id"""
|
|
319
335
|
parameters = {"id": step_id}
|
|
320
336
|
await self.execute_sql(query=feedbacks_query, parameters=parameters)
|
|
321
337
|
await self.execute_sql(query=elements_query, parameters=parameters)
|
|
@@ -323,7 +339,8 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
323
339
|
|
|
324
340
|
###### Feedback ######
|
|
325
341
|
async def upsert_feedback(self, feedback: Feedback) -> str:
|
|
326
|
-
if self.show_logger:
|
|
342
|
+
if self.show_logger:
|
|
343
|
+
logger.info(f"SQLAlchemy: upsert_feedback, feedback_id={feedback.id}")
|
|
327
344
|
feedback.id = feedback.id or str(uuid.uuid4())
|
|
328
345
|
feedback_dict = asdict(feedback)
|
|
329
346
|
parameters = {
|
|
@@ -345,7 +362,8 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
345
362
|
return feedback.id
|
|
346
363
|
|
|
347
364
|
async def delete_feedback(self, feedback_id: str) -> bool:
|
|
348
|
-
if self.show_logger:
|
|
365
|
+
if self.show_logger:
|
|
366
|
+
logger.info(f"SQLAlchemy: delete_feedback, feedback_id={feedback_id}")
|
|
349
367
|
query = """DELETE FROM feedbacks WHERE "id" = :feedback_id"""
|
|
350
368
|
parameters = {"feedback_id": feedback_id}
|
|
351
369
|
await self.execute_sql(query=query, parameters=parameters)
|
|
@@ -354,11 +372,10 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
354
372
|
###### Elements ######
|
|
355
373
|
@queue_until_user_message()
|
|
356
374
|
async def create_element(self, element: "Element"):
|
|
357
|
-
if self.show_logger:
|
|
375
|
+
if self.show_logger:
|
|
376
|
+
logger.info(f"SQLAlchemy: create_element, element_id = {element.id}")
|
|
358
377
|
if not getattr(context.session.user, "id", None):
|
|
359
378
|
raise ValueError("No authenticated user in context")
|
|
360
|
-
if isinstance(element, Avatar): # Skip creating elements of type avatar
|
|
361
|
-
return
|
|
362
379
|
if not self.storage_provider:
|
|
363
380
|
logger.warn(
|
|
364
381
|
f"SQLAlchemy: create_element error. No blob_storage_client is configured!"
|
|
@@ -416,8 +433,9 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
416
433
|
await self.execute_sql(query=query, parameters=element_dict_cleaned)
|
|
417
434
|
|
|
418
435
|
@queue_until_user_message()
|
|
419
|
-
async def delete_element(self, element_id: str):
|
|
420
|
-
if self.show_logger:
|
|
436
|
+
async def delete_element(self, element_id: str, thread_id: Optional[str] = None):
|
|
437
|
+
if self.show_logger:
|
|
438
|
+
logger.info(f"SQLAlchemy: delete_element, element_id={element_id}")
|
|
421
439
|
query = """DELETE FROM elements WHERE "id" = :id"""
|
|
422
440
|
parameters = {"id": element_id}
|
|
423
441
|
await self.execute_sql(query=query, parameters=parameters)
|
|
@@ -429,7 +447,8 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
429
447
|
self, user_id: Optional[str] = None, thread_id: Optional[str] = None
|
|
430
448
|
) -> Optional[List[ThreadDict]]:
|
|
431
449
|
"""Fetch all user threads up to self.user_thread_limit, or one thread by id if thread_id is provided."""
|
|
432
|
-
if self.show_logger:
|
|
450
|
+
if self.show_logger:
|
|
451
|
+
logger.info(f"SQLAlchemy: get_all_user_threads")
|
|
433
452
|
user_threads_query = """
|
|
434
453
|
SELECT
|
|
435
454
|
"id" AS thread_id,
|
|
@@ -563,7 +582,7 @@ class SQLAlchemyDataLayer(BaseDataLayer):
|
|
|
563
582
|
tags=step_feedback.get("step_tags"),
|
|
564
583
|
input=(
|
|
565
584
|
step_feedback.get("step_input", "")
|
|
566
|
-
if step_feedback["step_showinput"] == "true"
|
|
585
|
+
if step_feedback["step_showinput"] == "true"
|
|
567
586
|
else None
|
|
568
587
|
),
|
|
569
588
|
output=step_feedback.get("step_output", ""),
|
chainlit/discord/app.py
CHANGED
|
@@ -104,7 +104,6 @@ class DiscordEmitter(BaseChainlitEmitter):
|
|
|
104
104
|
is_message = step_type in [
|
|
105
105
|
"user_message",
|
|
106
106
|
"assistant_message",
|
|
107
|
-
"system_message",
|
|
108
107
|
]
|
|
109
108
|
is_chain_of_thought = bool(step_dict.get("parentId"))
|
|
110
109
|
is_empty_output = not step_dict.get("output")
|
|
@@ -315,8 +314,11 @@ async def on_message(message: discord.Message):
|
|
|
315
314
|
elif isinstance(message.channel, discord.GroupChannel):
|
|
316
315
|
thread_name = f"{message.channel.name}"
|
|
317
316
|
elif isinstance(message.channel, discord.TextChannel):
|
|
317
|
+
# Discord limits thread names to 100 characters and does not create
|
|
318
|
+
# threads from empty messages.
|
|
319
|
+
discord_thread_name = clean_content(message)[:100] or "Untitled"
|
|
318
320
|
channel = await message.channel.create_thread(
|
|
319
|
-
name=
|
|
321
|
+
name=discord_thread_name, message=message
|
|
320
322
|
)
|
|
321
323
|
thread_name = f"{channel.name}"
|
|
322
324
|
else:
|
chainlit/element.py
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import mimetypes
|
|
2
3
|
import uuid
|
|
3
4
|
from enum import Enum
|
|
4
5
|
from io import BytesIO
|
|
5
|
-
from typing import
|
|
6
|
+
from typing import (
|
|
7
|
+
Any,
|
|
8
|
+
ClassVar,
|
|
9
|
+
Dict,
|
|
10
|
+
List,
|
|
11
|
+
Literal,
|
|
12
|
+
Optional,
|
|
13
|
+
TypedDict,
|
|
14
|
+
TypeVar,
|
|
15
|
+
Union,
|
|
16
|
+
)
|
|
6
17
|
|
|
7
18
|
import filetype
|
|
8
|
-
import mimetypes
|
|
9
19
|
from chainlit.context import context
|
|
10
20
|
from chainlit.data import get_data_layer
|
|
11
21
|
from chainlit.logger import logger
|
|
@@ -21,7 +31,7 @@ mime_types = {
|
|
|
21
31
|
}
|
|
22
32
|
|
|
23
33
|
ElementType = Literal[
|
|
24
|
-
"image", "
|
|
34
|
+
"image", "text", "pdf", "tasklist", "audio", "video", "file", "plotly", "component"
|
|
25
35
|
]
|
|
26
36
|
ElementDisplay = Literal["inline", "side", "page"]
|
|
27
37
|
ElementSize = Literal["small", "medium", "large"]
|
|
@@ -152,7 +162,7 @@ class Element:
|
|
|
152
162
|
trace_event(f"remove {self.__class__.__name__}")
|
|
153
163
|
data_layer = get_data_layer()
|
|
154
164
|
if data_layer and self.persisted:
|
|
155
|
-
await data_layer.delete_element(self.id)
|
|
165
|
+
await data_layer.delete_element(self.id, self.thread_id)
|
|
156
166
|
await context.emitter.emit("remove_element", {"id": self.id})
|
|
157
167
|
|
|
158
168
|
async def send(self, for_id: str):
|
|
@@ -162,15 +172,15 @@ class Element:
|
|
|
162
172
|
self.for_id = for_id
|
|
163
173
|
|
|
164
174
|
if not self.mime:
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
175
|
+
if self.type in mime_types:
|
|
176
|
+
self.mime = mime_types[self.type]
|
|
177
|
+
elif self.path or isinstance(self.content, (bytes, bytearray)):
|
|
178
|
+
file_type = filetype.guess(self.path or self.content)
|
|
179
|
+
if file_type:
|
|
180
|
+
self.mime = file_type.mime
|
|
181
|
+
elif self.url:
|
|
172
182
|
self.mime = mimetypes.guess_type(self.url)[0]
|
|
173
|
-
|
|
183
|
+
|
|
174
184
|
await self._create()
|
|
175
185
|
|
|
176
186
|
if not self.url and not self.chainlit_key:
|
|
@@ -190,14 +200,6 @@ class Image(Element):
|
|
|
190
200
|
size: ElementSize = "medium"
|
|
191
201
|
|
|
192
202
|
|
|
193
|
-
@dataclass
|
|
194
|
-
class Avatar(Element):
|
|
195
|
-
type: ClassVar[ElementType] = "avatar"
|
|
196
|
-
|
|
197
|
-
async def send(self):
|
|
198
|
-
await super().send(for_id="")
|
|
199
|
-
|
|
200
|
-
|
|
201
203
|
@dataclass
|
|
202
204
|
class Text(Element):
|
|
203
205
|
"""Useful to send a text (not a message) to the UI."""
|
|
@@ -357,3 +359,17 @@ class Plotly(Element):
|
|
|
357
359
|
self.mime = "application/json"
|
|
358
360
|
|
|
359
361
|
super().__post_init__()
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
@dataclass
|
|
365
|
+
class Component(Element):
|
|
366
|
+
"""Useful to send a custom component to the UI."""
|
|
367
|
+
|
|
368
|
+
type: ClassVar[ElementType] = "component"
|
|
369
|
+
mime: str = "application/json"
|
|
370
|
+
props: Dict = Field(default_factory=dict)
|
|
371
|
+
|
|
372
|
+
def __post_init__(self) -> None:
|
|
373
|
+
self.content = json.dumps(self.props)
|
|
374
|
+
|
|
375
|
+
super().__post_init__()
|
chainlit/emitter.py
CHANGED
|
@@ -14,8 +14,8 @@ from chainlit.types import (
|
|
|
14
14
|
AskSpec,
|
|
15
15
|
FileDict,
|
|
16
16
|
FileReference,
|
|
17
|
+
MessagePayload,
|
|
17
18
|
ThreadDict,
|
|
18
|
-
UIMessagePayload,
|
|
19
19
|
)
|
|
20
20
|
from chainlit.user import PersistedUser
|
|
21
21
|
from literalai.helper import utc_now
|
|
@@ -73,7 +73,7 @@ class BaseChainlitEmitter:
|
|
|
73
73
|
async def init_thread(self, interaction: str):
|
|
74
74
|
pass
|
|
75
75
|
|
|
76
|
-
async def
|
|
76
|
+
async def process_message(self, payload: MessagePayload) -> Message:
|
|
77
77
|
"""Stub method to process user message."""
|
|
78
78
|
return Message(content="")
|
|
79
79
|
|
|
@@ -105,7 +105,7 @@ class BaseChainlitEmitter:
|
|
|
105
105
|
"""Stub method to send a stream start signal to the UI."""
|
|
106
106
|
pass
|
|
107
107
|
|
|
108
|
-
async def send_token(self, id: str, token: str, is_sequence=False):
|
|
108
|
+
async def send_token(self, id: str, token: str, is_sequence=False, is_input=False):
|
|
109
109
|
"""Stub method to send a message token to the UI."""
|
|
110
110
|
pass
|
|
111
111
|
|
|
@@ -211,7 +211,7 @@ class ChainlitEmitter(BaseChainlitEmitter):
|
|
|
211
211
|
},
|
|
212
212
|
)
|
|
213
213
|
|
|
214
|
-
async def
|
|
214
|
+
async def process_message(self, payload: MessagePayload):
|
|
215
215
|
step_dict = payload["message"]
|
|
216
216
|
file_refs = payload["fileReferences"]
|
|
217
217
|
# UUID generated by the frontend should use v4
|
|
@@ -268,7 +268,7 @@ class ChainlitEmitter(BaseChainlitEmitter):
|
|
|
268
268
|
interaction: Union[str, None] = None
|
|
269
269
|
if spec.type == "text":
|
|
270
270
|
message_dict_res = cast(StepDict, user_res)
|
|
271
|
-
await self.
|
|
271
|
+
await self.process_message(
|
|
272
272
|
{"message": message_dict_res, "fileReferences": None}
|
|
273
273
|
)
|
|
274
274
|
interaction = message_dict_res["output"]
|
|
@@ -353,10 +353,11 @@ class ChainlitEmitter(BaseChainlitEmitter):
|
|
|
353
353
|
step_dict,
|
|
354
354
|
)
|
|
355
355
|
|
|
356
|
-
def send_token(self, id: str, token: str, is_sequence=False):
|
|
356
|
+
def send_token(self, id: str, token: str, is_sequence=False, is_input=False):
|
|
357
357
|
"""Send a message token to the UI."""
|
|
358
358
|
return self.emit(
|
|
359
|
-
"stream_token",
|
|
359
|
+
"stream_token",
|
|
360
|
+
{"id": id, "token": token, "isSequence": is_sequence, "isInput": is_input},
|
|
360
361
|
)
|
|
361
362
|
|
|
362
363
|
def set_chat_settings(self, settings: Dict[str, Any]):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as P,r as v,u as D,a as O}from"./index-
|
|
1
|
+
import{g as P,r as v,u as D,a as O}from"./index-d40d41cc.js";function b(t,e){for(var r=0;r<e.length;r++){const o=e[r];if(typeof o!="string"&&!Array.isArray(o)){for(const a in o)if(a!=="default"&&!(a in t)){const i=Object.getOwnPropertyDescriptor(o,a);i&&Object.defineProperty(t,a,i.get?i:{enumerable:!0,get:()=>o[a]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var M=Object.create,s=Object.defineProperty,w=Object.getOwnPropertyDescriptor,S=Object.getOwnPropertyNames,j=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty,E=(t,e,r)=>e in t?s(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,A=(t,e)=>{for(var r in e)s(t,r,{get:e[r],enumerable:!0})},h=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of S(e))!T.call(t,a)&&a!==r&&s(t,a,{get:()=>e[a],enumerable:!(o=w(e,a))||o.enumerable});return t},L=(t,e,r)=>(r=t!=null?M(j(t)):{},h(e||!t||!t.__esModule?s(r,"default",{value:t,enumerable:!0}):r,t)),C=t=>h(s({},"__esModule",{value:!0}),t),n=(t,e,r)=>(E(t,typeof e!="symbol"?e+"":e,r),r),d={};A(d,{default:()=>p});var _=C(d),c=L(v),l=D,f=O;const x="https://api.dmcdn.net/all.js",N="DM",K="dmAsyncInit";class p extends c.Component{constructor(){super(...arguments),n(this,"callPlayer",l.callPlayer),n(this,"onDurationChange",()=>{const e=this.getDuration();this.props.onDuration(e)}),n(this,"mute",()=>{this.callPlayer("setMuted",!0)}),n(this,"unmute",()=>{this.callPlayer("setMuted",!1)}),n(this,"ref",e=>{this.container=e})}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){const{controls:r,config:o,onError:a,playing:i}=this.props,[,y]=e.match(f.MATCH_URL_DAILYMOTION);if(this.player){this.player.load(y,{start:(0,l.parseStartTime)(e),autoplay:i});return}(0,l.getSDK)(x,N,K,u=>u.player).then(u=>{if(!this.container)return;const g=u.player;this.player=new g(this.container,{width:"100%",height:"100%",video:y,params:{controls:r,autoplay:this.props.playing,mute:this.props.muted,start:(0,l.parseStartTime)(e),origin:window.location.origin,...o.params},events:{apiready:this.props.onReady,seeked:()=>this.props.onSeek(this.player.currentTime),video_end:this.props.onEnded,durationchange:this.onDurationChange,pause:this.props.onPause,playing:this.props.onPlay,waiting:this.props.onBuffer,error:m=>a(m)}})},a)}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,r=!0){this.callPlayer("seek",e),r||this.pause()}setVolume(e){this.callPlayer("setVolume",e)}getDuration(){return this.player.duration||null}getCurrentTime(){return this.player.currentTime}getSecondsLoaded(){return this.player.bufferedTime}render(){const{display:e}=this.props,r={width:"100%",height:"100%",display:e};return c.default.createElement("div",{style:r},c.default.createElement("div",{ref:this.ref}))}}n(p,"displayName","DailyMotion");n(p,"canPlay",f.canPlay.dailymotion);n(p,"loopOnEnded",!0);const R=P(_),I=b({__proto__:null,default:R},[_]);export{I as D};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as _,r as g,u as P,a as m}from"./index-
|
|
1
|
+
import{g as _,r as g,u as P,a as m}from"./index-d40d41cc.js";function v(t,e){for(var r=0;r<e.length;r++){const a=e[r];if(typeof a!="string"&&!Array.isArray(a)){for(const s in a)if(s!=="default"&&!(s in t)){const p=Object.getOwnPropertyDescriptor(a,s);p&&Object.defineProperty(t,s,p.get?p:{enumerable:!0,get:()=>a[s]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var O=Object.create,i=Object.defineProperty,D=Object.getOwnPropertyDescriptor,E=Object.getOwnPropertyNames,S=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty,I=(t,e,r)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,k=(t,e)=>{for(var r in e)i(t,r,{get:e[r],enumerable:!0})},h=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of E(e))!j.call(t,s)&&s!==r&&i(t,s,{get:()=>e[s],enumerable:!(a=D(e,s))||a.enumerable});return t},w=(t,e,r)=>(r=t!=null?O(S(t)):{},h(e||!t||!t.__esModule?i(r,"default",{value:t,enumerable:!0}):r,t)),F=t=>h(i({},"__esModule",{value:!0}),t),o=(t,e,r)=>(I(t,typeof e!="symbol"?e+"":e,r),r),b={};k(b,{default:()=>l});var d=F(b),u=w(g),n=P,x=m;const c="https://connect.facebook.net/en_US/sdk.js",y="FB",f="fbAsyncInit",L="facebook-player-";class l extends u.Component{constructor(){super(...arguments),o(this,"callPlayer",n.callPlayer),o(this,"playerID",this.props.config.playerId||`${L}${(0,n.randomString)()}`),o(this,"mute",()=>{this.callPlayer("mute")}),o(this,"unmute",()=>{this.callPlayer("unmute")})}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e,r){if(r){(0,n.getSDK)(c,y,f).then(a=>a.XFBML.parse());return}(0,n.getSDK)(c,y,f).then(a=>{a.init({appId:this.props.config.appId,xfbml:!0,version:this.props.config.version}),a.Event.subscribe("xfbml.render",s=>{this.props.onLoaded()}),a.Event.subscribe("xfbml.ready",s=>{s.type==="video"&&s.id===this.playerID&&(this.player=s.instance,this.player.subscribe("startedPlaying",this.props.onPlay),this.player.subscribe("paused",this.props.onPause),this.player.subscribe("finishedPlaying",this.props.onEnded),this.player.subscribe("startedBuffering",this.props.onBuffer),this.player.subscribe("finishedBuffering",this.props.onBufferEnd),this.player.subscribe("error",this.props.onError),this.props.muted?this.callPlayer("mute"):this.callPlayer("unmute"),this.props.onReady(),document.getElementById(this.playerID).querySelector("iframe").style.visibility="visible")})})}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,r=!0){this.callPlayer("seek",e),r||this.pause()}setVolume(e){this.callPlayer("setVolume",e)}getDuration(){return this.callPlayer("getDuration")}getCurrentTime(){return this.callPlayer("getCurrentPosition")}getSecondsLoaded(){return null}render(){const{attributes:e}=this.props.config,r={width:"100%",height:"100%"};return u.default.createElement("div",{style:r,id:this.playerID,className:"fb-video","data-href":this.props.url,"data-autoplay":this.props.playing?"true":"false","data-allowfullscreen":"true","data-controls":this.props.controls?"true":"false",...e})}}o(l,"displayName","Facebook");o(l,"canPlay",x.canPlay.facebook);o(l,"loopOnEnded",!0);const M=_(d),B=v({__proto__:null,default:M},[d]);export{B as F};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as b,r as _,u as O,a as A}from"./index-
|
|
1
|
+
import{g as b,r as _,u as O,a as A}from"./index-d40d41cc.js";function R(s,e){for(var t=0;t<e.length;t++){const i=e[t];if(typeof i!="string"&&!Array.isArray(i)){for(const n in i)if(n!=="default"&&!(n in s)){const l=Object.getOwnPropertyDescriptor(i,n);l&&Object.defineProperty(s,n,l.get?l:{enumerable:!0,get:()=>i[n]})}}}return Object.freeze(Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}))}var I=Object.create,u=Object.defineProperty,D=Object.getOwnPropertyDescriptor,w=Object.getOwnPropertyNames,M=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty,U=(s,e,t)=>e in s?u(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,N=(s,e)=>{for(var t in e)u(s,t,{get:e[t],enumerable:!0})},E=(s,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of w(e))!k.call(s,n)&&n!==t&&u(s,n,{get:()=>e[n],enumerable:!(i=D(e,n))||i.enumerable});return s},j=(s,e,t)=>(t=s!=null?I(M(s)):{},E(e||!s||!s.__esModule?u(t,"default",{value:s,enumerable:!0}):t,s)),H=s=>E(u({},"__esModule",{value:!0}),s),r=(s,e,t)=>(U(s,typeof e!="symbol"?e+"":e,t),t),m={};N(m,{default:()=>P});var g=H(m),c=j(_),a=O,d=A;const y=typeof navigator<"u",F=y&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1,v=y&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||F)&&!window.MSStream,V=y&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent)&&!window.MSStream,T="https://cdn.jsdelivr.net/npm/hls.js@VERSION/dist/hls.min.js",C="Hls",B="https://cdnjs.cloudflare.com/ajax/libs/dashjs/VERSION/dash.all.min.js",x="dashjs",K="https://cdn.jsdelivr.net/npm/flv.js@VERSION/dist/flv.min.js",G="flvjs",X=/www\.dropbox\.com\/.+/,f=/https:\/\/watch\.cloudflarestream\.com\/([a-z0-9]+)/,W="https://videodelivery.net/{id}/manifest/video.m3u8";class P extends c.Component{constructor(){super(...arguments),r(this,"onReady",(...e)=>this.props.onReady(...e)),r(this,"onPlay",(...e)=>this.props.onPlay(...e)),r(this,"onBuffer",(...e)=>this.props.onBuffer(...e)),r(this,"onBufferEnd",(...e)=>this.props.onBufferEnd(...e)),r(this,"onPause",(...e)=>this.props.onPause(...e)),r(this,"onEnded",(...e)=>this.props.onEnded(...e)),r(this,"onError",(...e)=>this.props.onError(...e)),r(this,"onPlayBackRateChange",e=>this.props.onPlaybackRateChange(e.target.playbackRate)),r(this,"onEnablePIP",(...e)=>this.props.onEnablePIP(...e)),r(this,"onDisablePIP",e=>{const{onDisablePIP:t,playing:i}=this.props;t(e),i&&this.play()}),r(this,"onPresentationModeChange",e=>{if(this.player&&(0,a.supportsWebKitPresentationMode)(this.player)){const{webkitPresentationMode:t}=this.player;t==="picture-in-picture"?this.onEnablePIP(e):t==="inline"&&this.onDisablePIP(e)}}),r(this,"onSeek",e=>{this.props.onSeek(e.target.currentTime)}),r(this,"mute",()=>{this.player.muted=!0}),r(this,"unmute",()=>{this.player.muted=!1}),r(this,"renderSourceElement",(e,t)=>typeof e=="string"?c.default.createElement("source",{key:t,src:e}):c.default.createElement("source",{key:t,...e})),r(this,"renderTrack",(e,t)=>c.default.createElement("track",{key:t,...e})),r(this,"ref",e=>{this.player&&(this.prevPlayer=this.player),this.player=e})}componentDidMount(){this.props.onMount&&this.props.onMount(this),this.addListeners(this.player);const e=this.getSource(this.props.url);e&&(this.player.src=e),(v||this.props.config.forceDisableHls)&&this.player.load()}componentDidUpdate(e){this.shouldUseAudio(this.props)!==this.shouldUseAudio(e)&&(this.removeListeners(this.prevPlayer,e.url),this.addListeners(this.player)),this.props.url!==e.url&&!(0,a.isMediaStream)(this.props.url)&&!(this.props.url instanceof Array)&&(this.player.srcObject=null)}componentWillUnmount(){this.player.removeAttribute("src"),this.removeListeners(this.player),this.hls&&this.hls.destroy()}addListeners(e){const{url:t,playsinline:i}=this.props;e.addEventListener("play",this.onPlay),e.addEventListener("waiting",this.onBuffer),e.addEventListener("playing",this.onBufferEnd),e.addEventListener("pause",this.onPause),e.addEventListener("seeked",this.onSeek),e.addEventListener("ended",this.onEnded),e.addEventListener("error",this.onError),e.addEventListener("ratechange",this.onPlayBackRateChange),e.addEventListener("enterpictureinpicture",this.onEnablePIP),e.addEventListener("leavepictureinpicture",this.onDisablePIP),e.addEventListener("webkitpresentationmodechanged",this.onPresentationModeChange),this.shouldUseHLS(t)||e.addEventListener("canplay",this.onReady),i&&(e.setAttribute("playsinline",""),e.setAttribute("webkit-playsinline",""),e.setAttribute("x5-playsinline",""))}removeListeners(e,t){e.removeEventListener("canplay",this.onReady),e.removeEventListener("play",this.onPlay),e.removeEventListener("waiting",this.onBuffer),e.removeEventListener("playing",this.onBufferEnd),e.removeEventListener("pause",this.onPause),e.removeEventListener("seeked",this.onSeek),e.removeEventListener("ended",this.onEnded),e.removeEventListener("error",this.onError),e.removeEventListener("ratechange",this.onPlayBackRateChange),e.removeEventListener("enterpictureinpicture",this.onEnablePIP),e.removeEventListener("leavepictureinpicture",this.onDisablePIP),e.removeEventListener("webkitpresentationmodechanged",this.onPresentationModeChange),this.shouldUseHLS(t)||e.removeEventListener("canplay",this.onReady)}shouldUseAudio(e){return e.config.forceVideo||e.config.attributes.poster?!1:d.AUDIO_EXTENSIONS.test(e.url)||e.config.forceAudio}shouldUseHLS(e){return V&&this.props.config.forceSafariHLS||this.props.config.forceHLS?!0:v||this.props.config.forceDisableHls?!1:d.HLS_EXTENSIONS.test(e)||f.test(e)}shouldUseDASH(e){return d.DASH_EXTENSIONS.test(e)||this.props.config.forceDASH}shouldUseFLV(e){return d.FLV_EXTENSIONS.test(e)||this.props.config.forceFLV}load(e){const{hlsVersion:t,hlsOptions:i,dashVersion:n,flvVersion:l}=this.props.config;if(this.hls&&this.hls.destroy(),this.dash&&this.dash.reset(),this.shouldUseHLS(e)&&(0,a.getSDK)(T.replace("VERSION",t),C).then(o=>{if(this.hls=new o(i),this.hls.on(o.Events.MANIFEST_PARSED,()=>{this.props.onReady()}),this.hls.on(o.Events.ERROR,(h,p)=>{this.props.onError(h,p,this.hls,o)}),f.test(e)){const h=e.match(f)[1];this.hls.loadSource(W.replace("{id}",h))}else this.hls.loadSource(e);this.hls.attachMedia(this.player),this.props.onLoaded()}),this.shouldUseDASH(e)&&(0,a.getSDK)(B.replace("VERSION",n),x).then(o=>{this.dash=o.MediaPlayer().create(),this.dash.initialize(this.player,e,this.props.playing),this.dash.on("error",this.props.onError),parseInt(n)<3?this.dash.getDebug().setLogToBrowserConsole(!1):this.dash.updateSettings({debug:{logLevel:o.Debug.LOG_LEVEL_NONE}}),this.props.onLoaded()}),this.shouldUseFLV(e)&&(0,a.getSDK)(K.replace("VERSION",l),G).then(o=>{this.flv=o.createPlayer({type:"flv",url:e}),this.flv.attachMediaElement(this.player),this.flv.on(o.Events.ERROR,(h,p)=>{this.props.onError(h,p,this.flv,o)}),this.flv.load(),this.props.onLoaded()}),e instanceof Array)this.player.load();else if((0,a.isMediaStream)(e))try{this.player.srcObject=e}catch{this.player.src=window.URL.createObjectURL(e)}}play(){const e=this.player.play();e&&e.catch(this.props.onError)}pause(){this.player.pause()}stop(){this.player.removeAttribute("src"),this.dash&&this.dash.reset()}seekTo(e,t=!0){this.player.currentTime=e,t||this.pause()}setVolume(e){this.player.volume=e}enablePIP(){this.player.requestPictureInPicture&&document.pictureInPictureElement!==this.player?this.player.requestPictureInPicture():(0,a.supportsWebKitPresentationMode)(this.player)&&this.player.webkitPresentationMode!=="picture-in-picture"&&this.player.webkitSetPresentationMode("picture-in-picture")}disablePIP(){document.exitPictureInPicture&&document.pictureInPictureElement===this.player?document.exitPictureInPicture():(0,a.supportsWebKitPresentationMode)(this.player)&&this.player.webkitPresentationMode!=="inline"&&this.player.webkitSetPresentationMode("inline")}setPlaybackRate(e){try{this.player.playbackRate=e}catch(t){this.props.onError(t)}}getDuration(){if(!this.player)return null;const{duration:e,seekable:t}=this.player;return e===1/0&&t.length>0?t.end(t.length-1):e}getCurrentTime(){return this.player?this.player.currentTime:null}getSecondsLoaded(){if(!this.player)return null;const{buffered:e}=this.player;if(e.length===0)return 0;const t=e.end(e.length-1),i=this.getDuration();return t>i?i:t}getSource(e){const t=this.shouldUseHLS(e),i=this.shouldUseDASH(e),n=this.shouldUseFLV(e);if(!(e instanceof Array||(0,a.isMediaStream)(e)||t||i||n))return X.test(e)?e.replace("www.dropbox.com","dl.dropboxusercontent.com"):e}render(){const{url:e,playing:t,loop:i,controls:n,muted:l,config:o,width:h,height:p}=this.props,L=this.shouldUseAudio(this.props)?"audio":"video",S={width:h==="auto"?h:"100%",height:p==="auto"?p:"100%"};return c.default.createElement(L,{ref:this.ref,src:this.getSource(e),style:S,preload:"auto",autoPlay:t||void 0,controls:n,muted:l,loop:i,...o.attributes},e instanceof Array&&e.map(this.renderSourceElement),o.tracks.map(this.renderTrack))}}r(P,"displayName","FilePlayer");r(P,"canPlay",d.canPlay.file);const z=b(g),J=R({__proto__:null,default:z},[g]);export{J as F};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as y,r as f,u as _,a as m}from"./index-
|
|
1
|
+
import{g as y,r as f,u as _,a as m}from"./index-d40d41cc.js";function P(r,e){for(var t=0;t<e.length;t++){const s=e[t];if(typeof s!="string"&&!Array.isArray(s)){for(const a in s)if(a!=="default"&&!(a in r)){const l=Object.getOwnPropertyDescriptor(s,a);l&&Object.defineProperty(r,a,l.get?l:{enumerable:!0,get:()=>s[a]})}}}return Object.freeze(Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}))}var g=Object.create,n=Object.defineProperty,b=Object.getOwnPropertyDescriptor,v=Object.getOwnPropertyNames,O=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,j=(r,e,t)=>e in r?n(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,L=(r,e)=>{for(var t in e)n(r,t,{get:e[t],enumerable:!0})},c=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of v(e))!w.call(r,a)&&a!==t&&n(r,a,{get:()=>e[a],enumerable:!(s=b(e,a))||s.enumerable});return r},K=(r,e,t)=>(t=r!=null?g(O(r)):{},c(e||!r||!r.__esModule?n(t,"default",{value:r,enumerable:!0}):t,r)),D=r=>c(n({},"__esModule",{value:!0}),r),o=(r,e,t)=>(j(r,typeof e!="symbol"?e+"":e,t),t),h={};L(h,{default:()=>i});var d=D(h),u=K(f),p=_,S=m;const T="https://cdn.embed.ly/player-0.1.0.min.js",E="playerjs";class i extends u.Component{constructor(){super(...arguments),o(this,"callPlayer",p.callPlayer),o(this,"duration",null),o(this,"currentTime",null),o(this,"secondsLoaded",null),o(this,"mute",()=>{this.callPlayer("mute")}),o(this,"unmute",()=>{this.callPlayer("unmute")}),o(this,"ref",e=>{this.iframe=e})}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){(0,p.getSDK)(T,E).then(t=>{this.iframe&&(this.player=new t.Player(this.iframe),this.player.on("ready",()=>{setTimeout(()=>{this.player.isReady=!0,this.player.setLoop(this.props.loop),this.props.muted&&this.player.mute(),this.addListeners(this.player,this.props),this.props.onReady()},500)}))},this.props.onError)}addListeners(e,t){e.on("play",t.onPlay),e.on("pause",t.onPause),e.on("ended",t.onEnded),e.on("error",t.onError),e.on("timeupdate",({duration:s,seconds:a})=>{this.duration=s,this.currentTime=a})}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,t=!0){this.callPlayer("setCurrentTime",e),t||this.pause()}setVolume(e){this.callPlayer("setVolume",e)}setLoop(e){this.callPlayer("setLoop",e)}getDuration(){return this.duration}getCurrentTime(){return this.currentTime}getSecondsLoaded(){return this.secondsLoaded}render(){const e={width:"100%",height:"100%"};return u.default.createElement("iframe",{ref:this.ref,src:this.props.url,frameBorder:"0",scrolling:"no",style:e,allow:"encrypted-media; autoplay; fullscreen;",referrerPolicy:"no-referrer-when-downgrade"})}}o(i,"displayName","Kaltura");o(i,"canPlay",S.canPlay.kaltura);const M=y(d),C=P({__proto__:null,default:M},[d]);export{C as K};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as _,r as f,u as m,a as g}from"./index-
|
|
1
|
+
import{g as _,r as f,u as m,a as g}from"./index-d40d41cc.js";function v(t,e){for(var r=0;r<e.length;r++){const s=e[r];if(typeof s!="string"&&!Array.isArray(s)){for(const o in s)if(o!=="default"&&!(o in t)){const n=Object.getOwnPropertyDescriptor(s,o);n&&Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:()=>s[o]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var P=Object.create,i=Object.defineProperty,O=Object.getOwnPropertyDescriptor,b=Object.getOwnPropertyNames,M=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,x=(t,e,r)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,j=(t,e)=>{for(var r in e)i(t,r,{get:e[r],enumerable:!0})},c=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of b(e))!w.call(t,o)&&o!==r&&i(t,o,{get:()=>e[o],enumerable:!(s=O(e,o))||s.enumerable});return t},D=(t,e,r)=>(r=t!=null?P(M(t)):{},c(e||!t||!t.__esModule?i(r,"default",{value:t,enumerable:!0}):r,t)),S=t=>c(i({},"__esModule",{value:!0}),t),a=(t,e,r)=>(x(t,typeof e!="symbol"?e+"":e,r),r),d={};j(d,{default:()=>l});var h=S(d),p=D(f),u=m,y=g;const E="https://widget.mixcloud.com/media/js/widgetApi.js",L="Mixcloud";class l extends p.Component{constructor(){super(...arguments),a(this,"callPlayer",u.callPlayer),a(this,"duration",null),a(this,"currentTime",null),a(this,"secondsLoaded",null),a(this,"mute",()=>{}),a(this,"unmute",()=>{}),a(this,"ref",e=>{this.iframe=e})}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){(0,u.getSDK)(E,L).then(r=>{this.player=r.PlayerWidget(this.iframe),this.player.ready.then(()=>{this.player.events.play.on(this.props.onPlay),this.player.events.pause.on(this.props.onPause),this.player.events.ended.on(this.props.onEnded),this.player.events.error.on(this.props.error),this.player.events.progress.on((s,o)=>{this.currentTime=s,this.duration=o}),this.props.onReady()})},this.props.onError)}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,r=!0){this.callPlayer("seek",e),r||this.pause()}setVolume(e){}getDuration(){return this.duration}getCurrentTime(){return this.currentTime}getSecondsLoaded(){return null}render(){const{url:e,config:r}=this.props,s=e.match(y.MATCH_URL_MIXCLOUD)[1],o={width:"100%",height:"100%"},n=(0,u.queryString)({...r.options,feed:`/${s}/`});return p.default.createElement("iframe",{key:s,ref:this.ref,style:o,src:`https://www.mixcloud.com/widget/iframe/?${n}`,frameBorder:"0",allow:"autoplay"})}}a(l,"displayName","Mixcloud");a(l,"canPlay",y.canPlay.mixcloud);a(l,"loopOnEnded",!0);const T=_(h),A=v({__proto__:null,default:T},[h]);export{A as M};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as m,_ as E,r as g,a as _}from"./index-
|
|
1
|
+
import{g as m,_ as E,r as g,a as _}from"./index-d40d41cc.js";function b(r,e){for(var t=0;t<e.length;t++){const i=e[t];if(typeof i!="string"&&!Array.isArray(i)){for(const s in i)if(s!=="default"&&!(s in r)){const o=Object.getOwnPropertyDescriptor(i,s);o&&Object.defineProperty(r,s,o.get?o:{enumerable:!0,get:()=>i[s]})}}}return Object.freeze(Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}))}var L=Object.create,u=Object.defineProperty,I=Object.getOwnPropertyDescriptor,k=Object.getOwnPropertyNames,O=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty,M=(r,e,t)=>e in r?u(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,R=(r,e)=>{for(var t in e)u(r,t,{get:e[t],enumerable:!0})},f=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of k(e))!x.call(r,s)&&s!==t&&u(r,s,{get:()=>e[s],enumerable:!(i=I(e,s))||i.enumerable});return r},w=(r,e,t)=>(t=r!=null?L(O(r)):{},f(e||!r||!r.__esModule?u(t,"default",{value:r,enumerable:!0}):t,r)),D=r=>f(u({},"__esModule",{value:!0}),r),n=(r,e,t)=>(M(r,typeof e!="symbol"?e+"":e,t),t),y={};R(y,{default:()=>l});var P=D(y),v=w(g),p=_;const j="https://cdn.jsdelivr.net/npm/@mux/mux-player@VERSION/dist/mux-player.mjs";class l extends v.Component{constructor(){super(...arguments),n(this,"onReady",(...e)=>this.props.onReady(...e)),n(this,"onPlay",(...e)=>this.props.onPlay(...e)),n(this,"onBuffer",(...e)=>this.props.onBuffer(...e)),n(this,"onBufferEnd",(...e)=>this.props.onBufferEnd(...e)),n(this,"onPause",(...e)=>this.props.onPause(...e)),n(this,"onEnded",(...e)=>this.props.onEnded(...e)),n(this,"onError",(...e)=>this.props.onError(...e)),n(this,"onPlayBackRateChange",e=>this.props.onPlaybackRateChange(e.target.playbackRate)),n(this,"onEnablePIP",(...e)=>this.props.onEnablePIP(...e)),n(this,"onSeek",e=>{this.props.onSeek(e.target.currentTime)}),n(this,"onDurationChange",()=>{const e=this.getDuration();this.props.onDuration(e)}),n(this,"mute",()=>{this.player.muted=!0}),n(this,"unmute",()=>{this.player.muted=!1}),n(this,"ref",e=>{this.player=e})}componentDidMount(){this.props.onMount&&this.props.onMount(this),this.addListeners(this.player);const e=this.getPlaybackId(this.props.url);e&&(this.player.playbackId=e)}componentWillUnmount(){this.player.playbackId=null,this.removeListeners(this.player)}addListeners(e){const{playsinline:t}=this.props;e.addEventListener("play",this.onPlay),e.addEventListener("waiting",this.onBuffer),e.addEventListener("playing",this.onBufferEnd),e.addEventListener("pause",this.onPause),e.addEventListener("seeked",this.onSeek),e.addEventListener("ended",this.onEnded),e.addEventListener("error",this.onError),e.addEventListener("ratechange",this.onPlayBackRateChange),e.addEventListener("enterpictureinpicture",this.onEnablePIP),e.addEventListener("leavepictureinpicture",this.onDisablePIP),e.addEventListener("webkitpresentationmodechanged",this.onPresentationModeChange),e.addEventListener("canplay",this.onReady),t&&e.setAttribute("playsinline","")}removeListeners(e){e.removeEventListener("canplay",this.onReady),e.removeEventListener("play",this.onPlay),e.removeEventListener("waiting",this.onBuffer),e.removeEventListener("playing",this.onBufferEnd),e.removeEventListener("pause",this.onPause),e.removeEventListener("seeked",this.onSeek),e.removeEventListener("ended",this.onEnded),e.removeEventListener("error",this.onError),e.removeEventListener("ratechange",this.onPlayBackRateChange),e.removeEventListener("enterpictureinpicture",this.onEnablePIP),e.removeEventListener("leavepictureinpicture",this.onDisablePIP),e.removeEventListener("canplay",this.onReady)}async load(e){var t;const{onError:i,config:s}=this.props;if(!((t=globalThis.customElements)!=null&&t.get("mux-player")))try{const a=j.replace("VERSION",s.version);await E(()=>import(`${a}`),[]),this.props.onLoaded()}catch(a){i(a)}const[,o]=e.match(p.MATCH_URL_MUX);this.player.playbackId=o}play(){const e=this.player.play();e&&e.catch(this.props.onError)}pause(){this.player.pause()}stop(){this.player.playbackId=null}seekTo(e,t=!0){this.player.currentTime=e,t||this.pause()}setVolume(e){this.player.volume=e}enablePIP(){this.player.requestPictureInPicture&&document.pictureInPictureElement!==this.player&&this.player.requestPictureInPicture()}disablePIP(){document.exitPictureInPicture&&document.pictureInPictureElement===this.player&&document.exitPictureInPicture()}setPlaybackRate(e){try{this.player.playbackRate=e}catch(t){this.props.onError(t)}}getDuration(){if(!this.player)return null;const{duration:e,seekable:t}=this.player;return e===1/0&&t.length>0?t.end(t.length-1):e}getCurrentTime(){return this.player?this.player.currentTime:null}getSecondsLoaded(){if(!this.player)return null;const{buffered:e}=this.player;if(e.length===0)return 0;const t=e.end(e.length-1),i=this.getDuration();return t>i?i:t}getPlaybackId(e){const[,t]=e.match(p.MATCH_URL_MUX);return t}render(){const{url:e,playing:t,loop:i,controls:s,muted:o,config:a,width:h,height:c}=this.props,d={width:h==="auto"?h:"100%",height:c==="auto"?c:"100%"};return s===!1&&(d["--controls"]="none"),v.default.createElement("mux-player",{ref:this.ref,"playback-id":this.getPlaybackId(e),style:d,preload:"auto",autoPlay:t||void 0,muted:o?"":void 0,loop:i?"":void 0,...a.attributes})}}n(l,"displayName","Mux");n(l,"canPlay",p.canPlay.mux);const C=m(P),B=b({__proto__:null,default:C},[P]);export{B as M};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as y,r as v}from"./index-
|
|
1
|
+
import{g as y,r as v}from"./index-d40d41cc.js";function w(r,e){for(var t=0;t<e.length;t++){const n=e[t];if(typeof n!="string"&&!Array.isArray(n)){for(const a in n)if(a!=="default"&&!(a in r)){const o=Object.getOwnPropertyDescriptor(n,a);o&&Object.defineProperty(r,a,o.get?o:{enumerable:!0,get:()=>n[a]})}}}return Object.freeze(Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}))}var P=Object.create,s=Object.defineProperty,O=Object.getOwnPropertyDescriptor,x=Object.getOwnPropertyNames,I=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty,E=(r,e,t)=>e in r?s(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,S=(r,e)=>{for(var t in e)s(r,t,{get:e[t],enumerable:!0})},_=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of x(e))!j.call(r,a)&&a!==t&&s(r,a,{get:()=>e[a],enumerable:!(n=O(e,a))||n.enumerable});return r},C=(r,e,t)=>(t=r!=null?P(I(r)):{},_(e||!r||!r.__esModule?s(t,"default",{value:r,enumerable:!0}):t,r)),N=r=>_(s({},"__esModule",{value:!0}),r),p=(r,e,t)=>(E(r,typeof e!="symbol"?e+"":e,t),t),g={};S(g,{default:()=>k});var m=N(g),i=C(v);const u="64px",d={};class k extends i.Component{constructor(){super(...arguments),p(this,"mounted",!1),p(this,"state",{image:null}),p(this,"handleKeyPress",e=>{(e.key==="Enter"||e.key===" ")&&this.props.onClick()})}componentDidMount(){this.mounted=!0,this.fetchImage(this.props)}componentDidUpdate(e){const{url:t,light:n}=this.props;(e.url!==t||e.light!==n)&&this.fetchImage(this.props)}componentWillUnmount(){this.mounted=!1}fetchImage({url:e,light:t,oEmbedUrl:n}){if(!i.default.isValidElement(t)){if(typeof t=="string"){this.setState({image:t});return}if(d[e]){this.setState({image:d[e]});return}return this.setState({image:null}),window.fetch(n.replace("{url}",e)).then(a=>a.json()).then(a=>{if(a.thumbnail_url&&this.mounted){const o=a.thumbnail_url.replace("height=100","height=480").replace("-d_295x166","-d_640");this.setState({image:o}),d[e]=o}})}}render(){const{light:e,onClick:t,playIcon:n,previewTabIndex:a,previewAriaLabel:o}=this.props,{image:f}=this.state,l=i.default.isValidElement(e),h={display:"flex",alignItems:"center",justifyContent:"center"},c={preview:{width:"100%",height:"100%",backgroundImage:f&&!l?`url(${f})`:void 0,backgroundSize:"cover",backgroundPosition:"center",cursor:"pointer",...h},shadow:{background:"radial-gradient(rgb(0, 0, 0, 0.3), rgba(0, 0, 0, 0) 60%)",borderRadius:u,width:u,height:u,position:l?"absolute":void 0,...h},playIcon:{borderStyle:"solid",borderWidth:"16px 0 16px 26px",borderColor:"transparent transparent transparent white",marginLeft:"7px"}},b=i.default.createElement("div",{style:c.shadow,className:"react-player__shadow"},i.default.createElement("div",{style:c.playIcon,className:"react-player__play-icon"}));return i.default.createElement("div",{style:c.preview,className:"react-player__preview",onClick:t,tabIndex:a,onKeyPress:this.handleKeyPress,...o?{"aria-label":o}:{}},l?e:null,n||b)}}const D=y(m),A=w({__proto__:null,default:D},[m]);export{A as P};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as P,r as g,u as b,a as v}from"./index-
|
|
1
|
+
import{g as P,r as g,u as b,a as v}from"./index-d40d41cc.js";function O(t,e){for(var r=0;r<e.length;r++){const s=e[r];if(typeof s!="string"&&!Array.isArray(s)){for(const o in s)if(o!=="default"&&!(o in t)){const i=Object.getOwnPropertyDescriptor(s,o);i&&Object.defineProperty(t,o,i.get?i:{enumerable:!0,get:()=>s[o]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var S=Object.create,l=Object.defineProperty,w=Object.getOwnPropertyDescriptor,j=Object.getOwnPropertyNames,C=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty,D=(t,e,r)=>e in t?l(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,L=(t,e)=>{for(var r in e)l(t,r,{get:e[r],enumerable:!0})},d=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of j(e))!E.call(t,o)&&o!==r&&l(t,o,{get:()=>e[o],enumerable:!(s=w(e,o))||s.enumerable});return t},R=(t,e,r)=>(r=t!=null?S(C(t)):{},d(e||!t||!t.__esModule?l(r,"default",{value:t,enumerable:!0}):r,t)),T=t=>d(l({},"__esModule",{value:!0}),t),a=(t,e,r)=>(D(t,typeof e!="symbol"?e+"":e,r),r),h={};L(h,{default:()=>u});var f=T(h),p=R(g),c=b,M=v;const x="https://w.soundcloud.com/player/api.js",A="SC";class u extends p.Component{constructor(){super(...arguments),a(this,"callPlayer",c.callPlayer),a(this,"duration",null),a(this,"currentTime",null),a(this,"fractionLoaded",null),a(this,"mute",()=>{this.setVolume(0)}),a(this,"unmute",()=>{this.props.volume!==null&&this.setVolume(this.props.volume)}),a(this,"ref",e=>{this.iframe=e})}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e,r){(0,c.getSDK)(x,A).then(s=>{if(!this.iframe)return;const{PLAY:o,PLAY_PROGRESS:i,PAUSE:y,FINISH:_,ERROR:m}=s.Widget.Events;r||(this.player=s.Widget(this.iframe),this.player.bind(o,this.props.onPlay),this.player.bind(y,()=>{this.duration-this.currentTime<.05||this.props.onPause()}),this.player.bind(i,n=>{this.currentTime=n.currentPosition/1e3,this.fractionLoaded=n.loadedProgress}),this.player.bind(_,()=>this.props.onEnded()),this.player.bind(m,n=>this.props.onError(n))),this.player.load(e,{...this.props.config.options,callback:()=>{this.player.getDuration(n=>{this.duration=n/1e3,this.props.onReady()})}})})}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,r=!0){this.callPlayer("seekTo",e*1e3),r||this.pause()}setVolume(e){this.callPlayer("setVolume",e*100)}getDuration(){return this.duration}getCurrentTime(){return this.currentTime}getSecondsLoaded(){return this.fractionLoaded*this.duration}render(){const{display:e}=this.props,r={width:"100%",height:"100%",display:e};return p.default.createElement("iframe",{ref:this.ref,src:`https://w.soundcloud.com/player/?url=${encodeURIComponent(this.props.url)}`,style:r,frameBorder:0,allow:"autoplay"})}}a(u,"displayName","SoundCloud");a(u,"canPlay",M.canPlay.soundcloud);a(u,"loopOnEnded",!0);const N=P(f),F=O({__proto__:null,default:N},[f]);export{F as S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as m,r as f,u as _,a as b}from"./index-
|
|
1
|
+
import{g as m,r as f,u as _,a as b}from"./index-d40d41cc.js";function P(t,e){for(var r=0;r<e.length;r++){const s=e[r];if(typeof s!="string"&&!Array.isArray(s)){for(const a in s)if(a!=="default"&&!(a in t)){const n=Object.getOwnPropertyDescriptor(s,a);n&&Object.defineProperty(t,a,n.get?n:{enumerable:!0,get:()=>s[a]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var g=Object.create,l=Object.defineProperty,v=Object.getOwnPropertyDescriptor,O=Object.getOwnPropertyNames,S=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty,L=(t,e,r)=>e in t?l(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,w=(t,e)=>{for(var r in e)l(t,r,{get:e[r],enumerable:!0})},c=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of O(e))!j.call(t,a)&&a!==r&&l(t,a,{get:()=>e[a],enumerable:!(s=v(e,a))||s.enumerable});return t},D=(t,e,r)=>(r=t!=null?g(S(t)):{},c(e||!t||!t.__esModule?l(r,"default",{value:t,enumerable:!0}):r,t)),E=t=>c(l({},"__esModule",{value:!0}),t),o=(t,e,r)=>(L(t,typeof e!="symbol"?e+"":e,r),r),h={};w(h,{default:()=>i});var y=E(h),p=D(f),u=_,d=b;const M="https://cdn.embed.ly/player-0.1.0.min.js",T="playerjs";class i extends p.Component{constructor(){super(...arguments),o(this,"callPlayer",u.callPlayer),o(this,"duration",null),o(this,"currentTime",null),o(this,"secondsLoaded",null),o(this,"mute",()=>{this.callPlayer("mute")}),o(this,"unmute",()=>{this.callPlayer("unmute")}),o(this,"ref",e=>{this.iframe=e})}componentDidMount(){this.props.onMount&&this.props.onMount(this)}load(e){(0,u.getSDK)(M,T).then(r=>{this.iframe&&(this.player=new r.Player(this.iframe),this.player.setLoop(this.props.loop),this.player.on("ready",this.props.onReady),this.player.on("play",this.props.onPlay),this.player.on("pause",this.props.onPause),this.player.on("seeked",this.props.onSeek),this.player.on("ended",this.props.onEnded),this.player.on("error",this.props.onError),this.player.on("timeupdate",({duration:s,seconds:a})=>{this.duration=s,this.currentTime=a}),this.player.on("buffered",({percent:s})=>{this.duration&&(this.secondsLoaded=this.duration*s)}),this.props.muted&&this.player.mute())},this.props.onError)}play(){this.callPlayer("play")}pause(){this.callPlayer("pause")}stop(){}seekTo(e,r=!0){this.callPlayer("setCurrentTime",e),r||this.pause()}setVolume(e){this.callPlayer("setVolume",e*100)}setLoop(e){this.callPlayer("setLoop",e)}getDuration(){return this.duration}getCurrentTime(){return this.currentTime}getSecondsLoaded(){return this.secondsLoaded}render(){const e=this.props.url.match(d.MATCH_URL_STREAMABLE)[1],r={width:"100%",height:"100%"};return p.default.createElement("iframe",{ref:this.ref,src:`https://streamable.com/o/${e}`,frameBorder:"0",scrolling:"no",style:r,allow:"encrypted-media; autoplay; fullscreen;"})}}o(i,"displayName","Streamable");o(i,"canPlay",d.canPlay.streamable);const x=m(y),C=P({__proto__:null,default:x},[y]);export{C as S};
|