chainlit 2.0.dev1__tar.gz → 2.0rc0__tar.gz

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.

Files changed (98) hide show
  1. {chainlit-2.0.dev1 → chainlit-2.0rc0}/PKG-INFO +7 -7
  2. {chainlit-2.0.dev1 → chainlit-2.0rc0}/README.md +2 -2
  3. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/__init__.py +7 -4
  4. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/cache.py +2 -1
  5. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/callbacks.py +23 -6
  6. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/config.py +15 -11
  7. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/copilot/dist/index.js +553 -255
  8. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/__init__.py +8 -1
  9. chainlit-2.0.dev1/chainlit/frontend/dist/assets/DailyMotion-D1ipkdPJ.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/DailyMotion-CleI-8Dh.js +1 -1
  10. chainlit-2.0.dev1/chainlit/frontend/dist/assets/Facebook-d4TLeTik.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/Facebook-C4PuTowX.js +1 -1
  11. chainlit-2.0.dev1/chainlit/frontend/dist/assets/FilePlayer-BcU7tttX.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/FilePlayer-D49YToZz.js +1 -1
  12. chainlit-2.0.dev1/chainlit/frontend/dist/assets/Kaltura-DdaRjZrh.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/Kaltura-BkZcQEIs.js +1 -1
  13. chainlit-2.0.dev1/chainlit/frontend/dist/assets/Mixcloud-BaJoMsaU.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/Mixcloud-DzvBFYsm.js +1 -1
  14. chainlit-2.0.dev1/chainlit/frontend/dist/assets/Mux-DxPCM5d3.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/Mux-UXPyWWYv.js +1 -1
  15. chainlit-2.0.dev1/chainlit/frontend/dist/assets/Preview-tUK_Z9pZ.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/Preview-0YXzpiVm.js +1 -1
  16. chainlit-2.0.dev1/chainlit/frontend/dist/assets/SoundCloud-K8-lFZC6.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/SoundCloud-CS54COex.js +1 -1
  17. chainlit-2.0.dev1/chainlit/frontend/dist/assets/Streamable-hB-AQ54w.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/Streamable-DYYShO6Q.js +1 -1
  18. chainlit-2.0.dev1/chainlit/frontend/dist/assets/Twitch-pmuNY0J5.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/Twitch-DG7403Hm.js +1 -1
  19. chainlit-2.0.dev1/chainlit/frontend/dist/assets/Vidyard-BSUm6trV.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/Vidyard-C5JbOHIQ.js +1 -1
  20. chainlit-2.0.dev1/chainlit/frontend/dist/assets/Vimeo-JIPn71zS.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/Vimeo-dFLZbhqH.js +1 -1
  21. chainlit-2.0.dev1/chainlit/frontend/dist/assets/Wistia-D75KkqOG.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/Wistia-143Q9V9c.js +1 -1
  22. chainlit-2.0.dev1/chainlit/frontend/dist/assets/YouTube-CPlwqNm_.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/YouTube-Dct4gpfH.js +1 -1
  23. chainlit-2.0.dev1/chainlit/frontend/dist/assets/index-CuSbXjG5.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/index-2yAiK0R5.js +4 -4
  24. chainlit-2.0.dev1/chainlit/frontend/dist/assets/react-plotly-DALmanjC.js → chainlit-2.0rc0/chainlit/frontend/dist/assets/react-plotly-CFHBSMgg.js +1 -1
  25. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/frontend/dist/index.html +1 -1
  26. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/server.py +8 -7
  27. {chainlit-2.0.dev1 → chainlit-2.0rc0}/pyproject.toml +8 -7
  28. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/__main__.py +0 -0
  29. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/_utils.py +0 -0
  30. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/action.py +0 -0
  31. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/auth.py +0 -0
  32. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/chat_context.py +0 -0
  33. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/chat_settings.py +0 -0
  34. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/cli/__init__.py +0 -0
  35. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/context.py +0 -0
  36. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/copilot/dist/assets/logo_dark-IkGJ_IwC.svg +0 -0
  37. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/copilot/dist/assets/logo_light-Bb_IPh6r.svg +0 -0
  38. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/acl.py +0 -0
  39. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/base.py +0 -0
  40. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/dynamodb.py +0 -0
  41. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/literalai.py +0 -0
  42. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/sql_alchemy.py +0 -0
  43. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/storage_clients/__init__.py +0 -0
  44. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/storage_clients/azure.py +0 -0
  45. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/storage_clients/base.py +0 -0
  46. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/storage_clients/s3.py +0 -0
  47. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/data/utils.py +0 -0
  48. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/discord/__init__.py +0 -0
  49. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/discord/app.py +0 -0
  50. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/element.py +0 -0
  51. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/emitter.py +0 -0
  52. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/frontend/dist/assets/index-CwmincdQ.css +0 -0
  53. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/frontend/dist/assets/logo_dark-IkGJ_IwC.svg +0 -0
  54. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/frontend/dist/assets/logo_light-Bb_IPh6r.svg +0 -0
  55. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/frontend/dist/favicon.svg +0 -0
  56. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/haystack/__init__.py +0 -0
  57. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/haystack/callbacks.py +0 -0
  58. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/hello.py +0 -0
  59. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/input_widget.py +0 -0
  60. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/langchain/__init__.py +0 -0
  61. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/langchain/callbacks.py +0 -0
  62. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/langflow/__init__.py +0 -0
  63. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/llama_index/__init__.py +0 -0
  64. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/llama_index/callbacks.py +0 -0
  65. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/logger.py +0 -0
  66. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/markdown.py +0 -0
  67. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/message.py +0 -0
  68. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/mistralai/__init__.py +0 -0
  69. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/oauth_providers.py +0 -0
  70. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/openai/__init__.py +0 -0
  71. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/py.typed +0 -0
  72. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/secret.py +0 -0
  73. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/session.py +0 -0
  74. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/slack/__init__.py +0 -0
  75. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/slack/app.py +0 -0
  76. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/socket.py +0 -0
  77. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/step.py +0 -0
  78. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/sync.py +0 -0
  79. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/teams/__init__.py +0 -0
  80. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/teams/app.py +0 -0
  81. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/telemetry.py +0 -0
  82. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/bn.json +0 -0
  83. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/en-US.json +0 -0
  84. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/gu.json +0 -0
  85. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/he-IL.json +0 -0
  86. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/hi.json +0 -0
  87. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/kn.json +0 -0
  88. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/ml.json +0 -0
  89. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/mr.json +0 -0
  90. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/ta.json +0 -0
  91. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/te.json +0 -0
  92. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations/zh-CN.json +0 -0
  93. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/translations.py +0 -0
  94. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/types.py +0 -0
  95. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/user.py +0 -0
  96. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/user_session.py +0 -0
  97. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/utils.py +0 -0
  98. {chainlit-2.0.dev1 → chainlit-2.0rc0}/chainlit/version.py +0 -0
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: chainlit
3
- Version: 2.0.dev1
3
+ Version: 2.0rc0
4
4
  Summary: Build Conversational AI.
