chainlit 1.1.0__py3-none-any.whl → 1.1.0rc0__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.

@@ -22,7 +22,7 @@
22
22
  <script>
23
23
  const global = globalThis;
24
24
  </script>
25
- <script type="module" crossorigin src="/assets/index-0a52365d.js"></script>
25
+ <script type="module" crossorigin src="/assets/index-032fca02.js"></script>
26
26
  <link rel="stylesheet" href="/assets/index-d088547c.css">
27
27
  </head>
28
28
  <body>
chainlit/server.py CHANGED
@@ -119,27 +119,16 @@ async def lifespan(app: FastAPI):
119
119
 
120
120
  watch_task = asyncio.create_task(watch_files_for_changes())
121
121
 
122
- discord_task = None
123
-
124
- if discord_bot_token := os.environ.get("DISCORD_BOT_TOKEN"):
125
- from chainlit.discord.app import client
126
-
127
- discord_task = asyncio.create_task(client.start(discord_bot_token))
128
-
129
122
  try:
130
123
  yield
131
124
  finally:
132
- try:
133
- if watch_task:
125
+ if watch_task:
126
+ try:
134
127
  stop_event.set()
135
128
  watch_task.cancel()
136
129
  await watch_task
137
-
138
- if discord_task:
139
- discord_task.cancel()
140
- await discord_task
141
- except asyncio.exceptions.CancelledError:
142
- pass
130
+ except asyncio.exceptions.CancelledError:
131
+ pass
143
132
 
144
133
  if FILES_DIRECTORY.is_dir():
145
134
  shutil.rmtree(FILES_DIRECTORY)
@@ -206,18 +195,6 @@ socket = SocketManager(
206
195
  )
207
196
 
208
197
 
209
- # -------------------------------------------------------------------------------
210
- # SLACK HANDLER
211
- # -------------------------------------------------------------------------------
212
-
213
- if os.environ.get("SLACK_BOT_TOKEN") and os.environ.get("SLACK_SIGNING_SECRET"):
214
- from chainlit.slack.app import slack_app_handler
215
-
216
- @app.post("/slack/events")
217
- async def endpoint(req: Request):
218
- return await slack_app_handler.handle(req)
219
-
220
-
221
198
  # -------------------------------------------------------------------------------
222
199
  # HTTP HANDLERS
223
200
  # -------------------------------------------------------------------------------
chainlit/session.py CHANGED
@@ -24,7 +24,7 @@ if TYPE_CHECKING:
24
24
  from chainlit.types import FileDict, FileReference
25
25
  from chainlit.user import PersistedUser, User
26
26
 
27
- ClientType = Literal["webapp", "copilot", "teams", "slack", "discord"]
27
+ ClientType = Literal["app", "copilot", "teams", "slack"]
28
28
 
29
29
 
30
30
  class JSONEncoderIgnoreNonSerializable(json.JSONEncoder):
@@ -35,21 +35,11 @@ class JSONEncoderIgnoreNonSerializable(json.JSONEncoder):
35
35
  return None
36
36
 
37
37
 
