LennardZuendorf commited on
Commit
ef5e40d
1 Parent(s): 008db5c

chore: fixing linting errors

Browse files
.dockerignore CHANGED
@@ -5,4 +5,4 @@ Dockerfile-Light
5
  entrypoint.sh
6
  railway.json
7
  /components/
8
- /components/*
 
5
  entrypoint.sh
6
  railway.json
7
  /components/
8
+ /components/*
.github/workflows/docker-publish.yml CHANGED
@@ -10,7 +10,7 @@ on:
10
  - cron: '22 7 * * *'
11
  release:
12
  types: created
13
-
14
  env:
15
  # Use docker.io for Docker Hub if empty
16
  REGISTRY: ghcr.io
 
10
  - cron: '22 7 * * *'
11
  release:
12
  types: created
13
+
14
  env:
15
  # Use docker.io for Docker Hub if empty
16
  REGISTRY: ghcr.io
.github/workflows/hgf-sync-bulding.yml CHANGED
@@ -2,10 +2,10 @@ name: Sync building branch to Hugging Face hub
2
  on:
3
  push:
4
  branches: [building]
5
-
6
  pull_request:
7
  branches: [building]
8
-
9
  workflow_dispatch:
10
 
11
  jobs:
 
2
  on:
3
  push:
4
  branches: [building]
5
+
6
  pull_request:
7
  branches: [building]
8
+
9
  workflow_dispatch:
10
 
11
  jobs:
.idea/inspectionProfiles/profiles_settings.xml CHANGED
@@ -3,4 +3,4 @@
3
  <option name="USE_PROJECT_PROFILE" value="false" />
4
  <version value="1.0" />
5
  </settings>
6
- </component>
 
3
  <option name="USE_PROJECT_PROFILE" value="false" />
4
  <version value="1.0" />
5
  </settings>
6
+ </component>
.idea/misc.xml CHANGED
@@ -4,4 +4,4 @@
4
  <option name="sdkName" value="Python 3.11.6 WSL (Ubuntu): (/home/lennard/.virtualenvs/thesis/bin/python)" />
5
  </component>
6
  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11.6 WSL (Ubuntu): (/home/lennard/.virtualenvs/thesis/bin/python)" project-jdk-type="Python SDK" />
7
- </project>
 
4
  <option name="sdkName" value="Python 3.11.6 WSL (Ubuntu): (/home/lennard/.virtualenvs/thesis/bin/python)" />
5
  </component>
6
  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11.6 WSL (Ubuntu): (/home/lennard/.virtualenvs/thesis/bin/python)" project-jdk-type="Python SDK" />
7
+ </project>
.idea/modules.xml CHANGED
@@ -5,4 +5,4 @@
5
  <module fileurl="file://$PROJECT_DIR$/.idea/thesis-webapp.iml" filepath="$PROJECT_DIR$/.idea/thesis-webapp.iml" />
6
  </modules>
7
  </component>
8
- </project>
 
5
  <module fileurl="file://$PROJECT_DIR$/.idea/thesis-webapp.iml" filepath="$PROJECT_DIR$/.idea/thesis-webapp.iml" />
6
  </modules>
7
  </component>
8
+ </project>
.idea/thesis-webapp.iml CHANGED
@@ -1,10 +1,8 @@
1
  <?xml version="1.0" encoding="UTF-8"?>
2
  <module type="PYTHON_MODULE" version="4">
3
  <component name="NewModuleRootManager">
4
- <content url="file://$MODULE_DIR$">
5
- <sourceFolder url="file://$MODULE_DIR$/components/iframe/backend" isTestSource="false" />
6
- </content>
7
  <orderEntry type="jdk" jdkName="Python 3.11.6 WSL (Ubuntu): (/home/lennard/.virtualenvs/thesis/bin/python)" jdkType="Python SDK" />
8
  <orderEntry type="sourceFolder" forTests="false" />
9
  </component>
10
- </module>
 
1
  <?xml version="1.0" encoding="UTF-8"?>
2
  <module type="PYTHON_MODULE" version="4">
3
  <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$" />
 
 
5
  <orderEntry type="jdk" jdkName="Python 3.11.6 WSL (Ubuntu): (/home/lennard/.virtualenvs/thesis/bin/python)" jdkType="Python SDK" />
6
  <orderEntry type="sourceFolder" forTests="false" />
7
  </component>
8
+ </module>
.idea/vcs.xml CHANGED
@@ -3,4 +3,4 @@
3
  <component name="VcsDirectoryMappings">
4
  <mapping directory="" vcs="Git" />
5
  </component>
6
- </project>
 
3
  <component name="VcsDirectoryMappings">
4
  <mapping directory="" vcs="Git" />
5
  </component>
6
+ </project>
Dockerfile CHANGED
@@ -19,4 +19,4 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
19
 
20
  # build and run commands
21
  ## docker build -t thesis:0.1.6 -f Dockerfile-Light .
22
- ## docker run -d --name thesis -p 8080:8080 thesis:0.1.6-small
 
19
 
20
  # build and run commands
21
  ## docker build -t thesis:0.1.6 -f Dockerfile-Light .
22
+ ## docker run -d --name thesis -p 8080:8080 thesis:0.1.6-small
LICENSE.md CHANGED
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
 
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
README.md CHANGED
@@ -30,7 +30,7 @@ app_port: 8080
30
 
31
  **Author:** [@LennardZuendorf](https://github.com/LennardZuendorf)
32
 
33
- **Thesis Supervisor**: [Prof. Dr. Simbeck](https://www.htw-berlin.de/hochschule/personen/person/?eid=9862)
34
  <br> Second Corrector: [Prof. Dr. Hochstein](https://www.htw-berlin.de/hochschule/personen/person/?eid=10628)
35
 
36
 
@@ -42,4 +42,3 @@ See code for in detail credits, work is based on
42
 
43
 
44
  This Project was part of my studies of Business Computing at University of Applied Science for Technology and Business Berlin (HTW Berlin).
45
-
 
30
 
31
  **Author:** [@LennardZuendorf](https://github.com/LennardZuendorf)
32
 
33
+ **Thesis Supervisor**: [Prof. Dr. Simbeck](https://www.htw-berlin.de/hochschule/personen/person/?eid=9862)
34
  <br> Second Corrector: [Prof. Dr. Hochstein](https://www.htw-berlin.de/hochschule/personen/person/?eid=10628)
35
 
36
 
 
42
 
43
 
44
  This Project was part of my studies of Business Computing at University of Applied Science for Technology and Business Berlin (HTW Berlin).
 
backend/controller.py CHANGED
@@ -4,26 +4,35 @@ import gradio as gr
4
  # internal imports
5
  from model import mistral, llama2 as llama
6
 
7
- def interference(prompt, history,system_prompt, model, xai, ):
8
 
 
 
 
 
 
 
 
9
  if system_prompt == "":
10
- system_prompt = "You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe."
11
-
12
- if xai =="None":
13
 
 
14
  match model:
15
  case "Mistral":
16
- prompt_output, history_output = mistral.chat(prompt, history, system_prompt)
 
 
17
  case "LlaMa 2":
18
- prompt_output, history_output = llama.chat(prompt, history, system_prompt)
 
 
19
  case _:
20
- gr.Warning(f"There was an error in the selected model. It is \"{model}\"")
21
  return "", "", ""
22
 
23
  xai_output = ""
24
 
25
- elif xai == "SHAP" or xai == "Visualizer":
26
-
27
  match model:
28
  case "Mistral":
29
  prompt_output, history_output, xai_output = "", "", ""
@@ -32,11 +41,11 @@ def interference(prompt, history,system_prompt, model, xai, ):
32
  prompt_output, history_output, xai_output = "", "", ""
33
 
34
  case _:
35
- gr.Warning(f"There was an error in the selected model. It is \"{model}\"")
36
  return "", "", ""
37
 
38
  else:
39
- gr.Warning(f"There was an error in the selected XAI Approach. It is \"{xai}\"")
40
  return "", "", ""
41
 
42
- return prompt_output, history_output
 
4
  # internal imports
5
  from model import mistral, llama2 as llama
6
 
 
7
 
8
+ def interference(
9
+ prompt,
10
+ history,
11
+ system_prompt,
12
+ model,
13
+ xai,
14
+ ):
15
  if system_prompt == "":
16
+ system_prompt = """You are a helpful, respectful and honest assistant.
17
+ Always answer as helpfully as possible, while being safe."""
 
18
 
19
+ if xai == "None":
20
  match model:
21
  case "Mistral":
22
+ prompt_output, history_output = mistral.chat(
23
+ prompt, history, system_prompt
24
+ )
25
  case "LlaMa 2":
26
+ prompt_output, history_output = llama.chat(
27
+ prompt, history, system_prompt
28
+ )
29
  case _:
30
+ gr.Warning("There was an error in the selected model.")
31
  return "", "", ""
32
 
33
  xai_output = ""
34
 
35
+ elif xai in ("SHAP", "Visualizer"):
 
36
  match model:
37
  case "Mistral":
38
  prompt_output, history_output, xai_output = "", "", ""
 
41
  prompt_output, history_output, xai_output = "", "", ""
42
 
43
  case _:
44
+ gr.Warning(f'There was an error in the selected model. It is "{model}"')
45
  return "", "", ""
46
 
47
  else:
48
+ gr.Warning(f'There was an error in the selected XAI Approach. It is "{xai}"')
49
  return "", "", ""
50
 
51
+ return prompt_output, history_output, xai_output
components/iframe/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- .eggs/
2
- dist/
3
- *.pyc
4
- __pycache__/
5
- *.py[cod]
6
- *$py.class
7
- __tmp/*
8
- *.pyi
9
- node_modules
 
 
 
 
 
 
 
 
 
 
components/iframe/README.md DELETED
@@ -1,10 +0,0 @@
1
-
2
- # gradio_iframe
3
- A Custom Gradio component.
4
-
5
- ## Example usage
6
-
7
- ```python
8
- import gradio as gr
9
- from gradio_iframe import iFrame
10
- ```
 
 
 
 
 
 
 
 
 
 
 
components/iframe/backend/gradio_iframe/__init__.py DELETED
@@ -1,4 +0,0 @@
1
-
2
- from .iframe import iFrame
3
-
4
- __all__ = ['iFrame']
 
 
 
 
 
components/iframe/backend/gradio_iframe/iframe.py DELETED
@@ -1,72 +0,0 @@
1
- """gr.HTML() component."""
2
-
3
- from __future__ import annotations
4
-
5
- from typing import Any, Callable
6
-
7
- from gradio_client.documentation import document, set_documentation_group
8
-
9
- from gradio.components.base import Component
10
- from gradio.events import Events
11
-
12
- set_documentation_group("component")
13
-
14
-
15
- @document()
16
- class iFrame(Component):
17
- """
18
- Used to display arbitrary iFrame output.
19
- Preprocessing: this component does *not* accept input.
20
- Postprocessing: expects a valid iFrame {str}.
21
-
22
- Demos: text_analysis
23
- Guides: key-features
24
- """
25
-
26
- EVENTS = [Events.change]
27
-
28
- def __init__(
29
- self,
30
- value: str | Callable = "",
31
- *,
32
- label: str | None = None,
33
- every: float | None = None,
34
- show_label: bool | None = None,
35
- visible: bool = True,
36
- elem_id: str | None = None,
37
- elem_classes: list[str] | str | None = None,
38
- render: bool = True,
39
- ):
40
- """
41
- Parameters:
42
- value: Default value. If callable, the function will be called whenever the app loads to set the initial value of the component.
43
- label: The label for this component. Is used as the header if there are a table of examples for this component. If None and used in a `gr.Interface`, the label will be the name of the parameter this component is assigned to.
44
- every: If `value` is a callable, run the function 'every' number of seconds while the client connection is open. Has no effect otherwise. Queue must be enabled. The event can be accessed (e.g. to cancel it) via this component's .load_event attribute.
45
- show_label: This parameter has no effect.
46
- visible: If False, component will be hidden.
47
- elem_id: An optional string that is assigned as the id of this component in the iFrame DOM. Can be used for targeting CSS styles.
48
- elem_classes: An optional list of strings that are assigned as the classes of this component in the iFrame DOM. Can be used for targeting CSS styles.
49
- render: If False, component will not render be rendered in the Blocks context. Should be used if the intention is to assign event listeners now but render the component later.
50
- """
51
- super().__init__(
52
- label=label,
53
- every=every,
54
- show_label=show_label,
55
- visible=visible,
56
- elem_id=elem_id,
57
- elem_classes=elem_classes,
58
- render=render,
59
- value=value,
60
- )
61
-
62
- def example_inputs(self) -> Any:
63
- return "<p>Hello</p>"
64
-
65
- def preprocess(self, payload: str | None) -> str | None:
66
- return payload
67
-
68
- def postprocess(self, value: str | None) -> str | None:
69
- return value
70
-
71
- def api_info(self) -> dict[str, Any]:
72
- return {"type": "string"}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
components/iframe/demo/__init__.py DELETED
File without changes
components/iframe/demo/app.py DELETED
@@ -1,14 +0,0 @@
1
-
2
- import gradio as gr
3
- from gradio_iframe import iFrame
4
-
5
-
6
- example = iFrame().example_inputs()
7
-
8
- with gr.Blocks() as demo:
9
- with gr.Row():
10
- iFrame(label="Blank"), # blank component
11
- iFrame(value=example, label="Populated"), # populated component
12
-
13
-
14
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
components/iframe/frontend/Example.svelte DELETED
@@ -1,20 +0,0 @@
1
- <script lang="ts">
2
- export let value: string;
3
- export let type: "gallery" | "table";
4
- export let selected = false;
5
- </script>
6
-
7
- <div
8
- class:table={type === "table"}
9
- class:gallery={type === "gallery"}
10
- class:selected
11
- class="prose"
12
- >
13
- {@html value}
14
- </div>
15
-
16
- <style>
17
- .gallery {
18
- padding: var(--size-2);
19
- }
20
- </style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
components/iframe/frontend/Index.svelte DELETED
@@ -1,47 +0,0 @@
1
- <script lang="ts">
2
- import type { Gradio } from "@gradio/utils";
3
- import HTML from "./shared/HTML.svelte";
4
- import { StatusTracker } from "@gradio/statustracker";
5
- import type { LoadingStatus } from "@gradio/statustracker";
6
- import { Block } from "@gradio/atoms";
7
-
8
- export let label: string;
9
- export let elem_id = "";
10
- export let elem_classes: string[] = [];
11
- export let visible = true;
12
- export let value = "";
13
- export let loading_status: LoadingStatus;
14
- export let gradio: Gradio<{
15
- change: never;
16
- }>;
17
-
18
- $: label, gradio.dispatch("change");
19
- </script>
20
-
21
- <Block {visible} {elem_id} {elem_classes} container={false}>
22
- <StatusTracker
23
- autoscroll={gradio.autoscroll}
24
- i18n={gradio.i18n}
25
- {...loading_status}
26
- variant="center"
27
- />
28
- <div class:pending={loading_status?.status === "pending"}>
29
- <HTML
30
- min_height={loading_status && loading_status?.status !== "complete"}
31
- {value}
32
- {elem_classes}
33
- {visible}
34
- on:change={() => gradio.dispatch("change")}
35
- />
36
- </div>
37
- </Block>
38
-
39
- <style>
40
- div {
41
- transition: 150ms;
42
- }
43
-
44
- .pending {
45
- opacity: 0.2;
46
- }
47
- </style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
components/iframe/frontend/package-lock.json DELETED
@@ -1,917 +0,0 @@
1
- {
2
- "name": "gradio_iframe",
3
- "version": "0.1.3",
4
- "lockfileVersion": 3,
5
- "requires": true,
6
- "packages": {
7
- "": {
8
- "name": "gradio_iframe",
9
- "version": "0.1.3",
10
- "license": "ISC",
11
- "dependencies": {
12
- "@gradio/atoms": "0.3.0",
13
- "@gradio/statustracker": "0.4.0",
14
- "@gradio/utils": "0.2.0"
15
- }
16
- },
17
- "node_modules/@ampproject/remapping": {
18
- "version": "2.2.1",
19
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
20
- "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
21
- "peer": true,
22
- "dependencies": {
23
- "@jridgewell/gen-mapping": "^0.3.0",
24
- "@jridgewell/trace-mapping": "^0.3.9"
25
- },
26
- "engines": {
27
- "node": ">=6.0.0"
28
- }
29
- },
30
- "node_modules/@esbuild/android-arm": {
31
- "version": "0.19.9",
32
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.9.tgz",
33
- "integrity": "sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==",
34
- "cpu": [
35
- "arm"
36
- ],
37
- "optional": true,
38
- "os": [
39
- "android"
40
- ],
41
- "engines": {
42
- "node": ">=12"
43
- }
44
- },
45
- "node_modules/@esbuild/android-arm64": {
46
- "version": "0.19.9",
47
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz",
48
- "integrity": "sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==",
49
- "cpu": [
50
- "arm64"
51
- ],
52
- "optional": true,
53
- "os": [
54
- "android"
55
- ],
56
- "engines": {
57
- "node": ">=12"
58
- }
59
- },
60
- "node_modules/@esbuild/android-x64": {
61
- "version": "0.19.9",
62
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.9.tgz",
63
- "integrity": "sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==",
64
- "cpu": [
65
- "x64"
66
- ],
67
- "optional": true,
68
- "os": [
69
- "android"
70
- ],
71
- "engines": {
72
- "node": ">=12"
73
- }
74
- },
75
- "node_modules/@esbuild/darwin-arm64": {
76
- "version": "0.19.9",
77
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz",
78
- "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==",
79
- "cpu": [
80
- "arm64"
81
- ],
82
- "optional": true,
83
- "os": [
84
- "darwin"
85
- ],
86
- "engines": {
87
- "node": ">=12"
88
- }
89
- },
90
- "node_modules/@esbuild/darwin-x64": {
91
- "version": "0.19.9",
92
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz",
93
- "integrity": "sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==",
94
- "cpu": [
95
- "x64"
96
- ],
97
- "optional": true,
98
- "os": [
99
- "darwin"
100
- ],
101
- "engines": {
102
- "node": ">=12"
103
- }
104
- },
105
- "node_modules/@esbuild/freebsd-arm64": {
106
- "version": "0.19.9",
107
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz",
108
- "integrity": "sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==",
109
- "cpu": [
110
- "arm64"
111
- ],
112
- "optional": true,
113
- "os": [
114
- "freebsd"
115
- ],
116
- "engines": {
117
- "node": ">=12"
118
- }
119
- },
120
- "node_modules/@esbuild/freebsd-x64": {
121
- "version": "0.19.9",
122
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz",
123
- "integrity": "sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==",
124
- "cpu": [
125
- "x64"
126
- ],
127
- "optional": true,
128
- "os": [
129
- "freebsd"
130
- ],
131
- "engines": {
132
- "node": ">=12"
133
- }
134
- },
135
- "node_modules/@esbuild/linux-arm": {
136
- "version": "0.19.9",
137
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz",
138
- "integrity": "sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==",
139
- "cpu": [
140
- "arm"
141
- ],
142
- "optional": true,
143
- "os": [
144
- "linux"
145
- ],
146
- "engines": {
147
- "node": ">=12"
148
- }
149
- },
150
- "node_modules/@esbuild/linux-arm64": {
151
- "version": "0.19.9",
152
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz",
153
- "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==",
154
- "cpu": [
155
- "arm64"
156
- ],
157
- "optional": true,
158
- "os": [
159
- "linux"
160
- ],
161
- "engines": {
162
- "node": ">=12"
163
- }
164
- },
165
- "node_modules/@esbuild/linux-ia32": {
166
- "version": "0.19.9",
167
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz",
168
- "integrity": "sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==",
169
- "cpu": [
170
- "ia32"
171
- ],
172
- "optional": true,
173
- "os": [
174
- "linux"
175
- ],
176
- "engines": {
177
- "node": ">=12"
178
- }
179
- },
180
- "node_modules/@esbuild/linux-loong64": {
181
- "version": "0.19.9",
182
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz",
183
- "integrity": "sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==",
184
- "cpu": [
185
- "loong64"
186
- ],
187
- "optional": true,
188
- "os": [
189
- "linux"
190
- ],
191
- "engines": {
192
- "node": ">=12"
193
- }
194
- },
195
- "node_modules/@esbuild/linux-mips64el": {
196
- "version": "0.19.9",
197
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz",
198
- "integrity": "sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==",
199
- "cpu": [
200
- "mips64el"
201
- ],
202
- "optional": true,
203
- "os": [
204
- "linux"
205
- ],
206
- "engines": {
207
- "node": ">=12"
208
- }
209
- },
210
- "node_modules/@esbuild/linux-ppc64": {
211
- "version": "0.19.9",
212
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz",
213
- "integrity": "sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==",
214
- "cpu": [
215
- "ppc64"
216
- ],
217
- "optional": true,
218
- "os": [
219
- "linux"
220
- ],
221
- "engines": {
222
- "node": ">=12"
223
- }
224
- },
225
- "node_modules/@esbuild/linux-riscv64": {
226
- "version": "0.19.9",
227
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz",
228
- "integrity": "sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==",
229
- "cpu": [
230
- "riscv64"
231
- ],
232
- "optional": true,
233
- "os": [
234
- "linux"
235
- ],
236
- "engines": {
237
- "node": ">=12"
238
- }
239
- },
240
- "node_modules/@esbuild/linux-s390x": {
241
- "version": "0.19.9",
242
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz",
243
- "integrity": "sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==",
244
- "cpu": [
245
- "s390x"
246
- ],
247
- "optional": true,
248
- "os": [
249
- "linux"
250
- ],
251
- "engines": {
252
- "node": ">=12"
253
- }
254
- },
255
- "node_modules/@esbuild/linux-x64": {
256
- "version": "0.19.9",
257
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz",
258
- "integrity": "sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==",
259
- "cpu": [
260
- "x64"
261
- ],
262
- "optional": true,
263
- "os": [
264
- "linux"
265
- ],
266
- "engines": {
267
- "node": ">=12"
268
- }
269
- },
270
- "node_modules/@esbuild/netbsd-x64": {
271
- "version": "0.19.9",
272
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz",
273
- "integrity": "sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==",
274
- "cpu": [
275
- "x64"
276
- ],
277
- "optional": true,
278
- "os": [
279
- "netbsd"
280
- ],
281
- "engines": {
282
- "node": ">=12"
283
- }
284
- },
285
- "node_modules/@esbuild/openbsd-x64": {
286
- "version": "0.19.9",
287
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz",
288
- "integrity": "sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==",
289
- "cpu": [
290
- "x64"
291
- ],
292
- "optional": true,
293
- "os": [
294
- "openbsd"
295
- ],
296
- "engines": {
297
- "node": ">=12"
298
- }
299
- },
300
- "node_modules/@esbuild/sunos-x64": {
301
- "version": "0.19.9",
302
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz",
303
- "integrity": "sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==",
304
- "cpu": [
305
- "x64"
306
- ],
307
- "optional": true,
308
- "os": [
309
- "sunos"
310
- ],
311
- "engines": {
312
- "node": ">=12"
313
- }
314
- },
315
- "node_modules/@esbuild/win32-arm64": {
316
- "version": "0.19.9",
317
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz",
318
- "integrity": "sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==",
319
- "cpu": [
320
- "arm64"
321
- ],
322
- "optional": true,
323
- "os": [
324
- "win32"
325
- ],
326
- "engines": {
327
- "node": ">=12"
328
- }
329
- },
330
- "node_modules/@esbuild/win32-ia32": {
331
- "version": "0.19.9",
332
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz",
333
- "integrity": "sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==",
334
- "cpu": [
335
- "ia32"
336
- ],
337
- "optional": true,
338
- "os": [
339
- "win32"
340
- ],
341
- "engines": {
342
- "node": ">=12"
343
- }
344
- },
345
- "node_modules/@esbuild/win32-x64": {
346
- "version": "0.19.9",
347
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz",
348
- "integrity": "sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==",
349
- "cpu": [
350
- "x64"
351
- ],
352
- "optional": true,
353
- "os": [
354
- "win32"
355
- ],
356
- "engines": {
357
- "node": ">=12"
358
- }
359
- },
360
- "node_modules/@formatjs/ecma402-abstract": {
361
- "version": "1.11.4",
362
- "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
363
- "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
364
- "dependencies": {
365
- "@formatjs/intl-localematcher": "0.2.25",
366
- "tslib": "^2.1.0"
367
- }
368
- },
369
- "node_modules/@formatjs/fast-memoize": {
370
- "version": "1.2.1",
371
- "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz",
372
- "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==",
373
- "dependencies": {
374
- "tslib": "^2.1.0"
375
- }
376
- },
377
- "node_modules/@formatjs/icu-messageformat-parser": {
378
- "version": "2.1.0",
379
- "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz",
380
- "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==",
381
- "dependencies": {
382
- "@formatjs/ecma402-abstract": "1.11.4",
383
- "@formatjs/icu-skeleton-parser": "1.3.6",
384
- "tslib": "^2.1.0"
385
- }
386
- },
387
- "node_modules/@formatjs/icu-skeleton-parser": {
388
- "version": "1.3.6",
389
- "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz",
390
- "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==",
391
- "dependencies": {
392
- "@formatjs/ecma402-abstract": "1.11.4",
393
- "tslib": "^2.1.0"
394
- }
395
- },
396
- "node_modules/@formatjs/intl-localematcher": {
397
- "version": "0.2.25",
398
- "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz",
399
- "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==",
400
- "dependencies": {
401
- "tslib": "^2.1.0"
402
- }
403
- },
404
- "node_modules/@gradio/atoms": {
405
- "version": "0.3.0",
406
- "resolved": "https://registry.npmjs.org/@gradio/atoms/-/atoms-0.3.0.tgz",
407
- "integrity": "sha512-7WQktAb+d8wEjTIYGzyQ8OdWsFSr0NA8adp8G/jAKoMZILJEoAAZSTnahCTSSQcbYIomVdfYA0ZmM342RCd8gg==",
408
- "dependencies": {
409
- "@gradio/icons": "^0.3.0",
410
- "@gradio/utils": "^0.2.0"
411
- }
412
- },
413
- "node_modules/@gradio/column": {
414
- "version": "0.1.0",
415
- "resolved": "https://registry.npmjs.org/@gradio/column/-/column-0.1.0.tgz",
416
- "integrity": "sha512-P24nqqVnMXBaDA1f/zSN5HZRho4PxP8Dq+7VltPHlmxIEiZYik2AJ4J0LeuIha34FDO0guu/16evdrpvGIUAfw=="
417
- },
418
- "node_modules/@gradio/icons": {
419
- "version": "0.3.1",
420
- "resolved": "https://registry.npmjs.org/@gradio/icons/-/icons-0.3.1.tgz",
421
- "integrity": "sha512-ZwgXODKa7irD+spE0RCae8fyixgwKOtds6wHL300n9pIRYzL9QkvS1cQJbz0C6NupFCYRSGTQrV5hoLo7yQCew=="
422
- },
423
- "node_modules/@gradio/statustracker": {
424
- "version": "0.4.0",
425
- "resolved": "https://registry.npmjs.org/@gradio/statustracker/-/statustracker-0.4.0.tgz",
426
- "integrity": "sha512-Kgk4R2edFX4IK2UBit4UwmRfSrmvkYjKbiMfupj3qxHFwiDHT4YH4rAOqBlvdEWbCYMmLN6EyqqFaYb2+0GwXA==",
427
- "dependencies": {
428
- "@gradio/atoms": "^0.3.0",
429
- "@gradio/column": "^0.1.0",
430
- "@gradio/icons": "^0.3.0",
431
- "@gradio/utils": "^0.2.0"
432
- }
433
- },
434
- "node_modules/@gradio/theme": {
435
- "version": "0.2.0",
436
- "resolved": "https://registry.npmjs.org/@gradio/theme/-/theme-0.2.0.tgz",
437
- "integrity": "sha512-33c68Nk7oRXLn08OxPfjcPm7S4tXGOUV1I1bVgzdM2YV5o1QBOS1GEnXPZPu/CEYPePLMB6bsDwffrLEyLGWVQ=="
438
- },
439
- "node_modules/@gradio/utils": {
440
- "version": "0.2.0",
441
- "resolved": "https://registry.npmjs.org/@gradio/utils/-/utils-0.2.0.tgz",
442
- "integrity": "sha512-YkwzXufi6IxQrlMW+1sFo8Yn6F9NLL69ZoBsbo7QEhms0v5L7pmOTw+dfd7M3dwbRP2lgjrb52i1kAIN3n6aqQ==",
443
- "dependencies": {
444
- "@gradio/theme": "^0.2.0",
445
- "svelte-i18n": "^3.6.0"
446
- }
447
- },
448
- "node_modules/@jridgewell/gen-mapping": {
449
- "version": "0.3.3",
450
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
451
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
452
- "peer": true,
453
- "dependencies": {
454
- "@jridgewell/set-array": "^1.0.1",
455
- "@jridgewell/sourcemap-codec": "^1.4.10",
456
- "@jridgewell/trace-mapping": "^0.3.9"
457
- },
458
- "engines": {
459
- "node": ">=6.0.0"
460
- }
461
- },
462
- "node_modules/@jridgewell/resolve-uri": {
463
- "version": "3.1.1",
464
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
465
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
466
- "peer": true,
467
- "engines": {
468
- "node": ">=6.0.0"
469
- }
470
- },
471
- "node_modules/@jridgewell/set-array": {
472
- "version": "1.1.2",
473
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
474
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
475
- "peer": true,
476
- "engines": {
477
- "node": ">=6.0.0"
478
- }
479
- },
480
- "node_modules/@jridgewell/sourcemap-codec": {
481
- "version": "1.4.15",
482
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
483
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
484
- "peer": true
485
- },
486
- "node_modules/@jridgewell/trace-mapping": {
487
- "version": "0.3.20",
488
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
489
- "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
490
- "peer": true,
491
- "dependencies": {
492
- "@jridgewell/resolve-uri": "^3.1.0",
493
- "@jridgewell/sourcemap-codec": "^1.4.14"
494
- }
495
- },
496
- "node_modules/@types/estree": {
497
- "version": "1.0.5",
498
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
499
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
500
- "peer": true
501
- },
502
- "node_modules/acorn": {
503
- "version": "8.11.2",
504
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
505
- "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
506
- "peer": true,
507
- "bin": {
508
- "acorn": "bin/acorn"
509
- },
510
- "engines": {
511
- "node": ">=0.4.0"
512
- }
513
- },
514
- "node_modules/aria-query": {
515
- "version": "5.3.0",
516
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
517
- "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
518
- "peer": true,
519
- "dependencies": {
520
- "dequal": "^2.0.3"
521
- }
522
- },
523
- "node_modules/axobject-query": {
524
- "version": "3.2.1",
525
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
526
- "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
527
- "peer": true,
528
- "dependencies": {
529
- "dequal": "^2.0.3"
530
- }
531
- },
532
- "node_modules/cli-color": {
533
- "version": "2.0.3",
534
- "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz",
535
- "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==",
536
- "dependencies": {
537
- "d": "^1.0.1",
538
- "es5-ext": "^0.10.61",
539
- "es6-iterator": "^2.0.3",
540
- "memoizee": "^0.4.15",
541
- "timers-ext": "^0.1.7"
542
- },
543
- "engines": {
544
- "node": ">=0.10"
545
- }
546
- },
547
- "node_modules/code-red": {
548
- "version": "1.0.4",
549
- "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
550
- "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==",
551
- "peer": true,
552
- "dependencies": {
553
- "@jridgewell/sourcemap-codec": "^1.4.15",
554
- "@types/estree": "^1.0.1",
555
- "acorn": "^8.10.0",
556
- "estree-walker": "^3.0.3",
557
- "periscopic": "^3.1.0"
558
- }
559
- },
560
- "node_modules/css-tree": {
561
- "version": "2.3.1",
562
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
563
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
564
- "peer": true,
565
- "dependencies": {
566
- "mdn-data": "2.0.30",
567
- "source-map-js": "^1.0.1"
568
- },
569
- "engines": {
570
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
571
- }
572
- },
573
- "node_modules/d": {
574
- "version": "1.0.1",
575
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
576
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
577
- "dependencies": {
578
- "es5-ext": "^0.10.50",
579
- "type": "^1.0.1"
580
- }
581
- },
582
- "node_modules/deepmerge": {
583
- "version": "4.3.1",
584
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
585
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
586
- "engines": {
587
- "node": ">=0.10.0"
588
- }
589
- },
590
- "node_modules/dequal": {
591
- "version": "2.0.3",
592
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
593
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
594
- "peer": true,
595
- "engines": {
596
- "node": ">=6"
597
- }
598
- },
599
- "node_modules/es5-ext": {
600
- "version": "0.10.62",
601
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
602
- "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
603
- "hasInstallScript": true,
604
- "dependencies": {
605
- "es6-iterator": "^2.0.3",
606
- "es6-symbol": "^3.1.3",
607
- "next-tick": "^1.1.0"
608
- },
609
- "engines": {
610
- "node": ">=0.10"
611
- }
612
- },
613
- "node_modules/es6-iterator": {
614
- "version": "2.0.3",
615
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
616
- "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
617
- "dependencies": {
618
- "d": "1",
619
- "es5-ext": "^0.10.35",
620
- "es6-symbol": "^3.1.1"
621
- }
622
- },
623
- "node_modules/es6-symbol": {
624
- "version": "3.1.3",
625
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
626
- "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
627
- "dependencies": {
628
- "d": "^1.0.1",
629
- "ext": "^1.1.2"
630
- }
631
- },
632
- "node_modules/es6-weak-map": {
633
- "version": "2.0.3",
634
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
635
- "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
636
- "dependencies": {
637
- "d": "1",
638
- "es5-ext": "^0.10.46",
639
- "es6-iterator": "^2.0.3",
640
- "es6-symbol": "^3.1.1"
641
- }
642
- },
643
- "node_modules/esbuild": {
644
- "version": "0.19.9",
645
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz",
646
- "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==",
647
- "hasInstallScript": true,
648
- "bin": {
649
- "esbuild": "bin/esbuild"
650
- },
651
- "engines": {
652
- "node": ">=12"
653
- },
654
- "optionalDependencies": {
655
- "@esbuild/android-arm": "0.19.9",
656
- "@esbuild/android-arm64": "0.19.9",
657
- "@esbuild/android-x64": "0.19.9",
658
- "@esbuild/darwin-arm64": "0.19.9",
659
- "@esbuild/darwin-x64": "0.19.9",
660
- "@esbuild/freebsd-arm64": "0.19.9",
661
- "@esbuild/freebsd-x64": "0.19.9",
662
- "@esbuild/linux-arm": "0.19.9",
663
- "@esbuild/linux-arm64": "0.19.9",
664
- "@esbuild/linux-ia32": "0.19.9",
665
- "@esbuild/linux-loong64": "0.19.9",
666
- "@esbuild/linux-mips64el": "0.19.9",
667
- "@esbuild/linux-ppc64": "0.19.9",
668
- "@esbuild/linux-riscv64": "0.19.9",
669
- "@esbuild/linux-s390x": "0.19.9",
670
- "@esbuild/linux-x64": "0.19.9",
671
- "@esbuild/netbsd-x64": "0.19.9",
672
- "@esbuild/openbsd-x64": "0.19.9",
673
- "@esbuild/sunos-x64": "0.19.9",
674
- "@esbuild/win32-arm64": "0.19.9",
675
- "@esbuild/win32-ia32": "0.19.9",
676
- "@esbuild/win32-x64": "0.19.9"
677
- }
678
- },
679
- "node_modules/estree-walker": {
680
- "version": "3.0.3",
681
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
682
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
683
- "peer": true,
684
- "dependencies": {
685
- "@types/estree": "^1.0.0"
686
- }
687
- },
688
- "node_modules/event-emitter": {
689
- "version": "0.3.5",
690
- "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
691
- "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
692
- "dependencies": {
693
- "d": "1",
694
- "es5-ext": "~0.10.14"
695
- }
696
- },
697
- "node_modules/ext": {
698
- "version": "1.7.0",
699
- "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
700
- "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
701
- "dependencies": {
702
- "type": "^2.7.2"
703
- }
704
- },
705
- "node_modules/ext/node_modules/type": {
706
- "version": "2.7.2",
707
- "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
708
- "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
709
- },
710
- "node_modules/globalyzer": {
711
- "version": "0.1.0",
712
- "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
713
- "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="
714
- },
715
- "node_modules/globrex": {
716
- "version": "0.1.2",
717
- "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
718
- "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
719
- },
720
- "node_modules/intl-messageformat": {
721
- "version": "9.13.0",
722
- "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz",
723
- "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==",
724
- "dependencies": {
725
- "@formatjs/ecma402-abstract": "1.11.4",
726
- "@formatjs/fast-memoize": "1.2.1",
727
- "@formatjs/icu-messageformat-parser": "2.1.0",
728
- "tslib": "^2.1.0"
729
- }
730
- },
731
- "node_modules/is-promise": {
732
- "version": "2.2.2",
733
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
734
- "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
735
- },
736
- "node_modules/is-reference": {
737
- "version": "3.0.2",
738
- "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
739
- "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
740
- "peer": true,
741
- "dependencies": {
742
- "@types/estree": "*"
743
- }
744
- },
745
- "node_modules/locate-character": {
746
- "version": "3.0.0",
747
- "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
748
- "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
749
- "peer": true
750
- },
751
- "node_modules/lru-queue": {
752
- "version": "0.1.0",
753
- "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
754
- "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==",
755
- "dependencies": {
756
- "es5-ext": "~0.10.2"
757
- }
758
- },
759
- "node_modules/magic-string": {
760
- "version": "0.30.5",
761
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
762
- "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
763
- "peer": true,
764
- "dependencies": {
765
- "@jridgewell/sourcemap-codec": "^1.4.15"
766
- },
767
- "engines": {
768
- "node": ">=12"
769
- }
770
- },
771
- "node_modules/mdn-data": {
772
- "version": "2.0.30",
773
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
774
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
775
- "peer": true
776
- },
777
- "node_modules/memoizee": {
778
- "version": "0.4.15",
779
- "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz",
780
- "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==",
781
- "dependencies": {
782
- "d": "^1.0.1",
783
- "es5-ext": "^0.10.53",
784
- "es6-weak-map": "^2.0.3",
785
- "event-emitter": "^0.3.5",
786
- "is-promise": "^2.2.2",
787
- "lru-queue": "^0.1.0",
788
- "next-tick": "^1.1.0",
789
- "timers-ext": "^0.1.7"
790
- }
791
- },
792
- "node_modules/mri": {
793
- "version": "1.2.0",
794
- "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
795
- "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
796
- "engines": {
797
- "node": ">=4"
798
- }
799
- },
800
- "node_modules/next-tick": {
801
- "version": "1.1.0",
802
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
803
- "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
804
- },
805
- "node_modules/periscopic": {
806
- "version": "3.1.0",
807
- "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
808
- "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
809
- "peer": true,
810
- "dependencies": {
811
- "@types/estree": "^1.0.0",
812
- "estree-walker": "^3.0.0",
813
- "is-reference": "^3.0.0"
814
- }
815
- },
816
- "node_modules/sade": {
817
- "version": "1.8.1",
818
- "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
819
- "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
820
- "dependencies": {
821
- "mri": "^1.1.0"
822
- },
823
- "engines": {
824
- "node": ">=6"
825
- }
826
- },
827
- "node_modules/source-map-js": {
828
- "version": "1.0.2",
829
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
830
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
831
- "peer": true,
832
- "engines": {
833
- "node": ">=0.10.0"
834
- }
835
- },
836
- "node_modules/svelte": {
837
- "version": "4.2.8",
838
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.8.tgz",
839
- "integrity": "sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==",
840
- "peer": true,
841
- "dependencies": {
842
- "@ampproject/remapping": "^2.2.1",
843
- "@jridgewell/sourcemap-codec": "^1.4.15",
844
- "@jridgewell/trace-mapping": "^0.3.18",
845
- "acorn": "^8.9.0",
846
- "aria-query": "^5.3.0",
847
- "axobject-query": "^3.2.1",
848
- "code-red": "^1.0.3",
849
- "css-tree": "^2.3.1",
850
- "estree-walker": "^3.0.3",
851
- "is-reference": "^3.0.1",
852
- "locate-character": "^3.0.0",
853
- "magic-string": "^0.30.4",
854
- "periscopic": "^3.1.0"
855
- },
856
- "engines": {
857
- "node": ">=16"
858
- }
859
- },
860
- "node_modules/svelte-i18n": {
861
- "version": "3.7.4",
862
- "resolved": "https://registry.npmjs.org/svelte-i18n/-/svelte-i18n-3.7.4.tgz",
863
- "integrity": "sha512-yGRCNo+eBT4cPuU7IVsYTYjxB7I2V8qgUZPlHnNctJj5IgbJgV78flsRzpjZ/8iUYZrS49oCt7uxlU3AZv/N5Q==",
864
- "dependencies": {
865
- "cli-color": "^2.0.3",
866
- "deepmerge": "^4.2.2",
867
- "esbuild": "^0.19.2",
868
- "estree-walker": "^2",
869
- "intl-messageformat": "^9.13.0",
870
- "sade": "^1.8.1",
871
- "tiny-glob": "^0.2.9"
872
- },
873
- "bin": {
874
- "svelte-i18n": "dist/cli.js"
875
- },
876
- "engines": {
877
- "node": ">= 16"
878
- },
879
- "peerDependencies": {
880
- "svelte": "^3 || ^4"
881
- }
882
- },
883
- "node_modules/svelte-i18n/node_modules/estree-walker": {
884
- "version": "2.0.2",
885
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
886
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
887
- },
888
- "node_modules/timers-ext": {
889
- "version": "0.1.7",
890
- "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
891
- "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
892
- "dependencies": {
893
- "es5-ext": "~0.10.46",
894
- "next-tick": "1"
895
- }
896
- },
897
- "node_modules/tiny-glob": {
898
- "version": "0.2.9",
899
- "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
900
- "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
901
- "dependencies": {
902
- "globalyzer": "0.1.0",
903
- "globrex": "^0.1.2"
904
- }
905
- },
906
- "node_modules/tslib": {
907
- "version": "2.6.2",
908
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
909
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
910
- },
911
- "node_modules/type": {
912
- "version": "1.2.0",
913
- "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
914
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
915
- }
916
- }
917
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
components/iframe/frontend/package.json DELETED
@@ -1,20 +0,0 @@
1
- {
2
- "name": "gradio_iframe",
3
- "version": "0.1.3",
4
- "description": "Gradio UI packages",
5
- "type": "module",
6
- "author": "",
7
- "license": "ISC",
8
- "private": false,
9
- "main_changeset": true,
10
- "dependencies": {
11
- "@gradio/atoms": "0.3.0",
12
- "@gradio/statustracker": "0.4.0",
13
- "@gradio/utils": "0.2.0"
14
- },
15
- "exports": {
16
- ".": "./Index.svelte",
17
- "./example": "./Example.svelte",
18
- "./package.json": "./package.json"
19
- }
20
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
components/iframe/frontend/shared/HTML.svelte DELETED
@@ -1,28 +0,0 @@
1
- <script lang="ts">
2
- import { createEventDispatcher } from "svelte";
3
- export let elem_classes: string[] = [];
4
- export let value: string;
5
- export let visible = true;
6
- export let min_height = false;
7
-
8
- const dispatch = createEventDispatcher<{ change: undefined }>();
9
-
10
- $: value, dispatch("change");
11
- </script>
12
-
13
- <div
14
- class="prose {elem_classes.join(' ')}"
15
- class:min={min_height}
16
- class:hide={!visible}
17
- >
18
- {@html value}
19
- </div>
20
-
21
- <style>
22
- .min {
23
- min-height: var(--size-24);
24
- }
25
- .hide {
26
- display: none;
27
- }
28
- </style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
components/iframe/pyproject.toml DELETED
@@ -1,42 +0,0 @@
1
- [build-system]
2
- requires = [
3
- "hatchling",
4
- "hatch-requirements-txt",
5
- "hatch-fancy-pypi-readme>=22.5.0",
6
- ]
7
- build-backend = "hatchling.build"
8
-
9
- [project]
10
- name = "gradio_iframe"
11
- version = "0.0.1"
12
- description = "A custom component allowing an iFrame component inside Gradio, based on the existing HTML component implementation."
13
- readme = "README.md"
14
- license = "MIT"
15
- requires-python = ">=3.8"
16
- authors = [{ name = "YOUR NAME", email = "YOUREMAIL@domain.com" }]
17
- keywords = ["gradio-custom-component", "gradio-template-HTML", "iFrame", "HTML"]
18
- # Add dependencies here
19
- dependencies = ["gradio>=4.0,<5.0"]
20
- classifiers = [
21
- 'Development Status :: 3 - Alpha',
22
- 'License :: OSI Approved :: Apache Software License',
23
- 'Operating System :: OS Independent',
24
- 'Programming Language :: Python :: 3',
25
- 'Programming Language :: Python :: 3 :: Only',
26
- 'Programming Language :: Python :: 3.8',
27
- 'Programming Language :: Python :: 3.9',
28
- 'Programming Language :: Python :: 3.10',
29
- 'Programming Language :: Python :: 3.11',
30
- 'Topic :: Scientific/Engineering',
31
- 'Topic :: Scientific/Engineering :: Artificial Intelligence',
32
- 'Topic :: Scientific/Engineering :: Visualization',
33
- ]
34
-
35
- [project.optional-dependencies]
36
- dev = ["build", "twine"]
37
-
38
- [tool.hatch.build]
39
- artifacts = ["/backend/gradio_iframe/templates", "*.pyi"]
40
-
41
- [tool.hatch.build.targets.wheel]
42
- packages = ["/backend/gradio_iframe"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
entrypoint.sh CHANGED
@@ -4,4 +4,4 @@
4
  pip install --no-cache-dir --upgrade -r requirements.txt
5
 
6
  # running the fastapi app
7
- uvicorn main:app --host 0.0.0.0 --port 8080
 
4
  pip install --no-cache-dir --upgrade -r requirements.txt
5
 
6
  # running the fastapi app
7
+ uvicorn main:app --host 0.0.0.0 --port 8080
explanation/interpret.py CHANGED
@@ -1,8 +1,10 @@
 
1
  import seaborn as sns
2
  import matplotlib.pyplot as plt
3
 
 
4
  def interpret_plot(shap_values):
5
- values=shap_values[0]
6
  input_text = shap_values.data[0]
7
  output_text = shap_values.output_names
8
 
@@ -11,13 +13,28 @@ def interpret_plot(shap_values):
11
  plt.figure(figsize=(20, 10))
12
 
13
  # Create the heatmap with horizontal shape
14
- sns.heatmap(shap_values_large, cmap=color_palette, center=0, annot=False, cbar_kws={'fraction': 0.02})
 
 
 
 
 
 
15
 
16
  # Adjust the labels for the larger set
17
- plt.xticks(ticks=np.arange(len(output_text_large)) + 0.5, labels=output_text_large, rotation=90)
18
- plt.yticks(ticks=np.arange(len(input_text_large)) + 0.5, labels=input_text_large, rotation=0)
 
 
 
 
 
 
 
 
19
 
20
  plt.xlabel("Output Tokens")
21
  plt.ylabel("Input Tokens")
22
 
23
- return plt
 
 
1
+ """
2
  import seaborn as sns
3
  import matplotlib.pyplot as plt
4
 
5
+
6
  def interpret_plot(shap_values):
7
+ values = shap_values[0]
8
  input_text = shap_values.data[0]
9
  output_text = shap_values.output_names
10
 
 
13
  plt.figure(figsize=(20, 10))
14
 
15
  # Create the heatmap with horizontal shape
16
+ sns.heatmap(
17
+ shap_values_large,
18
+ cmap=color_palette,
19
+ center=0,
20
+ annot=False,
21
+ cbar_kws={"fraction": 0.02},
22
+ )
23
 
24
  # Adjust the labels for the larger set
25
+ plt.xticks(
26
+ ticks=np.arange(len(output_text_large)) + 0.5,
27
+ labels=output_text_large,
28
+ rotation=90,
29
+ )
30
+ plt.yticks(
31
+ ticks=np.arange(len(input_text_large)) + 0.5,
32
+ labels=input_text_large,
33
+ rotation=0,
34
+ )
35
 
36
  plt.xlabel("Output Tokens")
37
  plt.ylabel("Input Tokens")
38
 
39
+ return plt
40
+ """
main.py CHANGED
@@ -1,17 +1,8 @@
1
- # main application file initializing the gradio based ui and calling other modules
2
-
3
- import subprocess
4
- import sys
5
-
6
- def install(package):
7
- subprocess.check_call([sys.executable, "-m", "pip", "install", "./components/testinghtml/dist/gradio_testinghtml-0.0.1-py3-none-any.whl"])
8
-
9
- from gradio_testinghtml import testingHTML
10
-
11
- # external package imports
12
- import gradio as gr
13
- import markdown
14
  from fastapi import FastAPI
 
 
15
 
16
  # internal imports
17
  from backend.controller import interference
@@ -21,30 +12,36 @@ app = FastAPI()
21
 
22
  # different functions to provide frontend abilities
23
 
 
24
  # function to load markdown files
25
  def load_md(path):
26
- # credit: official python-markdown documentation (https://python-markdown.github.io/reference/)
27
- with open(path, "r") as file:
 
28
  text = file.read()
29
  return markdown.markdown(text)
30
 
 
31
  # function to display the system prompt info
32
  def system_prompt_info(sys_prompt_txt):
33
  gr.Info(f"The system prompt was set to:\n {sys_prompt_txt}")
34
 
 
35
  # function to display the xai info
36
  def xai_info(xai_radio):
37
  if xai_radio != "None":
38
  gr.Info(f"The XAI was set to:\n {xai_radio}")
39
  else:
40
- gr.Info(f"No XAI method was selected.")
 
41
 
42
  # function to display the model info
43
  def model_info(model_radio):
44
  gr.Info(f"The model was set to:\n {model_radio}")
45
 
46
 
47
- # ui interface based on Gradio Blocks (see documentation: https://www.gradio.app/docs/interface)
 
48
  with gr.Blocks() as ui:
49
  # header row with markdown based text
50
  with gr.Row():
@@ -52,48 +49,90 @@ with gr.Blocks() as ui:
52
  """
53
  # Thesis Demo - AI Chat Application with XAI
54
  ### Select between tabs below for the different views.
55
- """)
 
56
  # ChatBot tab used to chat with the AI chatbot
57
  with gr.Tab("AI ChatBot"):
58
  with gr.Row():
59
  gr.Markdown(
60
  """
61
  ### ChatBot Demo
62
- Chat with the AI ChatBot using the textbox below. Manipulate the settings in the row above, including the selection of the model, the system prompt and the XAI method.
63
- """)
64
- # row with textbox to enter the system prompt, which is handed over to the model at every turn
 
 
 
 
 
65
  with gr.Row(equal_height=True):
66
  with gr.Column(scale=3):
67
- system_prompt = gr.Textbox(label="System Prompt",info= "Set the models system prompt, dictating how it answers.", placeholder="You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe.")
 
 
 
 
 
 
 
68
  with gr.Column(scale=1):
69
- model = gr.Radio(["Mistral", "Llama 2"], label="Model Selection", info="Select Model to use for chat.", value="Mistral", interactive=True, show_label=True)
 
 
 
 
 
 
 
70
  with gr.Column(scale=1):
71
- xai = gr.Radio(["None", "SHAP", "Visualizer"], label="XAI Settings", info="XAI Functionalities to use.", value="None", interactive=True, show_label=True)
 
 
 
 
 
 
 
72
 
73
  # calling info functions on inputs for different settings
74
  system_prompt.submit(system_prompt_info, [system_prompt])
75
  model.input(model_info, [model])
76
  xai.input(xai_info, [xai])
77
 
78
- # row with chatbot ui displaying "conversation" with the model (see documentation: https://www.gradio.app/docs/chatbot)
 
79
  with gr.Row():
80
- chatbot = gr.Chatbot(layout="panel", show_copy_button=True,avatar_images=("./public/human.jpg","./public/bot.jpg"))
 
 
 
 
81
  # row with input textbox
82
  with gr.Row():
83
- user_prompt = gr.Textbox(label="Input Message")
84
  # row with columns for buttons to submit and clear content
85
  with gr.Row():
86
  with gr.Column(scale=1):
87
- # default clear button which clearn the given components (see documentation: https://www.gradio.app/docs/clearbutton)
 
88
  clear_btn = gr.ClearButton([user_prompt, chatbot])
89
  with gr.Column(scale=1):
90
  submit_btn = gr.Button("Submit", variant="primary")
91
-
92
- # two functions performing the same action (triggered the model response), when the button is used or the textbox submit function is used (clicking enter).
93
- # hands over the information needed for the chat (prompt, history, and system prompt) and the information needed to call the right model and xai function (model, xai)
94
- # returns the prompt and history to be displayed in the chatbot ui
95
- submit_btn.click(interference, [user_prompt, chatbot, system_prompt, model, xai], [user_prompt, chatbot])
96
- user_prompt.submit(interference, [user_prompt, chatbot, system_prompt, model, xai], [user_prompt, chatbot])
 
 
 
 
 
 
 
 
 
97
 
98
  # explanations tab used to provide explanations for a specific conversation
99
  with gr.Tab("Explanations"):
@@ -101,16 +140,19 @@ with gr.Blocks() as ui:
101
  gr.Markdown(
102
  """
103
  ### Get Explanations for Conversations
104
- Using your selected XAI method, you can get explanations for the conversation you had with the AI ChatBot. The explanations are based on the last message you sent to the AI ChatBot.
105
- """)
 
 
 
106
  with gr.Row():
107
  gr.HTML(load_md("public/explanations.md"))
108
  with gr.Row():
109
  with gr.Accordion("Full Size Plot of All SHAP Values", open=False):
110
  gr.Plot(label="SHAP Values Plot")
111
 
112
-
113
- # final row to show legal information - credits, data protection and link to the LICENSE on GitHub
114
  with gr.Row():
115
  with gr.Accordion("Credits, Data Protection and License", open=False):
116
  gr.Markdown(value=load_md("public/credits_dataprotection_license.md"))
@@ -121,4 +163,5 @@ app = gr.mount_gradio_app(app, ui, path="/")
121
  # launch function using uvicorn to launch the fastAPI application
122
  if __name__ == "__main__":
123
  from uvicorn import run
124
- run("main:app", port=8080, reload=True)
 
 
1
+ # main application file initializing the gradio based ui and calling other
2
+ # external imports
 
 
 
 
 
 
 
 
 
 
 
3
  from fastapi import FastAPI
4
+ import markdown
5
+ import gradio as gr
6
 
7
  # internal imports
8
  from backend.controller import interference
 
12
 
13
  # different functions to provide frontend abilities
14
 
15
+
16
  # function to load markdown files
17
  def load_md(path):
18
+ # credit: official python-markdown documentation
19
+ # (https://python-markdown.github.io/reference/)
20
+ with open(path, "r", encoding="utf-8") as file:
21
  text = file.read()
22
  return markdown.markdown(text)
23
 
24
+
25
  # function to display the system prompt info
26
  def system_prompt_info(sys_prompt_txt):
27
  gr.Info(f"The system prompt was set to:\n {sys_prompt_txt}")
28
 
29
+
30
  # function to display the xai info
31
  def xai_info(xai_radio):
32
  if xai_radio != "None":
33
  gr.Info(f"The XAI was set to:\n {xai_radio}")
34
  else:
35
+ gr.Info("No XAI method was selected.")
36
+
37
 
38
  # function to display the model info
39
  def model_info(model_radio):
40
  gr.Info(f"The model was set to:\n {model_radio}")
41
 
42
 
43
+ # ui interface based on Gradio Blocks (see documentation:
44
+ # https://www.gradio.app/docs/interface)
45
  with gr.Blocks() as ui:
46
  # header row with markdown based text
47
  with gr.Row():
 
49
  """
50
  # Thesis Demo - AI Chat Application with XAI
51
  ### Select between tabs below for the different views.
52
+ """
53
+ )
54
  # ChatBot tab used to chat with the AI chatbot
55
  with gr.Tab("AI ChatBot"):
56
  with gr.Row():
57
  gr.Markdown(
58
  """
59
  ### ChatBot Demo
60
+ Chat with the AI ChatBot using the textbox below.
61
+ Manipulate the settings in the row above,
62
+ including the selection of the model,
63
+ the system prompt and the XAI method.
64
+ """
65
+ )
66
+ # row with textbox to enter the system prompt, which is handed over to
67
+ # the model at every turn
68
  with gr.Row(equal_height=True):
69
  with gr.Column(scale=3):
70
+ system_prompt = gr.Textbox(
71
+ label="System Prompt",
72
+ info="Set the models system prompt, dictating how it answers.",
73
+ placeholder=(
74
+ "You are a helpful, respectful and honest assistant. Always"
75
+ " answer as helpfully as possible, while being safe."
76
+ ),
77
+ )
78
  with gr.Column(scale=1):
79
+ model = gr.Radio(
80
+ ["Mistral", "Llama 2"],
81
+ label="Model Selection",
82
+ info="Select Model to use for chat.",
83
+ value="Mistral",
84
+ interactive=True,
85
+ show_label=True,
86
+ )
87
  with gr.Column(scale=1):
88
+ xai = gr.Radio(
89
+ ["None", "SHAP", "Visualizer"],
90
+ label="XAI Settings",
91
+ info="XAI Functionalities to use.",
92
+ value="None",
93
+ interactive=True,
94
+ show_label=True,
95
+ )
96
 
97
  # calling info functions on inputs for different settings
98
  system_prompt.submit(system_prompt_info, [system_prompt])
99
  model.input(model_info, [model])
100
  xai.input(xai_info, [xai])
101
 
102
+ # row with chatbot ui displaying "conversation" with the model (see
103
+ # documentation: https://www.gradio.app/docs/chatbot)
104
  with gr.Row():
105
+ chatbot = gr.Chatbot(
106
+ layout="panel",
107
+ show_copy_button=True,
108
+ avatar_images=("./public/human.jpg", "./public/bot.jpg"),
109
+ )
110
  # row with input textbox
111
  with gr.Row():
112
+ user_prompt = gr.Textbox(label="Input Message")
113
  # row with columns for buttons to submit and clear content
114
  with gr.Row():
115
  with gr.Column(scale=1):
116
+ # default clear button which clearn the given components (see
117
+ # documentation: https://www.gradio.app/docs/clearbutton)
118
  clear_btn = gr.ClearButton([user_prompt, chatbot])
119
  with gr.Column(scale=1):
120
  submit_btn = gr.Button("Submit", variant="primary")
121
+ # function to trigger the model
122
+ # when button or the textbox submit function is used.
123
+ # hands over the information needed for the chat
124
+ # and information needed to call model and xai function
125
+ # returns prompt, history and xai
126
+ submit_btn.click(
127
+ interference,
128
+ [user_prompt, chatbot, system_prompt, model, xai],
129
+ [user_prompt, chatbot],
130
+ )
131
+ user_prompt.submit(
132
+ interference,
133
+ [user_prompt, chatbot, system_prompt, model, xai],
134
+ [user_prompt, chatbot],
135
+ )
136
 
137
  # explanations tab used to provide explanations for a specific conversation
138
  with gr.Tab("Explanations"):
 
140
  gr.Markdown(
141
  """
142
  ### Get Explanations for Conversations
143
+ Using your selected XAI method, you can get explanations for
144
+ the conversation you had with the AI ChatBot. The explanations are
145
+ based on the last message you sent to the AI ChatBot.
146
+ """
147
+ )
148
  with gr.Row():
149
  gr.HTML(load_md("public/explanations.md"))
150
  with gr.Row():
151
  with gr.Accordion("Full Size Plot of All SHAP Values", open=False):
152
  gr.Plot(label="SHAP Values Plot")
153
 
154
+ # final row to show legal information - credits, data protection and link
155
+ # to the LICENSE on GitHub
156
  with gr.Row():
157
  with gr.Accordion("Credits, Data Protection and License", open=False):
158
  gr.Markdown(value=load_md("public/credits_dataprotection_license.md"))
 
163
  # launch function using uvicorn to launch the fastAPI application
164
  if __name__ == "__main__":
165
  from uvicorn import run
166
+
167
+ run("main:app", port=8080, reload=True)
model/llama2.py CHANGED
@@ -1,4 +1,4 @@
1
- model_temperature = 0.7
2
- model_max_new_tokens = 100
3
- model_top_p = 0.95
4
- model_repetition_penalty = 1.1
 
1
+ TEMPERATURE = 0.7
2
+ MAX_NEW_TOKENS = 100
3
+ TOP_P = 0.95
4
+ REPETITION_PENALTY = 1.1
model/mistral.py CHANGED
@@ -1,35 +1,39 @@
1
- from huggingface_hub import InferenceClient
2
  import os
 
 
3
 
4
  # huggingface token used to load closed off models
5
  token = os.environ.get("HGFTOKEN")
6
 
7
  # interference client created from mistral 7b instruction fine tuned model
8
- # credit: copied 1:1 from Hugging Face, Inc/ Omar Sanseviero (see https://huggingface.co/spaces/osanseviero/mistral-super-fast/)
9
- interference = InferenceClient(
10
- "mistralai/Mistral-7B-Instruct-v0.1"
11
- )
12
 
13
- temperature = 0.7
14
- max_new_tokens = 100
15
- top_p = 0.95
16
- repetition_penalty = 1.1
17
 
18
- # chat function - basically the main function calling other functions and returning a response to showcase in chatbot ui
19
- def chat (prompt,history,system_prompt):
20
 
 
 
 
21
  # creating formatted prompt and calling for an answer from the model
22
  formatted_prompt = format_prompt(prompt, history)
23
- answer=respond(formatted_prompt,system_prompt)
24
 
25
  # updating the chat history with the new answer
26
  history.append((prompt, answer))
27
 
28
  # returning the chat history to be displayed in the chatbot ui
29
- return "",history
30
 
31
- # function to format prompt in a way that is understandable for the text generation model
32
- # credit: copied 1:1 from Hugging Face, Inc/ Omar Sanseviero (see https://huggingface.co/spaces/osanseviero/mistral-super-fast/)
 
 
 
33
  def format_prompt(message, history):
34
  prompt = "<s>"
35
 
@@ -40,27 +44,35 @@ def format_prompt(message, history):
40
  prompt += f"[INST] {message} [/INST]"
41
  return prompt
42
 
 
43
  # function to get the response
44
- # credit: minimally changed from Hugging Face, Inc/ Omar Sanseviero (see https://huggingface.co/spaces/osanseviero/mistral-super-fast/)
45
- def respond(formatted_prompt, system_prompt):
46
- global temperature, max_new_tokens, top_p, repetition_penalty
 
47
 
48
  # setting model temperature and
49
- temperature = float(temperature)
50
- if temperature < 1e-2:
51
- temperature = 1e-2
52
- top_p = float(top_p)
53
 
54
  # creating model arguments/settings
55
- generate_kwargs = dict(
56
- temperature=temperature,
57
- max_new_tokens=max_new_tokens,
58
- top_p=top_p,
59
- repetition_penalty=repetition_penalty,
60
- do_sample=True,
61
- seed=42,
62
- )
63
 
64
  # calling for model output and returning it
65
- output = interference.text_generation(formatted_prompt, **generate_kwargs, stream=False, details=True, return_full_text=False).generated_text
66
- return output
 
 
 
 
 
 
 
 
1
  import os
2
+ from huggingface_hub import InferenceClient
3
+
4
 
5
  # huggingface token used to load closed off models
6
  token = os.environ.get("HGFTOKEN")
7
 
8
  # interference client created from mistral 7b instruction fine tuned model
9
+ # credit: copied 1:1 from Hugging Face, Inc/ Omar Sanseviero (see
10
+ # https://huggingface.co/spaces/osanseviero/mistral-super-fast/)
11
+ interference = InferenceClient("mistralai/Mistral-7B-Instruct-v0.1")
 
12
 
13
+ TEMPERATURE = 0.7
14
+ MAX_NEW_TOKENS = 100
15
+ TOP_P = 0.95
16
+ REPETITION_PENALTY = 1.1
17
 
 
 
18
 
19
+ # chat function - basically the main function calling other functions and
20
+ # returning a response to showcase in chatbot ui
21
+ def chat(prompt, history):
22
  # creating formatted prompt and calling for an answer from the model
23
  formatted_prompt = format_prompt(prompt, history)
24
+ answer = respond(formatted_prompt)
25
 
26
  # updating the chat history with the new answer
27
  history.append((prompt, answer))
28
 
29
  # returning the chat history to be displayed in the chatbot ui
30
+ return "", history
31
 
32
+
33
+ # function to format prompt for the text generation model
34
+ # credit: copied 1:1 from Hugging Face, Inc/ Omar Sanseviero (see
35
+ # https://huggingface.co/spaces/osanseviero/mistral-super-fast/)
36
+ # TODO: Setup to Use System Prompt
37
  def format_prompt(message, history):
38
  prompt = "<s>"
39
 
 
44
  prompt += f"[INST] {message} [/INST]"
45
  return prompt
46
 
47
+
48
  # function to get the response
49
+ # credit: minimally changed from Hugging Face, Inc/ Omar Sanseviero (see
50
+ # https://huggingface.co/spaces/osanseviero/mistral-super-fast/)
51
+ def respond(formatted_prompt):
52
+ global TEMPERATURE, TOP_P
53
 
54
  # setting model temperature and
55
+ TEMPERATURE = float(TEMPERATURE)
56
+ TEMPERATURE = max(TEMPERATURE, 1e-2)
57
+
58
+ TOP_P = float(TOP_P)
59
 
60
  # creating model arguments/settings
61
+ generate_kwargs = {
62
+ "temperature": TEMPERATURE,
63
+ "max_new_tokens": MAX_NEW_TOKENS,
64
+ "top_p": TOP_P,
65
+ "repetition_penalty": REPETITION_PENALTY,
66
+ "do_sample": True,
67
+ "seed": 42,
68
+ }
69
 
70
  # calling for model output and returning it
71
+ output = interference.text_generation(
72
+ formatted_prompt,
73
+ **generate_kwargs,
74
+ stream=False,
75
+ details=True,
76
+ return_full_text=False,
77
+ ).generated_text
78
+ return output
public/credits_dataprotection_license.md CHANGED
@@ -15,7 +15,7 @@ For this project, two different models are used. Both are used through Huggingfa
15
  LlaMa 2 is an open source model by Meta Research. See [offical paper](https://arxiv.org/pdf/2307.09288.pdf) for more information.
16
 
17
  - the version used in this project is LlaMa 2 7B Chat HF (HF = special version for huggingface), see [huggingface model hub](https://huggingface.co/meta-llama/Llama-2-7b-chat-hf)
18
- - the model is fine-tuned for chat interactions by Meta Research
19
 
20
  ##### Mistral
21
  Mistral is an open source model by Mistral AI. See [offical paper](https://arxiv.org/pdf/2310.06825.pdf) for more information.
@@ -43,9 +43,9 @@ This application uses a slightly customized version of the bertviz library, whic
43
  This is a non-commercial project, which does not collect any personal data. The only data collected is the data you enter into the application. This data is only used to generate the explanations and is not stored anywhere.
44
  However, the application may be hosted with an external service (i.e. Huggingface Spaces), which may collect data. Please refer to the data protection policies of the respective service for more information.
45
 
46
- If you use the "flag" feature, the data you enter will be stored in *publicly available* csv file.
47
 
48
 
49
  # License
50
  This Product is licensed under the MIT license. See [LICENSE](https://github.com/LennardZuendorf/thesis-webapp/blob/main/LICENSE.md) at GitHub for more information.
51
- Please credit the original authors of this project (Lennard Zündorf) and the credits listed above if you use this project or parts of it in your own work.
 
15
  LlaMa 2 is an open source model by Meta Research. See [offical paper](https://arxiv.org/pdf/2307.09288.pdf) for more information.
16
 
17
  - the version used in this project is LlaMa 2 7B Chat HF (HF = special version for huggingface), see [huggingface model hub](https://huggingface.co/meta-llama/Llama-2-7b-chat-hf)
18
+ - the model is fine-tuned for chat interactions by Meta Research
19
 
20
  ##### Mistral
21
  Mistral is an open source model by Mistral AI. See [offical paper](https://arxiv.org/pdf/2310.06825.pdf) for more information.
 
43
  This is a non-commercial project, which does not collect any personal data. The only data collected is the data you enter into the application. This data is only used to generate the explanations and is not stored anywhere.
44
  However, the application may be hosted with an external service (i.e. Huggingface Spaces), which may collect data. Please refer to the data protection policies of the respective service for more information.
45
 
46
+ If you use the "flag" feature, the data you enter will be stored in *publicly available* csv file.
47
 
48
 
49
  # License
50
  This Product is licensed under the MIT license. See [LICENSE](https://github.com/LennardZuendorf/thesis-webapp/blob/main/LICENSE.md) at GitHub for more information.
51
+ Please credit the original authors of this project (Lennard Zündorf) and the credits listed above if you use this project or parts of it in your own work.
railway.json CHANGED
@@ -10,4 +10,4 @@
10
  "restartPolicyType": "ON_FAILURE",
11
  "restartPolicyMaxRetries": 10
12
  }
13
- }
 
10
  "restartPolicyType": "ON_FAILURE",
11
  "restartPolicyMaxRetries": 10
12
  }
13
+ }