5
5
  Home-page: https://chainlit.io/
6
- License: Apache-2.0
6
+ License: Apache-2.0
7
7
  Keywords: LLM,Agents,gen ai,chat ui,chatbot ui,openai,copilot,langchain,conversational ai
8
8
  Author: Willy Douhard
9
9
  Requires-Python: >=3.9,<4.0.0
10
10
  Classifier: Environment :: Web Environment
11
11
  Classifier: Framework :: FastAPI
12
- Classifier: License :: Other/Proprietary License
12
+ Classifier: License :: OSI Approved :: Apache Software License
13
13
  Classifier: Programming Language :: JavaScript
14
14
  Classifier: Programming Language :: Python :: 3
15
15
  Classifier: Programming Language :: Python :: 3.9
@@ -24,7 +24,7 @@ Requires-Dist: aiofiles (>=23.1.0,<24.0.0)
24
24
  Requires-Dist: asyncer (>=0.0.7,<0.0.8)
25
25
  Requires-Dist: click (>=8.1.3,<9.0.0)
26
26
  Requires-Dist: dataclasses_json (>=0.6.7,<0.7.0)
27
- Requires-Dist: fastapi (>=0.110.1,<0.113)
27
+ Requires-Dist: fastapi (>=0.115.3,<0.116)
28
28
  Requires-Dist: filetype (>=1.2.0,<2.0.0)
