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.
- chainlit/config.py +2 -4
- chainlit/context.py +7 -19
- chainlit/copilot/dist/index.js +521 -639
- chainlit/data/acl.py +1 -4
- chainlit/data/sql_alchemy.py +21 -22
- chainlit/element.py +2 -5
- chainlit/emitter.py +2 -11
- chainlit/frontend/dist/assets/{index-0a52365d.js → index-032fca02.js} +120 -120
- chainlit/frontend/dist/assets/react-plotly-8c993614.js +3484 -0
- chainlit/frontend/dist/index.html +1 -1
- chainlit/server.py +4 -27
- chainlit/session.py +61 -72
- chainlit/socket.py +15 -21
- chainlit/step.py +1 -25
- chainlit/types.py +1 -2
- chainlit/user_session.py +2 -5
- {chainlit-1.1.0.dist-info → chainlit-1.1.0rc0.dist-info}/METADATA +3 -4
- {chainlit-1.1.0.dist-info → chainlit-1.1.0rc0.dist-info}/RECORD +20 -24
- chainlit/discord/__init__.py +0 -6
- chainlit/discord/app.py +0 -304
- chainlit/frontend/dist/assets/react-plotly-509d26a7.js +0 -3602
- chainlit/slack/__init__.py +0 -6
- chainlit/slack/app.py +0 -368
- {chainlit-1.1.0.dist-info → chainlit-1.1.0rc0.dist-info}/WHEEL +0 -0
- {chainlit-1.1.0.dist-info → chainlit-1.1.0rc0.dist-info}/entry_points.txt +0 -0
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
<script>
|
|
23
23
|
const global = globalThis;
|
|
24
24
|
</script>
|
|
25
|
-
<script type="module" crossorigin src="/assets/index-
|
|
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
|
-
|
|
133
|
-
|
|
125
|
+
if watch_task:
|
|
126
|
+
try:
|
|
134
127
|
stop_event.set()
|
|
135
128
|
watch_task.cancel()
|
|
136
129
|
await watch_task
|
|
137
|
-
|
|
138
|
-
|
|
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["
|
|
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
|
-
|
|
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
|
-
)
|
|
112
|
-
|
|
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
|
-
|
|
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
|
|
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(
|
|
212
|
-
if session := WebsocketSession.get(
|
|
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
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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.
|
|
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.
|
|
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=
|
|
10
|
-
chainlit/context.py,sha256=
|
|
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=
|
|
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=
|
|
16
|
-
chainlit/data/sql_alchemy.py,sha256=
|
|
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/
|
|
19
|
-
chainlit/
|
|
20
|
-
chainlit/
|
|
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-
|
|
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=
|
|
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=
|
|
55
|
-
chainlit/session.py,sha256=
|
|
56
|
-
chainlit/
|
|
57
|
-
chainlit/
|
|
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=
|
|
60
|
+
chainlit/types.py,sha256=bkY7A0msU1xgOc6h6gAb_dA1SX5TVOLYUN9S39EXSQY,5332
|
|
65
61
|
chainlit/user.py,sha256=Cw4uGz0ffivWFszv8W__EHwkvTHQ3Lj9hqpRCPxFujo,619
|
|
66
|
-
chainlit/user_session.py,sha256=
|
|
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.
|
|
70
|
-
chainlit-1.1.
|
|
71
|
-
chainlit-1.1.
|
|
72
|
-
chainlit-1.1.
|
|
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,,
|