chainlit 1.0.506__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-d4233b49.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>
@@ -70,7 +70,7 @@ class LlamaIndexCallbackHandler(TokenCountingHandler):
70
70
  ) -> str:
71
71
  """Run when an event starts and return id of event."""
72
72
  self._restore_context()
73
-
73
+
74
74
  step_type: StepType = "undefined"
75
75
  if event_type == CBEventType.RETRIEVE:
76
76
  step_type = "retrieval"
@@ -104,7 +104,6 @@ class LlamaIndexCallbackHandler(TokenCountingHandler):
104
104
  """Run when an event ends."""
105
105
  step = self.steps.get(event_id, None)
106
106
 
107
-
108
107
  if payload is None or step is None:
109
108
  return
110
109
 
@@ -117,11 +116,13 @@ class LlamaIndexCallbackHandler(TokenCountingHandler):
117
116
  source_nodes = getattr(response, "source_nodes", None)
118
117
  if source_nodes:
119
118
  source_refs = ", ".join(
120
- [f"Source {idx}" for idx, _ in enumerate(source_nodes)])
119
+ [f"Source {idx}" for idx, _ in enumerate(source_nodes)]
120
+ )
121
121
  step.elements = [
122
122
  Text(
123
123
  name=f"Source {idx}",
124
124
  content=source.text or "Empty node",
125
+ display="side",
125
126
  )
126
127
  for idx, source in enumerate(source_nodes)
127
128
  ]