29
29
  Requires-Dist: httpx (>=0.23.0)
30
30
  Requires-Dist: lazify (>=0.4.0,<0.5.0)
@@ -37,7 +37,7 @@ Requires-Dist: pyjwt (>=2.8.0,<3.0.0)
37
37
  Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
38
38
  Requires-Dist: python-multipart (>=0.0.9,<0.0.10)
39
39
  Requires-Dist: python-socketio (>=5.11.0,<6.0.0)
40
- Requires-Dist: starlette (>=0.37.2,<0.38.0)
40
+ Requires-Dist: starlette (>=0.41.2,<0.42.0)
41
41
  Requires-Dist: syncer (>=2.0.3,<3.0.0)
42
42
  Requires-Dist: tomli (>=2.0.1,<3.0.0)
43
43
  Requires-Dist: uptrace (>=1.22.0,<2.0.0)
@@ -67,7 +67,7 @@ Chainlit is an open-source async Python framework which allows developers to bui
67
67
 
68
68
  Full documentation is available [here](https://docs.chainlit.io). You can ask Chainlit related questions to [Chainlit Help](https://help.chainlit.io/), an app built using Chainlit!
69
69
 
70
- > [!NOTE]
70
+ > [!NOTE]
71
71
  > Check out [Literal AI](https://literalai.com), our product to monitor and evaluate LLM applications! It works with any Python or TypeScript applications and [seamlessly](https://docs.chainlit.io/data-persistence/overview) with Chainlit by adding a `LITERAL_API_KEY` in your project.
72
72
  >
73
73
  > Chainlit is developed and maintained by the Literal AI team, which is currently focused on expanding the capabilities of Literal AI. While we continue to support and maintain Chainlit, we are also committed to enabling the community to contribute, particularly in areas like integrations and data layers.
@@ -92,7 +92,7 @@ If this opens the `hello app` in your browser, you're all set!
92
92
  The latest in-development version can be installed straight from GitHub with:
93
93
 
94
94
  ```sh
95
- pip install git+https://github.com/Chainlit/chainlit.git@dokterbob/build_frontend_on_poetry_build#subdirectory=backend/
95
+ pip install git+https://github.com/Chainlit/chainlit.git#subdirectory=backend/
96
96
  ```
97
97
 
98
98
  (Requires Node and pnpm installed on the system.)
@@ -18,7 +18,7 @@ Chainlit is an open-source async Python framework which allows developers to bui
18
18
 
19
19
  Full documentation is available [here](https://docs.chainlit.io). You can ask Chainlit related questions to [Chainlit Help](https://help.chainlit.io/), an app built using Chainlit!
20
20
 
21
- > [!NOTE]
21
+ > [!NOTE]
22
22
  > Check out [Literal AI](https://literalai.com), our product to monitor and evaluate LLM applications! It works with any Python or TypeScript applications and [seamlessly](https://docs.chainlit.io/data-persistence/overview) with Chainlit by adding a `LITERAL_API_KEY` in your project.
23
23
  >
24
24
  > Chainlit is developed and maintained by the Literal AI team, which is currently focused on expanding the capabilities of Literal AI. While we continue to support and maintain Chainlit, we are also committed to enabling the community to contribute, particularly in areas like integrations and data layers.
@@ -43,7 +43,7 @@ If this opens the `hello app` in your browser, you're all set!
43
43
  The latest in-development version can be installed straight from GitHub with:
44
44
 
45
45
  ```sh
46
- pip install git+https://github.com/Chainlit/chainlit.git@dokterbob/build_frontend_on_poetry_build#subdirectory=backend/
46
+ pip install git+https://github.com/Chainlit/chainlit.git#subdirectory=backend/
47
47
  ```
48
48
 
49
49
  (Requires Node and pnpm installed on the system.)
@@ -14,6 +14,9 @@ if env_found:
14
14
  import asyncio
15
15
  from typing import TYPE_CHECKING, Any, Dict
16
16
 
17
+ from literalai import ChatGeneration, CompletionGeneration, GenerationMessage
18
+ from pydantic.dataclasses import dataclass
19
+
17
20
  import chainlit.input_widget as input_widget
18
21
  from chainlit.action import Action
19
22
  from chainlit.cache import cache
@@ -44,22 +47,21 @@ from chainlit.message import (
44
47
  )
45
48
  from chainlit.step import Step, step
46
49
  from chainlit.sync import make_async, run_sync
47
- from chainlit.types import InputAudioChunk, OutputAudioChunk, ChatProfile, Starter
50
+ from chainlit.types import ChatProfile, InputAudioChunk, OutputAudioChunk, Starter
48
51
  from chainlit.user import PersistedUser, User
49
52
  from chainlit.user_session import user_session
50
53
  from chainlit.utils import make_module_getattr
51
54
  from chainlit.version import __version__
52
- from literalai import ChatGeneration, CompletionGeneration, GenerationMessage
53
- from pydantic.dataclasses import dataclass
54
55
 
55
56
  from .callbacks import (
56
57
  action_callback,
57
58
  author_rename,
59
+ data_layer,
58
60
  header_auth_callback,
59
61
  oauth_callback,
60
- on_audio_start,
61
62
  on_audio_chunk,
62
63
  on_audio_end,
64
+ on_audio_start,
63
65
  on_chat_end,
64
66
  on_chat_resume,
65
67
  on_chat_start,
@@ -186,6 +188,7 @@ __all__ = [
186
188
  "on_stop",
187
189
  "action_callback",
188
190
  "on_settings_update",
191
+ "data_layer",
189
192
  ]
190
193
 
191
194
 
@@ -1,6 +1,7 @@
1
1
  import importlib.util
2
2
  import os
3
3
  import threading
4
+ from typing import Any
4
5
 
5
6
  from chainlit.config import config
6
7
  from chainlit.logger import logger
@@ -22,7 +23,7 @@ def init_lc_cache():
22
23
  )
23
24
 
24
25
 
25
- _cache = {}
26
+ _cache: dict[tuple, Any] = {}
26
27
  _cache_lock = threading.Lock()
27
28
 
28
29
 
@@ -1,8 +1,12 @@
1
1
  import inspect
2
2
  from typing import Any, Awaitable, Callable, Dict, List, Optional
3
3
 
4
+ from fastapi import Request, Response
5
+ from starlette.datastructures import Headers
6
+
4
7
  from chainlit.action import Action
5
8
  from chainlit.config import config
9
+ from chainlit.data.base import BaseDataLayer
6
10
  from chainlit.message import Message
7
11
  from chainlit.oauth_providers import get_configured_oauth_providers
8
12
  from chainlit.step import Step, step
@@ -10,13 +14,11 @@ from chainlit.telemetry import trace
10
14
  from chainlit.types import ChatProfile, Starter, ThreadDict
11
15
  from chainlit.user import User
12
16
  from chainlit.utils import wrap_user_function
13
- from fastapi import Request, Response
14
- from starlette.datastructures import Headers
15
17
 
16
18
 
17
19
  @trace
18
20
  def password_auth_callback(
19
- func: Callable[[str, str], Awaitable[Optional[User]]]
21
+ func: Callable[[str, str], Awaitable[Optional[User]]],
20
22
  ) -> Callable:
21
23
  """
22
24
  Framework agnostic decorator to authenticate the user.
@@ -38,7 +40,7 @@ def password_auth_callback(
38
40
 
39
41
  @trace
40
42
  def header_auth_callback(
41
- func: Callable[[Headers], Awaitable[Optional[User]]]
43
+ func: Callable[[Headers], Awaitable[Optional[User]]],
42
44
  ) -> Callable:
43
45
  """
44
46
  Framework agnostic decorator to authenticate the user via a header
@@ -177,7 +179,7 @@ def set_chat_profiles(
177
179
 
178
180
  @trace
179
181
  def set_starters(
180
- func: Callable[[Optional["User"]], Awaitable[List["Starter"]]]
182
+ func: Callable[[Optional["User"]], Awaitable[List["Starter"]]],
181
183
  ) -> Callable:
182
184
  """
183
185
  Programmatic declaration of the available starter (can depend on the User from the session if authentication is setup).
@@ -221,6 +223,7 @@ def on_audio_start(func: Callable) -> Callable:
221
223
  config.code.on_audio_start = wrap_user_function(func, with_task=False)
222
224
  return func
223
225
 
226
+
224
227
  @trace
225
228
  def on_audio_chunk(func: Callable) -> Callable:
226
229
  """
@@ -254,7 +257,7 @@ def on_audio_end(func: Callable) -> Callable:
254
257
 
255
258
  @trace
256
259
  def author_rename(
257
- func: Callable[[str], Awaitable[str]]
260
+ func: Callable[[str], Awaitable[str]],
258
261
  ) -> Callable[[str], Awaitable[str]]:
259
262
  """
260
263
  Useful to rename the author of message to display more friendly author names in the UI.
@@ -315,3 +318,17 @@ def on_settings_update(
315
318
 
316
319
  config.code.on_settings_update = wrap_user_function(func, with_task=True)
317
320
  return func
321
+
322
+
323
+ def data_layer(
324
+ func: Callable[[], BaseDataLayer],
325
+ ) -> Callable[[], BaseDataLayer]:
326
+ """
327
+ Hook to configure custom data layer.
328
+ """
329
+
330
+ # We don't use wrap_user_function here because:
331
+ # 1. We don't need to support async here and;
332
+ # 2. We don't want to change the API for get_data_layer() to be async, everywhere (at this point).
333
+ config.code.data_layer = func
334
+ return func
@@ -17,21 +17,24 @@ from typing import (
17
17
  )
18
18
 
19
19
  import tomli
20
- from chainlit.logger import logger
21
- from chainlit.translations import lint_translation_json
22
- from chainlit.version import __version__
23
20
  from dataclasses_json import DataClassJsonMixin
24
21
  from pydantic.dataclasses import Field, dataclass
25
22
  from starlette.datastructures import Headers
26
23
 
24
+ from chainlit.data.base import BaseDataLayer
25
+ from chainlit.logger import logger
26
+ from chainlit.translations import lint_translation_json
27
+ from chainlit.version import __version__
28
+
27
29
  from ._utils import is_path_inside
28
30
 
29
31
  if TYPE_CHECKING:
32
+ from fastapi import Request, Response
33
+
30
34
  from chainlit.action import Action
31
35
  from chainlit.message import Message
32
- from chainlit.types import InputAudioChunk, ChatProfile, Starter, ThreadDict
36
+ from chainlit.types import ChatProfile, InputAudioChunk, Starter, ThreadDict
33
37
  from chainlit.user import User
34
- from fastapi import Request, Response
35
38
 
36
39
 
37
40
  BACKEND_ROOT = os.path.dirname(__file__)
@@ -272,9 +275,9 @@ class CodeSettings:
272
275
  password_auth_callback: Optional[
273
276
  Callable[[str, str], Awaitable[Optional["User"]]]
274
277
  ] = None
275
- header_auth_callback: Optional[
276
- Callable[[Headers], Awaitable[Optional["User"]]]
277
- ] = None
278
+ header_auth_callback: Optional[Callable[[Headers], Awaitable[Optional["User"]]]] = (
279
+ None
280
+ )
278
281
  oauth_callback: Optional[
279
282
  Callable[[str, str, Dict[str, str], "User"], Awaitable[Optional["User"]]]
280
283
  ] = None
@@ -293,9 +296,10 @@ class CodeSettings:
293
296
  set_chat_profiles: Optional[
294
297
  Callable[[Optional["User"]], Awaitable[List["ChatProfile"]]]
295
298
  ] = None
296
- set_starters: Optional[
297
- Callable[[Optional["User"]], Awaitable[List["Starter"]]]
298
- ] = None
299
+ set_starters: Optional[Callable[[Optional["User"]], Awaitable[List["Starter"]]]] = (
300
+ None
301
+ )
302
+ data_layer: Optional[Callable[[], BaseDataLayer]] = None
299
303
 
300
304
 
301
305
  @dataclass()