38
-
39
- def clean_metadata(metadata: Dict, max_size: int = 1048576):
40
- cleaned_metadata = json.loads(
38
+ def clean_metadata(metadata: Dict):
39
+ return json.loads(
41
40
  json.dumps(metadata, cls=JSONEncoderIgnoreNonSerializable, ensure_ascii=False)
42
41
  )
43
42
 
44
- metadata_size = len(json.dumps(cleaned_metadata).encode('utf-8'))
45
- if metadata_size > max_size:
46
- # Redact the metadata if it exceeds the maximum size
47
- cleaned_metadata = {
48
- 'message': f'Metadata size exceeds the limit of {max_size} bytes. Redacted.'
49
- }
50
-
51
- return cleaned_metadata
52
-
53
43
 
54
44
  class BaseSession:
55
45
  """Base object."""
@@ -90,66 +80,18 @@ class BaseSession:
90
80
  self.chat_profile = chat_profile
91
81
  self.http_referer = http_referer
92
82
 
93
- self.files = {} # type: Dict[str, "FileDict"]
94
-
95
83
  self.id = id
96
84
 
97
85
  self.chat_settings: Dict[str, Any] = {}
98
86
 
99
- @property
100
- def files_dir(self):
101
- from chainlit.config import FILES_DIRECTORY
102
-
103
- return FILES_DIRECTORY / self.id
104
-
105
87
  async def persist_file(
106
88
  self,
107
89
  name: str,
108
90
  mime: str,
109
91
  path: Optional[str] = None,
110
92
  content: Optional[Union[bytes, str]] = None,
111
- ) -> "FileReference":
112
- if not path and not content:
113
- raise ValueError(
114
- "Either path or content must be provided to persist a file"
115
- )
116
-
117
- self.files_dir.mkdir(exist_ok=True)
118
-
119
- file_id = str(uuid.uuid4())
120
-
121
- file_path = self.files_dir / file_id
122
-
123
- file_extension = mimetypes.guess_extension(mime)
124
-
125
- if file_extension:
126
- file_path = file_path.with_suffix(file_extension)
127
-
128
- if path:
129
- # Copy the file from the given path
130
- async with aiofiles.open(path, "rb") as src, aiofiles.open(
131
- file_path, "wb"
132
- ) as dst:
133
- await dst.write(await src.read())
134
- elif content:
135
- # Write the provided content to the file
136
- async with aiofiles.open(file_path, "wb") as buffer:
137
- if isinstance(content, str):
138
- content = content.encode("utf-8")
139
- await buffer.write(content)
140
-
141
- # Get the file size
142
- file_size = file_path.stat().st_size
143
- # Store the file content in memory
144
- self.files[file_id] = {
145
- "id": file_id,
146
- "path": file_path,
147
- "name": name,
148
- "type": mime,
149
- "size": file_size,
150
- }
151
-
152
- return {"id": file_id}
93
+ ):
94
+ return None
153
95
 
154
96
  def to_persistable(self) -> Dict:
155
97
  from chainlit.user_session import user_sessions
@@ -157,8 +99,6 @@ class BaseSession:
157
99
  user_session = user_sessions.get(self.id) or {} # type: Dict
158
100
  user_session["chat_settings"] = self.chat_settings
159
101
  user_session["chat_profile"] = self.chat_profile
160
- user_session["http_referer"] = self.http_referer
161
- user_session["client_type"] = self.client_type
162
102
  metadata = clean_metadata(user_session)
163
103
  return metadata
164
104
 
@@ -194,11 +134,6 @@ class HTTPSession(BaseSession):
194
134
  http_referer=http_referer,
195
135
  )
196
136
 
197
- def delete(self):
198
- """Delete the session."""
199
- if self.files_dir.is_dir():
200
- shutil.rmtree(self.files_dir)
201
-
202
137
 
203
138
  class WebsocketSession(BaseSession):
204
139
  """Internal web socket session object.
@@ -212,8 +147,6 @@ class WebsocketSession(BaseSession):
212
147
  socket id for convenience.
213
148
  """
214
149
 
