Spaces:
Running
Running
feat: update docs
Browse files
components/pro/multimodal_input/README-zh_CN.md
CHANGED
@@ -16,6 +16,10 @@
|
|
16 |
|
17 |
<demo name="extra_button"></demo>
|
18 |
|
|
|
|
|
|
|
|
|
19 |
### 上传配置
|
20 |
|
21 |
<demo name="upload_config"></demo>
|
@@ -28,6 +32,7 @@
|
|
28 |
| ------------- | -------------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------- |
|
29 |
| value | `dict \| MultimodalInputValue \| None` | None | 显示的默认值,格式为`{ "text":"", "files":[] }`。 |
|
30 |
| loading | `bool \| None` | None | 输入框是否处处于加载状态,此时可以触发 `cancel` 事件。 |
|
|
|
31 |
| auto_size | `bool \| { minRows?: number; maxRows?: number } \| None` | { "maxRows": 8 } | 自适应内容高度,可设置为 True \| False 或对象:{ "minRows": 2, "maxRows": 6 }。 |
|
32 |
| read_only | `bool \| None` | None | 输入框是否为只读状态。 |
|
33 |
| submit_type | `Literal['enter', 'shiftEnter'] \| None` | 'enter' | 输入框触发`submit`事件的方式。 |
|
|
|
16 |
|
17 |
<demo name="extra_button"></demo>
|
18 |
|
19 |
+
### Block 模式
|
20 |
+
|
21 |
+
<demo name="block_mode"></demo>
|
22 |
+
|
23 |
### 上传配置
|
24 |
|
25 |
<demo name="upload_config"></demo>
|
|
|
32 |
| ------------- | -------------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------- |
|
33 |
| value | `dict \| MultimodalInputValue \| None` | None | 显示的默认值,格式为`{ "text":"", "files":[] }`。 |
|
34 |
| loading | `bool \| None` | None | 输入框是否处处于加载状态,此时可以触发 `cancel` 事件。 |
|
35 |
+
| mode | `inline \| block` | 'inline' | 输入框的渲染模式, 值为 `block` 时会将输入框与提交按钮分开渲染。 |
|
36 |
| auto_size | `bool \| { minRows?: number; maxRows?: number } \| None` | { "maxRows": 8 } | 自适应内容高度,可设置为 True \| False 或对象:{ "minRows": 2, "maxRows": 6 }。 |
|
37 |
| read_only | `bool \| None` | None | 输入框是否为只读状态。 |
|
38 |
| submit_type | `Literal['enter', 'shiftEnter'] \| None` | 'enter' | 输入框触发`submit`事件的方式。 |
|
components/pro/multimodal_input/README.md
CHANGED
@@ -16,6 +16,10 @@ A multimodal input component based on [Ant Design X](https://x.ant.design), supp
|
|
16 |
|
17 |
<demo name="extra_button"></demo>
|
18 |
|
|
|
|
|
|
|
|
|
19 |
### Upload Configuration
|
20 |
|
21 |
<demo name="upload_config"></demo>
|
@@ -24,16 +28,17 @@ A multimodal input component based on [Ant Design X](https://x.ant.design), supp
|
|
24 |
|
25 |
### Props
|
26 |
|
27 |
-
| Attribute | Type | Default Value | Description
|
28 |
-
| ------------- | -------------------------------------------------------- | ---------------- |
|
29 |
-
| value | `dict \| MultimodalInputValue \| None` | None | Default value to display, formatted as `{ "text":"", "files":[] }`.
|
30 |
-
| loading | `bool \| None` | None | Whether the input is in a loading state, in which case the `cancel` event can be triggered.
|
31 |
-
|
|
32 |
-
|
|
33 |
-
|
|
34 |
-
|
|
35 |
-
|
|
36 |
-
|
|
|
|
37 |
|
38 |
### Slots
|
39 |
|
|
|
16 |
|
17 |
<demo name="extra_button"></demo>
|
18 |
|
19 |
+
### Block Mode
|
20 |
+
|
21 |
+
<demo name="block_mode"></demo>
|
22 |
+
|
23 |
### Upload Configuration
|
24 |
|
25 |
<demo name="upload_config"></demo>
|
|
|
28 |
|
29 |
### Props
|
30 |
|
31 |
+
| Attribute | Type | Default Value | Description |
|
32 |
+
| ------------- | -------------------------------------------------------- | ---------------- | --------------------------------------------------------------------------------------------------------------- |
|
33 |
+
| value | `dict \| MultimodalInputValue \| None` | None | Default value to display, formatted as `{ "text":"", "files":[] }`. |
|
34 |
+
| loading | `bool \| None` | None | Whether the input is in a loading state, in which case the `cancel` event can be triggered. |
|
35 |
+
| mode | `inline \| block` | 'inline' | The rending mode of the input box. If `block`, the input box and the submit button will be rendered separately. |
|
36 |
+
| auto_size | `bool \| { minRows?: number; maxRows?: number } \| None` | { "maxRows": 8 } | Height auto size feature, can be set to True \| False or an object { "minRows": 2, "maxRows": 6 }. |
|
37 |
+
| read_only | `bool \| None` | None | Whether the input is read-only. |
|
38 |
+
| submit_type | `Literal['enter', 'shiftEnter'] \| None` | 'enter' | How the input box triggers the `submit` event. |
|
39 |
+
| placeholder | `str \| None` | None | Input placeholder text. |
|
40 |
+
| disabled | `bool \| None` | None | Whether to disable. |
|
41 |
+
| upload_config | `MultimodalInputUploadConfig \| dict \| None` | None | File upload configuration. |
|
42 |
|
43 |
### Slots
|
44 |
|
components/pro/multimodal_input/demos/block_mode.py
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import time
|
2 |
+
|
3 |
+
import gradio as gr
|
4 |
+
import modelscope_studio.components.antd as antd
|
5 |
+
import modelscope_studio.components.antdx as antdx
|
6 |
+
import modelscope_studio.components.base as ms
|
7 |
+
import modelscope_studio.components.pro as pro
|
8 |
+
|
9 |
+
|
10 |
+
def submit(input_value, chatbot_value):
|
11 |
+
chatbot_value.append({
|
12 |
+
"role":
|
13 |
+
"user",
|
14 |
+
"content": [{
|
15 |
+
"type": "text",
|
16 |
+
"content": input_value["text"]
|
17 |
+
}, {
|
18 |
+
"type": "file",
|
19 |
+
"content": [file for file in input_value["files"]]
|
20 |
+
}]
|
21 |
+
})
|
22 |
+
chatbot_value.append({
|
23 |
+
"role": "assistant",
|
24 |
+
"loading": True,
|
25 |
+
"status": "pending"
|
26 |
+
})
|
27 |
+
yield gr.update(value=None, loading=True), gr.update(value=chatbot_value)
|
28 |
+
time.sleep(2)
|
29 |
+
chatbot_value[-1]["loading"] = False
|
30 |
+
chatbot_value[-1]["content"] = "Hello"
|
31 |
+
chatbot_value[-1]["status"] = "done"
|
32 |
+
yield gr.update(loading=False), gr.update(value=chatbot_value)
|
33 |
+
|
34 |
+
|
35 |
+
def cancel(chatbot_value):
|
36 |
+
chatbot_value[-1]["loading"] = False
|
37 |
+
chatbot_value[-1]["footer"] = "canceled"
|
38 |
+
chatbot_value[-1]["status"] = "done"
|
39 |
+
return gr.update(loading=False), gr.update(value=chatbot_value)
|
40 |
+
|
41 |
+
|
42 |
+
def clear():
|
43 |
+
return gr.update(value=None)
|
44 |
+
|
45 |
+
|
46 |
+
with gr.Blocks() as demo, ms.Application(), antdx.XProvider():
|
47 |
+
with antd.Flex(elem_style=dict(height=300), vertical=True):
|
48 |
+
chatbot = pro.Chatbot(height=0,
|
49 |
+
elem_style=dict(flex=1),
|
50 |
+
value=[{
|
51 |
+
"role": "user",
|
52 |
+
"content": "Hello"
|
53 |
+
}, {
|
54 |
+
"role": "assistant",
|
55 |
+
"content": "Hello"
|
56 |
+
}])
|
57 |
+
with pro.MultimodalInput(
|
58 |
+
mode="block",
|
59 |
+
auto_size=dict(minRows=2, maxRows=6),
|
60 |
+
upload_config=dict(
|
61 |
+
upload_button_tooltip="Attachments")) as input:
|
62 |
+
with ms.Slot("footer"):
|
63 |
+
with antd.Tooltip("Clear History"):
|
64 |
+
with antd.Button(value=None,
|
65 |
+
variant="text",
|
66 |
+
color="default") as clear_btn:
|
67 |
+
with ms.Slot("icon"):
|
68 |
+
antd.Icon("ClearOutlined")
|
69 |
+
submit_event = input.submit(fn=submit,
|
70 |
+
inputs=[input, chatbot],
|
71 |
+
outputs=[input, chatbot])
|
72 |
+
input.cancel(fn=cancel,
|
73 |
+
cancels=[submit_event],
|
74 |
+
inputs=[chatbot],
|
75 |
+
outputs=[input, chatbot],
|
76 |
+
queue=False)
|
77 |
+
clear_btn.click(fn=clear, outputs=[chatbot])
|
78 |
+
|
79 |
+
if __name__ == "__main__":
|
80 |
+
demo.queue().launch()
|
components/pro/multimodal_input/demos/upload_config.py
CHANGED
@@ -28,6 +28,10 @@ with gr.Blocks() as demo, ms.Application(), antdx.XProvider():
|
|
28 |
antd.Divider("Other Sources")
|
29 |
pro.MultimodalInput(upload_config=MultimodalInputUploadConfig(
|
30 |
allow_speech=True, allow_paste_file=True))
|
|
|
|
|
|
|
|
|
31 |
|
32 |
if __name__ == "__main__":
|
33 |
demo.queue().launch()
|
|
|
28 |
antd.Divider("Other Sources")
|
29 |
pro.MultimodalInput(upload_config=MultimodalInputUploadConfig(
|
30 |
allow_speech=True, allow_paste_file=True))
|
31 |
+
pro.MultimodalInput(mode="block",
|
32 |
+
auto_size=dict(minRows=2, maxRows=6),
|
33 |
+
upload_config=MultimodalInputUploadConfig(
|
34 |
+
allow_speech=True, allow_paste_file=True))
|
35 |
|
36 |
if __name__ == "__main__":
|
37 |
demo.queue().launch()
|
requirements.txt
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
modelscope_studio==1.3.
|
2 |
openai
|
|
|
1 |
+
modelscope_studio==1.3.1
|
2 |
openai
|
src/pyproject.toml
CHANGED
@@ -8,7 +8,7 @@ build-backend = "hatchling.build"
|
|
8 |
|
9 |
[project]
|
10 |
name = "modelscope_studio"
|
11 |
-
version = "1.3.
|
12 |
description = "A third-party component library based on Gradio."
|
13 |
readme = "README.md"
|
14 |
license = "Apache-2.0"
|
@@ -226,6 +226,7 @@ artifacts = [
|
|
226 |
"/backend/modelscope_studio/components/antdx/x_provider/templates",
|
227 |
"/backend/modelscope_studio/components/pro/chatbot/templates",
|
228 |
"/backend/modelscope_studio/components/pro/multimodal_input/templates",
|
|
|
229 |
]
|
230 |
|
231 |
[tool.yapfignore]
|
|
|
8 |
|
9 |
[project]
|
10 |
name = "modelscope_studio"
|
11 |
+
version = "1.3.1"
|
12 |
description = "A third-party component library based on Gradio."
|
13 |
readme = "README.md"
|
14 |
license = "Apache-2.0"
|
|
|
226 |
"/backend/modelscope_studio/components/antdx/x_provider/templates",
|
227 |
"/backend/modelscope_studio/components/pro/chatbot/templates",
|
228 |
"/backend/modelscope_studio/components/pro/multimodal_input/templates",
|
229 |
+
"/backend/modelscope_studio/components/pro/web_sandbox/templates",
|
230 |
]
|
231 |
|
232 |
[tool.yapfignore]
|