diff --git a/gradio/outputs.py b/gradio/outputs.py index 06d4210532..1809cc4bc0 100644 --- a/gradio/outputs.py +++ b/gradio/outputs.py @@ -793,6 +793,40 @@ class Timeseries(OutputComponent): def restore_flagged(self, dir, data, encryption_key): return json.loads(data) +class Chatbot(OutputComponent): + """ + Component displays a chatbot output showing both user submitted messages and responses + Output type: List[Tuple[str, str]] + Demos: chatbot + """ + + def __init__(self, label: Optional[str] = None): + """ + Parameters: + label (str): component name in interface (not used). + """ + super().__init__(label) + + def get_template_context(self): + return {**super().get_template_context()} + + @classmethod + def get_shortcut_implementations(cls): + return { + "chatbot": {}, + } + + def postprocess(self, y): + """ + Parameters: + y (List[Tuple[str, str]]): List of tuples representing the message and response + Returns: + (List[Tuple[str, str]]): Returns same list of tuples + + """ + return y + + class State(OutputComponent): """ diff --git a/ui/packages/app/src/components/directory.ts b/ui/packages/app/src/components/directory.ts index 12c4281029..a122820562 100644 --- a/ui/packages/app/src/components/directory.ts +++ b/ui/packages/app/src/components/directory.ts @@ -24,6 +24,7 @@ import OutputLabel from "./output/Label/config.js"; import OutputTextbox from "./output/Textbox/config.js"; import OutputVideo from "./output/Video/config.js"; import OutputTimeSeries from "./output/TimeSeries/config.js"; +import OutputChatbot from "./output/Chatbot/config.js"; export const input_component_map = { audio: InputAudio, @@ -53,5 +54,6 @@ export const output_component_map = { label: OutputLabel, textbox: OutputTextbox, timeseries: OutputTimeSeries, - video: OutputVideo + video: OutputVideo, + chatbot: OutputChatbot }; diff --git a/ui/packages/app/src/components/output/Chatbot/Chatbot.svelte b/ui/packages/app/src/components/output/Chatbot/Chatbot.svelte new file mode 100644 index 0000000000..150d6c000f --- /dev/null +++ b/ui/packages/app/src/components/output/Chatbot/Chatbot.svelte @@ -0,0 +1,21 @@ + + +
+
+ {#each value as message} +
+ {message[1]} +
+
+ {message[0]} +
+ {/each} +
+
+ + diff --git a/ui/packages/app/src/components/output/Chatbot/config.ts b/ui/packages/app/src/components/output/Chatbot/config.ts new file mode 100644 index 0000000000..bfb6f0266c --- /dev/null +++ b/ui/packages/app/src/components/output/Chatbot/config.ts @@ -0,0 +1,5 @@ +import Component from "./Chatbot.svelte"; + +export default { + component: Component +};