chainlit 1.2.0__tar.gz → 1.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 (99) hide show
  1. {chainlit-1.2.0 → chainlit-1.2.0rc0}/PKG-INFO +8 -8
  2. {chainlit-1.2.0 → chainlit-1.2.0rc0}/README.md +7 -7
  3. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/__init__.py +10 -0
  4. chainlit-1.2.0rc0/chainlit/assistant.py +16 -0
  5. chainlit-1.2.0rc0/chainlit/assistant_settings.py +35 -0
  6. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/callbacks.py +32 -0
  7. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/cli/__init__.py +1 -1
  8. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/config.py +11 -7
  9. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/copilot/dist/index.js +253 -253
  10. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/data/dynamodb.py +3 -3
  11. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/data/sql_alchemy.py +2 -1
  12. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/element.py +1 -1
  13. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/emitter.py +7 -0
  14. chainlit-1.2.0/chainlit/frontend/dist/assets/DailyMotion-05f4fe48.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/DailyMotion-aa368b7e.js +1 -1
  15. chainlit-1.2.0/chainlit/frontend/dist/assets/Facebook-f25411d1.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/Facebook-0335db46.js +1 -1
  16. chainlit-1.2.0/chainlit/frontend/dist/assets/FilePlayer-40ff3414.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/FilePlayer-8d04256c.js +1 -1
  17. chainlit-1.2.0/chainlit/frontend/dist/assets/Kaltura-6cbf3897.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/Kaltura-67c9dd31.js +1 -1
  18. chainlit-1.2.0/chainlit/frontend/dist/assets/Mixcloud-34e7c912.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/Mixcloud-6bbaccf5.js +1 -1
  19. chainlit-1.2.0/chainlit/frontend/dist/assets/Mux-8aaff6ac.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/Mux-c2bcb757.js +1 -1
  20. chainlit-1.2.0/chainlit/frontend/dist/assets/Preview-2d3bf558.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/Preview-210f3955.js +1 -1
  21. chainlit-1.2.0/chainlit/frontend/dist/assets/SoundCloud-b835f90f.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/SoundCloud-a0276b84.js +1 -1
  22. chainlit-1.2.0/chainlit/frontend/dist/assets/Streamable-1293e4f3.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/Streamable-a007323d.js +1 -1
  23. chainlit-1.2.0/chainlit/frontend/dist/assets/Twitch-c69660cd.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/Twitch-e6a88aa3.js +1 -1
  24. chainlit-1.2.0/chainlit/frontend/dist/assets/Vidyard-43bda599.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/Vidyard-dfb88a35.js +1 -1
  25. chainlit-1.2.0/chainlit/frontend/dist/assets/Vimeo-54150039.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/Vimeo-3baa13d9.js +1 -1
  26. chainlit-1.2.0/chainlit/frontend/dist/assets/Wistia-aa3c721b.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/Wistia-e52f7bef.js +1 -1
  27. chainlit-1.2.0/chainlit/frontend/dist/assets/YouTube-dd0f3cc2.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/YouTube-1715f22b.js +1 -1
  28. chainlit-1.2.0rc0/chainlit/frontend/dist/assets/index-bfdd8585.js +729 -0
  29. chainlit-1.2.0/chainlit/frontend/dist/assets/react-plotly-f52a41eb.js → chainlit-1.2.0rc0/chainlit/frontend/dist/assets/react-plotly-55648373.js +1 -1
  30. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/frontend/dist/index.html +1 -1
  31. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/input_widget.py +22 -0
  32. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/server.py +23 -1
  33. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/session.py +23 -3
  34. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/socket.py +50 -1
  35. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/en-US.json +6 -0
  36. chainlit-1.2.0rc0/chainlit/translations/fr-FR.json +236 -0
  37. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/types.py +1 -1
  38. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/user_session.py +4 -0
  39. {chainlit-1.2.0 → chainlit-1.2.0rc0}/pyproject.toml +1 -1
  40. chainlit-1.2.0/chainlit/frontend/dist/assets/index-cf48bedd.js +0 -729
  41. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/__main__.py +0 -0
  42. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/_utils.py +0 -0
  43. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/action.py +0 -0
  44. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/auth.py +0 -0
  45. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/cache.py +0 -0
  46. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/chat_context.py +0 -0
  47. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/chat_settings.py +0 -0
  48. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/context.py +0 -0
  49. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/copilot/dist/assets/logo_dark-2a3cf740.svg +0 -0
  50. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/copilot/dist/assets/logo_light-b078e7bc.svg +0 -0
  51. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/data/__init__.py +0 -0
  52. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/data/acl.py +0 -0
  53. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/data/base.py +0 -0
  54. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/data/literalai.py +0 -0
  55. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/data/storage_clients.py +0 -0
  56. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/data/utils.py +0 -0
  57. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/discord/__init__.py +0 -0
  58. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/discord/app.py +0 -0
  59. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/frontend/dist/assets/index-aaf974a9.css +0 -0
  60. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/frontend/dist/assets/logo_dark-2a3cf740.svg +0 -0
  61. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/frontend/dist/assets/logo_light-b078e7bc.svg +0 -0
  62. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/frontend/dist/favicon.svg +0 -0
  63. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/haystack/__init__.py +0 -0
  64. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/haystack/callbacks.py +0 -0
  65. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/hello.py +0 -0
  66. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/langchain/__init__.py +0 -0
  67. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/langchain/callbacks.py +0 -0
  68. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/langflow/__init__.py +0 -0
  69. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/llama_index/__init__.py +0 -0
  70. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/llama_index/callbacks.py +0 -0
  71. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/logger.py +0 -0
  72. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/markdown.py +0 -0
  73. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/message.py +0 -0
  74. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/mistralai/__init__.py +0 -0
  75. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/oauth_providers.py +0 -0
  76. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/openai/__init__.py +0 -0
  77. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/py.typed +0 -0
  78. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/secret.py +0 -0
  79. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/slack/__init__.py +0 -0
  80. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/slack/app.py +0 -0
  81. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/step.py +0 -0
  82. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/sync.py +0 -0
  83. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/teams/__init__.py +0 -0
  84. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/teams/app.py +0 -0
  85. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/telemetry.py +0 -0
  86. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/bn.json +0 -0
  87. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/gu.json +0 -0
  88. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/he-IL.json +0 -0
  89. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/hi.json +0 -0
  90. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/kn.json +0 -0
  91. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/ml.json +0 -0
  92. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/mr.json +0 -0
  93. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/ta.json +0 -0
  94. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/te.json +0 -0
  95. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations/zh-CN.json +0 -0
  96. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/translations.py +0 -0
  97. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/user.py +0 -0
  98. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/utils.py +0 -0
  99. {chainlit-1.2.0 → chainlit-1.2.0rc0}/chainlit/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: chainlit