215
- to_clear: bool = False
216
-
217
150
  def __init__(
218
151
  self,
219
152
  # Id from the session cookie
@@ -261,12 +194,68 @@ class WebsocketSession(BaseSession):
261
194
  self.restored = False
262
195
 
263
196
  self.thread_queues = {} # type: Dict[str, Deque[Callable]]
197
+ self.files = {} # type: Dict[str, "FileDict"]
264
198
 
265
199
  ws_sessions_id[self.id] = self
266
200
  ws_sessions_sid[socket_id] = self
267
201
 
268
202
  self.languages = languages
269
203
 
204
+ @property
205
+ def files_dir(self):
206
+ from chainlit.config import FILES_DIRECTORY
207
+
208
+ return FILES_DIRECTORY / self.id
209
+
210
+ async def persist_file(
211
+ self,
212
+ name: str,
213
+ mime: str,
214
+ path: Optional[str] = None,
215
+ content: Optional[Union[bytes, str]] = None,
216
+ ) -> "FileReference":
217
+ if not path and not content:
218
+ raise ValueError(
219
+ "Either path or content must be provided to persist a file"
220
+ )
221
+
222
+ self.files_dir.mkdir(exist_ok=True)
223
+
224
+ file_id = str(uuid.uuid4())
225
+
226
+ file_path = self.files_dir / file_id
227
+
228
+ file_extension = mimetypes.guess_extension(mime)
229
+
230
+ if file_extension:
231
+ file_path = file_path.with_suffix(file_extension)
232
+
233
+ if path:
234
+ # Copy the file from the given path
235
+ async with aiofiles.open(path, "rb") as src, aiofiles.open(
236
+ file_path, "wb"
237
+ ) as dst:
238
+ await dst.write(await src.read())
239
+ elif content:
240
+ # Write the provided content to the file
241
+ async with aiofiles.open(file_path, "wb") as buffer:
242
+ if isinstance(content, str):
243
+ content = content.encode("utf-8")
244
+ await buffer.write(content)
245
+
246
+ # Get the file size
247
+ file_size = file_path.stat().st_size
248
+ # Store the file content in memory
249
+ self.files[file_id] = {
250
+ "id": file_id,
251
+ "path": file_path,
252
+ "name": name,
253
+ "type": mime,
254
+ "size": file_size,
255
+ }
256
+
257
+ return {"id": file_id}
258
+
270
259
  def restore(self, new_socket_id: str):
271
260
  """Associate a new socket id to the session."""
272
261
  ws_sessions_sid.pop(self.socket_id, None)
chainlit/socket.py CHANGED
@@ -177,8 +177,8 @@ async def connection_successful(sid):
177
177
  "first_interaction",
178
178
  {"interaction": "resume", "thread_id": thread.get("id")},
179
179
  )
180
- await config.code.on_chat_resume(thread)
181
180
  await context.emitter.resume_thread(thread)
181
+ await config.code.on_chat_resume(thread)
182
182
  return
183
183
 
184
184
  if config.code.on_chat_start:
@@ -188,42 +188,36 @@ async def connection_successful(sid):
188
188
 
189
189
  @socket.on("clear_session")
190
190
  async def clean_session(sid):
191
- session = WebsocketSession.get(sid)
192
- if session:
193
- session.to_clear = True
191
+ await disconnect(sid, force_clear=True)
194
192
 
195
193
 
196
194
  @socket.on("disconnect")
197
- async def disconnect(sid):
195
+ async def disconnect(sid, force_clear=False):
198
196
  session = WebsocketSession.get(sid)
197
+ if session:
198
+ init_ws_context(session)
199
199
 
200
- if not session:
201
- return
202
-
203
- init_ws_context(session)
204
-
205
- if config.code.on_chat_end:
200
+ if config.code.on_chat_end and session:
206
201
  await config.code.on_chat_end()
207
202
 
208
- if session.thread_id and session.has_first_interaction:
203
+ if session and session.thread_id and session.has_first_interaction:
209
204
  await persist_user_session(session.thread_id, session.to_persistable())
210
205
 
211
- def clear(_sid):
212
- if session := WebsocketSession.get(_sid):
206
+ def clear():
207
+ if session := WebsocketSession.get(sid):
213
208
  # Clean up the user session
214
209
  if session.id in user_sessions:
215
210
  user_sessions.pop(session.id)
216
211
  # Clean up the session
217
212
  session.delete()
218
213
 
219
- if session.to_clear:
220
- clear(sid)
221
- else:
222
-
223
- async def clear_on_timeout(_sid):
224
- await asyncio.sleep(config.project.session_timeout)
225
- clear(_sid)
214
+ async def clear_on_timeout(sid):
215
+ await asyncio.sleep(config.project.session_timeout)
216
+ clear()
226
217
 
218
+ if force_clear:
219
+ clear()
220
+ else:
227
221
  asyncio.ensure_future(clear_on_timeout(sid))
228
222
 
229
223
 
chainlit/step.py CHANGED
@@ -193,34 +193,10 @@ class Step:
193
193
  self.persisted = False
194
194
  self.fail_on_persist_error = False