@@ -137,6 +138,7 @@ class LlamaIndexCallbackHandler(TokenCountingHandler):
137
138
  step.elements = [
138
139
  Text(
139
140
  name=f"Source {idx}",
141
+ display="side",
140
142
  content=source.node.get_text() or "Empty node",
141
143
  )
142
144
  for idx, source in enumerate(sources)
@@ -173,7 +175,7 @@ class LlamaIndexCallbackHandler(TokenCountingHandler):
173
175
  token_count = self.total_llm_token_count or None
174
176
  raw_response = response.raw if response else None
175
177
  model = raw_response.get("model", None) if raw_response else None
176
-
178
+
177
179
  if messages and isinstance(response, ChatResponse):
178
180
  msg: ChatMessage = response.message
179
181
  step.generation = ChatGeneration(
@@ -198,7 +200,7 @@ class LlamaIndexCallbackHandler(TokenCountingHandler):
198
200
  else:
199
201
  step.output = payload
200
202
  self.context.loop.create_task(step.update())
201
-
203
+
202
204
  self.steps.pop(event_id, None)
203
205
 
204
206
  def _noop(self, *args, **kwargs):
@@ -206,4 +208,3 @@ class LlamaIndexCallbackHandler(TokenCountingHandler):
206
208
 
207
209
  start_trace = _noop
208
210
  end_trace = _noop
209
-
chainlit/message.py CHANGED
@@ -166,7 +166,7 @@ class MessageBase(ABC):
166
166
  step_dict = await self._create()
167
167
  await context.emitter.send_step(step_dict)
168
168
 
169
- return self.id
169
+ return self
170
170
 
171
171
  async def stream_token(self, token: str, is_sequence=False):
172
172
  """
@@ -251,7 +251,7 @@ class Message(MessageBase):
251
251
 
252
252
  super().__post_init__()
253
253
 
254
- async def send(self) -> str:
254
+ async def send(self):
255
255
  """
256
256
  Send the message to the UI and persist it in the cloud if a project ID is configured.
257
257
  Return the ID of the message.
@@ -268,7 +268,7 @@ class Message(MessageBase):
268
268
  # Run all tasks concurrently
269
269
  await asyncio.gather(*tasks)
270
270
 
271
- return self.id
271
+ return self
272
272
 
273
273
  async def update(self):
274
274
  """
chainlit/server.py CHANGED
@@ -536,6 +536,10 @@ async def project_settings(
536
536
  chat_profiles = await config.code.set_chat_profiles(current_user)
537
537
  if chat_profiles:
538
538
  profiles = [p.to_dict() for p in chat_profiles]
539
+
540
+ if config.code.on_audio_chunk:
541
+ config.features.audio.enabled = True
542
+
539
543
  return JSONResponse(
540
544
  content={
541
545
  "ui": config.ui.to_dict(),
chainlit/session.py CHANGED
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  import json
2
3
  import mimetypes
3
4
  import shutil
@@ -45,6 +46,7 @@ class BaseSession:
45
46
 
46
47
  thread_id_to_resume: Optional[str] = None
47
48
  client_type: ClientType
49
+ current_task: Optional[asyncio.Task] = None
48
50
 
49
51
  def __init__(
50
52
  self,
@@ -63,6 +65,8 @@ class BaseSession:
63
65
  root_message: Optional["Message"] = None,
64
66
  # Chat profile selected before the session was created
65
67
  chat_profile: Optional[str] = None,
68
+ # Origin of the request
69
+ http_referer: Optional[str] = None,
66
70
  ):
67
71
  if thread_id:
68
72
  self.thread_id_to_resume = thread_id
@@ -74,6 +78,7 @@ class BaseSession:
74
78
  self.has_first_interaction = False
75
79
  self.user_env = user_env or {}
76
80
  self.chat_profile = chat_profile
81
+ self.http_referer = http_referer
77
82
 
78
83
  self.id = id
79
84
 
@@ -115,7 +120,8 @@ class HTTPSession(BaseSession):
115
120
  user_env: Optional[Dict[str, str]] = None,
116
121
  # Last message at the root of the chat
117
122
  root_message: Optional["Message"] = None,
118
- # User specific environment variables. Empty if no user environment variables are required.
123
+ # Origin of the request
124
+ http_referer: Optional[str] = None,
119
125
  ):
120
126
  super().__init__(
121
127
  id=id,
@@ -125,6 +131,7 @@ class HTTPSession(BaseSession):
125
131
  client_type=client_type,
126
132
  user_env=user_env,
127
133
  root_message=root_message,
134
+ http_referer=http_referer,
128
135
  )
129
136
 
130
137
 
@@ -165,6 +172,8 @@ class WebsocketSession(BaseSession):
165
172
  chat_profile: Optional[str] = None,
166
173
  # Languages of the user's browser
167
174
  languages: Optional[str] = None,
175
+ # Origin of the request
176
+ http_referer: Optional[str] = None,
168
177
  ):
169
178
  super().__init__(
170
179
  id=id,
@@ -175,13 +184,13 @@ class WebsocketSession(BaseSession):
175
184
  client_type=client_type,
176
185
  root_message=root_message,
177
186
  chat_profile=chat_profile,
187
+ http_referer=http_referer,
178
188
  )
179
189
 
180
190
  self.socket_id = socket_id
181
191
  self.emit_call = emit_call
182
192
  self.emit = emit
183
193
 
184
- self.should_stop = False
185
194
  self.restored = False
186
195
 
187
196
  self.thread_queues = {} # type: Dict[str, Deque[Callable]]
@@ -217,6 +226,7 @@ class WebsocketSession(BaseSession):
217
226
  file_path = self.files_dir / file_id
218
227
 
219
228
  file_extension = mimetypes.guess_extension(mime)
229
+
220
230
  if file_extension:
221
231
  file_path = file_path.with_suffix(file_extension)
222
232
 
chainlit/socket.py CHANGED
@@ -9,12 +9,18 @@ from chainlit.auth import get_current_user, require_login
9
9
  from chainlit.config import config
10
10
  from chainlit.context import init_ws_context
11
11
  from chainlit.data import get_data_layer
12
+ from chainlit.element import Element
12
13
  from chainlit.logger import logger
13
14
  from chainlit.message import ErrorMessage, Message
14
15
  from chainlit.server import socket
15
16
  from chainlit.session import WebsocketSession
16
17
  from chainlit.telemetry import trace_event
17
- from chainlit.types import UIMessagePayload
18
+ from chainlit.types import (
19
+ AudioChunk,
20
+ AudioChunkPayload,
21
+ AudioEndPayload,
22
+ UIMessagePayload,
23
+ )
18
24
  from chainlit.user_session import user_sessions
19
25
 
20
26
 
@@ -93,9 +99,13 @@ def build_anon_user_identifier(environ):
93
99
 
94
100
  @socket.on("connect")
95
101
  async def connect(sid, environ, auth):
96
- if not config.code.on_chat_start and not config.code.on_message:
102
+ if (
103
+ not config.code.on_chat_start
104
+ and not config.code.on_message
105
+ and not config.code.on_audio_chunk
106
+ ):
97
107
  logger.warning(
98
- "You need to configure at least an on_chat_start or an on_message callback"
108
+ "You need to configure at least one of on_chat_start, on_message or on_audio_chunk callback"
99
109
  )
100
110
  return False
101
111
  user = None
@@ -113,18 +123,10 @@ async def connect(sid, environ, auth):
113
123
 
114
124
  # Session scoped function to emit to the client
115
125
  def emit_fn(event, data):
116
- if session := WebsocketSession.get(sid):
117
- if session.should_stop:
118
- session.should_stop = False
119
- raise InterruptedError("Task stopped by user")
120
126
  return socket.emit(event, data, to=sid)
121
127
 
122
128
  # Session scoped function to emit to the client and wait for a response
123
129
  def emit_call_fn(event: Literal["ask", "call_fn"], data, timeout):
124
- if session := WebsocketSession.get(sid):
125
- if session.should_stop:
126
- session.should_stop = False
127
- raise InterruptedError("Task stopped by user")
128
130
  return socket.call(event, data, timeout=timeout, to=sid)
129
131
 
130
132
  session_id = environ.get("HTTP_X_CHAINLIT_SESSION_ID")
@@ -135,6 +137,7 @@ async def connect(sid, environ, auth):
135
137
  user_env = load_user_env(user_env_string)
136
138
 
137
139
  client_type = environ.get("HTTP_X_CHAINLIT_CLIENT_TYPE")
140
+ http_referer = environ.get("HTTP_REFERER")
138
141
 
139
142
  ws_session = WebsocketSession(
140
143
  id=session_id,
@@ -148,6 +151,7 @@ async def connect(sid, environ, auth):
148
151
  chat_profile=environ.get("HTTP_X_CHAINLIT_CHAT_PROFILE"),
149
152
  thread_id=environ.get("HTTP_X_CHAINLIT_THREAD_ID"),
150
153
  languages=environ.get("HTTP_ACCEPT_LANGUAGE"),
154
+ http_referer=http_referer,
151
155
  )
152
156
 
153
157
  trace_event("connection_successful")
@@ -178,7 +182,8 @@ async def connection_successful(sid):
178
182
  return
179
183
 
180
184
  if config.code.on_chat_start:
181
- await config.code.on_chat_start()
185
+ task = asyncio.create_task(config.code.on_chat_start())
186
+ context.session.current_task = task
182
187
 
183
188
 
184
189
  @socket.on("clear_session")
@@ -223,10 +228,11 @@ async def stop(sid):
223
228
 
224
229
  init_ws_context(session)
225
230
  await Message(
226
- author="System", content="Task stopped by the user.", disable_feedback=True
231
+ author="System", content="Task manually stopped.", disable_feedback=True
227
232
  ).send()
228
233
 
229
- session.should_stop = True
234
+ if session.current_task:
235
+ session.current_task.cancel()
230
236
 
231
237
  if config.code.on_stop:
232
238
  await config.code.on_stop()
@@ -243,7 +249,7 @@ async def process_message(session: WebsocketSession, payload: UIMessagePayload):
243
249
  # Sleep 1ms to make sure any children step starts after the message step start
244
250
  time.sleep(0.001)
245
251
  await config.code.on_message(message)
246
- except InterruptedError:
252
+ except asyncio.CancelledError:
247
253
  pass
248
254
  except Exception as e:
249
255
  logger.exception(e)
@@ -258,9 +264,55 @@ async def process_message(session: WebsocketSession, payload: UIMessagePayload):
258
264
  async def message(sid, payload: UIMessagePayload):
259
265
  """Handle a message sent by the User."""
260
266
  session = WebsocketSession.require(sid)
261
- session.should_stop = False
262
267
 
263
- await process_message(session, payload)
268
+ task = asyncio.create_task(process_message(session, payload))
269
+ session.current_task = task
270
+
271
+
272
+ @socket.on("audio_chunk")
273
+ async def audio_chunk(sid, payload: AudioChunkPayload):
274
+ """Handle an audio chunk sent by the user."""
275
+ session = WebsocketSession.require(sid)
276
+
277
+ init_ws_context(session)
278
+
279
+ if config.code.on_audio_chunk:
280
+ asyncio.create_task(config.code.on_audio_chunk(AudioChunk(**payload)))
281
+
282
+
283
+ @socket.on("audio_end")
284
+ async def audio_end(sid, payload: AudioEndPayload):
285
+ """Handle the end of the audio stream."""
286
+ session = WebsocketSession.require(sid)
287
+ try:
288
+ context = init_ws_context(session)
289
+ await context.emitter.task_start()
290
+
291
+ if not session.has_first_interaction:
292
+ session.has_first_interaction = True
293
+ asyncio.create_task(context.emitter.init_thread("audio"))
294
+
295
+ file_elements = []
296
+ if config.code.on_audio_end:
297
+ file_refs = payload.get("fileReferences")
298
+ if file_refs:
299
+ files = [
300
+ session.files[file["id"]]
301
+ for file in file_refs
302
+ if file["id"] in session.files
303
+ ]
304
+ file_elements = [Element.from_dict(file) for file in files]
305
+
306
+ await config.code.on_audio_end(file_elements)
307
+ except asyncio.CancelledError:
308
+ pass
309
+ except Exception as e:
310
+ logger.exception(e)
311
+ await ErrorMessage(
312
+ author="Error", content=str(e) or e.__class__.__name__
313
+ ).send()
314
+ finally:
315
+ await context.emitter.task_end()
264
316
 
265
317
 
266
318
  async def process_action(action: Action):
@@ -288,7 +340,7 @@ async def call_action(sid, action):
288
340
  id=action.id, status=True, response=res if isinstance(res, str) else None
289
341
  )
290
342
 
291
- except InterruptedError:
343
+ except asyncio.CancelledError:
292
344
  await context.emitter.send_action_response(
293
345
  id=action.id, status=False, response="Action interrupted by the user"
294
346
  )
chainlit/types.py CHANGED
@@ -154,6 +154,25 @@ class UIMessagePayload(TypedDict):
154
154
  fileReferences: Optional[List[FileReference]]
155
155
 
156
156
 
157
+ class AudioChunkPayload(TypedDict):
158
+ isStart: bool
159
+ mimeType: str
160
+ elapsedTime: float
161
+ data: bytes
162
+
163
+
164
+ @dataclass
165
+ class AudioChunk:
166
+ isStart: bool
167
+ mimeType: str
168
+ elapsedTime: float
169
+ data: bytes
170
+
171
+
172
+ class AudioEndPayload(TypedDict):
173
+ fileReferences: Optional[List[FileReference]]
174
+
175
+
157
176
  @dataclass
158
177
  class AskFileResponse:
159
178
  id: str
chainlit/user_session.py CHANGED
@@ -28,6 +28,7 @@ class UserSession:
28
28
  user_session["user"] = context.session.user
29
29
  user_session["chat_profile"] = context.session.chat_profile
30
30
  user_session["languages"] = context.session.languages
31
+ user_session["http_referer"] = context.session.http_referer
31
32
 
32
33
  if context.session.root_message:
33
34
  user_session["root_message"] = context.session.root_message
chainlit/utils.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import functools
2
2
  import importlib
3
3
  import inspect
4
+ from asyncio import CancelledError
4
5
  from typing import Callable
5
6
 
6
7
  from chainlit.context import context
@@ -39,7 +40,7 @@ def wrap_user_function(user_function: Callable, with_task=False) -> Callable:
39
40
  return await user_function(**params_values)
40
41
  else:
41
42
  return user_function(**params_values)
42
- except InterruptedError:
43
+ except CancelledError:
43
44
  pass
44
45
  except Exception as e:
45
46
  logger.exception(e)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: chainlit
3
- Version: 1.0.506
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
@@ -1,4 +1,4 @@
1
- chainlit/__init__.py,sha256=pACOh7jtqeZzTSiV3XtHXNP9JImzjanEpqpcZvImeG0,9667
1
+ chainlit/__init__.py,sha256=2-juj1u5enzZfNk5OG81Jer5H30fndgsub74xVJaDrI,10470
2
2
  chainlit/__main__.py,sha256=7Vg3w3T3qDuz4KDu5lQhLH6lQ3cYdume7gHH7Z1V97U,87
3
3
  chainlit/action.py,sha256=k-GsblVHI4DnDWFyF-RZgq3KfdfAFICFh2OBeU4w8N8,1410
4
4
  chainlit/auth.py,sha256=lLHePwmwKzX0LiWqpTAtKTdSecrDLqCMSY9Yw4c-TD8,2681
@@ -6,24 +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=BH1YHdb7AMVCZzicN2-_bVFxqFxx6WeJanuabevIudo,15211
9
+ chainlit/config.py,sha256=RNrxWmqmbPol_mRI2M5p0sMcR5PqyqY7WcLwo4g6OHI,16047
10
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=LEm2hlz5HomrOYgNxw6gknjFZug-vPuj0zvrmZHM_HQ,7016616
14
- chainlit/data/__init__.py,sha256=oV4oRS9W3Yq4eyWQmxdfe3weN4S5XzoiyQo2U6Hkn78,16408
13
+ chainlit/copilot/dist/index.js,sha256=PxrZhSq4MB4UFHZQjdp-ZM3M6yUFF2mudoG-IORjGXk,6986912
14
+ chainlit/data/__init__.py,sha256=CUkwYx9GYqIbgrLh7gmQm4qvO1mu4D0Es-z31dc00DU,16486
15
15
  chainlit/data/acl.py,sha256=hx7Othkx12EitonyZD4iFIRVHwxBmBY2TKdwjPuZMSo,461
16
- chainlit/data/sql_alchemy.py,sha256=7lSRR90MFkZAKX3FgRvj8lO1304irPI7x1rWeS6ZFcY,25867
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/element.py,sha256=K5-yxiO2E0ZMRARKcXCNPnxsDKeLcBsXiZ5L-CGNp0A,10162
18
+ chainlit/element.py,sha256=ZOE5ly2G07JxGeXaZDs8yrd76jaWXDelqRL00QM5KRg,10283
19
19
  chainlit/emitter.py,sha256=JK9aQ6qbaY1G0eqwshMcLFS6T198LwZ7soXXQOFNvT4,12688
20
+ chainlit/frontend/dist/assets/index-032fca02.js,sha256=PL95Q0CxHX2HuXGsTvwsOIyzHf_yhj7zR5qrCdE0xlc,3038679
20
21
  chainlit/frontend/dist/assets/index-d088547c.css,sha256=0IhUfCm_IY1kjvlTR2edW1qKXAFDya3LZ6mnZnP6ovk,6605
21
- chainlit/frontend/dist/assets/index-d4233b49.js,sha256=Hdn8483Y7q-k-5ObLn5uWLlKgt9XDjLD7OW3FIWaxBY,3073946
22
22
  chainlit/frontend/dist/assets/logo_dark-2a3cf740.svg,sha256=Kjz3QMh-oh-ag4YatjU0YCPqGF7F8nHh8VUQoJIs01E,8887
23
23
  chainlit/frontend/dist/assets/logo_light-b078e7bc.svg,sha256=sHjnvEq1rfqh3bcexJNYUY7WEDdTQZq3aKZYpi4w4ck,8889
24
- chainlit/frontend/dist/assets/react-plotly-2b7fa4f9.js,sha256=IKXm-9EIapI6h5einR8vIOjLFxF7wgBzv9EPBfkQ_YE,3763471
24
+ chainlit/frontend/dist/assets/react-plotly-8c993614.js,sha256=GpCai451WJ_7qhNmWWU2fQSrawurIwb-A9XtEB6Gia4,3763471
25
25
  chainlit/frontend/dist/favicon.svg,sha256=0Cy8x28obT5eWW3nxZRhsEvu6_zMqrqbg0y6hT3D0Q0,6455
26
- chainlit/frontend/dist/index.html,sha256=C5SexNiNeSnodJLNaFDfF9cgHJpfqFY6kWRu27rQAHM,1005
26
+ chainlit/frontend/dist/index.html,sha256=SaYXa2Hau1GOjUIO_13mCPG2A24ijtD1xv_U-5yze14,1005
27
27
  chainlit/haystack/__init__.py,sha256=uZ77YiPy-qleSTi3dQCDO9HE6S6F6GpJWmh7jO4cxXA,217
28
28
  chainlit/haystack/callbacks.py,sha256=tItLc6OmskPeDEJH2Qjtg7KgAgIy1TuYQYHTZm9cr3U,5209
29
29
  chainlit/hello.py,sha256=LwENQWo5s5r8nNDn4iKSV77vX60Ky5r_qGjQhyi7qlY,416
@@ -32,10 +32,10 @@ chainlit/langchain/__init__.py,sha256=zErMw0_3ufSGeF9ye7X0ZX3wDat4mTOx97T40ePDO2
32
32
  chainlit/langchain/callbacks.py,sha256=bABLMuLx0h-It0zfB9tqcSeCAu_-uxMLgm2gPIGb4VY,20484
33
33
  chainlit/langflow/__init__.py,sha256=wxhxdsl1yxdsRyNTgZticxFF_8VFtJJ4OdIy3tnEIyM,817
34
34
  chainlit/llama_index/__init__.py,sha256=weRoIWCaRBGvA1LczCEfsqhWsltQSVlhtRnTovtdo8w,227
35
- chainlit/llama_index/callbacks.py,sha256=D3WAJ-Y-sj6JFo84mbbALh6ibuQS11bXvxe9_iIQcw4,7203
35
+ chainlit/llama_index/callbacks.py,sha256=nvmLTdKPV-WFjTTXnkIb-sPa7ZvQ49DrKH7UUQ_AGdg,7277
36
36
  chainlit/logger.py,sha256=wTwRSZsLfXwWy6U4351IgWAm4KCMThgxm9EZpjGUEr4,373
37
37
  chainlit/markdown.py,sha256=VUpqW7MqgjiPIQYHU4funwqC4GmHZBu_TGZTjTI4B0k,2025
38
- chainlit/message.py,sha256=O9Qtw_5cDYA3TQVGyfbGwEeLLjpOoRIFe9LOedAkF_c,17974
38
+ chainlit/message.py,sha256=NQiNzzJgE5D5ciOSzdWYNH5e7fBFbrjxLWeGpczXQGs,17961
39
39
  chainlit/oauth_providers.py,sha256=WiKUFpNp0RRN5Vq6LHCR9V-9td_1YEn2yD8iGu8atvY,17459
40
40
  chainlit/openai/__init__.py,sha256=DJP_ptclLUM5Zylr4RO1Vk0lCufo3yDqXyH5J9izYS8,1814
41
41
  chainlit/playground/__init__.py,sha256=igNRcBgqLKPTjOQtTNhhGNJFmZn-Dl1fHRQzQSjDGTQ,80
@@ -49,20 +49,20 @@ chainlit/playground/providers/openai.py,sha256=9aDSgXVW3sW-gaybBBWMIE8cJPyk9ZuGv
49
49
  chainlit/playground/providers/vertexai.py,sha256=zKy501f-MHnLrvuRzN50FqgB3xoHzfQFTVbw83Nsj20,5084
50
50
  chainlit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  chainlit/secret.py,sha256=cQvIFGTQ7r2heC8EOGdgifSZZYqslh-qQxhUhKhD8vU,295
52
- chainlit/server.py,sha256=m4tiyAJlZwj-NSsA4abWryjeiPlm13Qf_qIHNyIlvxc,23769
53
- chainlit/session.py,sha256=zive8e9ZZggHoU6VQpS40fMIKwvmhI6p_pEO_S5slis,8963
54
- chainlit/socket.py,sha256=tTKbOwcoDffTedQAHjb9tMX2I-pDiXF0pkJmAd26eTk,10145
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
55
  chainlit/step.py,sha256=JdXVqG73d9kNtHJjLhmfo1mqkCYtgqfF3jm08uGaCMs,13102
56
56
  chainlit/sync.py,sha256=G1n-7-3WgXsN8y1bJkEyws_YwmHZIyDZoZUwhprigag,1235
57
57
  chainlit/telemetry.py,sha256=Rk4dnZv0OnGOgV4kD-VHdhgl4i7i3ypqhSE_R-LZceM,3060
58
58
  chainlit/translations/en-US.json,sha256=uUuS4hlNoYSlDp0DZGTAlPZxwLfsP4Jiu4ckrfr-fI0,7835
59
59
  chainlit/translations.py,sha256=WG_r7HzxBYns-zk9tVvoGdoofv71okTZx8k1RlcoTIg,2034
60
- chainlit/types.py,sha256=1Z3hRc8zHO5E1zy4hYOPfSfUOugDQDAEQz5WCGXwBtc,5027
60
+ chainlit/types.py,sha256=bkY7A0msU1xgOc6h6gAb_dA1SX5TVOLYUN9S39EXSQY,5332
61
61
  chainlit/user.py,sha256=Cw4uGz0ffivWFszv8W__EHwkvTHQ3Lj9hqpRCPxFujo,619
62
- chainlit/user_session.py,sha256=BOpkDC7cxjmkCVS9QOBMMAQiQlhQ2iar7LnzuNI8Nfk,1430
63
- chainlit/utils.py,sha256=3HzhfZ4XJhBIe9sJ_3Lxv3lMH4mFXsi6nLBGqm8Gtdw,2571
62
+ chainlit/user_session.py,sha256=C440ClH8kiIj6SqZ9BB5Q5Ni4eb7Jstsn81_1rAY-f8,1498
63
+ chainlit/utils.py,sha256=ObNTLIhRDWcx1tHhpULUkpgWSJBlsi2USat2TLaaiTM,2604
64
64
  chainlit/version.py,sha256=iosXhlXclBwBqlADFKEilxAC2wWKbtuBKi87AmPi7s8,196
65
- chainlit-1.0.506.dist-info/METADATA,sha256=2Mbmv1ezQZ87oAqD9D5XftYR7V9LIcq_LvTFX54LvnM,5560
66
- chainlit-1.0.506.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
67
- chainlit-1.0.506.dist-info/entry_points.txt,sha256=FrkqdjrFl8juSnvBndniyX7XuKojmUwO4ghRh-CFMQc,45
68
- chainlit-1.0.506.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,,