3
- Version: 1.2.0
3
+ Version: 1.2.0rc0
4
4
  Summary: Build Conversational AI.
5
5
  Home-page: https://github.com/Chainlit/chainlit
6
6
  License: Apache-2.0 license
@@ -64,16 +64,16 @@ Full documentation is available [here](https://docs.chainlit.io). You can ask Ch
64
64
  > 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.
65
65
 
66
66
  <p align="center">
67
- <img src="https://github.com/Chainlit/chainlit/assets/13104895/0c2cc7a9-766c-41d3-aae2-117a2d0eb8ed" width="80%" />
67
+ <img src="https://github.com/Chainlit/chainlit/assets/13104895/0c2cc7a9-766c-41d3-aae2-117a2d0eb8ed" alt="Chainlit user interface" width="80%"></img>
68
68
  </p>
69
69
 
70
70
  ## Installation
71
71
 
72
72
  Open a terminal and run:
73
73
 
74
- ```bash
75
- $ pip install chainlit
76
- $ chainlit hello
74
+ ```sh
75
+ pip install chainlit
76
+ chainlit hello
77
77
  ```
78
78
 
79
79
  If this opens the `hello app` in your browser, you're all set!
@@ -118,8 +118,8 @@ async def main(message: cl.Message):
118
118
 
119
119
  Now run it!
120
120
 
121
- ```
122
- $ chainlit run demo.py -w
121
+ ```sh
122
+ chainlit run demo.py -w
123
123
  ```
124
124
 
125
125
  <img src="/images/quick-start.png" alt="Quick Start"></img>
@@ -129,7 +129,7 @@ $ chainlit run demo.py -w
129
129
  Full documentation is available [here](https://docs.chainlit.io). Key features:
130
130
 
131
131
  - [💬 Multi Modal chats](https://docs.chainlit.io/advanced-features/multi-modal)
132
- - [💭 Chain of Thought visualisation](https://docs.chainlit.io/concepts/step)
132
+ - [💭 Chain of Thought visualization](https://docs.chainlit.io/concepts/step)
133
133
  - [💾 Data persistence + human feedback](https://docs.chainlit.io/data-persistence/overview)
134
134
  - [🐛 Debug Mode](https://docs.chainlit.io/data-persistence/enterprise#debug-mode)
135
135
  - [👤 Authentication](https://docs.chainlit.io/authentication/overview)
@@ -23,16 +23,16 @@ Full documentation is available [here](https://docs.chainlit.io). You can ask Ch
23
23
  > 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.
24
24
 
25
25
  <p align="center">
26
- <img src="https://github.com/Chainlit/chainlit/assets/13104895/0c2cc7a9-766c-41d3-aae2-117a2d0eb8ed" width="80%" />
26
+ <img src="https://github.com/Chainlit/chainlit/assets/13104895/0c2cc7a9-766c-41d3-aae2-117a2d0eb8ed" alt="Chainlit user interface" width="80%"></img>
27
27
  </p>
28
28
 
29
29
  ## Installation
30
30
 
31
31
  Open a terminal and run:
32
32
 
33
- ```bash
34
- $ pip install chainlit
35
- $ chainlit hello
33
+ ```sh
34
+ pip install chainlit
35
+ chainlit hello
36
36
  ```
37
37
 
38
38
  If this opens the `hello app` in your browser, you're all set!
@@ -77,8 +77,8 @@ async def main(message: cl.Message):
77
77
 
78
78
  Now run it!
79
79
 
80
- ```
81
- $ chainlit run demo.py -w
80
+ ```sh
81
+ chainlit run demo.py -w
82
82
  ```
83
83
 
84
84
  <img src="/images/quick-start.png" alt="Quick Start"></img>
@@ -88,7 +88,7 @@ $ chainlit run demo.py -w
88
88
  Full documentation is available [here](https://docs.chainlit.io). Key features:
89
89
 
90
90
  - [💬 Multi Modal chats](https://docs.chainlit.io/advanced-features/multi-modal)
91
- - [💭 Chain of Thought visualisation](https://docs.chainlit.io/concepts/step)
91
+ - [💭 Chain of Thought visualization](https://docs.chainlit.io/concepts/step)
92
92
  - [💾 Data persistence + human feedback](https://docs.chainlit.io/data-persistence/overview)
93
93
  - [🐛 Debug Mode](https://docs.chainlit.io/data-persistence/enterprise#debug-mode)
94
94
  - [👤 Authentication](https://docs.chainlit.io/authentication/overview)
@@ -16,6 +16,8 @@ from typing import TYPE_CHECKING, Any, Dict
16
16
 
17
17
  import chainlit.input_widget as input_widget
18
18
  from chainlit.action import Action
19
+ from chainlit.assistant import Assistant
20
+ from chainlit.assistant_settings import AssistantSettings
19
21
  from chainlit.cache import cache
20
22
  from chainlit.chat_context import chat_context
21
23
  from chainlit.chat_settings import ChatSettings
@@ -61,6 +63,8 @@ from .callbacks import (
61
63
  on_chat_end,
62
64
  on_chat_resume,
63
65
  on_chat_start,
66
+ on_create_assistant,
67
+ on_list_assistants,
64
68
  on_logout,
65
69
  on_message,
66
70
  on_settings_update,
@@ -134,6 +138,10 @@ __all__ = [
134
138
  "TaskStatus",
135
139
  "Video",
136
140
  "ChatSettings",
141
+ # Experimental
142
+ "AssistantSettings",
143
+ # Experimental
144
+ "Assistant",
137
145
  "input_widget",
138
146
  "Message",
139
147
  "ErrorMessage",
@@ -153,6 +161,8 @@ __all__ = [
153
161
  "action_callback",
154
162
  "author_rename",
155
163
  "on_settings_update",
164
+ "on_create_assistant",
165
+ "on_list_assistants",
156
166
  "password_auth_callback",
157
167
  "header_auth_callback",
158
168
  "sleep",
@@ -0,0 +1,16 @@
1
+ from typing import List, Dict
2
+ from chainlit.input_widget import InputWidget
3
+
4
+ class Assistant:
5
+ input_widgets: List[InputWidget] = []
6
+ settings_values: Dict = {}
7
+
8
+ def __init__(self, input_widgets: List[InputWidget], settings_values: Dict):
9
+ self.input_widgets = input_widgets
10
+ self.settings_values = settings_values
11
+
12
+ def to_dict(self):
13
+ return {
14
+ "input_widgets": [widget.__repr__() for widget in self.input_widgets],
15
+ "settings_values": self.settings_values
16
+ }
@@ -0,0 +1,35 @@
1
+ import logging
2
+ from typing import List
3
+
4
+ from chainlit.context import context
5
+ from chainlit.input_widget import InputWidget
6
+ from pydantic.dataclasses import Field, dataclass
7
+
8
+
9
+ @dataclass
10
+ class AssistantSettings:
11
+ """Useful to create chat settings that the user can change."""
12
+
13
+ inputs: List[InputWidget] = Field(default_factory=list, exclude=True)
14
+
15
+ def __init__(
16
+ self,
17
+ inputs: List[InputWidget],
18
+ ) -> None:
19
+ self.inputs = inputs
20
+
21
+ def settings(self):
22
+ return dict(
23
+ [(input_widget.id, input_widget.initial) for input_widget in self.inputs]
24
+ )
25
+
26
+ async def send(self):
27
+ settings = self.settings()
28
+ context.emitter.set_assistant_settings(settings)
29
+
30
+ inputs_content = [input_widget.to_dict() for input_widget in self.inputs]
31
+ # logging.info(f"Sending assistant settings: {inputs_content}")
32
+ await context.emitter.emit("assistant_settings", inputs_content)
33
+
34
+ # logging.info(f"Assistant settings sent: {settings}")
35
+ return settings
@@ -1,7 +1,10 @@
1
+ import functools
1
2
  import inspect
2
3
  from typing import Any, Awaitable, Callable, Dict, List, Optional
3
4
 
4
5
  from chainlit.action import Action
6
+ from chainlit.assistant import Assistant
7
+ from chainlit.assistant_settings import AssistantSettings
5
8
  from chainlit.config import config
6
9
  from chainlit.message import Message
7
10
  from chainlit.oauth_providers import get_configured_oauth_providers
@@ -14,6 +17,15 @@ from fastapi import Request, Response
14
17
  from starlette.datastructures import Headers
15
18
 
16
19
 
20
+ def experimental(func):
21
+ @functools.wraps(func)
22
+ def wrapper(*args, **kwargs):
23
+ print(f"\033[1;33mexperimental feature: {func.__name__}\033[0m")
24
+ return func(*args, **kwargs)
25
+
26
+ return wrapper
27
+
28
+
17
29
  @trace
18
30
  def password_auth_callback(
19
31
  func: Callable[[str, str], Awaitable[Optional[User]]]
@@ -306,3 +318,23 @@ def on_settings_update(
306
318
 
307
319
  config.code.on_settings_update = wrap_user_function(func, with_task=True)
308
320
  return func
321
+
322
+
323
+ # Experimental
324
+ @trace
325
+ @experimental
326
+ def on_create_assistant(
327
+ func: Callable[[Optional[User], AssistantSettings], Any]
328
+ ) -> Callable[[Optional[User], AssistantSettings], Any]:
329
+ config.code.on_create_assistant = wrap_user_function(func)
330
+ return func
331
+
332
+
333
+ # Experimental
334
+ @trace
335
+ @experimental
336
+ def on_list_assistants(
337
+ func: Callable[[Optional[User]], List[Assistant]]
338
+ ) -> Callable[[Optional[User]], List[Assistant]]:
339
+ config.code.on_list_assistants = wrap_user_function(func)
340
+ return func
@@ -183,7 +183,7 @@ def chainlit_run(
183
183
  no_cache = True
184
184
  # This is required to have OpenAI LLM providers available for the CI run
185
185
  os.environ["OPENAI_API_KEY"] = "sk-FAKE-OPENAI-API-KEY"
186
- # This is required for authenticationt tests
186
+ # This is required for authentication tests
187
187
  os.environ["CHAINLIT_AUTH_SECRET"] = "SUPER_SECRET"
188
188
  else:
189
189
  trace_event("chainlit run")
@@ -28,13 +28,13 @@ from ._utils import is_path_inside
28
28
 
29
29
  if TYPE_CHECKING:
30
30
  from chainlit.action import Action
31
+ from chainlit.assistant import Assistant
31
32
  from chainlit.element import ElementBased
32
33
  from chainlit.message import Message
33
34
  from chainlit.types import AudioChunk, ChatProfile, Starter, ThreadDict
34
35
  from chainlit.user import User
35
36
  from fastapi import Request, Response
36
37
 
37
-
38
38
  BACKEND_ROOT = os.path.dirname(__file__)
39
39
  PACKAGE_ROOT = os.path.dirname(os.path.dirname(BACKEND_ROOT))
40
40
  TRANSLATIONS_DIR = os.path.join(BACKEND_ROOT, "translations")
@@ -285,9 +285,9 @@ class CodeSettings:
285
285
  password_auth_callback: Optional[
286
286
  Callable[[str, str], Awaitable[Optional["User"]]]
287
287
  ] = None
288
- header_auth_callback: Optional[
289
- Callable[[Headers], Awaitable[Optional["User"]]]
290
- ] = None
288
+ header_auth_callback: Optional[Callable[[Headers], Awaitable[Optional["User"]]]] = (
289
+ None
290
+ )
291
291
  oauth_callback: Optional[
292
292
  Callable[[str, str, Dict[str, str], "User"], Awaitable[Optional["User"]]]
293
293
  ] = None
@@ -305,9 +305,13 @@ class CodeSettings:
305
305
  set_chat_profiles: Optional[
306
306
  Callable[[Optional["User"]], Awaitable[List["ChatProfile"]]]
307
307
  ] = None
308
- set_starters: Optional[
309
- Callable[[Optional["User"]], Awaitable[List["Starter"]]]
310
- ] = None
308
+ set_starters: Optional[Callable[[Optional["User"]], Awaitable[List["Starter"]]]] = (
309
+ None
310
+ )
311
+
312
+ # assistant-related callback function
313
+ on_create_assistant: Optional[Callable[[Optional["User"], Any], Any]] = None
314
+ on_list_assistants: Optional[Callable[[Optional["User"]], List["Assistant"]]] = None
311
315
 
312
316
 
313
317
  @dataclass()