195
195
 
196
- def _clean_content(self, content):
197
- """
198
- Recursively checks and converts bytes objects in content.
199
- """
200
-
201
- def handle_bytes(item):
202
- if isinstance(item, bytes):
203
- return "STRIPPED_BINARY_DATA"
204
- elif isinstance(item, dict):
205
- return {k: handle_bytes(v) for k, v in item.items()}
206
- elif isinstance(item, list):
207
- return [handle_bytes(i) for i in item]
208
- elif isinstance(item, tuple):
209
- return tuple(handle_bytes(i) for i in item)
210
- return item
211
-
212
- return handle_bytes(content)
213
-
214
196
  def _process_content(self, content, set_language=False):
215
197
  if content is None:
216
198
  return ""
217
- content = self._clean_content(content)
218
-
219
- if (
220
- isinstance(content, dict)
221
- or isinstance(content, list)
222
- or isinstance(content, tuple)
223
- ):
199
+ if isinstance(content, dict):
224
200
  try:
225
201
  processed_content = json.dumps(content, indent=4, ensure_ascii=False)
226
202
  if set_language:
chainlit/types.py CHANGED
@@ -1,5 +1,4 @@
1
1
  from enum import Enum
2
- from pathlib import Path
3
2
  from typing import (
4
3
  TYPE_CHECKING,
5
4
  Any,
@@ -145,7 +144,7 @@ class FileReference(TypedDict):
145
144
  class FileDict(TypedDict):
146
145
  id: str
147
146
  name: str
148
- path: Path
147
+ path: str
149
148
  size: int
150
149
  type: str
151
150
 
chainlit/user_session.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from typing import Dict
2
2
 
3
- from chainlit.context import WebsocketSession, context
3
+ from chainlit.context import context
4
4
 
5
5
  user_sessions: Dict[str, Dict] = {}
6
6
 
@@ -27,11 +27,8 @@ class UserSession:
27
27
  user_session["chat_settings"] = context.session.chat_settings
28
28
  user_session["user"] = context.session.user
29
29
  user_session["chat_profile"] = context.session.chat_profile
30
+ user_session["languages"] = context.session.languages
30
31
  user_session["http_referer"] = context.session.http_referer
31
- user_session["client_type"] = context.session.client_type
32
-
33
- if isinstance(context.session, WebsocketSession):
34
- user_session["languages"] = context.session.languages
35
32
 
36
33
  if context.session.root_message:
37
34
  user_session["root_message"] = context.session.root_message
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: chainlit
3
- Version: 1.1.0
3
+ Version: 1.1.0rc0
4
4
  Summary: Build Conversational AI.
5
5
  Home-page: https://github.com/Chainlit/chainlit
6
6
  License: Apache-2.0 license
@@ -22,12 +22,13 @@ Requires-Dist: fastapi-socketio (>=0.0.10,<0.0.11)
22
22
  Requires-Dist: filetype (>=1.2.0,<2.0.0)
23
23
  Requires-Dist: httpx (>=0.23.0)
24
24
  Requires-Dist: lazify (>=0.4.0,<0.5.0)
25
- Requires-Dist: literalai (==0.0.601)
25
+ Requires-Dist: literalai (==0.0.509)
26
26
  Requires-Dist: nest-asyncio (>=1.5.6,<2.0.0)
27
27
  Requires-Dist: packaging (>=23.1,<24.0)
28
28
  Requires-Dist: pydantic (>=1,<3)
29
29
  Requires-Dist: pyjwt (>=2.8.0,<3.0.0)
30
30
  Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
31
+ Requires-Dist: python-graphql-client (>=0.4.3,<0.5.0)
31
32
  Requires-Dist: python-multipart (>=0.0.9,<0.0.10)
32
33
  Requires-Dist: starlette (>=0.37.2,<0.38.0)
33
34
  Requires-Dist: syncer (>=2.0.3,<3.0.0)
@@ -50,7 +51,6 @@ Chainlit is an open-source async Python framework which allows developers to bui
50
51
 
51
52
  - ✅ ChatGPT-like application
52
53
  - ✅ Embedded Chatbot & Software Copilot
53
- - ✅ Slack & Discord
54
54
  - ✅ Custom frontend (build your own agentic experience)
55
55
  - ✅ API Endpoint
56
56
 
@@ -113,7 +113,6 @@ $ chainlit run demo.py -w
113
113
  ```
114
114
 
115
115
  <img src="/images/quick-start.png" alt="Quick Start"></img>
116
-
117
116
  ## 🎉 Key Features and Integrations
118
117
 
119
118
  Full documentation is available [here](https://docs.chainlit.io). Key features:
@@ -6,26 +6,24 @@ chainlit/cache.py,sha256=Bv3dT4eHhE6Fq3c6Do0ZTpiyoXgXYewdxTgpYghEd9g,1361
6
6
  chainlit/chat_settings.py,sha256=2ByenmwS8O6jQjDVJjhhbLrBPGA5aY2F7R3VvQQxXPk,877
7
7
  chainlit/cli/__init__.py,sha256=JEB3Z3VWpzPgcfdSOQ6Z-L7dHdl7A1y47KUZP8H08GQ,4951
8
8
  chainlit/cli/utils.py,sha256=mE2d9oOk-B2b9ZvDV1zENoDWxjfMriGP7bVwEFduZP4,717
9
- chainlit/config.py,sha256=Knk88P47PHBNfxaqrrA_Tx0qSTxd_XYcTAfXxqtEnTs,16138
10
- chainlit/context.py,sha256=kBnJiKKNhft1nrXFLQnAW6M-_mzMpYqDEFAG5-lrHyo,2813
9
+ chainlit/config.py,sha256=RNrxWmqmbPol_mRI2M5p0sMcR5PqyqY7WcLwo4g6OHI,16047
10
+ chainlit/context.py,sha256=CecWdRuRCTr4jfXlOiU3Mh41j3B-p40c1jC7mhToVzk,2476
11
11
  chainlit/copilot/dist/assets/logo_dark-2a3cf740.svg,sha256=Kjz3QMh-oh-ag4YatjU0YCPqGF7F8nHh8VUQoJIs01E,8887
12
12
  chainlit/copilot/dist/assets/logo_light-b078e7bc.svg,sha256=sHjnvEq1rfqh3bcexJNYUY7WEDdTQZq3aKZYpi4w4ck,8889
13
- chainlit/copilot/dist/index.js,sha256=kd2VVPOnKieJnE9aymf8cQRd--Ssao8UUdCNahspjFM,6963910
13
+ chainlit/copilot/dist/index.js,sha256=PxrZhSq4MB4UFHZQjdp-ZM3M6yUFF2mudoG-IORjGXk,6986912
14
14
  chainlit/data/__init__.py,sha256=CUkwYx9GYqIbgrLh7gmQm4qvO1mu4D0Es-z31dc00DU,16486
15
- chainlit/data/acl.py,sha256=5EwZuKVcZediw77L661MohGce3JzGIaYmw6NutmMTw0,578
16
- chainlit/data/sql_alchemy.py,sha256=XGiqUWnT64qv9tg08C7evCRoZolv8XtqtqJno3wg9H0,26524
15
+ chainlit/data/acl.py,sha256=hx7Othkx12EitonyZD4iFIRVHwxBmBY2TKdwjPuZMSo,461
16
+ chainlit/data/sql_alchemy.py,sha256=4UasGe7-mVDUa2Pa6B5YydS9In7HU_ZmAH_f1l5sOWw,26109
17
17
  chainlit/data/storage_clients.py,sha256=D9KY1XKDjZh2uuh01ECxeoEtjw-JlrCR-WCuOuePVQI,3007
18
- chainlit/discord/__init__.py,sha256=kZ_AAMaCToqO-1FdeQ8_IHS2pqNT0QJ-yyd8bCMaHHs,198
19
- chainlit/discord/app.py,sha256=-_jtZh7T6COSPa2sAeEmV7S42H619JHrw_TAhrmbvzA,9296
20
- chainlit/element.py,sha256=MIp-iyvsnK2iJ6Z_1Q-9JGZz_j_rrIxMM_L1LPA_5hw,10414
21
- chainlit/emitter.py,sha256=54MPYoYHkOCKJvT30Vvg9mWYzWunGN9I3cFaqIoQ8oU,13037
22
- chainlit/frontend/dist/assets/index-0a52365d.js,sha256=1SqvmFMT0x8BJoKFvXDPMP_MBqtS3xLvt7WM7xNXEug,3040232
18
+ chainlit/element.py,sha256=ZOE5ly2G07JxGeXaZDs8yrd76jaWXDelqRL00QM5KRg,10283
19
+ chainlit/emitter.py,sha256=JK9aQ6qbaY1G0eqwshMcLFS6T198LwZ7soXXQOFNvT4,12688
20
+ chainlit/frontend/dist/assets/index-032fca02.js,sha256=PL95Q0CxHX2HuXGsTvwsOIyzHf_yhj7zR5qrCdE0xlc,3038679
23
21
  chainlit/frontend/dist/assets/index-d088547c.css,sha256=0IhUfCm_IY1kjvlTR2edW1qKXAFDya3LZ6mnZnP6ovk,6605
24
22
  chainlit/frontend/dist/assets/logo_dark-2a3cf740.svg,sha256=Kjz3QMh-oh-ag4YatjU0YCPqGF7F8nHh8VUQoJIs01E,8887
25
23
  chainlit/frontend/dist/assets/logo_light-b078e7bc.svg,sha256=sHjnvEq1rfqh3bcexJNYUY7WEDdTQZq3aKZYpi4w4ck,8889
26
- chainlit/frontend/dist/assets/react-plotly-509d26a7.js,sha256=HHlX6YLs73sNrihLPCNKy7XBD0nUCqQLM470dy6jXSs,3739251
24
+ chainlit/frontend/dist/assets/react-plotly-8c993614.js,sha256=GpCai451WJ_7qhNmWWU2fQSrawurIwb-A9XtEB6Gia4,3763471
27
25
  chainlit/frontend/dist/favicon.svg,sha256=0Cy8x28obT5eWW3nxZRhsEvu6_zMqrqbg0y6hT3D0Q0,6455
28
- chainlit/frontend/dist/index.html,sha256=1bGigtrNNB1RuhPnClhDk5umbnW_QrltDT8hE7cPKHI,1005
26
+ chainlit/frontend/dist/index.html,sha256=SaYXa2Hau1GOjUIO_13mCPG2A24ijtD1xv_U-5yze14,1005
29
27
  chainlit/haystack/__init__.py,sha256=uZ77YiPy-qleSTi3dQCDO9HE6S6F6GpJWmh7jO4cxXA,217
30
28
  chainlit/haystack/callbacks.py,sha256=tItLc6OmskPeDEJH2Qjtg7KgAgIy1TuYQYHTZm9cr3U,5209
31
29
  chainlit/hello.py,sha256=LwENQWo5s5r8nNDn4iKSV77vX60Ky5r_qGjQhyi7qlY,416
@@ -51,22 +49,20 @@ chainlit/playground/providers/openai.py,sha256=9aDSgXVW3sW-gaybBBWMIE8cJPyk9ZuGv
51
49
  chainlit/playground/providers/vertexai.py,sha256=zKy501f-MHnLrvuRzN50FqgB3xoHzfQFTVbw83Nsj20,5084
52
50
  chainlit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
51
  chainlit/secret.py,sha256=cQvIFGTQ7r2heC8EOGdgifSZZYqslh-qQxhUhKhD8vU,295
54
- chainlit/server.py,sha256=dlxN9CM0jzrEvUrMYP8rlkGUGlGPqcBeAYrlQa25nvo,24630
55
- chainlit/session.py,sha256=SOX2zFct3apiSNcIzCDWgDRsUFgUG_6hewqWU8gfIZE,9694
56
- chainlit/slack/__init__.py,sha256=Q41ztJHeVmpoXVgVqAcwGOufQp_bjf7dDT7eEXDdhPI,207
57
- chainlit/slack/app.py,sha256=jlZeumG68WyDFsvfFPqTDK69BFT2JMH319nRvH9QHPI,10839
58
- chainlit/socket.py,sha256=KHabfdproCBlzF4VzLgtvqDA1xMB6_Xai6Ih6MZXogg,11703
59
- chainlit/step.py,sha256=KEKpQngkp6hwT2mGz62DWhWfcFNtxXWuJwomi0CzauQ,13876
52
+ chainlit/server.py,sha256=P2Djxg8T_3shITgoKAf7BTL-Qwx-P58UoiKfyamkgSM,23851
53
+ chainlit/session.py,sha256=uxvtDpzJr0JKKOSjarRT0_7PscNv8rCgs9QVf6C0_uU,9241
54
+ chainlit/socket.py,sha256=0_3EoAVERQQlsFCcBd9Vfx4l6NQz7RT2H_HvaZ8duIM,11654
55
+ chainlit/step.py,sha256=JdXVqG73d9kNtHJjLhmfo1mqkCYtgqfF3jm08uGaCMs,13102
60
56
  chainlit/sync.py,sha256=G1n-7-3WgXsN8y1bJkEyws_YwmHZIyDZoZUwhprigag,1235
61
57
  chainlit/telemetry.py,sha256=Rk4dnZv0OnGOgV4kD-VHdhgl4i7i3ypqhSE_R-LZceM,3060
62
58
  chainlit/translations/en-US.json,sha256=uUuS4hlNoYSlDp0DZGTAlPZxwLfsP4Jiu4ckrfr-fI0,7835
63
59
  chainlit/translations.py,sha256=WG_r7HzxBYns-zk9tVvoGdoofv71okTZx8k1RlcoTIg,2034
64
- chainlit/types.py,sha256=pS0kW3cRmMRQky6nU6_LX8UEwpp7lvkwhhjbHW8DZuE,5358
60
+ chainlit/types.py,sha256=bkY7A0msU1xgOc6h6gAb_dA1SX5TVOLYUN9S39EXSQY,5332
65
61
  chainlit/user.py,sha256=Cw4uGz0ffivWFszv8W__EHwkvTHQ3Lj9hqpRCPxFujo,619
66
- chainlit/user_session.py,sha256=G1amgs1_h2tVn4mtAXZmunm9nlBHQ_rCYvJQh3nsVwQ,1645
62
+ chainlit/user_session.py,sha256=C440ClH8kiIj6SqZ9BB5Q5Ni4eb7Jstsn81_1rAY-f8,1498
67
63
  chainlit/utils.py,sha256=ObNTLIhRDWcx1tHhpULUkpgWSJBlsi2USat2TLaaiTM,2604
68
64
  chainlit/version.py,sha256=iosXhlXclBwBqlADFKEilxAC2wWKbtuBKi87AmPi7s8,196
69
- chainlit-1.1.0.dist-info/METADATA,sha256=8Spl2oZhMcZzK1Tiz7XaEUl-dTCyfqN9rR2Q2lknl-8,5527
70
- chainlit-1.1.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
71
- chainlit-1.1.0.dist-info/entry_points.txt,sha256=FrkqdjrFl8juSnvBndniyX7XuKojmUwO4ghRh-CFMQc,45
72
- chainlit-1.1.0.dist-info/RECORD,,
65
+ chainlit-1.1.0rc0.dist-info/METADATA,sha256=2KtigXmNmHvjaQmVmUxonaOuiQ-K5xzQm1Rl7N583zQ,5561
66
+ chainlit-1.1.0rc0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
67
+ chainlit-1.1.0rc0.dist-info/entry_points.txt,sha256=FrkqdjrFl8juSnvBndniyX7XuKojmUwO4ghRh-CFMQc,45
68
+ chainlit-1.1.0rc0.dist-info/RECORD,,
@@ -1,6 +0,0 @@
1
- try:
2
- import discord
3
- except ModuleNotFoundError:
4
- raise ValueError(
5
- "The discord package is required to integrate Chainlit with a Slack app. Run `pip install discord --upgrade`"
6
- )