github-actions[bot] commited on
Commit
06b2d9e
·
0 Parent(s):
Dockerfile ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.10.15-bullseye
2
+
3
+ RUN apt-get update && \
4
+ apt-get install -y \
5
+ # General dependencies
6
+ locales \
7
+ locales-all && \
8
+ # Clean local repository of package files since they won't be needed anymore.
9
+ # Make sure this line is called after all apt-get update/install commands have
10
+ # run.
11
+ apt-get clean && \
12
+ # Also delete the index files which we also don't need anymore.
13
+ rm -rf /var/lib/apt/lists/*
14
+
15
+ ENV LC_ALL en_US.UTF-8
16
+ ENV LANG en_US.UTF-8
17
+ ENV LANGUAGE en_US.UTF-8
18
+
19
+ # Create and activate virtual environment
20
+ RUN python -m venv /opt/venv
21
+ ENV PATH="/opt/venv/bin:$PATH"
22
+
23
+ # Install dependencies
24
+ COPY requirements.txt .
25
+ RUN pip install -r requirements.txt
26
+
27
+ # Create non-root user and give write access to /opt/venv
28
+ RUN groupadd -g 900 mesop && \
29
+ useradd -u 900 -s /bin/bash -g mesop mesop && \
30
+ chown -R mesop:mesop /opt/venv && chmod -R 777 /opt/venv
31
+
32
+ USER mesop
33
+
34
+ # Add app code here
35
+ COPY . /srv/mesop-app
36
+ WORKDIR /srv/mesop-app
37
+
38
+ # Run Mesop through gunicorn. Should be available at localhost:8080
39
+ CMD ["gunicorn", "--bind", "0.0.0.0:8080", "main:me"]
README.md ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Mesop Doc Bot
3
+ emoji: 👓
4
+ colorFrom: red
5
+ colorTo: yellow
6
+ sdk: docker
7
+ pinned: false
8
+ license: apache-2.0
9
+ app_port: 8080
10
+ ---
11
+
12
+ # Docbot
13
+
14
+ Answers questions grounded based on docs
15
+
16
+ ## Setup
17
+
18
+ From workspace root:
19
+
20
+ ```sh
21
+ rm -rf ai/docbot/venv && \
22
+ virtualenv --python python3 ai/docbot/venv && \
23
+ source ai/docbot/venv/bin/activate && \
24
+ pip install -r ai/docbot/requirements.txt
25
+ ```
26
+
27
+ ## How to use
28
+
29
+ **Run app**:
30
+
31
+ ```sh
32
+ mesop chat.py
33
+ ```
34
+
35
+ **Create index**:
36
+
37
+ ```sh
38
+ python docs_index.py --build-index
39
+ ```
40
+
41
+ **Load (or create, if it doesn't exist yet) index**:
42
+
43
+ ```sh
44
+ python docs_index.py
45
+ ```
46
+
47
+ ## Evals
48
+
49
+ **Record eval results**
50
+
51
+ ```py
52
+ $ python recorder.py --out-dir gen/evals/one_source
53
+ ```
54
+
55
+ **View eval results**
56
+
57
+ ```py
58
+ $ EVAL_DIR=gen/evals/no_source_1 EVAL_DIR_2=gen/evals/one_source mesop eval_viewer.py
59
+ ```
60
+
61
+ ## Roadmap
62
+
63
+ TODOs:
64
+
65
+ - Respect dark themes into frame
66
+ - Auto-focus into prompt (via post message) _DONE_
67
+ - Support ESC to close iframe _DONE_
68
+ - Do evals against suggested questions _DONE_
69
+ - Prompt engineer
70
+ - Do not show code _skip_
71
+ - File new issue if asking for feature that doesn't exist _skip_
72
+
73
+ MAYBE:
74
+
75
+ - Ask Mesop to consolidate sources from the same page
76
+
77
+ ### UX
78
+
79
+ - Scroll to specific part of text? DONE
80
+ - Show code (syntax highlighting)
81
+ - Don't show sources which are not cited? done
82
+ - Renumber?? done
83
+ - File GitHub issue if the response isn't good DONE
84
+
85
+ ### APIs
86
+
87
+ - Use Google embedding API? done
88
+
89
+ ### Indexing
90
+
91
+ - Index GitHub issues / discussions?
92
+ - https://docs.llamaindex.ai/en/stable/examples/usecases/github_issue_analysis/
93
+ - DONE filter out blog posts? (the --- mark settings)
94
+ - DONE filter out internal docs, e.g. bazel commands
95
+ - DONE set title for all pages OR retrieve title by using mkdocs.yml??
96
+ - Maybe load in the code snippets? Depends on whether that's a goal.
97
+
98
+ ### Docs TODOs:
99
+
100
+ - Why doesn't mesop have this new feature? attribute is missing
__init__.py ADDED
File without changes
citation.js ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {
2
+ LitElement,
3
+ html,
4
+ css,
5
+ } from 'https://cdn.jsdelivr.net/gh/lit/dist@3/core/lit-core.min.js';
6
+
7
+ class CitationComponent extends LitElement {
8
+ static styles = css`
9
+ a {
10
+ display: block;
11
+ text-decoration: none;
12
+ color: var(--sys-on-surface);
13
+ }
14
+
15
+ .container {
16
+ background: var(--sys-surface-container-high);
17
+ border-radius: 12px;
18
+ }
19
+
20
+ .container:hover {
21
+ background: var(--sys-surface-container-highest);
22
+ }
23
+ `;
24
+
25
+ static properties = {
26
+ url: {type: String},
27
+ };
28
+
29
+ constructor() {
30
+ super();
31
+ this.url = '';
32
+ }
33
+
34
+ render() {
35
+ return html`
36
+ <a class="container" href="${this.url}" target="_blank">
37
+ <slot></slot>
38
+ </a>
39
+ `;
40
+ }
41
+
42
+ _onClick() {
43
+ window.open(this.url, '_blank');
44
+ console.log('open url', this.url);
45
+ }
46
+ }
47
+
48
+ customElements.define('citation-component', CitationComponent);
deploy_to_hf.sh ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ error_handler() {
6
+ echo "Error: An error occurred. Exiting script."
7
+ exit 1
8
+ }
9
+
10
+ # Set up error handling
11
+ trap error_handler ERR
12
+
13
+ if [ $# -eq 0 ]; then
14
+ echo "Error: Please provide a destination path as an argument."
15
+ exit 1
16
+ fi
17
+
18
+ DEST_PATH="$1"
19
+
20
+ if [ ! -d "$DEST_PATH" ]; then
21
+ echo "Destination path does not exist. Creating it now."
22
+ mkdir -p "$DEST_PATH"
23
+ fi
24
+
25
+ # Build the docs index
26
+ cd ai/docbot && python docs_index.py --build-index && cd -
27
+
28
+ # Get the path of this script which is the demo dir.
29
+ DEMO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
30
+ cp -R "$DEMO_DIR/" "$DEST_PATH"
31
+ echo "Demo files have been copied to $DEST_PATH"
32
+ cd "$DEST_PATH/docbot"
33
+ echo "Changed directory to $DEST_PATH"
34
+
35
+ git init
36
+ git branch -m main
37
+ git config user.name github-actions[bot]
38
+ git config user.email github-actions[bot]@users.noreply.github.com
39
+ echo "Configured git user"
40
+ git add .
41
+ git commit -m "Commit"
42
+ git remote add hf https://wwwillchen:[email protected]/spaces/wwwillchen/mesop-docs-bot || true
43
+ git push --force --set-upstream hf main
44
+
45
+ echo "Pushed to: https://huggingface.co/spaces/wwwillchen/mesop-docs-bot. Check the logs to see that it's deployed correctly."
docs_index.py ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+
4
+ import nest_asyncio
5
+ import Stemmer
6
+ from llama_index.core import (
7
+ PromptTemplate,
8
+ Settings,
9
+ SimpleDirectoryReader,
10
+ StorageContext,
11
+ VectorStoreIndex,
12
+ load_index_from_storage,
13
+ )
14
+ from llama_index.core.node_parser import SentenceSplitter
15
+ from llama_index.core.query_engine import CitationQueryEngine
16
+ from llama_index.core.retrievers import QueryFusionRetriever
17
+ from llama_index.core.schema import NodeWithScore as NodeWithScore
18
+ from llama_index.embeddings.google import GeminiEmbedding
19
+ from llama_index.llms.gemini import Gemini
20
+ from llama_index.retrievers.bm25 import BM25Retriever
21
+
22
+ import mesop as me
23
+
24
+ nest_asyncio.apply()
25
+
26
+ CITATION_QA_TEMPLATE = PromptTemplate(
27
+ "Please provide an answer based solely on the provided sources. "
28
+ "When referencing information from a source, "
29
+ "cite the appropriate source(s) using their corresponding numbers. "
30
+ "Every answer should include at least one source citation. "
31
+ "Only cite a source when you are explicitly referencing it. "
32
+ "If you are sure NONE of the sources are helpful, then say: 'Sorry, I didn't find any docs about this.'"
33
+ "If you are not sure if any of the sources are helpful, then say: 'You might find this helpful', where 'this' is the source's title.'"
34
+ "DO NOT say Source 1, Source 2, etc. Only reference sources like this: [1], [2], etc."
35
+ "I want you to pick just ONE source to answer the question."
36
+ "For example:\n"
37
+ "Source 1:\n"
38
+ "The sky is red in the evening and blue in the morning.\n"
39
+ "Source 2:\n"
40
+ "Water is wet when the sky is red.\n"
41
+ "Query: When is water wet?\n"
42
+ "Answer: Water will be wet when the sky is red [2], "
43
+ "which occurs in the evening [1].\n"
44
+ "Now it's your turn. Below are several numbered sources of information:"
45
+ "\n------\n"
46
+ "{context_str}"
47
+ "\n------\n"
48
+ "Query: {query_str}\n"
49
+ "Answer: "
50
+ )
51
+
52
+ os.environ["GOOGLE_API_KEY"] = os.environ["GEMINI_API_KEY"]
53
+
54
+
55
+ def get_meta(file_path: str) -> dict[str, str]:
56
+ with open(file_path) as f:
57
+ title = f.readline().strip()
58
+ if title.startswith("# "):
59
+ title = title[2:]
60
+ else:
61
+ title = (
62
+ file_path.split("/")[-1]
63
+ .replace(".md", "")
64
+ .replace("-", " ")
65
+ .capitalize()
66
+ )
67
+
68
+ file_path = file_path.replace(".md", "")
69
+ CONST = "../../docs/"
70
+ docs_index = file_path.index(CONST)
71
+ docs_path = file_path[docs_index + len(CONST) :]
72
+
73
+ url = "https://mesop-dev.github.io/mesop/" + docs_path
74
+
75
+ print(f"URL: {url}")
76
+ return {
77
+ "url": url,
78
+ "title": title,
79
+ }
80
+
81
+
82
+ embed_model = GeminiEmbedding(
83
+ model_name="models/text-embedding-004", api_key=os.environ["GOOGLE_API_KEY"]
84
+ )
85
+ Settings.embed_model = embed_model
86
+
87
+ PERSIST_DIR = "./gen"
88
+
89
+
90
+ def build_or_load_index():
91
+ if not os.path.exists(PERSIST_DIR) or "--build-index" in sys.argv:
92
+ print("Building index")
93
+
94
+ documents = SimpleDirectoryReader(
95
+ "../../docs/",
96
+ required_exts=[
97
+ ".md",
98
+ ],
99
+ exclude=[
100
+ "showcase.md",
101
+ "demo.md",
102
+ "blog",
103
+ "internal",
104
+ ],
105
+ file_metadata=get_meta,
106
+ recursive=True,
107
+ ).load_data()
108
+ for doc in documents:
109
+ doc.excluded_llm_metadata_keys = ["url"]
110
+ splitter = SentenceSplitter(chunk_size=512)
111
+
112
+ nodes = splitter.get_nodes_from_documents(documents)
113
+ bm25_retriever = BM25Retriever.from_defaults(
114
+ nodes=nodes,
115
+ similarity_top_k=5,
116
+ # Optional: We can pass in the stemmer and set the language for stopwords
117
+ # This is important for removing stopwords and stemming the query + text
118
+ # The default is english for both
119
+ stemmer=Stemmer.Stemmer("english"),
120
+ language="english",
121
+ )
122
+ bm25_retriever.persist(PERSIST_DIR + "/bm25_retriever")
123
+
124
+ index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)
125
+ index.storage_context.persist(persist_dir=PERSIST_DIR)
126
+ return index, bm25_retriever
127
+ else:
128
+ print("Loading index")
129
+ bm25_retriever = BM25Retriever.from_persist_dir(
130
+ PERSIST_DIR + "/bm25_retriever"
131
+ )
132
+ storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR)
133
+ index = load_index_from_storage(storage_context)
134
+ return index, bm25_retriever
135
+
136
+
137
+ if me.runtime().is_hot_reload_in_progress:
138
+ print("Hot reload - skip building index!")
139
+ query_engine = me._query_engine
140
+ bm25_retriever = me._bm25_retriever
141
+
142
+ else:
143
+ index, bm25_retriever = build_or_load_index()
144
+ llm = Gemini(model="models/gemini-1.5-flash-latest")
145
+ retriever = QueryFusionRetriever(
146
+ [
147
+ index.as_retriever(similarity_top_k=5),
148
+ bm25_retriever,
149
+ ],
150
+ llm=llm,
151
+ num_queries=1,
152
+ use_async=True,
153
+ similarity_top_k=5,
154
+ )
155
+ query_engine = CitationQueryEngine.from_args(
156
+ index,
157
+ retriever=retriever,
158
+ llm=llm,
159
+ citation_qa_template=CITATION_QA_TEMPLATE,
160
+ similarity_top_k=5,
161
+ embedding_model=embed_model,
162
+ streaming=True,
163
+ )
164
+
165
+ blocking_query_engine = CitationQueryEngine.from_args(
166
+ index,
167
+ retriever=retriever,
168
+ llm=llm,
169
+ citation_qa_template=CITATION_QA_TEMPLATE,
170
+ similarity_top_k=5,
171
+ embedding_model=embed_model,
172
+ streaming=False,
173
+ )
174
+ # TODO: replace with proper mechanism for persisting objects
175
+ # across hot reloads
176
+ me._query_engine = query_engine
177
+ me._bm25_retriever = bm25_retriever
178
+
179
+
180
+ NEWLINE = "\n"
181
+
182
+
183
+ def ask(query: str):
184
+ return query_engine.query(query)
185
+
186
+
187
+ def retrieve(query: str):
188
+ return bm25_retriever.retrieve(query)
eval_viewer.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import itertools
2
+ import os
3
+ import sys
4
+ import urllib.parse
5
+ from dataclasses import dataclass, field
6
+
7
+ import mesop as me
8
+
9
+ # Get the directory from the environment variable
10
+ EVAL_DIR = os.environ.get("EVAL_DIR")
11
+
12
+ if EVAL_DIR:
13
+ print(f"Directory set to: {EVAL_DIR}")
14
+ else:
15
+ print(
16
+ "No directory specified. Exiting! Set the EVAL_DIR environment variable."
17
+ )
18
+ sys.exit(1)
19
+
20
+ EVAL_DIR_2 = os.environ.get("EVAL_DIR_2")
21
+
22
+ if EVAL_DIR_2:
23
+ print(f"Eval directory 2 set to: {EVAL_DIR_2}")
24
+
25
+
26
+ @dataclass
27
+ class Item:
28
+ query: str = ""
29
+ input: str = ""
30
+ output: str = ""
31
+
32
+
33
+ @dataclass
34
+ class EvalGroup:
35
+ items: list[Item] = field(default_factory=list)
36
+
37
+
38
+ @me.stateclass
39
+ class State:
40
+ directories: list[str]
41
+ group_1: EvalGroup
42
+ group_2: EvalGroup
43
+
44
+
45
+ def load_eval_dir(eval_dir: str):
46
+ # Read all directories from args.dir
47
+ directories = [
48
+ d for d in os.listdir(eval_dir) if os.path.isdir(os.path.join(eval_dir, d))
49
+ ]
50
+ items: list[Item] = []
51
+ for dir in directories:
52
+ input_path = os.path.join(eval_dir, dir, "input.txt")
53
+ output_path = os.path.join(eval_dir, dir, "output.txt")
54
+
55
+ with open(input_path) as f:
56
+ input_content = f.read()
57
+ with open(output_path) as f:
58
+ output_content = f.read()
59
+
60
+ item = Item(
61
+ input=input_content,
62
+ output=output_content,
63
+ query=urllib.parse.unquote(dir),
64
+ )
65
+ items.append(item)
66
+ return items
67
+
68
+
69
+ def on_load(e: me.LoadEvent):
70
+ state = me.state(State)
71
+ assert EVAL_DIR
72
+ state.group_1.items = load_eval_dir(EVAL_DIR)
73
+ if EVAL_DIR_2:
74
+ state.group_2.items = load_eval_dir(EVAL_DIR_2)
75
+ print("state.group_2.items", state.group_2.items)
76
+
77
+ # Store the directories in the state for later use
78
+ # me.state(State).directories = directories
79
+
80
+
81
+ @me.page(
82
+ on_load=on_load,
83
+ security_policy=me.SecurityPolicy(
84
+ allowed_script_srcs=[
85
+ "https://cdn.jsdelivr.net",
86
+ ]
87
+ ),
88
+ )
89
+ def index():
90
+ state = me.state(State)
91
+ with scrollable():
92
+ with me.box(
93
+ style=me.Style(
94
+ margin=me.Margin.symmetric(horizontal="auto", vertical=24),
95
+ # background="white",
96
+ padding=me.Padding.symmetric(horizontal=16),
97
+ )
98
+ ):
99
+ me.text("Eval viewer", type="headline-3")
100
+ me.text(f"Group 1: {len(state.group_1.items)} items")
101
+ me.text(f"Group 2: {len(state.group_2.items)} items")
102
+
103
+ # Zip group_1 and group_2 items
104
+ zipped_items = list(
105
+ itertools.zip_longest(
106
+ state.group_1.items, state.group_2.items, fillvalue=None
107
+ )
108
+ )
109
+ with me.box(
110
+ style=me.Style(
111
+ display="grid",
112
+ grid_template_columns="160px 300px 1fr 300px 1fr"
113
+ if state.group_2.items
114
+ else "160px 1fr 1fr",
115
+ gap=16,
116
+ )
117
+ ):
118
+ # Header
119
+ me.text("Query", style=me.Style(font_weight=500))
120
+ me.text("Input (1)", style=me.Style(font_weight=500))
121
+ me.text("Output (1)", style=me.Style(font_weight=500))
122
+ if state.group_2.items:
123
+ me.text("Input (2)", style=me.Style(font_weight=500))
124
+ me.text("Output (2)", style=me.Style(font_weight=500))
125
+ # Body
126
+ for item_1, item_2 in zipped_items:
127
+ if item_1:
128
+ me.text(item_1.query, style=me.Style(font_weight=500))
129
+ me.markdown(
130
+ item_1.input, style=me.Style(overflow_y="auto", max_height=400)
131
+ )
132
+ me.text(item_1.output)
133
+
134
+ if item_2:
135
+ me.markdown(
136
+ item_2.input, style=me.Style(overflow_y="auto", max_height=400)
137
+ )
138
+ me.text(item_2.output)
139
+
140
+
141
+ @me.web_component(path="./scrollable.js")
142
+ def scrollable(
143
+ *,
144
+ key: str | None = None,
145
+ ):
146
+ return me.insert_web_component(
147
+ name="scrollable-component",
148
+ key=key,
149
+ )
frame_listener.js ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Listen for 'focus' message from the parent window
2
+ window.addEventListener('message', function (event) {
3
+ if (event.data === 'focus') {
4
+ // Find the textarea element
5
+ const textarea = document.querySelector('textarea');
6
+ console.log('focusing on textarea', textarea);
7
+ // If the textarea is found, focus on it
8
+ if (textarea) {
9
+ textarea.focus();
10
+ } else {
11
+ console.warn('Textarea not found for focus');
12
+ }
13
+ }
14
+ });
15
+
16
+ window.addEventListener('keydown', function (event) {
17
+ if (event.key === 'Escape') {
18
+ if (document.activeElement) {
19
+ document.activeElement.blur();
20
+ }
21
+ // Send a message to the parent window to close this iframe
22
+ window.parent.postMessage('closeDocbot', '*');
23
+ }
24
+ });
gen/bm25_retriever/corpus.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
gen/bm25_retriever/corpus.mmindex.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [0, 1458, 2833, 4188, 5580, 6906, 8205, 9686, 11068, 12431, 13999, 15367, 16714, 17934, 19236, 20471, 22878, 24507, 26058, 28184, 30194, 33572, 36486, 37986, 39471, 40953, 42418, 44129, 45501, 47145, 49547, 51007, 52519, 54023, 55430, 56659, 58025, 59680, 60903, 62275, 63498, 65003, 66443, 67784, 69104, 70495, 72006, 73285, 74717, 76542, 77978, 79705, 81240, 82584, 83917, 85277, 86601, 87872, 89416, 91005, 92302, 93737, 95007, 96455, 97720, 99707, 101635, 102990, 104599, 106332, 110817, 112868, 114374, 117415, 118959, 120369, 121851, 123486, 126141, 130040, 134190, 138342, 142357, 146522, 149451, 151091, 152510, 154113, 155674, 159244, 162221, 165917, 169964, 172968, 174514, 176210, 177614, 179212, 180778, 184521, 188959, 193205, 196442, 199089, 201174, 204214, 205997, 207386, 209307, 210736, 212092, 213448, 214731, 216310, 217970, 219766, 221388, 222851, 224482, 225832, 227382, 229333, 230854, 232803, 234524, 236741, 238539, 240620, 242325, 244243, 245730, 247560, 248903, 250199, 251476, 253268, 254613, 256279, 257656, 258952, 260229, 261561, 262843, 264102, 265409, 266712, 268081, 269444, 270796, 272291, 273582, 274871, 276323, 277654, 278943, 280200, 281562, 282879, 284377, 285713, 287007, 288275, 289704, 291042, 292439, 293911, 295291, 296763, 298120, 299430, 300725, 302037, 303333, 304610, 306189, 307555, 309057, 310657, 311951, 313219, 314547, 315836, 317104, 318394, 319690, 320967, 322385, 323649, 325408, 326984, 328552, 331012, 332289, 334401, 337095, 338521, 340376, 342918, 344304, 345600, 347009, 348321, 349610, 350878, 352181, 353503, 354807, 356117, 357406, 358674, 360079, 361424, 362843, 364280, 365653, 367029, 368360, 369656, 371039, 372399, 373707, 375169, 376532, 377842, 379137, 380534, 381879, 383362, 384723, 386026, 387373, 388711, 390007, 391284, 392694, 394046, 395375, 396784, 398129, 399450, 400768, 402057, 403325, 404775, 406092, 407522, 408837, 410147, 411442, 412843, 414160, 415630, 416973, 418269, 419546, 420826, 422086, 423836, 425216, 426961, 428483, 429949, 431213, 432844, 434220, 436240, 438067, 439692, 441439, 443088, 445348, 446857, 448394, 449933, 451479, 453566, 455075, 456461, 457795, 459171, 460675, 462361, 463891, 465298, 467346, 469459, 471276, 473373, 474806, 476845, 478348, 480382, 481787, 483352, 484889, 487554, 490035, 491699, 493091, 494542, 496002, 497361, 498764, 500560, 502080, 503765, 505129, 506675, 508297, 509811, 511174, 512492, 513847, 515246, 516912, 518571, 519999, 521339, 522713, 524155, 525555, 527106, 528744, 530136, 531555, 533282, 534762, 536268, 537743, 540315, 541610, 543225, 545326, 547445, 548725, 551323, 553491, 554778, 557457, 558836, 560317, 562668, 564161, 565630, 566911, 569129, 570998, 572768, 574753, 576100, 577406, 578851, 580479, 581924, 583170, 584618, 586118, 587723, 589592, 590826, 592453, 594563, 596465, 598688, 600292, 601666, 603193, 604867, 606272, 607742, 609040, 610845, 612609, 614271, 615680, 617818, 619428, 620855, 622411, 623870, 625564, 629097, 630960, 633088, 634785, 637114, 638401, 639819, 641263, 642848, 644330, 646221, 647797, 649406, 650757, 652423, 654097, 656938, 658432, 660054, 661873, 664084, 665756, 667515, 668954, 670309, 671771, 673593, 675385, 677211, 678977, 680418, 681690, 683335, 685151, 686884, 688514, 690085, 691452, 694298, 698276, 702363, 706668, 710463, 713350, 716727, 717993, 719794, 721214, 722784, 724524, 726035, 727387, 729114, 732088, 733915, 735836, 737814, 739272, 741035, 742380, 743757, 745621, 747126, 749487, 751797, 754112, 755463]
gen/bm25_retriever/data.csc.index.npy ADDED
Binary file (45.3 kB). View file
 
gen/bm25_retriever/indices.csc.index.npy ADDED
Binary file (45.3 kB). View file
 
gen/bm25_retriever/indptr.csc.index.npy ADDED
Binary file (7.54 kB). View file
 
gen/bm25_retriever/params.index.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "k1": 1.5,
3
+ "b": 0.75,
4
+ "delta": 0.5,
5
+ "method": "lucene",
6
+ "idf_method": "lucene",
7
+ "dtype": "float32",
8
+ "int_dtype": "int32",
9
+ "num_docs": 448,
10
+ "version": "0.1.10"
11
+ }
gen/bm25_retriever/retriever.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "similarity_top_k": 5,
3
+ "verbose": false
4
+ }
gen/bm25_retriever/vocab.index.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"absenc": 0, "e0e0e0": 1, "probabl": 2, "tri": 3, "idea": 4, "incompat": 5, "handler": 6, "autoplay": 7, "apach": 8, "deep": 9, "galleri": 10, "social": 11, "1800557173073691000": 12, "on_click": 13, "justify_item": 14, "repo": 15, "unread": 16, "goodby": 17, "select_menu_key": 18, "few": 19, "background_color": 20, "help": 21, "mesop_state_session_backend_sql_connection_uri": 22, "npx": 23, "develop": 24, "child": 25, "textarea": 26, "send_prompt": 27, "sinc": 28, "paradigm": 29, "header": 30, "tree": 31, "select_demo": 32, "document": 33, "typic": 34, "until": 35, "emit": 36, "trigger": 37, "23": 38, "expansion_panel": 39, "twsrc": 40, "behavior": 41, "third": 42, "multi_page_nav": 43, "allow": 44, "callsit": 45, "utf": 46, "fastapi": 47, "potenti": 48, "box": 49, "bin": 50, "listen": 51, "scroll": 52, "intern": 53, "role": 54, "entir": 55, "although": 56, "temperatur": 57, "stabl": 58, "make": 59, "my": 60, "fuss": 61, "think": 62, "tosurl": 63, "decrementev": 64, "doe": 65, "final": 66, "flex": 67, "mesop_state_session_backend_sql_t": 68, "magic": 69, "person": 70, "focus_compon": 71, "call_claude_sonnet": 72, "sequenc": 73, "small": 74, "variable_nam": 75, "time": 76, "content_button": 77, "top_k": 78, "test": 79, "sdk": 80, "whether": 81, "complet": 82, "allowed_connect_src": 83, "environ": 84, "buttontogglechangeev": 85, "button_toggl": 86, "optim": 87, "be": 88, "number": 89, "jupyt": 90, "uploadev": 91, "gh": 92, "straightforward": 93, "balanc": 94, "just": 95, "datepick": 96, "app_port": 97, "team": 98, "finish": 99, "send_messag": 100, "alway": 101, "net": 102, "baseurl": 103, "so": 104, "mesop_static_fold": 105, "repeated_param": 106, "defens": 107, "trustedscripturl": 108, "models_px": 109, "stage": 110, "spin": 111, "fast": 112, "spinner": 113, "proto": 114, "transform": 115, "mesop_layout_colab": 116, "standard": 117, "checkboxindeterminatechangeev": 118, "veloc": 119, "min": 120, "con": 121, "fals": 122, "api_key": 123, "past": 124, "origin": 125, "mesop_prod_unredacted_error": 126, "instanc": 127, "recommend": 128, "compatibilti": 129, "back": 130, "assist": 131, "find": 132, "content__inn": 133, "moder": 134, "h1": 135, "primarili": 136, "unnecessari": 137, "run": 138, "redact": 139, "e7f2ff": 140, "markdown_demo": 141, "googleapi": 142, "cli": 143, "those": 144, "1fr": 145, "value2": 146, "them": 147, "abov": 148, "larg": 149, "switch_model": 150, "veri": 151, "introduc": 152, "problemat": 153, "except": 154, "callback": 155, "toler": 156, "pictur": 157, "640": 158, "nullabl": 159, "repositori": 160, "standalon": 161, "content_compon": 162, "scroll_into_view": 163, "downsid": 164, "decod": 165, "immut": 166, "configur": 167, "simpl": 168, "histori": 169, "sever": 170, "page_2": 171, "rapid": 172, "en": 173, "first": 174, "hidden": 175, "consist": 176, "degrad": 177, "vast": 178, "upload": 179, "harshit": 180, "offer": 181, "scheme": 182, "long": 183, "valid": 184, "text_stream": 185, "ask": 186, "unselect": 187, "without": 188, "home": 189, "least": 190, "storag": 191, "conveni": 192, "red": 193, "writeabl": 194, "under": 195, "dive": 196, "fault": 197, "semant": 198, "typescript": 199, "duochat": 200, "_zr64fycojgbcdqbjpla": 201, "miss": 202, "experiment": 203, "given": 204, "minor": 205, "project": 206, "attempt": 207, "crux": 208, "plan": 209, "congress": 210, "suffici": 211, "requisit": 212, "known": 213, "www": 214, "compon": 215, "resist": 216, "global": 217, "component_help": 218, "inject": 219, "system": 220, "forth": 221, "intuit": 222, "text_to_text": 223, "go": 224, "fallback": 225, "border": 226, "lifetim": 227, "async_await": 228, "lose": 229, "offset": 230, "some_cont": 231, "slow": 232, "in_progress": 233, "cannot": 234, "roundtrip": 235, "svelt": 236, "from": 237, "choos": 238, "both": 239, "tabl": 240, "re": 241, "wait": 242, "has": 243, "current": 244, "higher": 245, "window": 246, "tell": 247, "unless": 248, "principl": 249, "wrestl": 250, "render": 251, "experi": 252, "subtl": 253, "boost": 254, "tool": 255, "email": 256, "clickjack": 257, "8080": 258, "firebase_auth_compon": 259, "newer": 260, "leverag": 261, "interpol": 262, "is_model_picker_dialog_open": 263, "param_to_delet": 264, "encrypt": 265, "quick": 266, "component_": 267, "i18n": 268, "attach": 269, "client": 270, "could": 271, "violat": 272, "ok": 273, "boilerpl": 274, "respond": 275, "comput": 276, "simultan": 277, "size": 278, "anywher": 279, "construct": 280, "conform": 281, "sqlite3": 282, "branch": 283, "dens": 284, "decoupl": 285, "mesop_base_url_path": 286, "create_wsgi_app": 287, "should": 288, "implement": 289, "previous": 290, "express": 291, "radio": 292, "entrypoint": 293, "hint": 294, "come": 295, "16px": 296, "parti": 297, "browser": 298, "pip": 299, "night": 300, "worker": 301, "town": 302, "elimin": 303, "mesop_app_base_path": 304, "warn": 305, "https": 306, "gentl": 307, "stack": 308, "model_messag": 309, "multipl": 310, "button_click": 311, "accept": 312, "mesop": 313, "util": 314, "suit": 315, "consider": 316, "aim": 317, "grant": 318, "expans": 319, "column": 320, "ico": 321, "create_al": 322, "input_valu": 323, "2f": 324, "applic": 325, "identitytoolkit": 326, "give": 327, "similar": 328, "serializ": 329, "wire": 330, "deeper": 331, "explicit": 332, "opendemogalleryinnewtab": 333, "white": 334, "confidenti": 335, "appropri": 336, "web": 337, "around": 338, "call_api": 339, "want": 340, "note": 341, "extrem": 342, "hello_world": 343, "arbitrari": 344, "app": 345, "deliv": 346, "somewher": 347, "main": 348, "dozen": 349, "mesop_state_session_backend_firestore_collect": 350, "respons": 351, "itself": 352, "do": 353, "polic": 354, "placehold": 355, "method": 356, "new_param": 357, "24": 358, "share": 359, "dkvt0rboqumapk5d": 360, "account": 361, "out": 362, "login": 363, "nice": 364, "tend": 365, "term": 366, "believ": 367, "individu": 368, "allowfullscreen": 369, "class": 370, "access": 371, "specifi": 372, "replac": 373, "may": 374, "max_output_token": 375, "involv": 376, "asyncio": 377, "autocompleteselectionchangeev": 378, "select": 379, "index": 380, "firebaseui": 381, "user_messag": 382, "up": 383, "flex_direct": 384, "nestedst": 385, "sidenav": 386, "curv": 387, "expand": 388, "world": 389, "export": 390, "disk": 391, "top_p": 392, "prefix": 393, "model_nam": 394, "modeldialogst": 395, "did": 396, "our": 397, "extract": 398, "callabl": 399, "achiev": 400, "host": 401, "onc": 402, "1px": 403, "evalu": 404, "zone": 405, "36": 406, "essenti": 407, "scaffold": 408, "someth": 409, "unsaf": 410, "gradio": 411, "medium": 412, "mean": 413, "everyth": 414, "safelist": 415, "els": 416, "bob": 417, "readi": 418, "detect_object": 419, "tailwind": 420, "ci": 421, "800": 422, "per": 423, "prod_bundl": 424, "event": 425, "modular": 426, "click": 427, "github": 428, "url": 429, "script": 430, "skew": 431, "interact": 432, "coupl": 433, "stylesheet": 434, "content_layout": 435, "docker": 436, "me": 437, "exampl": 438, "comparison": 439, "3d3929": 440, "key": 441, "depth": 442, "increment": 443, "39": 444, "card_act": 445, "autocompleteoptiongroup": 446, "appl": 447, "com": 448, "selectopt": 449, "wrong": 450, "reason": 451, "stateclass": 452, "we": 453, "statement": 454, "person_dict": 455, "mesop_concurrent_updates_en": 456, "content_upload": 457, "licens": 458, "capabl": 459, "visual": 460, "liter": 461, "collection_nam": 462, "95": 463, "even": 464, "customiz": 465, "didn": 466, "pretti": 467, "grow": 468, "remov": 469, "among": 470, "often": 471, "tutori": 472, "cpu": 473, "namedslot": 474, "parent": 475, "string": 476, "more": 477, "bool": 478, "subtre": 479, "accur": 480, "framebord": 481, "pass": 482, "radiochangeev": 483, "identifi": 484, "admin": 485, "filter": 486, "menu": 487, "font_weight": 488, "set_claude_api_key": 489, "almost": 490, "css2": 491, "text_to_imag": 492, "label": 493, "rich": 494, "troubl": 495, "radioopt": 496, "programmingerror": 497, "1000": 498, "credenti": 499, "16gb": 500, "absolut": 501, "must": 502, "emoji": 503, "too": 504, "infrastructur": 505, "life": 506, "adopt": 507, "valu": 508, "csp": 509, "react": 510, "upgrad": 511, "2fr": 512, "polici": 513, "0000001f": 514, "data_model": 515, "metadata": 516, "demand": 517, "root_box_styl": 518, "catch": 519, "non": 520, "thing": 521, "created_at": 522, "nav_compon": 523, "firebas": 524, "reset": 525, "befor": 526, "hug": 527, "cross": 528, "call": 529, "uploadedfil": 530, "onli": 531, "image_data": 532, "quota": 533, "trust": 534, "ll": 535, "besid": 536, "sqlalchemi": 537, "dure": 538, "intermedi": 539, "belief": 540, "granular": 541, "full": 542, "runtime_config": 543, "locat": 544, "referrerpolici": 545, "split": 546, "__user": 547, "common": 548, "increas": 549, "bind": 550, "pattern": 551, "dataclass": 552, "dockerfil": 553, "amount": 554, "problem": 555, "accord": 556, "engin": 557, "disk_size_gb": 558, "fff": 559, "communic": 560, "disclaim": 561, "json": 562, "counter_component_app": 563, "cd": 564, "extern": 565, "b64encod": 566, "guid": 567, "address": 568, "expect": 569, "vs": 570, "refin": 571, "power": 572, "bash": 573, "caus": 574, "desir": 575, "largebinari": 576, "sorri": 577, "create_engin": 578, "examples_row": 579, "gemini_1_5_flash": 580, "ts": 581, "alloc": 582, "shortcut": 583, "consum": 584, "sidebar": 585, "date": 586, "grand": 587, "becom": 588, "gcp": 589, "enterpris": 590, "dark": 591, "avail": 592, "progress": 593, "firebaseconfig": 594, "16": 595, "bunch": 596, "letter_spac": 597, "black": 598, "mesop_state_session_backend": 599, "reduc": 600, "toml": 601, "goto": 602, "srcdoc": 603, "packag": 604, "say": 605, "consol": 606, "file": 607, "kind": 608, "picker": 609, "send_prompt_pro": 610, "attribut": 611, "end_of_messag": 612, "1798673386425786724": 613, "gcloud": 614, "yield": 615, "uniqu": 616, "minimum": 617, "z_index": 618, "src": 619, "persist": 620, "fluid": 621, "activ": 622, "notebook": 623, "justify_cont": 624, "counter_compon": 625, "model": 626, "mistak": 627, "vcpu": 628, "io": 629, "sent": 630, "after": 631, "display": 632, "versatil": 633, "anthrop": 634, "complic": 635, "input": 636, "inspect": 637, "hide": 638, "prefer": 639, "evolv": 640, "while": 641, "bring": 642, "keyboard": 643, "instant": 644, "smaller": 645, "hashtag": 646, "have": 647, "last": 648, "real": 649, "flexibl": 650, "devtool": 651, "param": 652, "sql": 653, "javascript": 654, "amongst": 655, "config": 656, "html_demo": 657, "chunk": 658, "expansionpaneltoggleev": 659, "minimalist": 660, "display_messag": 661, "navigate_hom": 662, "minim": 663, "v2": 664, "env": 665, "own": 666, "12": 667, "css": 668, "charact": 669, "second": 670, "angular": 671, "oftentim": 672, "unredact": 673, "hit": 674, "etc": 675, "align": 676, "tab": 677, "line_height": 678, "subdomain": 679, "paramet": 680, "consid": 681, "_blank": 682, "futur": 683, "depend": 684, "clean": 685, "sse": 686, "longer": 687, "extend": 688, "page1": 689, "light_mod": 690, "badg": 691, "link_compon": 692, "security_polici": 693, "js": 694, "ever": 695, "frontend": 696, "num": 697, "560px": 698, "strive": 699, "choic": 700, "earli": 701, "send_prompt_flash": 702, "decrement": 703, "counter": 704, "delight": 705, "mobil": 706, "empti": 707, "backward": 708, "compos": 709, "bar": 710, "autom": 711, "one": 712, "space": 713, "familiar": 714, "del": 715, "strength": 716, "battl": 717, "obj": 718, "authent": 719, "know": 720, "success": 721, "perform": 722, "init": 723, "idiomat": 724, "2767": 725, "gemini": 726, "typeset": 727, "elem": 728, "justmycod": 729, "shadow": 730, "add_query_param": 731, "object_detector": 732, "sh": 733, "custom": 734, "sometim": 735, "line": 736, "associ": 737, "lit": 738, "defin": 739, "set_theme_dens": 740, "still": 741, "your_servic": 742, "zi1dngoryho": 743, "purpos": 744, "categori": 745, "dump": 746, "broader": 747, "_not_": 748, "rare": 749, "delet": 750, "differ": 751, "code": 752, "comprehens": 753, "clariti": 754, "factori": 755, "imagin": 756, "32123": 757, "px": 758, "featur": 759, "built": 760, "mesop_web_components_http_cache_key": 761, "helper": 762, "loop": 763, "procfil": 764, "xlr8harder": 765, "horizont": 766, "place": 767, "look": 768, "on_load": 769, "nest": 770, "action": 771, "resourc": 772, "20": 773, "modern": 774, "overal": 775, "retriev": 776, "complement": 777, "ram": 778, "panel": 779, "ref_src": 780, "exist": 781, "frequent": 782, "each": 783, "via": 784, "uncom": 785, "confirm_model_picker_dialog": 786, "imper": 787, "calendar": 788, "later": 789, "bundl": 790, "figur": 791, "id": 792, "creat": 793, "explain": 794, "done": 795, "requir": 796, "co": 797, "scienc": 798, "howev": 799, "trustedhtml": 800, "easili": 801, "imag": 802, "vertic": 803, "strict": 804, "http": 805, "md": 806, "firebase_auth_app": 807, "current_input_valu": 808, "5678": 809, "viewport": 810, "backend": 811, "migrat": 812, "overview": 813, "across": 814, "nativ": 815, "emb": 816, "o1": 817, "xhr": 818, "sleep": 819, "compar": 820, "model_picker_dialog": 821, "3px": 822, "oper": 823, "multi": 824, "point": 825, "open": 826, "product": 827, "rgba": 828, "11": 829, "keyerror": 830, "syntax": 831, "selected_model": 832, "link": 833, "claud": 834, "all_valu": 835, "toy": 836, "found": 837, "safeti": 838, "hot": 839, "si": 840, "change_model_opt": 841, "termin": 842, "doc": 843, "blur": 844, "match": 845, "readabl": 846, "ultim": 847, "inspir": 848, "sourc": 849, "desktop": 850, "thalnerkar": 851, "compromis": 852, "claude_3_5_sonnet": 853, "sanchay": 854, "set_theme_mod": 855, "firebase_auth": 856, "flavor": 857, "trustworthi": 858, "tune": 859, "otherwis": 860, "expiresat": 861, "clear": 862, "clone": 863, "domain": 864, "margin": 865, "inner": 866, "through": 867, "gemini_api_key": 868, "detection_compon": 869, "async": 870, "theme_var": 871, "rather": 872, "fail": 873, "dist": 874, "memory_gb": 875, "cryptic": 876, "menu_width": 877, "base": 878, "font_famili": 879, "stream": 880, "side": 881, "on_input": 882, "sleek": 883, "deseri": 884, "asdict": 885, "8192": 886, "sanit": 887, "manner": 888, "learn": 889, "verifi": 890, "configure_gemini": 891, "ren": 892, "old": 893, "moment": 894, "jumpstart": 895, "review": 896, "reusabl": 897, "api": 898, "see": 899, "mesop_http_cache_js_bundl": 900, "becaus": 901, "status": 902, "mode": 903, "anatomi": 904, "set": 905, "215px": 906, "virtual": 907, "ml": 908, "flow": 909, "properti": 910, "break": 911, "list": 912, "colab": 913, "sure": 914, "decor": 915, "myapp": 916, "auto": 917, "enhanc": 918, "560": 919, "name": 920, "scale": 921, "workspacefold": 922, "put": 923, "contribut": 924, "revers": 925, "python": 926, "librari": 927, "codelab": 928, "on_load_gener": 929, "panda": 930, "uri": 931, "page": 932, "shell": 933, "runtim": 934, "securitypolici": 935, "setup": 936, "closur": 937, "wiki": 938, "kw_on": 939, "insid": 940, "primary_key": 941, "unfamiliar": 942, "mark": 943, "right": 944, "permiss": 945, "mention": 946, "webserv": 947, "beginn": 948, "sandbox": 949, "network": 950, "2px": 951, "templat": 952, "hood": 953, "info": 954, "assum": 955, "cancel": 956, "section": 957, "integr": 958, "charset": 959, "adapt": 960, "footgun": 961, "feel": 962, "need": 963, "research": 964, "pick": 965, "unnecessarili": 966, "output": 967, "static": 968, "question": 969, "ipynb": 970, "omit": 971, "now": 972, "cloudsql": 973, "care": 974, "slider": 975, "f0f0f0": 976, "hamburg": 977, "leak": 978, "playwright": 979, "respect": 980, "unit": 981, "subject": 982, "autocompleteenterev": 983, "ve": 984, "platform": 985, "mesopdeveloperexcept": 986, "gave": 987, "lightweight": 988, "symmetr": 989, "grid_template_row": 990, "take": 991, "can": 992, "pleas": 993, "slash": 994, "bandwidth": 995, "declar": 996, "load": 997, "allows_ifram": 998, "mesopev": 999, "widget": 1000, "off": 1001, "facilit": 1002, "blob": 1003, "seamless": 1004, "gradiomesop": 1005, "git": 1006, "condit": 1007, "dict": 1008, "occasion": 1009, "5etfw": 1010, "all": 1011, "releas": 1012, "audio": 1013, "updat": 1014, "limit": 1015, "produc": 1016, "advanc": 1017, "cdns": 1018, "whi": 1019, "import": 1020, "show": 1021, "wwwillchen": 1022, "join": 1023, "doubl": 1024, "lab": 1025, "below": 1026, "local": 1027, "modifi": 1028, "rank": 1029, "trick": 1030, "microphon": 1031, "less": 1032, "push": 1033, "state": 1034, "doesn": 1035, "welcom": 1036, "datapick": 1037, "breakpoint": 1038, "defined__": 1039, "tradit": 1040, "signific": 1041, "instal": 1042, "cmd": 1043, "classif": 1044, "refer": 1045, "insert_web_compon": 1046, "free": 1047, "maintain": 1048, "sign": 1049, "db": 1050, "privileg": 1051, "operating_system": 1052, "instruct": 1053, "your_project_id": 1054, "resolv": 1055, "session": 1056, "pic": 1057, "risk": 1058, "ipython": 1059, "rais": 1060, "type": 1061, "establish": 1062, "answer": 1063, "generat": 1064, "lot": 1065, "specif": 1066, "step": 1067, "like": 1068, "titl": 1069, "behind": 1070, "accommod": 1071, "date_pick": 1072, "accumul": 1073, "ctrl": 1074, "symbol": 1075, "field": 1076, "three": 1077, "fit": 1078, "plugin": 1079, "default_factori": 1080, "anoth": 1081, "relax": 1082, "reload": 1083, "top": 1084, "query_param": 1085, "favicon": 1086, "headlin": 1087, "regist": 1088, "version": 1089, "markdown": 1090, "incred": 1091, "walk": 1092, "on_auth_chang": 1093, "append": 1094, "unifi": 1095, "abc": 1096, "twitter": 1097, "box_shadow": 1098, "dynam": 1099, "launch": 1100, "expos": 1101, "_first_": 1102, "progress_spinn": 1103, "on_blur": 1104, "effortless": 1105, "start_chat": 1106, "ident": 1107, "encourag": 1108, "navig": 1109, "instanti": 1110, "buttontogglebutton": 1111, "servic": 1112, "safest": 1113, "price": 1114, "table_nam": 1115, "on_chang": 1116, "prod": 1117, "adc": 1118, "foo": 1119, "dictionari": 1120, "content_slide_toggl": 1121, "true": 1122, "gray": 1123, "automat": 1124, "keep": 1125, "64": 1126, "embrac": 1127, "elif": 1128, "vscode": 1129, "mdash": 1130, "other": 1131, "toggle_them": 1132, "structur": 1133, "tyagi": 1134, "variat": 1135, "wsgi_app": 1136, "singl": 1137, "site": 1138, "chrome": 1139, "due": 1140, "object": 1141, "further": 1142, "bill": 1143, "correspond": 1144, "serv": 1145, "dom": 1146, "random": 1147, "read": 1148, "mesop_state_sess": 1149, "click_exampl": 1150, "most": 1151, "posit": 1152, "design": 1153, "plumb": 1154, "traffic": 1155, "set_gemini_api_key": 1156, "await": 1157, "simplic": 1158, "00000024": 1159, "mesop_colab_getting_start": 1160, "chat_input": 1161, "languag": 1162, "default": 1163, "viewer": 1164, "txt": 1165, "detect": 1166, "trace": 1167, "inter": 1168, "remind": 1169, "pre": 1170, "mkdir": 1171, "path": 1172, "cach": 1173, "none": 1174, "value1": 1175, "onto": 1176, "display_convers": 1177, "slotclass": 1178, "agnost": 1179, "ffffff": 1180, "server": 1181, "what": 1182, "your": 1183, "light": 1184, "when": 1185, "safe": 1186, "on_ent": 1187, "check": 1188, "area": 1189, "frame": 1190, "bottom": 1191, "pageast": 1192, "sequenti": 1193, "manual_sc": 1194, "click_navigate_button": 1195, "view": 1196, "code_demo": 1197, "ecosystem": 1198, "especi": 1199, "inform": 1200, "page_b": 1201, "were": 1202, "680": 1203, "dialog_st": 1204, "fair": 1205, "ad": 1206, "command": 1207, "max": 1208, "cursor": 1209, "text": 1210, "low": 1211, "update_st": 1212, "20240229": 1213, "directori": 1214, "traceback": 1215, "overflow_x": 1216, "2024": 1217, "let": 1218, "_root": 1219, "50": 1220, "linux": 1221, "themevar": 1222, "descript": 1223, "block": 1224, "ani": 1225, "chang": 1226, "indic": 1227, "slide": 1228, "getusermedia": 1229, "chat": 1230, "starter_kit": 1231, "powershel": 1232, "initial_valu": 1233, "abil": 1234, "button": 1235, "5px": 1236, "rang": 1237, "node": 1238, "fulli": 1239, "messag": 1240, "possibl": 1241, "secur": 1242, "debug": 1243, "set_page_titl": 1244, "hello": 1245, "best": 1246, "jpeg": 1247, "drawback": 1248, "format": 1249, "stale": 1250, "better": 1251, "special": 1252, "don": 1253, "selectopenedchangeev": 1254, "interfac": 1255, "written": 1256, "tip": 1257, "box_siz": 1258, "target": 1259, "expertis": 1260, "bottleneck": 1261, "some": 1262, "approach": 1263, "which": 1264, "includ": 1265, "pyproject": 1266, "transport": 1267, "grid": 1268, "rest": 1269, "315": 1270, "def": 1271, "mechan": 1272, "screen": 1273, "unfortun": 1274, "communiti": 1275, "480": 1276, "get_al": 1277, "int": 1278, "integ": 1279, "pathmap": 1280, "progressbaranimationendev": 1281, "content_checkbox": 1282, "continu": 1283, "pro": 1284, "valuabl": 1285, "next": 1286, "initi": 1287, "children": 1288, "_ondecr": 1289, "request": 1290, "eventu": 1291, "tmp": 1292, "proxi": 1293, "on_image_upload": 1294, "height": 1295, "quickstart": 1296, "setattr": 1297, "enabl": 1298, "token": 1299, "tailwindcss": 1300, "ai": 1301, "complex": 1302, "lost": 1303, "suitabl": 1304, "10": 1305, "ensur": 1306, "pin": 1307, "mesop_static_url_path": 1308, "scope": 1309, "shown": 1310, "fewer": 1311, "move": 1312, "handl": 1313, "entri": 1314, "bad": 1315, "treat": 1316, "rerun": 1317, "runtime_vers": 1318, "add": 1319, "exact": 1320, "busi": 1321, "effici": 1322, "concaten": 1323, "support": 1324, "flash": 1325, "edgy0afg6u": 1326, "memori": 1327, "budget": 1328, "viewabl": 1329, "yaml": 1330, "firestor": 1331, "unhandl": 1332, "basic": 1333, "is_open": 1334, "start": 1335, "resiz": 1336, "fruit": 1337, "b9e1ff": 1338, "readm": 1339, "32px": 1340, "ps1": 1341, "ttl": 1342, "__native__": 1343, "also": 1344, "smbah5leri": 1345, "generic": 1346, "wrapper": 1347, "alic": 1348, "named_slot": 1349, "row": 1350, "saniti": 1351, "extens": 1352, "gyroscop": 1353, "togeth": 1354, "everi": 1355, "retain": 1356, "lower": 1357, "two": 1358, "difficult": 1359, "genai": 1360, "hl_line": 1361, "priorit": 1362, "val": 1363, "same": 1364, "icon": 1365, "couldn": 1366, "binari": 1367, "much": 1368, "philosophi": 1369, "tier": 1370, "prebuilt": 1371, "rememb": 1372, "high": 1373, "failur": 1374, "word": 1375, "outer": 1376, "eas": 1377, "within": 1378, "concurr": 1379, "us": 1380, "debugg": 1381, "autosc": 1382, "namespac": 1383, "verbos": 1384, "bucket": 1385, "tedious": 1386, "over": 1387, "colab_run": 1388, "tupl": 1389, "whichev": 1390, "autocomplet": 1391, "switcher": 1392, "maco": 1393, "deploy": 1394, "color": 1395, "densiti": 1396, "streamlit": 1397, "alreadi": 1398, "fetch": 1399, "aj4rqzs2mmwvxfo": 1400, "disallow": 1401, "prevent": 1402, "page_a": 1403, "layoutslot": 1404, "sort": 1405, "scalabl": 1406, "privacypolicyurl": 1407, "bodi": 1408, "assign": 1409, "cover": 1410, "print": 1411, "highlight": 1412, "focus": 1413, "py": 1414, "part": 1415, "clickev": 1416, "context": 1417, "easi": 1418, "insensit": 1419, "7anchay": 1420, "you": 1421, "tooltip": 1422, "__component__": 1423, "toggl": 1424, "face": 1425, "materi": 1426, "would": 1427, "trail": 1428, "excel": 1429, "dsl": 1430, "len": 1431, "lambda": 1432, "shift": 1433, "grid_template_column": 1434, "ifram": 1435, "toc": 1436, "made": 1437, "though": 1438, "commit": 1439, "footer": 1440, "restart": 1441, "enum": 1442, "download": 1443, "100": 1444, "repres": 1445, "protocol": 1446, "_this": 1447, "blue": 1448, "venv": 1449, "process": 1450, "outsid": 1451, "hub": 1452, "purpl": 1453, "streamlin": 1454, "module_nam": 1455, "count": 1456, "demo": 1457, "annot": 1458, "gemini_1_5_pro": 1459, "ui": 1460, "logic": 1461, "encod": 1462, "dynapubow3aft47i": 1463, "abl": 1464, "slide_toggl": 1465, "hf": 1466, "sensit": 1467, "popular": 1468, "wildcard": 1469, "correct": 1470, "troubleshoot": 1471, "layout": 1472, "slowli": 1473, "save": 1474, "iter": 1475, "congrat": 1476, "colorfrom": 1477, "intend": 1478, "show_menu_button": 1479, "confirm": 1480, "flexbox": 1481, "llm": 1482, "core": 1483, "protect": 1484, "workaround": 1485, "knowledg": 1486, "generativeai": 1487, "result": 1488, "bat": 1489, "element": 1490, "outlin": 1491, "june": 1492, "127": 1493, "900": 1494, "explor": 1495, "rout": 1496, "touch": 1497, "anti": 1498, "congratul": 1499, "websocket": 1500, "well": 1501, "plenti": 1502, "slot": 1503, "contact": 1504, "been": 1505, "plot": 1506, "gap": 1507, "mount": 1508, "inputenterev": 1509, "dswharshit": 1510, "caveat": 1511, "param_nam": 1512, "datepickerchangeev": 1513, "deprec": 1514, "gunicorn": 1515, "offici": 1516, "interoper": 1517, "argument": 1518, "variabl": 1519, "issu": 1520, "auth": 1521, "content": 1522, "localroot": 1523, "var": 1524, "nav": 1525, "self": 1526, "invalid": 1527, "50vh": 1528, "overflow_i": 1529, "serial": 1530, "card": 1531, "flex_grow": 1532, "reuseexistingserv": 1533, "left": 1534, "receiv": 1535, "get": 1536, "exc": 1537, "goal": 1538, "allowed_iframe_par": 1539, "accordion": 1540, "loadev": 1541, "40px": 1542, "untrust": 1543, "robust": 1544, "chatmessag": 1545, "unopinion": 1546, "center": 1547, "generativemodel": 1548, "appli": 1549, "mani": 1550, "dangerously_disable_trusted_typ": 1551, "incom": 1552, "allowed_script_src": 1553, "manual": 1554, "theme_bright": 1555, "huggingfac": 1556, "bi": 1557, "about": 1558, "dialog_act": 1559, "case": 1560, "mesop_state_session_backend_file_base_dir": 1561, "use": 1562, "here": 1563, "general": 1564, "daterangepickerchangeev": 1565, "generation_config": 1566, "serious": 1567, "happen": 1568, "viewport_s": 1569, "max_token": 1570, "affin": 1571, "srv": 1572, "addit": 1573, "attract": 1574, "s9ag_yndl0m": 1575, "build": 1576, "direct": 1577, "v1": 1578, "100vh": 1579, "option": 1580, "screenshot": 1581, "remot": 1582, "home_pag": 1583, "claude_api_key": 1584, "datetim": 1585, "famili": 1586, "manag": 1587, "blank": 1588, "autocompleteopt": 1589, "selectselectionchangeev": 1590, "refus": 1591, "dark_mod": 1592, "queri": 1593, "overridden": 1594, "away": 1595, "liner": 1596, "logo": 1597, "on_upload": 1598, "video": 1599, "devic": 1600, "_or_": 1601, "250px": 1602, "inputev": 1603, "card_head": 1604, "port": 1605, "cloud": 1606, "captur": 1607, "divid": 1608, "anyth": 1609, "border_radius": 1610, "postgresql": 1611, "prioriti": 1612, "tailwind_input": 1613, "front": 1614, "detail": 1615, "privaci": 1616, "control": 1617, "concept": 1618, "fragment": 1619, "stateless": 1620, "mesop_websockets_en": 1621, "soon": 1622, "ssh": 1623, "showcas": 1624, "starter": 1625, "again": 1626, "conclus": 1627, "way": 1628, "base64": 1629, "dispatch": 1630, "either": 1631, "wght": 1632, "work": 1633, "various": 1634, "altern": 1635, "500": 1636, "convers": 1637, "pointer": 1638, "signinsuccessurl": 1639, "kufpisujrw": 1640, "dialog": 1641, "user": 1642, "act": 1643, "whenev": 1644, "background": 1645, "mdn": 1646, "1024": 1647, "danger": 1648, "160": 1649, "technolog": 1650, "acceleromet": 1651, "font": 1652, "confid": 1653, "compat": 1654, "font_siz": 1655, "style": 1656, "summari": 1657, "cdn": 1658, "repeat": 1659, "pagebst": 1660, "architectur": 1661, "larger": 1662, "differenti": 1663, "usag": 1664, "defer": 1665, "progress_bar": 1666, "dedic": 1667, "2rem": 1668, "determin": 1669, "768px": 1670, "680px": 1671, "matplotlib": 1672, "cell": 1673, "modul": 1674, "checkboxchangeev": 1675, "flask": 1676, "dev": 1677, "payload": 1678, "where": 1679, "disabl": 1680, "ubuntu22": 1681, "wide": 1682, "recogn": 1683, "root": 1684, "end": 1685, "return": 1686, "sophist": 1687, "solut": 1688, "replica": 1689, "nonc": 1690, "weight": 1691, "slidervaluechangeev": 1692, "endpoint": 1693, "anchor": 1694, "goe": 1695, "sonnet": 1696, "filenam": 1697, "minut": 1698, "quiet": 1699, "search": 1700, "pad": 1701, "new": 1702, "a_web_compon": 1703, "clipboard": 1704, "mediadevic": 1705, "dispatchev": 1706, "reli": 1707, "switch": 1708, "checkbox": 1709, "stringent": 1710, "googl": 1711, "isol": 1712, "hate": 1713, "spec": 1714, "html": 1715, "actual": 1716, "page2": 1717, "form": 1718, "date_range_pick": 1719, "theme": 1720, "level": 1721, "decreas": 1722, "1028": 1723, "friction": 1724, "order": 1725, "snippet": 1726, "understand": 1727, "good": 1728, "href": 1729, "calc": 1730, "execut": 1731, "it": 1732, "scratch": 1733, "convent": 1734, "separ": 1735, "critic": 1736, "inputblurev": 1737, "deal": 1738, "latest": 1739, "conversation_pag": 1740, "how": 1741, "align_item": 1742, "reus": 1743, "ambigu": 1744, "function": 1745, "store": 1746, "30": 1747, "web_compon": 1748, "mutabl": 1749, "combin": 1750, "close_model_picker_dialog": 1751, "enter": 1752, "banana": 1753, "connect": 1754, "gcp_project": 1755, "mutableclass": 1756, "instead": 1757, "error": 1758, "width": 1759, "1804890091816644906": 1760, "folder": 1761, "queu": 1762, "straight": 1763, "relat": 1764, "describ": 1765, "than": 1766, "adjust": 1767, "xs": 1768, "write": 1769, "bordersid": 1770, "usual": 1771, "fix": 1772, "webev": 1773, "prompt": 1774, "improv": 1775, "mel": 1776, "str": 1777, "databas": 1778, "wrap": 1779, "remoteroot": 1780, "innerhtml": 1781, "chat_sess": 1782, "program": 1783, "particular": 1784, "prototyp": 1785, "data": 1786, "varieti": 1787, "group": 1788, "myapppath": 1789, "fraction": 1790, "earlier": 1791, "easier": 1792, "initial_input_valu": 1793, "png": 1794, "substr": 1795, "inadvert": 1796, "umd": 1797, "card_cont": 1798, "swap": 1799, "ttls": 1800, "provid": 1801, "constraint": 1802, "media": 1803, "contain": 1804, "regular": 1805, "proper": 1806, "who": 1807, "race": 1808, "strong": 1809, "lock": 1810, "milk": 1811, "collect": 1812, "copi": 1813, "jsdelivr": 1814, "native_textarea": 1815, "localhost": 1816, "wsgi": 1817, "asset": 1818, "mutat": 1819, "equival": 1820, "in": 1821, "connection_uri": 1822, "typeerror": 1823, "bg": 1824, "player": 1825, "framework": 1826, "youtub": 1827, "send": 1828, "ide": 1829, "startswith": 1830, "transmit": 1831, "demonstr": 1832, "simplest": 1833, "notic": 1834, "follow": 1835, "log": 1836, "steeper": 1837, "machin": 1838, "abstract": 1839, "llm_respons": 1840, "is_desktop": 1841, "colorto": 1842, "slidetogglechangeev": 1843, "kit": 1844, "pros": 1845, "avoid": 1846, "debugpi": 1847, "impos": 1848, "between": 1849, "ahd": 1850, "is_load": 1851, "0003": 1852}
gen/default__vector_store.json ADDED
The diff for this file is too large to render. See raw diff
 
gen/docstore.json ADDED
The diff for this file is too large to render. See raw diff
 
gen/graph_store.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"graph_dict": {}}
gen/image__vector_store.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"embedding_dict": {}, "text_id_to_ref_doc_id": {}, "metadata_dict": {}}
gen/index_store.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"index_store/data": {"b533d887-a12a-40e8-8757-99e7e60ee61e": {"__type__": "vector_store", "__data__": "{\"index_id\": \"b533d887-a12a-40e8-8757-99e7e60ee61e\", \"summary\": null, \"nodes_dict\": {\"36336cd9-b767-4990-8ca3-dc1e239de74b\": \"36336cd9-b767-4990-8ca3-dc1e239de74b\", \"512e7f6d-eb2b-470a-9942-b1f254ce4c5d\": \"512e7f6d-eb2b-470a-9942-b1f254ce4c5d\", \"bdeca4ed-43eb-46c7-96bc-a1b99ee309af\": \"bdeca4ed-43eb-46c7-96bc-a1b99ee309af\", \"95b821ce-9836-45d2-a4c1-508519adb30c\": \"95b821ce-9836-45d2-a4c1-508519adb30c\", \"d4f0a1f2-30b1-4035-a77e-45104110d252\": \"d4f0a1f2-30b1-4035-a77e-45104110d252\", \"66965201-2b05-4534-9075-198712a88086\": \"66965201-2b05-4534-9075-198712a88086\", \"d2226f67-55ac-432e-a8a3-9bfef7335960\": \"d2226f67-55ac-432e-a8a3-9bfef7335960\", \"6874a5fe-f399-4e4c-a01b-1719a3fedbbb\": \"6874a5fe-f399-4e4c-a01b-1719a3fedbbb\", \"0307c857-0357-4d6e-9f06-b71f162fd3b9\": \"0307c857-0357-4d6e-9f06-b71f162fd3b9\", \"5fa3430a-338a-4774-bb7c-b4f245e50ccf\": \"5fa3430a-338a-4774-bb7c-b4f245e50ccf\", \"17441bee-f5fc-4539-a84d-ce80ef0b6d14\": \"17441bee-f5fc-4539-a84d-ce80ef0b6d14\", \"b7b7c2d6-a49f-44fe-9d5e-48c055eb95f9\": \"b7b7c2d6-a49f-44fe-9d5e-48c055eb95f9\", \"3e18bb80-f7a4-4d02-9a27-b215fb384d33\": \"3e18bb80-f7a4-4d02-9a27-b215fb384d33\", \"ffd51664-762a-4683-959a-721e2b765762\": \"ffd51664-762a-4683-959a-721e2b765762\", \"3e428763-19aa-4b34-af64-ca1e462a7b34\": \"3e428763-19aa-4b34-af64-ca1e462a7b34\", \"0a780b9a-41ae-4f15-9f09-1080748e8af9\": \"0a780b9a-41ae-4f15-9f09-1080748e8af9\", \"bacbe011-91dc-4a1d-8f3c-5f94cb5f1d70\": \"bacbe011-91dc-4a1d-8f3c-5f94cb5f1d70\", \"d48de6c9-8648-46f5-a3b3-5e96e4cf785f\": \"d48de6c9-8648-46f5-a3b3-5e96e4cf785f\", \"77358e4b-2fe1-411e-9300-485b7dbd2578\": \"77358e4b-2fe1-411e-9300-485b7dbd2578\", \"fa80652c-a702-4725-a523-0a890d09c000\": \"fa80652c-a702-4725-a523-0a890d09c000\", \"dbfef453-b072-44a4-a420-29178deb0740\": \"dbfef453-b072-44a4-a420-29178deb0740\", \"5a08c4d8-41af-43ea-ab8a-674aefa19b58\": \"5a08c4d8-41af-43ea-ab8a-674aefa19b58\", \"c8046817-3105-46b5-842e-4832dab4d771\": \"c8046817-3105-46b5-842e-4832dab4d771\", \"5e8fa2d3-31af-4e68-881a-59991f303cbd\": \"5e8fa2d3-31af-4e68-881a-59991f303cbd\", \"b14d5a45-c2a5-4468-96da-2d4529883bef\": \"b14d5a45-c2a5-4468-96da-2d4529883bef\", \"535eb2e2-133f-4d17-81e8-973a3ef98429\": \"535eb2e2-133f-4d17-81e8-973a3ef98429\", \"6545e6b2-85e8-49fa-817b-7466f23d5105\": \"6545e6b2-85e8-49fa-817b-7466f23d5105\", \"979300ce-691d-4cc7-bcb3-c66de855c103\": \"979300ce-691d-4cc7-bcb3-c66de855c103\", \"1503a15a-e52d-4157-8fde-2a5b6cd58bf5\": \"1503a15a-e52d-4157-8fde-2a5b6cd58bf5\", \"0e8bd1e1-503c-4435-883f-e4da1e62fbd0\": \"0e8bd1e1-503c-4435-883f-e4da1e62fbd0\", \"f7cf1b67-6bbe-4969-a3f3-9eee0538c56c\": \"f7cf1b67-6bbe-4969-a3f3-9eee0538c56c\", \"28293154-1714-44e0-9861-91a307ac905a\": \"28293154-1714-44e0-9861-91a307ac905a\", \"0f9ad88f-fa1b-4cb5-b59b-7c2618f15aaf\": \"0f9ad88f-fa1b-4cb5-b59b-7c2618f15aaf\", \"26e302c3-f600-4ab2-8f6b-df5e67d0ef92\": \"26e302c3-f600-4ab2-8f6b-df5e67d0ef92\", \"b89e4cdc-3856-4fc0-a6ad-e60ba6b1bfc2\": \"b89e4cdc-3856-4fc0-a6ad-e60ba6b1bfc2\", \"bd19f437-493b-4423-a3e9-340f42105ec6\": \"bd19f437-493b-4423-a3e9-340f42105ec6\", \"a59738bf-cffd-425b-bf29-344244f6b2a8\": \"a59738bf-cffd-425b-bf29-344244f6b2a8\", \"0fbe61dc-2c0d-44aa-87fd-d75412b297a0\": \"0fbe61dc-2c0d-44aa-87fd-d75412b297a0\", \"d1e742c3-9fc6-477d-b7a5-e636382bfb11\": \"d1e742c3-9fc6-477d-b7a5-e636382bfb11\", \"953d7155-506b-4dd9-acec-556ea26c4189\": \"953d7155-506b-4dd9-acec-556ea26c4189\", \"136be1c1-26fd-4f0e-8740-6f23fcf8c291\": \"136be1c1-26fd-4f0e-8740-6f23fcf8c291\", \"a58ef2ed-33f3-472e-a843-b036f9a09c6e\": \"a58ef2ed-33f3-472e-a843-b036f9a09c6e\", \"8b6afc07-df5b-47d0-9fc4-077990688798\": \"8b6afc07-df5b-47d0-9fc4-077990688798\", \"e4b90edd-7114-476a-822d-1839d3669ccf\": \"e4b90edd-7114-476a-822d-1839d3669ccf\", \"011e05f9-35fe-437a-8537-1db762414af0\": \"011e05f9-35fe-437a-8537-1db762414af0\", \"f9e0ca18-6a9d-4a51-ba64-e0c01b4f5b7d\": \"f9e0ca18-6a9d-4a51-ba64-e0c01b4f5b7d\", \"984433b9-5cfb-448b-a182-014e0f363b15\": \"984433b9-5cfb-448b-a182-014e0f363b15\", \"772cf89d-4112-4bba-b4c2-d8c1a6d2965a\": \"772cf89d-4112-4bba-b4c2-d8c1a6d2965a\", \"0145b7f9-fe50-4125-904c-496a9005d46d\": \"0145b7f9-fe50-4125-904c-496a9005d46d\", \"15944436-2e90-4c94-8424-bd74934b1b12\": \"15944436-2e90-4c94-8424-bd74934b1b12\", \"e3b0702e-36fc-4b5f-ac9d-8f667fd73d83\": \"e3b0702e-36fc-4b5f-ac9d-8f667fd73d83\", \"7b5ee85f-02c5-410e-b6a1-ebdf86db38f2\": \"7b5ee85f-02c5-410e-b6a1-ebdf86db38f2\", \"9bb619b3-272e-470f-b1f5-c5fbdeb8b9b4\": \"9bb619b3-272e-470f-b1f5-c5fbdeb8b9b4\", \"0bcc1d56-09df-476d-8a3f-93bed6c9fe30\": \"0bcc1d56-09df-476d-8a3f-93bed6c9fe30\", \"7fa91221-dabc-4d2a-96a9-311665c319e6\": \"7fa91221-dabc-4d2a-96a9-311665c319e6\", \"2d00688e-81bc-4695-84be-13b9f50ede34\": \"2d00688e-81bc-4695-84be-13b9f50ede34\", \"4d84b1da-e2d5-460f-abb0-15f904454816\": \"4d84b1da-e2d5-460f-abb0-15f904454816\", \"8e1e9ad0-4092-4515-889d-cfba4ff3bc43\": \"8e1e9ad0-4092-4515-889d-cfba4ff3bc43\", \"f52d2420-4bac-4c5a-a645-781b8d3f8f33\": \"f52d2420-4bac-4c5a-a645-781b8d3f8f33\", \"97712d23-7d89-4128-b0d6-1fc44a8ffaab\": \"97712d23-7d89-4128-b0d6-1fc44a8ffaab\", \"1ac3df0c-4509-4c26-813a-54868d0d07f9\": \"1ac3df0c-4509-4c26-813a-54868d0d07f9\", \"c71a3a72-2f49-4768-aaef-07bbb01d391a\": \"c71a3a72-2f49-4768-aaef-07bbb01d391a\", \"031cdb6b-9997-454d-8cd2-ea1464eb8f4c\": \"031cdb6b-9997-454d-8cd2-ea1464eb8f4c\", \"3ea7eed6-bbf9-4a2f-803d-c9a56c892cb7\": \"3ea7eed6-bbf9-4a2f-803d-c9a56c892cb7\", \"64ab44a2-5d7b-48c2-8062-5e06c4674024\": \"64ab44a2-5d7b-48c2-8062-5e06c4674024\", \"75f435f0-1bf9-4133-9623-afdd5e1032c5\": \"75f435f0-1bf9-4133-9623-afdd5e1032c5\", \"9815238b-a53c-48cb-9c76-601c44b8374f\": \"9815238b-a53c-48cb-9c76-601c44b8374f\", \"190e9347-3808-43e6-873b-b40c2182d4eb\": \"190e9347-3808-43e6-873b-b40c2182d4eb\", \"f49447e7-0831-48ca-9ba3-e4c304abebc8\": \"f49447e7-0831-48ca-9ba3-e4c304abebc8\", \"3cbc7880-9952-464c-8a15-2152a903ecaf\": \"3cbc7880-9952-464c-8a15-2152a903ecaf\", \"1f7ac1c5-c7ea-4625-92dd-c4aadd9e826c\": \"1f7ac1c5-c7ea-4625-92dd-c4aadd9e826c\", \"c26513ec-3b18-4676-b9a6-d8f12f9d11c5\": \"c26513ec-3b18-4676-b9a6-d8f12f9d11c5\", \"e242b559-4ba5-47ed-9830-cac1a646bd2c\": \"e242b559-4ba5-47ed-9830-cac1a646bd2c\", \"11a49097-67d3-4e28-b15f-7c4f7b40ad49\": \"11a49097-67d3-4e28-b15f-7c4f7b40ad49\", \"c866d925-634b-410b-8976-19c25f369ad6\": \"c866d925-634b-410b-8976-19c25f369ad6\", \"ce02245a-5588-460a-8736-6eba78b03a55\": \"ce02245a-5588-460a-8736-6eba78b03a55\", \"49916637-53f6-427b-b766-8e7c95f7382c\": \"49916637-53f6-427b-b766-8e7c95f7382c\", \"9d803114-39ac-4640-af3f-81eefbbd3db3\": \"9d803114-39ac-4640-af3f-81eefbbd3db3\", \"a390c426-0042-4bfb-ada4-d53f8ec08946\": \"a390c426-0042-4bfb-ada4-d53f8ec08946\", \"10b3cf7d-ad32-4801-9bf2-ecdc2cdaa799\": \"10b3cf7d-ad32-4801-9bf2-ecdc2cdaa799\", \"a587aefd-c79e-4661-adb1-36c3a486981f\": \"a587aefd-c79e-4661-adb1-36c3a486981f\", \"faea9600-a10e-47a0-9514-faf8b23aef61\": \"faea9600-a10e-47a0-9514-faf8b23aef61\", \"c1e00bba-23b5-4ae6-a66f-76af22273513\": \"c1e00bba-23b5-4ae6-a66f-76af22273513\", \"61266619-483b-48da-b8b4-c88c739392ee\": \"61266619-483b-48da-b8b4-c88c739392ee\", \"2e1d22f9-e6a5-47ac-a650-2c99252ef91b\": \"2e1d22f9-e6a5-47ac-a650-2c99252ef91b\", \"6d961a2c-8278-496b-87d6-b3ee81591f97\": \"6d961a2c-8278-496b-87d6-b3ee81591f97\", \"77da8b4e-16ed-4f03-a5ff-481bcdb83253\": \"77da8b4e-16ed-4f03-a5ff-481bcdb83253\", \"4c78e3a6-e8b2-4253-9794-bf23ab273532\": \"4c78e3a6-e8b2-4253-9794-bf23ab273532\", \"b4a2cc65-3633-4015-881f-18087f838e05\": \"b4a2cc65-3633-4015-881f-18087f838e05\", \"15ed304d-834e-4a2d-9567-251cd2a28c37\": \"15ed304d-834e-4a2d-9567-251cd2a28c37\", \"ffc65d13-d738-4dc5-991c-fac10a699e49\": \"ffc65d13-d738-4dc5-991c-fac10a699e49\", \"54728cc7-97a7-4710-8d34-812325245023\": \"54728cc7-97a7-4710-8d34-812325245023\", \"08969771-da85-41ac-8639-a70f386535c2\": \"08969771-da85-41ac-8639-a70f386535c2\", \"f4a9c17c-08e4-432e-b577-d45de4a03fb3\": \"f4a9c17c-08e4-432e-b577-d45de4a03fb3\", \"d6e43b98-4e4f-416d-ba59-7fb2e5615acb\": \"d6e43b98-4e4f-416d-ba59-7fb2e5615acb\", \"dde8e056-6f51-4468-8ef2-61c82416e105\": \"dde8e056-6f51-4468-8ef2-61c82416e105\", \"6a57d2f7-9a1c-470d-97f3-83caa709fa4e\": \"6a57d2f7-9a1c-470d-97f3-83caa709fa4e\", \"25d19e04-29a5-40f8-b206-4d154295fc29\": \"25d19e04-29a5-40f8-b206-4d154295fc29\", \"05f1943c-e43d-47ed-b5ff-b2d6ff61a224\": \"05f1943c-e43d-47ed-b5ff-b2d6ff61a224\", \"a000753f-aebd-48d2-a674-e41fc4eddd74\": \"a000753f-aebd-48d2-a674-e41fc4eddd74\", \"eae33b69-4e34-47f7-8a79-14b37feea538\": \"eae33b69-4e34-47f7-8a79-14b37feea538\", \"2554655c-97a2-4801-97b2-424cc54c0ea0\": \"2554655c-97a2-4801-97b2-424cc54c0ea0\", \"3ef336c4-8dea-4166-b105-2f6f34893d5b\": \"3ef336c4-8dea-4166-b105-2f6f34893d5b\", \"611f0fc9-d1cc-412a-b1d6-d5d94001fd3f\": \"611f0fc9-d1cc-412a-b1d6-d5d94001fd3f\", \"cb9bb334-2443-40c7-b016-a85a7f2614f7\": \"cb9bb334-2443-40c7-b016-a85a7f2614f7\", \"a25cea6e-2ce9-4a77-b313-4f07bdf78e12\": \"a25cea6e-2ce9-4a77-b313-4f07bdf78e12\", \"a5530f7f-90cb-4483-ba2c-6a543c36d793\": \"a5530f7f-90cb-4483-ba2c-6a543c36d793\", \"50453b1f-9824-4f50-9199-bd1f1a1891e0\": \"50453b1f-9824-4f50-9199-bd1f1a1891e0\", \"8046f923-3869-4359-91c2-e33418586865\": \"8046f923-3869-4359-91c2-e33418586865\", \"bfab5682-966e-453f-a492-5eeff64c5c45\": \"bfab5682-966e-453f-a492-5eeff64c5c45\", \"5f61c20f-317c-4b45-96bc-ede251c2da8a\": \"5f61c20f-317c-4b45-96bc-ede251c2da8a\", \"39c6ae22-1933-418f-b339-67a07e1009bd\": \"39c6ae22-1933-418f-b339-67a07e1009bd\", \"5c460d4f-bbef-42b0-90b4-4ab314e5185e\": \"5c460d4f-bbef-42b0-90b4-4ab314e5185e\", \"55d62698-0f40-4e11-80a9-80198d6ed25d\": \"55d62698-0f40-4e11-80a9-80198d6ed25d\", \"3549f538-bb5f-4aa6-90b8-7920abac0342\": \"3549f538-bb5f-4aa6-90b8-7920abac0342\", \"d57a3ceb-01e0-48b7-a972-9885660c003c\": \"d57a3ceb-01e0-48b7-a972-9885660c003c\", \"4fe7c6b6-5936-4148-ac03-4b72352e7ad7\": \"4fe7c6b6-5936-4148-ac03-4b72352e7ad7\", \"4616734a-95c4-4f69-bbf9-e67e79d4af47\": \"4616734a-95c4-4f69-bbf9-e67e79d4af47\", \"b7b065fc-aada-4e20-aa0b-42ccf7068278\": \"b7b065fc-aada-4e20-aa0b-42ccf7068278\", \"f5289cd9-182a-4d7c-a5bf-33af332a233b\": \"f5289cd9-182a-4d7c-a5bf-33af332a233b\", \"7f1c6efd-1208-4319-beae-0fef2b15a52c\": \"7f1c6efd-1208-4319-beae-0fef2b15a52c\", \"54e9eaf5-a7d2-412a-89e8-0832c19759ad\": \"54e9eaf5-a7d2-412a-89e8-0832c19759ad\", \"d10e5a4a-c787-4f3b-bfba-ca2938c2016a\": \"d10e5a4a-c787-4f3b-bfba-ca2938c2016a\", \"4ef6caba-292d-475f-afc9-7adec1b14634\": \"4ef6caba-292d-475f-afc9-7adec1b14634\", \"038775da-f8b0-4718-9f7a-fed01b653003\": \"038775da-f8b0-4718-9f7a-fed01b653003\", \"ee418c6d-8d3a-4678-aa65-9cdd712897f3\": \"ee418c6d-8d3a-4678-aa65-9cdd712897f3\", \"7ae3d0c5-1f7f-4d7f-aaf2-5b71363480f4\": \"7ae3d0c5-1f7f-4d7f-aaf2-5b71363480f4\", \"206eb5ae-4b72-41f7-9fbf-5f6d9cd607cc\": \"206eb5ae-4b72-41f7-9fbf-5f6d9cd607cc\", \"96452d2f-a0e5-4072-a1ae-41e3a469e37a\": \"96452d2f-a0e5-4072-a1ae-41e3a469e37a\", \"9ce0d2f9-0471-47e2-829f-d40b6ef83127\": \"9ce0d2f9-0471-47e2-829f-d40b6ef83127\", \"726e91bb-aa15-4f03-bacd-229998bd2cec\": \"726e91bb-aa15-4f03-bacd-229998bd2cec\", \"5bc7f307-c5ef-464b-80db-d6c9512fae67\": \"5bc7f307-c5ef-464b-80db-d6c9512fae67\", \"d7162ff3-2ad0-4b80-903a-10cdf08811d6\": \"d7162ff3-2ad0-4b80-903a-10cdf08811d6\", \"70c8a337-ac30-4d8b-b7b1-e882aea895f3\": \"70c8a337-ac30-4d8b-b7b1-e882aea895f3\", \"acb8a98e-8a02-4483-9892-5aeddb88ed6d\": \"acb8a98e-8a02-4483-9892-5aeddb88ed6d\", \"3dd99a44-1da3-4d7c-b429-7f9dc7b2124e\": \"3dd99a44-1da3-4d7c-b429-7f9dc7b2124e\", \"cefa3b76-4c5e-46c4-9820-39b052840e00\": \"cefa3b76-4c5e-46c4-9820-39b052840e00\", \"94a2e2cb-0f67-4947-84c6-b558d6efafcc\": \"94a2e2cb-0f67-4947-84c6-b558d6efafcc\", \"3bc2376f-8f9f-4046-b560-b769e9116244\": \"3bc2376f-8f9f-4046-b560-b769e9116244\", \"336aafad-a098-4e5c-bfed-16901f97e0fa\": \"336aafad-a098-4e5c-bfed-16901f97e0fa\", \"5f4a6308-8b68-45bd-aff1-e44da93f9027\": \"5f4a6308-8b68-45bd-aff1-e44da93f9027\", \"4f792d3c-a348-434f-bb27-d226a8e4d629\": \"4f792d3c-a348-434f-bb27-d226a8e4d629\", \"8c8f13b9-1a4d-469c-9273-a0f756c5b6fb\": \"8c8f13b9-1a4d-469c-9273-a0f756c5b6fb\", \"333e7811-7bfe-4636-919b-7f4bf02553fb\": \"333e7811-7bfe-4636-919b-7f4bf02553fb\", \"e640fd06-cd18-4080-9ef9-8c2128411872\": \"e640fd06-cd18-4080-9ef9-8c2128411872\", \"08e9f8eb-36c6-4a3e-aae5-577a764990ce\": \"08e9f8eb-36c6-4a3e-aae5-577a764990ce\", \"91de0f74-ce89-4104-8224-4fbd5a350a72\": \"91de0f74-ce89-4104-8224-4fbd5a350a72\", \"e217ed6b-a4b5-429e-a855-4963292f85e1\": \"e217ed6b-a4b5-429e-a855-4963292f85e1\", \"c7c50b98-1ca7-428d-996f-57b1a949a35d\": \"c7c50b98-1ca7-428d-996f-57b1a949a35d\", \"3f35d69e-60da-46b0-97d3-f15a14246af9\": \"3f35d69e-60da-46b0-97d3-f15a14246af9\", \"bd0698c7-193c-41bd-97ba-4d9153eb901d\": \"bd0698c7-193c-41bd-97ba-4d9153eb901d\", \"5ec09442-3e42-40e8-a1a6-1f478d3dec12\": \"5ec09442-3e42-40e8-a1a6-1f478d3dec12\", \"511feec1-24f0-49ba-ac6a-1ee8915cbe76\": \"511feec1-24f0-49ba-ac6a-1ee8915cbe76\", \"de15e32e-f7a3-465b-af29-f5e5fb760f4e\": \"de15e32e-f7a3-465b-af29-f5e5fb760f4e\", \"bffe85f5-2c26-42fb-878b-075625182cd6\": \"bffe85f5-2c26-42fb-878b-075625182cd6\", \"c7789b86-1b6c-44e3-a85c-e8719ec48c9a\": \"c7789b86-1b6c-44e3-a85c-e8719ec48c9a\", \"01a2d164-10af-4e1e-a310-34e9636e3caf\": \"01a2d164-10af-4e1e-a310-34e9636e3caf\", \"20e13944-49ee-417e-a6d5-4656ca2eab32\": \"20e13944-49ee-417e-a6d5-4656ca2eab32\", \"3e369e68-be0e-447a-af68-247ced28c899\": \"3e369e68-be0e-447a-af68-247ced28c899\", \"549fcf72-bbd7-4ff7-95e0-30310661db83\": \"549fcf72-bbd7-4ff7-95e0-30310661db83\", \"85e94c05-7de2-4ad5-85da-b5cf51bd8e74\": \"85e94c05-7de2-4ad5-85da-b5cf51bd8e74\", \"eaec3e4c-cb6f-4507-be81-05569f9a527d\": \"eaec3e4c-cb6f-4507-be81-05569f9a527d\", \"8322a2fc-ee55-4ebb-a9d6-05b0bf9d5def\": \"8322a2fc-ee55-4ebb-a9d6-05b0bf9d5def\", \"e60f8a31-179c-42fe-815a-8f24fa38c298\": \"e60f8a31-179c-42fe-815a-8f24fa38c298\", \"d80710a3-65c8-49f6-90e8-63d7330c7f73\": \"d80710a3-65c8-49f6-90e8-63d7330c7f73\", \"ff252da9-adfc-435f-995c-21bebffe3dee\": \"ff252da9-adfc-435f-995c-21bebffe3dee\", \"7b224da5-d57f-48e0-9e2b-92fcdeadefc9\": \"7b224da5-d57f-48e0-9e2b-92fcdeadefc9\", \"3b4fd366-28a5-40ee-8fbc-4eb7cf350eea\": \"3b4fd366-28a5-40ee-8fbc-4eb7cf350eea\", \"0d1e155a-1692-4a05-af24-92fca8b52edd\": \"0d1e155a-1692-4a05-af24-92fca8b52edd\", \"9d8751f8-52d5-4391-9759-d41f116ada9f\": \"9d8751f8-52d5-4391-9759-d41f116ada9f\", \"83c238b5-0784-4830-926a-a166c167e8a2\": \"83c238b5-0784-4830-926a-a166c167e8a2\", \"5f9d6982-172a-47d0-bbf4-b2eb80d36ace\": \"5f9d6982-172a-47d0-bbf4-b2eb80d36ace\", \"3da71708-cd60-4b47-ac9a-606bf77bd347\": \"3da71708-cd60-4b47-ac9a-606bf77bd347\", \"f56b84f7-29e9-4f97-a649-761c0059b949\": \"f56b84f7-29e9-4f97-a649-761c0059b949\", \"9e9c72e1-fc60-4620-bf0a-b9f6f6f8c189\": \"9e9c72e1-fc60-4620-bf0a-b9f6f6f8c189\", \"4c5e419f-01a8-483e-97d7-4e36dc9c0d5d\": \"4c5e419f-01a8-483e-97d7-4e36dc9c0d5d\", \"6ac8df5e-599a-4d18-8af7-ef515e9f36be\": \"6ac8df5e-599a-4d18-8af7-ef515e9f36be\", \"1748053d-91bc-4cfb-b18a-102edbd98b90\": \"1748053d-91bc-4cfb-b18a-102edbd98b90\", \"3db91b08-cb3a-4f2c-a47b-edf5cb277f19\": \"3db91b08-cb3a-4f2c-a47b-edf5cb277f19\", \"af24c4a7-b553-40af-ad52-583c971e0db6\": \"af24c4a7-b553-40af-ad52-583c971e0db6\", \"0165df5f-530c-4796-be45-ac6cf196c017\": \"0165df5f-530c-4796-be45-ac6cf196c017\", \"5a90de9c-4f9d-4b29-8e7c-48f4fa82efdf\": \"5a90de9c-4f9d-4b29-8e7c-48f4fa82efdf\", \"eaad44f5-b505-4f49-b138-12842a06c32e\": \"eaad44f5-b505-4f49-b138-12842a06c32e\", \"678466c0-1fcb-4fdb-aef7-e0d86f439529\": \"678466c0-1fcb-4fdb-aef7-e0d86f439529\", \"82e7a03d-e229-4073-94d2-6ef7db4e1dd6\": \"82e7a03d-e229-4073-94d2-6ef7db4e1dd6\", \"ee9a77a1-0c80-4de8-b044-beda302c35a6\": \"ee9a77a1-0c80-4de8-b044-beda302c35a6\", \"dbcd94ae-7f4c-4370-8b9a-4717e4352fac\": \"dbcd94ae-7f4c-4370-8b9a-4717e4352fac\", \"e0578432-31fe-45e0-891b-2e2ec00fb498\": \"e0578432-31fe-45e0-891b-2e2ec00fb498\", \"f75d704b-4e53-4544-b624-33f47c61ab44\": \"f75d704b-4e53-4544-b624-33f47c61ab44\", \"7f06efe2-71d3-4e3b-9824-75a172618333\": \"7f06efe2-71d3-4e3b-9824-75a172618333\", \"36a1a026-a4c6-402e-b4ad-88f980088218\": \"36a1a026-a4c6-402e-b4ad-88f980088218\", \"a8589ffe-7580-4bec-b70d-008945ca87c0\": \"a8589ffe-7580-4bec-b70d-008945ca87c0\", \"f241f065-f4ec-4cd3-af84-a3a0a22d4d96\": \"f241f065-f4ec-4cd3-af84-a3a0a22d4d96\", \"4a2514bf-466d-45bf-87e4-e16afbeb05e2\": \"4a2514bf-466d-45bf-87e4-e16afbeb05e2\", \"bb1e1f42-7fba-4552-87d6-24ca392ae42f\": \"bb1e1f42-7fba-4552-87d6-24ca392ae42f\", \"1196147e-47cd-4931-89bf-cdf282379fa8\": \"1196147e-47cd-4931-89bf-cdf282379fa8\", \"5f5e6161-0ce0-43d5-a5a5-0882e6eaecb2\": \"5f5e6161-0ce0-43d5-a5a5-0882e6eaecb2\", \"5f29f499-7b9d-4bd3-bd47-8f585fdafefd\": \"5f29f499-7b9d-4bd3-bd47-8f585fdafefd\", \"aaf61f01-c5b2-43e5-b9e6-da7b1d260a9d\": \"aaf61f01-c5b2-43e5-b9e6-da7b1d260a9d\", \"3939aaf2-7c2a-4d6e-8375-9db69531d5a1\": \"3939aaf2-7c2a-4d6e-8375-9db69531d5a1\", \"c2c997d2-ecd1-438d-a0f9-6aaf62791c63\": \"c2c997d2-ecd1-438d-a0f9-6aaf62791c63\", \"28769ea7-9555-443b-82c0-0834b3809f08\": \"28769ea7-9555-443b-82c0-0834b3809f08\", \"ae1e4fb1-d511-406e-b65b-18fe6403fef2\": \"ae1e4fb1-d511-406e-b65b-18fe6403fef2\", \"4a5d490b-7674-4b66-91c5-94d4fc7158d7\": \"4a5d490b-7674-4b66-91c5-94d4fc7158d7\", \"67074375-015c-493c-a5a4-367e7c2da34a\": \"67074375-015c-493c-a5a4-367e7c2da34a\", \"ca42100f-d26e-41ac-89a9-0c16cf97c946\": \"ca42100f-d26e-41ac-89a9-0c16cf97c946\", \"8cf5fb38-ee66-4ec0-9227-8dbf9fd0c81f\": \"8cf5fb38-ee66-4ec0-9227-8dbf9fd0c81f\", \"67cfba75-8604-44fa-aacd-14f7c5857272\": \"67cfba75-8604-44fa-aacd-14f7c5857272\", \"9fb4f43e-9644-4ffc-981a-f4d656bf971c\": \"9fb4f43e-9644-4ffc-981a-f4d656bf971c\", \"ceec1f7d-eb14-48cc-8cf7-d5c9059608b5\": \"ceec1f7d-eb14-48cc-8cf7-d5c9059608b5\", \"b561e1dd-a4fc-4f5f-81d1-d93704e79df6\": \"b561e1dd-a4fc-4f5f-81d1-d93704e79df6\", \"9a045051-0c56-42cd-a4bb-de420412b01f\": \"9a045051-0c56-42cd-a4bb-de420412b01f\", \"ea8c83c2-2250-44e5-b61c-e872bed48200\": \"ea8c83c2-2250-44e5-b61c-e872bed48200\", \"a7afe82d-61a0-4795-a286-2dc25ecb4504\": \"a7afe82d-61a0-4795-a286-2dc25ecb4504\", \"73d193ea-99d6-46df-90f7-7fb3a5d4f04e\": \"73d193ea-99d6-46df-90f7-7fb3a5d4f04e\", \"43c23ebf-f239-4d8d-b67a-f95bab6337eb\": \"43c23ebf-f239-4d8d-b67a-f95bab6337eb\", \"0cdf2914-1442-4ad6-9b5e-665d1d8a87a4\": \"0cdf2914-1442-4ad6-9b5e-665d1d8a87a4\", \"449e99ed-9c87-46c4-b77c-494be81d7c18\": \"449e99ed-9c87-46c4-b77c-494be81d7c18\", \"9c0218cc-946b-4050-937d-7c261e7aded4\": \"9c0218cc-946b-4050-937d-7c261e7aded4\", \"20408cdf-9436-462b-b73b-4cec408dce3e\": \"20408cdf-9436-462b-b73b-4cec408dce3e\", \"db54af93-86b2-4e16-9b61-1b0abeca6ba7\": \"db54af93-86b2-4e16-9b61-1b0abeca6ba7\", \"64325d6d-8b9e-48d6-ab01-0f7dc9f905e2\": \"64325d6d-8b9e-48d6-ab01-0f7dc9f905e2\", \"70acf6d6-fa3f-4577-9898-eb1ebd93748a\": \"70acf6d6-fa3f-4577-9898-eb1ebd93748a\", \"89a70275-ce9f-4308-8709-2439ef755a6d\": \"89a70275-ce9f-4308-8709-2439ef755a6d\", \"95097b9d-b27d-4c36-a9a4-fa26c129c51e\": \"95097b9d-b27d-4c36-a9a4-fa26c129c51e\", \"fd4c817d-1f10-461b-9d24-6b5255c4068a\": \"fd4c817d-1f10-461b-9d24-6b5255c4068a\", \"00c99909-95bd-4f9f-9df8-04f0f01d5b5b\": \"00c99909-95bd-4f9f-9df8-04f0f01d5b5b\", \"0e55edd8-585b-4b9d-9b4f-767bf0059915\": \"0e55edd8-585b-4b9d-9b4f-767bf0059915\", \"42e1d3f9-cd80-42c9-94fe-d62db9a33192\": \"42e1d3f9-cd80-42c9-94fe-d62db9a33192\", \"3244f652-a45a-49da-ac65-9bea58fd781a\": \"3244f652-a45a-49da-ac65-9bea58fd781a\", \"917dad06-f0fb-4b73-87a3-155af07ccbd9\": \"917dad06-f0fb-4b73-87a3-155af07ccbd9\", \"2a08f66b-cc92-404c-9c22-63ac0e778f67\": \"2a08f66b-cc92-404c-9c22-63ac0e778f67\", \"029c1d87-94d6-4a06-bd3f-397e5dbb0e17\": \"029c1d87-94d6-4a06-bd3f-397e5dbb0e17\", \"634b0060-6522-4125-83a4-c00912eb5d91\": \"634b0060-6522-4125-83a4-c00912eb5d91\", \"5691747f-e0e9-4d14-a846-6397c02e43dd\": \"5691747f-e0e9-4d14-a846-6397c02e43dd\", \"828b5ee8-d35a-4e53-94a9-d9c2a7dd25b6\": \"828b5ee8-d35a-4e53-94a9-d9c2a7dd25b6\", \"096f84b5-be86-4a9c-b227-e3d9f93b8a71\": \"096f84b5-be86-4a9c-b227-e3d9f93b8a71\", \"676db6ca-f2ee-4a98-9cae-e570925740e3\": \"676db6ca-f2ee-4a98-9cae-e570925740e3\", \"9640ce3a-0fd8-45dc-9852-11aec679c75a\": \"9640ce3a-0fd8-45dc-9852-11aec679c75a\", \"6aecf787-fed0-4b31-9174-db075a6c3a44\": \"6aecf787-fed0-4b31-9174-db075a6c3a44\", \"eac8d6d9-0a9a-4742-8d5c-8d90ed022333\": \"eac8d6d9-0a9a-4742-8d5c-8d90ed022333\", \"e370648b-0ff0-4446-afbf-391d23739812\": \"e370648b-0ff0-4446-afbf-391d23739812\", \"0489d5e0-fe79-4e9a-b74c-37dc0dfdf104\": \"0489d5e0-fe79-4e9a-b74c-37dc0dfdf104\", \"c6c554ff-bd2b-4f07-a432-b402884b94d4\": \"c6c554ff-bd2b-4f07-a432-b402884b94d4\", \"70193cf8-3639-476f-ba30-b1b6136d7bbb\": \"70193cf8-3639-476f-ba30-b1b6136d7bbb\", \"d8867bfe-07ee-4406-9194-fdd50958c126\": \"d8867bfe-07ee-4406-9194-fdd50958c126\", \"b2a9b88b-bb2b-42fa-8e33-c10fb864b95d\": \"b2a9b88b-bb2b-42fa-8e33-c10fb864b95d\", \"5846eea2-6cca-400b-8844-45a035338814\": \"5846eea2-6cca-400b-8844-45a035338814\", \"9f2350ef-c215-42c4-87de-2561aab26480\": \"9f2350ef-c215-42c4-87de-2561aab26480\", \"c56df9a1-41d0-4b10-b619-9575bcf55e6d\": \"c56df9a1-41d0-4b10-b619-9575bcf55e6d\", \"85688eaa-8205-450d-953c-1edc9a07047a\": \"85688eaa-8205-450d-953c-1edc9a07047a\", \"ec9f883e-c2fd-4d65-8237-de53b7734d3d\": \"ec9f883e-c2fd-4d65-8237-de53b7734d3d\", \"d8283bab-578c-41c6-9bb9-6cd8190ac61c\": \"d8283bab-578c-41c6-9bb9-6cd8190ac61c\", \"f8c16c87-8395-44c4-9650-1429f685070f\": \"f8c16c87-8395-44c4-9650-1429f685070f\", \"e7d99b7d-fb5f-4dc9-b5d5-cd98576f0301\": \"e7d99b7d-fb5f-4dc9-b5d5-cd98576f0301\", \"e309f6f5-0949-4bba-b1d3-26b40513101b\": \"e309f6f5-0949-4bba-b1d3-26b40513101b\", \"896c884a-77e5-43fd-a4a9-d56298ba5124\": \"896c884a-77e5-43fd-a4a9-d56298ba5124\", \"700e503b-d103-45f3-8e5b-1357326b9b8b\": \"700e503b-d103-45f3-8e5b-1357326b9b8b\", \"a40b49ab-ee59-4226-bb90-a20b1152f9dc\": \"a40b49ab-ee59-4226-bb90-a20b1152f9dc\", \"f2d34f5f-e7cc-462c-96bc-4bc3f961f76b\": \"f2d34f5f-e7cc-462c-96bc-4bc3f961f76b\", \"87a8d4ed-d6cc-41f3-9680-f213e78f84d9\": \"87a8d4ed-d6cc-41f3-9680-f213e78f84d9\", \"9d92f2fe-c119-4ea2-ac2e-79bf3246117f\": \"9d92f2fe-c119-4ea2-ac2e-79bf3246117f\", \"58f4a7b1-b711-444c-82df-d0e929c66986\": \"58f4a7b1-b711-444c-82df-d0e929c66986\", \"ba2f6312-7c32-42e3-ad34-f5c1f3e308f6\": \"ba2f6312-7c32-42e3-ad34-f5c1f3e308f6\", \"2b143963-b0da-4970-ad37-f5c47005d157\": \"2b143963-b0da-4970-ad37-f5c47005d157\", \"c34a64f5-4f5d-4ab4-bfa7-18699065299f\": \"c34a64f5-4f5d-4ab4-bfa7-18699065299f\", \"e058049a-b9cd-4ae2-90c7-061a7679a7ca\": \"e058049a-b9cd-4ae2-90c7-061a7679a7ca\", \"d6611ad2-ce25-47c3-82be-3f10a67eb731\": \"d6611ad2-ce25-47c3-82be-3f10a67eb731\", \"b1ccd0a9-5196-46b3-b578-10187c2ace69\": \"b1ccd0a9-5196-46b3-b578-10187c2ace69\", \"1e08eb0a-b9a3-4f1e-8990-c1dff4c2a466\": \"1e08eb0a-b9a3-4f1e-8990-c1dff4c2a466\", \"167fe3a4-b8d6-471d-be48-744a10cf4408\": \"167fe3a4-b8d6-471d-be48-744a10cf4408\", \"9d2572c6-eb69-4d8b-95df-69a881247a74\": \"9d2572c6-eb69-4d8b-95df-69a881247a74\", \"0a00dfd2-bc6f-452a-a357-e67a8b30137e\": \"0a00dfd2-bc6f-452a-a357-e67a8b30137e\", \"caa9392c-d96a-408c-9294-365b010be7a0\": \"caa9392c-d96a-408c-9294-365b010be7a0\", \"2e3757c8-3148-4e04-9021-73b916212a18\": \"2e3757c8-3148-4e04-9021-73b916212a18\", \"c06c9b2d-4b5a-4eb8-8ae5-00eeeaeda727\": \"c06c9b2d-4b5a-4eb8-8ae5-00eeeaeda727\", \"e22655df-6953-4cc4-8a11-d5797efb8d14\": \"e22655df-6953-4cc4-8a11-d5797efb8d14\", \"6a6456b9-3624-40dd-9e94-c8a56e7e5e1a\": \"6a6456b9-3624-40dd-9e94-c8a56e7e5e1a\", \"e37ea3fd-528e-4495-a209-54f5d41bad54\": \"e37ea3fd-528e-4495-a209-54f5d41bad54\", \"af161b77-1822-4dda-8ae4-a1423d07071a\": \"af161b77-1822-4dda-8ae4-a1423d07071a\", \"e9e9c3fa-de1b-4e6b-bde4-e75e16509351\": \"e9e9c3fa-de1b-4e6b-bde4-e75e16509351\", \"862622b7-c3ca-47fa-b93a-8b38f36ba70e\": \"862622b7-c3ca-47fa-b93a-8b38f36ba70e\", \"254f3aab-1ed8-40f7-bf64-fc9f8ff77e29\": \"254f3aab-1ed8-40f7-bf64-fc9f8ff77e29\", \"369e3d4a-e12e-4404-812e-0802e9636109\": \"369e3d4a-e12e-4404-812e-0802e9636109\", \"83eb1279-572e-44d4-bd0f-b3e6d812f54f\": \"83eb1279-572e-44d4-bd0f-b3e6d812f54f\", \"53fca882-c108-41f6-8837-c3598431654e\": \"53fca882-c108-41f6-8837-c3598431654e\", \"ed0a0288-7023-4d1d-baba-e2ec540a02c9\": \"ed0a0288-7023-4d1d-baba-e2ec540a02c9\", \"5c9b268b-bcef-4917-b618-da7005691d5b\": \"5c9b268b-bcef-4917-b618-da7005691d5b\", \"6b0bcde0-6f8b-446a-a552-525f27fce29f\": \"6b0bcde0-6f8b-446a-a552-525f27fce29f\", \"f80fc7b6-21c9-46b9-9bee-720ddd72d329\": \"f80fc7b6-21c9-46b9-9bee-720ddd72d329\", \"7acde052-59cb-4240-9e22-3a5cb5f55ce0\": \"7acde052-59cb-4240-9e22-3a5cb5f55ce0\", \"9076da85-d182-4d99-bec8-0a3a50392ca9\": \"9076da85-d182-4d99-bec8-0a3a50392ca9\", \"8229022e-b31d-4a94-8e62-574fb623cf26\": \"8229022e-b31d-4a94-8e62-574fb623cf26\", \"787dc8d0-fec4-456c-a7ce-fac9eb843ed1\": \"787dc8d0-fec4-456c-a7ce-fac9eb843ed1\", \"73c2f6d6-f410-4477-bcfb-c9cf1f0a8dc9\": \"73c2f6d6-f410-4477-bcfb-c9cf1f0a8dc9\", \"14ca9776-6852-482c-b91d-3cd93d30f123\": \"14ca9776-6852-482c-b91d-3cd93d30f123\", \"47be20b6-ce5e-4e10-93d1-1348d0bf6a05\": \"47be20b6-ce5e-4e10-93d1-1348d0bf6a05\", \"5d6544df-abd8-4deb-8f92-604888fb38f5\": \"5d6544df-abd8-4deb-8f92-604888fb38f5\", \"69014564-a8c3-425a-a158-80d4f4224d87\": \"69014564-a8c3-425a-a158-80d4f4224d87\", \"ccb874b5-f5cb-45a8-8425-3f67d9bc9596\": \"ccb874b5-f5cb-45a8-8425-3f67d9bc9596\", \"6f744af5-4efc-48ca-9902-a9d67534f6ce\": \"6f744af5-4efc-48ca-9902-a9d67534f6ce\", \"d17b5475-d201-4c79-b129-fe2da4eee163\": \"d17b5475-d201-4c79-b129-fe2da4eee163\", \"ab341bfa-16c7-4927-be97-f9889ff73c75\": \"ab341bfa-16c7-4927-be97-f9889ff73c75\", \"b2ae8915-a723-4db5-ac54-ebe09638710e\": \"b2ae8915-a723-4db5-ac54-ebe09638710e\", \"7147e2f5-455b-44fc-9957-899ada166e05\": \"7147e2f5-455b-44fc-9957-899ada166e05\", \"1ff0cce2-bd18-4483-b905-901984c76f6a\": \"1ff0cce2-bd18-4483-b905-901984c76f6a\", \"a4786b49-4104-4205-88d0-a2b2aac1ccc5\": \"a4786b49-4104-4205-88d0-a2b2aac1ccc5\", \"d113ecb7-cd7b-4599-b768-5835745a0037\": \"d113ecb7-cd7b-4599-b768-5835745a0037\", \"012d3211-8276-4b74-b561-6d81a6ef392f\": \"012d3211-8276-4b74-b561-6d81a6ef392f\", \"1897b2ed-2f58-4307-83a5-cfd1bcd0a5f6\": \"1897b2ed-2f58-4307-83a5-cfd1bcd0a5f6\", \"119caddb-f2cb-464a-818b-d4dbed07af3e\": \"119caddb-f2cb-464a-818b-d4dbed07af3e\", \"5aa271d0-f641-41a1-92a8-c7ca35f54da1\": \"5aa271d0-f641-41a1-92a8-c7ca35f54da1\", \"64ab9815-e9f2-44d1-9a44-a4214f901246\": \"64ab9815-e9f2-44d1-9a44-a4214f901246\", \"f656d362-7d91-4298-8aa8-6e16bc1dd6a9\": \"f656d362-7d91-4298-8aa8-6e16bc1dd6a9\", \"f0e0550a-2837-4f33-a44b-00bf051584d5\": \"f0e0550a-2837-4f33-a44b-00bf051584d5\", \"e304e3e8-d4ba-4fed-b0ba-fedba93f0683\": \"e304e3e8-d4ba-4fed-b0ba-fedba93f0683\", \"ec6c16e3-0edc-4db7-a641-9e5b13787373\": \"ec6c16e3-0edc-4db7-a641-9e5b13787373\", \"45b0fdc6-d36d-4780-ab30-c848735cb5d2\": \"45b0fdc6-d36d-4780-ab30-c848735cb5d2\", \"2125911b-8f5b-42f0-900b-6406c1e62ade\": \"2125911b-8f5b-42f0-900b-6406c1e62ade\", \"2943a6e3-4403-4d39-886d-996d232e26a0\": \"2943a6e3-4403-4d39-886d-996d232e26a0\", \"f6e2e4b4-e863-4e67-827d-a2ad2e2afdb9\": \"f6e2e4b4-e863-4e67-827d-a2ad2e2afdb9\", \"f190df52-f41c-410d-b24a-c8287262fece\": \"f190df52-f41c-410d-b24a-c8287262fece\", \"ab5c2ef5-c7f3-48b1-b485-68a023b9f3fe\": \"ab5c2ef5-c7f3-48b1-b485-68a023b9f3fe\", \"c306b95d-b110-4681-bda2-7a7370540401\": \"c306b95d-b110-4681-bda2-7a7370540401\", \"c6ae5432-db9e-495a-9298-1278759ba5d3\": \"c6ae5432-db9e-495a-9298-1278759ba5d3\", \"b67a6825-5f48-4296-89d9-fb1dc8858dea\": \"b67a6825-5f48-4296-89d9-fb1dc8858dea\", \"e6fc9dfc-2e9d-4e31-b8cf-d5d39a61ed07\": \"e6fc9dfc-2e9d-4e31-b8cf-d5d39a61ed07\", \"5afed772-9984-4fe1-832f-3c7ea96414c4\": \"5afed772-9984-4fe1-832f-3c7ea96414c4\", \"fbea45d2-772a-4504-9426-4543f51476cb\": \"fbea45d2-772a-4504-9426-4543f51476cb\", \"8db38347-2456-43f7-9801-81150ba8654a\": \"8db38347-2456-43f7-9801-81150ba8654a\", \"1cef427e-8dc0-46fd-bfed-16e85b5dd9bf\": \"1cef427e-8dc0-46fd-bfed-16e85b5dd9bf\", \"f1021e30-2786-4238-a399-58fff8b6cfd0\": \"f1021e30-2786-4238-a399-58fff8b6cfd0\", \"65d75c10-09c8-43ee-84a6-41b056f7d697\": \"65d75c10-09c8-43ee-84a6-41b056f7d697\", \"e163a58b-5c79-4522-95ae-7c5d850c8a9e\": \"e163a58b-5c79-4522-95ae-7c5d850c8a9e\", \"bac37c9f-8d41-4dfe-a191-76d59cb87b83\": \"bac37c9f-8d41-4dfe-a191-76d59cb87b83\", \"a2d88e05-b193-4ee8-a3be-80ecb92153ec\": \"a2d88e05-b193-4ee8-a3be-80ecb92153ec\", \"3177d615-6007-4bf1-8dc7-c0505e55da1a\": \"3177d615-6007-4bf1-8dc7-c0505e55da1a\", \"78dbdd5e-576d-4670-9c99-895623c51a86\": \"78dbdd5e-576d-4670-9c99-895623c51a86\", \"cbc69aa4-ae68-4c4c-98f6-4f86d7cc9eea\": \"cbc69aa4-ae68-4c4c-98f6-4f86d7cc9eea\", \"be581eb2-3b4a-443a-b49f-ffcdbe1ef8a1\": \"be581eb2-3b4a-443a-b49f-ffcdbe1ef8a1\", \"364884e6-1409-4deb-8afa-b10562347809\": \"364884e6-1409-4deb-8afa-b10562347809\", \"bad6e243-d657-4617-b03e-357892de71a3\": \"bad6e243-d657-4617-b03e-357892de71a3\", \"713a6996-de8d-4acd-ad5f-10970fb380f5\": \"713a6996-de8d-4acd-ad5f-10970fb380f5\", \"1a6c694e-9280-466a-bc71-d792fe80fc03\": \"1a6c694e-9280-466a-bc71-d792fe80fc03\", \"9ce8bd36-e4f4-4b20-8ccc-2d78ad63452e\": \"9ce8bd36-e4f4-4b20-8ccc-2d78ad63452e\", \"c9bc2662-f89b-4920-a19d-15963e26541f\": \"c9bc2662-f89b-4920-a19d-15963e26541f\", \"ed8f59d1-40b3-46b1-bb83-ace1cbe44bbd\": \"ed8f59d1-40b3-46b1-bb83-ace1cbe44bbd\", \"337ba90b-799e-42c8-bd3a-40e214eb3c84\": \"337ba90b-799e-42c8-bd3a-40e214eb3c84\", \"d1f80c8d-f59b-4d48-abec-79739452474c\": \"d1f80c8d-f59b-4d48-abec-79739452474c\", \"7a45ec4c-f497-409c-9423-73d6a6702963\": \"7a45ec4c-f497-409c-9423-73d6a6702963\", \"f7d1b222-2bce-429b-9122-f2a248b8c9df\": \"f7d1b222-2bce-429b-9122-f2a248b8c9df\", \"462a9455-4549-4a70-b891-097c67a5d613\": \"462a9455-4549-4a70-b891-097c67a5d613\", \"00368b45-a4e0-40c0-ae98-8b2a89eb41b3\": \"00368b45-a4e0-40c0-ae98-8b2a89eb41b3\", \"54457fb8-1875-495e-8a22-31507b7f5dd8\": \"54457fb8-1875-495e-8a22-31507b7f5dd8\", \"3af67403-690b-4871-ab21-ff10831f42ac\": \"3af67403-690b-4871-ab21-ff10831f42ac\", \"745a7f3a-ad76-4d13-8799-71c71afdaca0\": \"745a7f3a-ad76-4d13-8799-71c71afdaca0\", \"45acde29-b08d-45ef-8b4b-15ff312e213a\": \"45acde29-b08d-45ef-8b4b-15ff312e213a\", \"c64c9b20-5c87-4e8f-93b0-c73c671ecf3d\": \"c64c9b20-5c87-4e8f-93b0-c73c671ecf3d\", \"592992ac-20fd-4306-a6fb-829868442bd9\": \"592992ac-20fd-4306-a6fb-829868442bd9\", \"81f947e5-e0cb-44e2-b1aa-0137113019d2\": \"81f947e5-e0cb-44e2-b1aa-0137113019d2\", \"514e0dbd-60b9-48ce-8294-226b3afa56cf\": \"514e0dbd-60b9-48ce-8294-226b3afa56cf\", \"d986c40e-9933-4c48-9e43-a5d419fea01a\": \"d986c40e-9933-4c48-9e43-a5d419fea01a\", \"7b6220da-a1c7-43fa-bd2c-7fd34eae4abf\": \"7b6220da-a1c7-43fa-bd2c-7fd34eae4abf\", \"6afdbd16-b9a5-4fa6-a938-d4f1fbdd9319\": \"6afdbd16-b9a5-4fa6-a938-d4f1fbdd9319\", \"9ad3c738-9d05-425a-9d24-ca5bd8c4b689\": \"9ad3c738-9d05-425a-9d24-ca5bd8c4b689\", \"4e02e2ad-160b-499d-aa8a-146c762d4d0a\": \"4e02e2ad-160b-499d-aa8a-146c762d4d0a\", \"147aa4d2-e90b-43da-9f5c-4dd9a5be68ed\": \"147aa4d2-e90b-43da-9f5c-4dd9a5be68ed\", \"f6d9f303-8a19-4f47-b93a-57b7a6fa3be6\": \"f6d9f303-8a19-4f47-b93a-57b7a6fa3be6\", \"7056b73a-e633-4088-8b9a-1dabf0402f25\": \"7056b73a-e633-4088-8b9a-1dabf0402f25\", \"35e8b6fa-b8c6-475b-898a-a77c7f557010\": \"35e8b6fa-b8c6-475b-898a-a77c7f557010\", \"c0e58937-f36c-4275-9507-b1a7832dbc7e\": \"c0e58937-f36c-4275-9507-b1a7832dbc7e\", \"33a3a5da-60f4-4800-8adc-8389f8540ce9\": \"33a3a5da-60f4-4800-8adc-8389f8540ce9\", \"197baf0b-0a78-4de9-9d2a-ee0966cbc59e\": \"197baf0b-0a78-4de9-9d2a-ee0966cbc59e\", \"6f0110e3-5b4b-40ba-bb0a-89375bec24f4\": \"6f0110e3-5b4b-40ba-bb0a-89375bec24f4\", \"9750f3a9-c232-49c2-a04f-a540fd514271\": \"9750f3a9-c232-49c2-a04f-a540fd514271\", \"fc183809-1a3d-46f5-b879-dd07a988a17d\": \"fc183809-1a3d-46f5-b879-dd07a988a17d\", \"6b4e19dc-3e19-44d1-b497-405147e43b0a\": \"6b4e19dc-3e19-44d1-b497-405147e43b0a\", \"521f72f0-0f2d-4dd4-ad22-2f65a9caf4da\": \"521f72f0-0f2d-4dd4-ad22-2f65a9caf4da\", \"97b4fdab-4f54-47b5-bd96-92bf63cb192b\": \"97b4fdab-4f54-47b5-bd96-92bf63cb192b\", \"cade18e3-4e7c-45a4-8bf1-1fa52485786f\": \"cade18e3-4e7c-45a4-8bf1-1fa52485786f\", \"1d6340c3-2d06-4609-b5c0-335455cef3f4\": \"1d6340c3-2d06-4609-b5c0-335455cef3f4\", \"62474806-219c-44ce-9656-6faa2d14d0a4\": \"62474806-219c-44ce-9656-6faa2d14d0a4\", \"e28bffbb-227c-4ecf-a53d-f51cc1b00944\": \"e28bffbb-227c-4ecf-a53d-f51cc1b00944\", \"9e428a82-53d8-4d54-9873-fbb4bb40eecd\": \"9e428a82-53d8-4d54-9873-fbb4bb40eecd\", \"2557df4b-412e-42b7-b3b6-dcabb71ef536\": \"2557df4b-412e-42b7-b3b6-dcabb71ef536\", \"bb859739-a909-4b77-bb41-5534a9d57263\": \"bb859739-a909-4b77-bb41-5534a9d57263\", \"387f4f2c-fd6f-4f01-a7d9-a7d924627a3e\": \"387f4f2c-fd6f-4f01-a7d9-a7d924627a3e\", \"6a435338-d8a4-4de9-a615-9fc92286e4ec\": \"6a435338-d8a4-4de9-a615-9fc92286e4ec\", \"78ff72a6-4b67-4e7c-a6c9-416166fe7867\": \"78ff72a6-4b67-4e7c-a6c9-416166fe7867\", \"7a9476f2-973d-4eaa-b447-8af72f930c7c\": \"7a9476f2-973d-4eaa-b447-8af72f930c7c\", \"74d76f92-4a44-4242-9252-4cd649fa831d\": \"74d76f92-4a44-4242-9252-4cd649fa831d\", \"689f6bb0-8265-460b-928b-abd66bb46c01\": \"689f6bb0-8265-460b-928b-abd66bb46c01\", \"73a8676c-c03f-4e13-942d-ffd451a9ca59\": \"73a8676c-c03f-4e13-942d-ffd451a9ca59\", \"cf3e6841-6c4a-4ff0-8d06-4d7ffb6c879a\": \"cf3e6841-6c4a-4ff0-8d06-4d7ffb6c879a\", \"e9de644d-7ee2-44d8-8640-0a2d7520435e\": \"e9de644d-7ee2-44d8-8640-0a2d7520435e\", \"8167bd08-0877-4a37-ba10-1ad8aff21431\": \"8167bd08-0877-4a37-ba10-1ad8aff21431\", \"2eb09709-0343-455d-8334-5d6d6cf59c17\": \"2eb09709-0343-455d-8334-5d6d6cf59c17\", \"84067164-0bb1-4464-bdb3-b7bd3070496f\": \"84067164-0bb1-4464-bdb3-b7bd3070496f\", \"59761d43-c04b-4372-a319-aee657f21e41\": \"59761d43-c04b-4372-a319-aee657f21e41\", \"906e2285-a326-484a-9fa5-335dac84c6ec\": \"906e2285-a326-484a-9fa5-335dac84c6ec\", \"4e7b079e-ab85-4229-b45e-c2abe617c0a1\": \"4e7b079e-ab85-4229-b45e-c2abe617c0a1\", \"659a2ba6-47ef-4bf5-9bfc-98ce1aa6b153\": \"659a2ba6-47ef-4bf5-9bfc-98ce1aa6b153\", \"e3c44693-3ab2-47a2-9e85-7e815ba63748\": \"e3c44693-3ab2-47a2-9e85-7e815ba63748\", \"84bdaec8-62a5-40bd-9260-a1ac12b5d257\": \"84bdaec8-62a5-40bd-9260-a1ac12b5d257\", \"7527c8eb-ac4c-48d5-a2a7-8f72695e48f0\": \"7527c8eb-ac4c-48d5-a2a7-8f72695e48f0\", \"29c44db5-cdb6-47ac-b3c5-3ab9b7c4b618\": \"29c44db5-cdb6-47ac-b3c5-3ab9b7c4b618\", \"51e7ee06-4ade-45b4-a530-34a5095e3171\": \"51e7ee06-4ade-45b4-a530-34a5095e3171\", \"f71cd7d2-bb19-484c-a67c-5b72ec632847\": \"f71cd7d2-bb19-484c-a67c-5b72ec632847\", \"23a772c5-ce3d-4208-8668-e83846b8796b\": \"23a772c5-ce3d-4208-8668-e83846b8796b\", \"f09d22ad-bd3d-408c-99c1-dc1c1b7be5e5\": \"f09d22ad-bd3d-408c-99c1-dc1c1b7be5e5\", \"652f09c7-36b4-4045-84f7-78bc3f5b9308\": \"652f09c7-36b4-4045-84f7-78bc3f5b9308\", \"67b13793-ad68-4be7-84ff-076055de2de5\": \"67b13793-ad68-4be7-84ff-076055de2de5\", \"3f20674f-b84e-4664-a3aa-f330e48e459a\": \"3f20674f-b84e-4664-a3aa-f330e48e459a\", \"3c122891-78ff-4dda-8afc-d58e143cbba7\": \"3c122891-78ff-4dda-8afc-d58e143cbba7\", \"ca46041e-1f4b-4a0c-94f6-eed345667622\": \"ca46041e-1f4b-4a0c-94f6-eed345667622\", \"c25e6a1d-b634-4054-9e5c-865a5449f967\": \"c25e6a1d-b634-4054-9e5c-865a5449f967\", \"320a122e-eda5-4fb9-8223-5b76eb1eae18\": \"320a122e-eda5-4fb9-8223-5b76eb1eae18\", \"c112322a-a3b9-4f14-a31a-06503d96bc3d\": \"c112322a-a3b9-4f14-a31a-06503d96bc3d\", \"91ac2aef-d40a-467b-805e-4517d41949e0\": \"91ac2aef-d40a-467b-805e-4517d41949e0\", \"8b337c27-d6e7-418d-b085-90debaf16ffa\": \"8b337c27-d6e7-418d-b085-90debaf16ffa\", \"e5502033-7e0d-4e47-a6c6-ad0ffe1cda8b\": \"e5502033-7e0d-4e47-a6c6-ad0ffe1cda8b\", \"1145c3cc-3ff4-450f-b621-38322fcad344\": \"1145c3cc-3ff4-450f-b621-38322fcad344\", \"aa4bef57-eb4b-4398-9a3f-41573c544230\": \"aa4bef57-eb4b-4398-9a3f-41573c544230\", \"ae8a01f1-33fc-4a5a-8ba3-6520e14521c0\": \"ae8a01f1-33fc-4a5a-8ba3-6520e14521c0\", \"fc5dae8d-81a1-4af8-a325-cb8dbc8c3f93\": \"fc5dae8d-81a1-4af8-a325-cb8dbc8c3f93\", \"42c7fab4-6c3e-434f-b1a7-9eacc8a22d62\": \"42c7fab4-6c3e-434f-b1a7-9eacc8a22d62\", \"df5391ce-ab3f-4c8f-84cc-42b748d2fe8a\": \"df5391ce-ab3f-4c8f-84cc-42b748d2fe8a\", \"a8da4484-6d0e-4e79-a7e3-4f7e5b998516\": \"a8da4484-6d0e-4e79-a7e3-4f7e5b998516\", \"ffa99677-200d-4da4-a465-7379b360cace\": \"ffa99677-200d-4da4-a465-7379b360cace\", \"a9ca3c21-84ba-4636-a863-c8341dcfb561\": \"a9ca3c21-84ba-4636-a863-c8341dcfb561\", \"71393f6f-1590-4bfc-a341-490634e4ab04\": \"71393f6f-1590-4bfc-a341-490634e4ab04\", \"3f6719cc-e899-4697-b691-1019587ca1c5\": \"3f6719cc-e899-4697-b691-1019587ca1c5\", \"359b6014-382e-4d0d-84e2-0fcb1185eb92\": \"359b6014-382e-4d0d-84e2-0fcb1185eb92\"}, \"doc_id_dict\": {}, \"embeddings_dict\": {}}"}}}
main.py ADDED
@@ -0,0 +1,643 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import random
2
+ import re
3
+ import time
4
+ import urllib.parse
5
+ from dataclasses import dataclass, field
6
+ from typing import Generator, Literal
7
+
8
+ from docs_index import NodeWithScore, ask, retrieve
9
+
10
+ import mesop as me
11
+
12
+
13
+ def on_load(e: me.LoadEvent):
14
+ state = me.state(State)
15
+ state.examples = random.sample(EXAMPLES, 3)
16
+ if "prompt" in me.query_params:
17
+ state.initial_input = me.query_params["prompt"]
18
+ me.set_theme_mode("system")
19
+ yield
20
+ me.focus_component(key=f"input-{len(state.output)}")
21
+ yield
22
+
23
+
24
+ @me.page(
25
+ on_load=on_load,
26
+ security_policy=me.SecurityPolicy(
27
+ allowed_script_srcs=[
28
+ "https://cdn.jsdelivr.net",
29
+ ],
30
+ allowed_iframe_parents=[
31
+ "https://huggingface.co",
32
+ "https://mesop-dev.github.io",
33
+ "http://localhost:*",
34
+ ],
35
+ ),
36
+ title="Mesop Docs Chat",
37
+ )
38
+ def page():
39
+ frame_listener()
40
+ return chat()
41
+
42
+
43
+ Role = Literal["user", "assistant"]
44
+
45
+ _ROLE_USER = "user"
46
+ _ROLE_ASSISTANT = "assistant"
47
+
48
+ _BOT_USER_DEFAULT = "Mesop Docs Bot"
49
+
50
+ _COLOR_BACKGROUND = me.theme_var("background")
51
+
52
+ _DEFAULT_PADDING = me.Padding.all(12)
53
+
54
+ _LABEL_BUTTON = "send"
55
+ _LABEL_BUTTON_IN_PROGRESS = "pending"
56
+ _LABEL_INPUT = "Ask Mesop Docs Bot"
57
+
58
+ _STYLE_APP_CONTAINER = me.Style(
59
+ background=_COLOR_BACKGROUND,
60
+ display="flex",
61
+ flex_direction="column",
62
+ height="100%",
63
+ )
64
+ _STYLE_TITLE = me.Style(padding=me.Padding(left=10))
65
+ _STYLE_CHAT_BOX = me.Style(
66
+ height="100%",
67
+ overflow_y="scroll",
68
+ padding=_DEFAULT_PADDING,
69
+ background=me.theme_var("background"),
70
+ )
71
+
72
+ _STYLE_CHAT_BUTTON = me.Style(margin=me.Margin(top=8, left=8))
73
+ _STYLE_CHAT_BUBBLE_NAME = me.Style(
74
+ font_weight="bold",
75
+ font_size="13px",
76
+ padding=me.Padding(left=15, right=15, bottom=5),
77
+ )
78
+
79
+
80
+ def _make_style_chat_ui_container() -> me.Style:
81
+ return me.Style(
82
+ flex_grow=1,
83
+ display="grid",
84
+ grid_template_columns="repeat(1, 1fr)",
85
+ grid_template_rows="5fr 1fr",
86
+ margin=me.Margin.symmetric(vertical=0, horizontal="auto"),
87
+ width="min(100%)",
88
+ background=_COLOR_BACKGROUND,
89
+ box_shadow=(
90
+ "0 3px 1px -2px #0003, 0 2px 2px #00000024, 0 1px 5px #0000001f"
91
+ ),
92
+ padding=me.Padding(top=3, left=12, right=12),
93
+ )
94
+
95
+
96
+ @dataclass(kw_only=True)
97
+ class Chunk:
98
+ content: str = ""
99
+ citation_numbers: list[int] = field(default_factory=list)
100
+
101
+
102
+ @dataclass(kw_only=True)
103
+ class ChatMessage:
104
+ """Chat message metadata."""
105
+
106
+ role: Role = "user"
107
+ content: str = ""
108
+ chunks: list[Chunk] = field(default_factory=list)
109
+
110
+
111
+ @dataclass(kw_only=True)
112
+ class Citation:
113
+ number: int = 0
114
+ original_numbers: list[int] = field(default_factory=list)
115
+ url: str = ""
116
+ title: str = ""
117
+ breadcrumbs: list[str] = field(default_factory=list)
118
+ content: str = ""
119
+
120
+
121
+ @me.stateclass
122
+ class State:
123
+ input: str
124
+ initial_input: str
125
+ output: list[ChatMessage]
126
+ citations: list[Citation]
127
+ intermediate_citations: list[Citation]
128
+ in_progress: bool = False
129
+ examples: list[str]
130
+
131
+
132
+ def on_blur(e: me.InputBlurEvent):
133
+ state = me.state(State)
134
+ state.input = e.value
135
+
136
+
137
+ mesop_questions = [
138
+ "How can I reset an input component?",
139
+ "Show me how to style a component",
140
+ "Create a multi-page app",
141
+ "Is it possible to create custom components?",
142
+ "Implement authentication",
143
+ "Deploy a Mesop app",
144
+ "Optimize performance",
145
+ "Can I use JavaScript libraries in Mesop?",
146
+ "Stream UI updates from an LLM API",
147
+ "Debug a Mesop application",
148
+ "Is Mesop ready for production use?",
149
+ "Create a mobile-friendly and responsive UI",
150
+ "Handle asynchronous operations",
151
+ "Implement dark mode",
152
+ "Add tooltips to Mesop components",
153
+ "Render a pandas DataFrame as a table",
154
+ "Add charts",
155
+ "Handle file uploads",
156
+ ]
157
+
158
+ EXAMPLES = [
159
+ *mesop_questions,
160
+ "How do I create a streaming chat UI?",
161
+ "How do I install Mesop?",
162
+ "How is Mesop different from other UI frameworks?",
163
+ ]
164
+
165
+
166
+ def on_click_submit(e: me.ClickEvent) -> Generator[None, None, None]:
167
+ yield from submit()
168
+
169
+
170
+ def on_input(e: me.InputEvent) -> Generator[None, None, None]:
171
+ state = me.state(State)
172
+ if len(e.value) > 2:
173
+ nodes = retrieve(e.value)
174
+ citations = get_citations(nodes)
175
+ citation_by_breadcrumb = {
176
+ tuple(citation.breadcrumbs): citation for citation in citations
177
+ }
178
+ state.intermediate_citations = list(citation_by_breadcrumb.values())
179
+ yield
180
+ if not e.value.endswith("\n"):
181
+ return
182
+ state.input = e.value
183
+
184
+ yield from submit()
185
+ me.focus_component(key=f"input-{len(state.output)}")
186
+ yield
187
+
188
+
189
+ def submit():
190
+ state = me.state(State)
191
+ if state.in_progress or not state.input:
192
+ return
193
+ input = state.input
194
+ state.input = ""
195
+ yield
196
+
197
+ state.output = []
198
+ output = state.output
199
+ output.append(ChatMessage(role=_ROLE_USER, content=input))
200
+ state.in_progress = True
201
+ yield
202
+
203
+ start_time = time.time()
204
+ output_message = transform(input, state.output)
205
+ assistant_message = ChatMessage(role=_ROLE_ASSISTANT)
206
+ output.append(assistant_message)
207
+ state.output = output
208
+
209
+ for content in output_message:
210
+ assistant_message.content += content
211
+
212
+ if (time.time() - start_time) >= 0.75:
213
+ start_time = time.time()
214
+ transform_to_chunks(assistant_message)
215
+ yield
216
+ transform_to_chunks(assistant_message)
217
+ state.in_progress = False
218
+ me.focus_component(key=f"input-{len(state.output)}")
219
+ yield
220
+
221
+
222
+ # TODO: handle the case where [4,5]
223
+ def transform_to_chunks(message: ChatMessage):
224
+ message.chunks = []
225
+ # Split the message content into chunks based on citations
226
+ chunks = re.split(r"(\[\d+(?:,\s*\d+)*\])", message.content)
227
+ # Initialize variables
228
+ current_chunk = ""
229
+ current_citations: list[int] = []
230
+
231
+ # Process each chunk
232
+ for chunk in chunks:
233
+ if re.match(r"\[\d+(?:,\s*\d+)*\]", chunk):
234
+ try:
235
+ # Remove brackets and split by comma
236
+ citation_numbers = [int(num.strip()) for num in chunk[1:-1].split(",")]
237
+ current_citations.extend(citation_numbers)
238
+ except Exception:
239
+ print("Error: Unable to parse citation numbers")
240
+ else:
241
+ # If it's text content
242
+ if current_chunk:
243
+ # If there's existing content, create a new chunk
244
+ message.chunks.append(
245
+ Chunk(
246
+ content=current_chunk,
247
+ citation_numbers=map_citation_numbers(current_citations),
248
+ )
249
+ )
250
+ current_chunk = ""
251
+ current_citations = []
252
+ # Add the new content
253
+ current_chunk += chunk
254
+
255
+ # Add the last chunk if there's any remaining content
256
+ if current_chunk:
257
+ message.chunks.append(
258
+ Chunk(
259
+ content=current_chunk,
260
+ citation_numbers=map_citation_numbers(current_citations),
261
+ )
262
+ )
263
+
264
+
265
+ def map_citation_numbers(citation_numbers: list[int]) -> list[int]:
266
+ return citation_numbers
267
+
268
+
269
+ def chat(
270
+ title: str | None = None,
271
+ bot_user: str = _BOT_USER_DEFAULT,
272
+ ):
273
+ state = me.state(State)
274
+
275
+ def toggle_theme(e: me.ClickEvent):
276
+ if me.theme_brightness() == "light":
277
+ me.set_theme_mode("dark")
278
+ else:
279
+ me.set_theme_mode("light")
280
+
281
+ with me.box(style=_STYLE_APP_CONTAINER):
282
+ with me.content_button(
283
+ type="icon",
284
+ style=me.Style(position="absolute", left=8, top=12),
285
+ on_click=toggle_theme,
286
+ ):
287
+ me.icon("light_mode" if me.theme_brightness() == "dark" else "dark_mode")
288
+ with me.box(
289
+ style=me.Style(
290
+ display="flex",
291
+ flex_direction="row",
292
+ padding=me.Padding.all(8),
293
+ background=me.theme_var("background"),
294
+ width="100%",
295
+ border=me.Border.all(
296
+ me.BorderSide(width=0, style="solid", color="black")
297
+ ),
298
+ box_shadow="0 10px 20px #0000000a, 0 2px 6px #0000000a, 0 0 1px #0000000a",
299
+ )
300
+ ):
301
+ with me.box(style=me.Style(flex_grow=1)):
302
+ me.native_textarea(
303
+ value=state.initial_input,
304
+ placeholder=_LABEL_INPUT,
305
+ key=f"input-{len(state.output)}",
306
+ on_blur=on_blur,
307
+ on_input=on_input,
308
+ style=me.Style(
309
+ color=me.theme_var("on-background"),
310
+ padding=me.Padding(top=16, left=48),
311
+ background=me.theme_var("background"),
312
+ letter_spacing="0.07px",
313
+ outline="none",
314
+ width="100%",
315
+ overflow_y="auto",
316
+ border=me.Border.all(
317
+ me.BorderSide(style="none"),
318
+ ),
319
+ ),
320
+ )
321
+ with me.content_button(
322
+ color="primary",
323
+ type="flat",
324
+ disabled=state.in_progress,
325
+ on_click=on_click_submit,
326
+ style=_STYLE_CHAT_BUTTON,
327
+ ):
328
+ me.icon(
329
+ _LABEL_BUTTON_IN_PROGRESS if state.in_progress else _LABEL_BUTTON
330
+ )
331
+
332
+ with me.box(style=_make_style_chat_ui_container()):
333
+ if title:
334
+ me.text(title, type="headline-5", style=_STYLE_TITLE)
335
+ with me.box(style=_STYLE_CHAT_BOX):
336
+ if not state.output and not state.intermediate_citations:
337
+ me.text(
338
+ "Welcome to Mesop Docs Bot! Ask me anything about Mesop.",
339
+ style=me.Style(
340
+ margin=me.Margin(bottom=24),
341
+ font_weight=500,
342
+ ),
343
+ )
344
+ with me.box(
345
+ style=me.Style(
346
+ display="flex",
347
+ flex_direction="column",
348
+ gap=24,
349
+ )
350
+ ):
351
+ for example in state.examples:
352
+ example_box(example)
353
+ if not state.output and state.intermediate_citations:
354
+ with me.box(
355
+ style=me.Style(
356
+ padding=me.Padding(top=16),
357
+ display="flex",
358
+ flex_direction="column",
359
+ gap=16,
360
+ ),
361
+ ):
362
+ for citation in state.intermediate_citations:
363
+ with citation_box(url=citation.url):
364
+ citation_content(
365
+ Citation(
366
+ url=citation.url,
367
+ title=citation.title,
368
+ breadcrumbs=citation.breadcrumbs,
369
+ original_numbers=citation.original_numbers,
370
+ content=citation.content,
371
+ number=0,
372
+ )
373
+ )
374
+ for msg in state.output:
375
+ with me.box(
376
+ style=me.Style(
377
+ display="flex", flex_direction="column", align_items="start"
378
+ )
379
+ ):
380
+ if msg.role == _ROLE_ASSISTANT:
381
+ me.text(bot_user, style=_STYLE_CHAT_BUBBLE_NAME)
382
+ else:
383
+ me.text("You", style=_STYLE_CHAT_BUBBLE_NAME)
384
+ with me.box(
385
+ style=me.Style(
386
+ width="100%",
387
+ font_size="16px",
388
+ line_height="1.5",
389
+ border_radius="15px",
390
+ padding=me.Padding(right=15, left=15, bottom=3),
391
+ margin=me.Margin(bottom=10),
392
+ )
393
+ ):
394
+ if msg.role == _ROLE_USER:
395
+ me.text(
396
+ msg.content, style=me.Style(margin=me.Margin(bottom=16))
397
+ )
398
+ else:
399
+ if state.in_progress:
400
+ me.progress_spinner()
401
+ used_citation_numbers: set[int] = set()
402
+
403
+ for chunk in msg.chunks:
404
+ me.text(
405
+ chunk.content,
406
+ style=me.Style(white_space="pre-wrap", display="inline"),
407
+ )
408
+ if chunk.citation_numbers:
409
+ with me.box(
410
+ style=me.Style(
411
+ display="inline-flex",
412
+ flex_direction="row",
413
+ gap=4,
414
+ margin=me.Margin.symmetric(horizontal=6),
415
+ )
416
+ ):
417
+ for citation_number in chunk.citation_numbers:
418
+ used_citation_numbers.add(citation_number)
419
+
420
+ citation_tooltip(
421
+ get_citation_number(
422
+ citation_number, used_citation_numbers
423
+ )
424
+ )
425
+
426
+ with me.box(
427
+ style=me.Style(
428
+ padding=me.Padding(top=16),
429
+ display="flex",
430
+ flex_direction="column",
431
+ gap=16,
432
+ ),
433
+ ):
434
+ for citation in state.citations:
435
+ if citation.number in used_citation_numbers:
436
+ with citation_box(url=citation.url):
437
+ citation_content(
438
+ Citation(
439
+ url=citation.url,
440
+ title=citation.title,
441
+ breadcrumbs=citation.breadcrumbs,
442
+ original_numbers=citation.original_numbers,
443
+ content=citation.content,
444
+ number=get_citation_number(
445
+ citation.number, used_citation_numbers
446
+ ),
447
+ )
448
+ )
449
+ if not me.state(State).in_progress:
450
+ with me.box(
451
+ style=me.Style(
452
+ display="flex",
453
+ flex_direction="row",
454
+ gap=4,
455
+ margin=me.Margin(top=16),
456
+ )
457
+ ):
458
+ NEWLINE = "\n"
459
+ me.text("Is there an issue with this this response?")
460
+ me.link(
461
+ text="File an issue",
462
+ url="https://github.com/mesop-dev/mesop/issues/new?assignees=&labels=bug,chatbot&projects=&title=Bad%20chatbot%20response&body="
463
+ + urllib.parse.quote(f"""
464
+ What was the issue with the chatbot response?
465
+
466
+ ---
467
+ Original content:
468
+
469
+ __Prompt:__
470
+ {state.output[0].content}
471
+
472
+ __Response:__
473
+ {state.output[-1].content}
474
+
475
+ __Citations:__
476
+
477
+ {NEWLINE.join([f"1. {citation.url}" for citation in state.citations])}
478
+ """),
479
+ style=me.Style(
480
+ color=me.theme_var("primary"),
481
+ text_decoration="none",
482
+ ),
483
+ open_in_new_tab=True,
484
+ )
485
+
486
+
487
+ def citation_tooltip(citation_number: int):
488
+ state = me.state(State)
489
+ with me.box(style=me.Style(display="inline-block")):
490
+ with me.tooltip(
491
+ message=state.citations[citation_number - 1].title,
492
+ position="below",
493
+ ):
494
+ me.text(
495
+ f"{citation_number}",
496
+ style=me.Style(
497
+ background=me.theme_var("surface-variant"),
498
+ padding=me.Padding.symmetric(horizontal=5),
499
+ border_radius="6px",
500
+ font_weight=500,
501
+ ),
502
+ )
503
+
504
+
505
+ @me.web_component(path="./citation.js")
506
+ def citation_box(
507
+ *,
508
+ url: str,
509
+ key: str | None = None,
510
+ ):
511
+ return me.insert_web_component(
512
+ name="citation-component",
513
+ key=key,
514
+ properties={
515
+ "url": url,
516
+ "active": True,
517
+ },
518
+ )
519
+
520
+
521
+ def citation_content(citation: Citation):
522
+ with me.box(
523
+ style=me.Style(
524
+ display="flex",
525
+ flex_direction="column",
526
+ padding=me.Padding.symmetric(vertical=8, horizontal=16),
527
+ cursor="pointer",
528
+ ),
529
+ ):
530
+ with me.box(
531
+ style=me.Style(
532
+ display="flex",
533
+ flex_direction="row",
534
+ gap=4,
535
+ align_items="start",
536
+ )
537
+ ):
538
+ if citation.number:
539
+ me.text(
540
+ f"{citation.number}", style=me.Style(font_weight=500, font_size=18)
541
+ )
542
+ me.icon(
543
+ icon="description",
544
+ style=me.Style(font_size=20, padding=me.Padding(top=3, left=3)),
545
+ )
546
+
547
+ me.text(citation.title)
548
+ with me.box(
549
+ style=me.Style(
550
+ display="flex",
551
+ flex_direction="row",
552
+ gap=8,
553
+ font_size="14px",
554
+ font_weight=500,
555
+ )
556
+ ):
557
+ for breadcrumb in citation.breadcrumbs:
558
+ me.text(breadcrumb)
559
+ if breadcrumb != citation.breadcrumbs[-1]:
560
+ me.text(" > ")
561
+
562
+
563
+ def example_box(example: str):
564
+ with me.box(
565
+ style=me.Style(
566
+ background=me.theme_var("secondary-container"),
567
+ border_radius="12px",
568
+ padding=me.Padding(left=16, right=16, top=16, bottom=16),
569
+ cursor="pointer",
570
+ ),
571
+ key=example,
572
+ on_click=on_click_example,
573
+ ):
574
+ me.text(example)
575
+
576
+
577
+ def on_click_example(e: me.ClickEvent) -> Generator[None, None, None]:
578
+ state = me.state(State)
579
+ state.input = e.key
580
+ yield from submit()
581
+
582
+
583
+ def transform(
584
+ message: str, history: list[ChatMessage]
585
+ ) -> Generator[str, None, None]:
586
+ response = ask(message)
587
+ citations = get_citations(response.source_nodes)
588
+
589
+ me.state(State).citations = citations
590
+ yield from response.response_gen
591
+
592
+
593
+ def get_citations(source_nodes: list[NodeWithScore]) -> list[Citation]:
594
+ citations: list[Citation] = []
595
+
596
+ for i, source_node in enumerate(source_nodes):
597
+ url: str = source_node.node.metadata.get("url", "")
598
+ breadcrumbs = url.split("https://mesop-dev.github.io/mesop/")[-1].split("/")
599
+ title = source_node.node.metadata.get("title", "")
600
+ content_lines = source_node.node.get_content().split("\n")
601
+
602
+ for line in content_lines[2:]:
603
+ if line and not line.startswith("```"):
604
+ break
605
+ if len(content_lines) > 2:
606
+ fragment: str = (
607
+ "#:~:text="
608
+ + urllib.parse.quote(content_lines[1])
609
+ + ",-"
610
+ # Just take the first two words of the line to avoid
611
+ # mismatching (e.g. URLs).
612
+ + urllib.parse.quote(" ".join(line.split(" ")[:2]))
613
+ )
614
+ else:
615
+ fragment = ""
616
+ citations.append(
617
+ Citation(
618
+ url=url + fragment,
619
+ breadcrumbs=breadcrumbs,
620
+ title=title,
621
+ number=i + 1,
622
+ )
623
+ )
624
+ return citations
625
+
626
+
627
+ def get_citation_number(
628
+ citation_number: int, used_citation_numbers: set[int]
629
+ ) -> int:
630
+ number = 0
631
+ for n in used_citation_numbers:
632
+ number += 1 # noqa: SIM113
633
+ if n == citation_number:
634
+ return number
635
+ raise ValueError(f"Citation number {citation_number} not found")
636
+
637
+
638
+ @me.web_component(path="./frame_listener.js")
639
+ def frame_listener(
640
+ *,
641
+ key: str | None = None,
642
+ ):
643
+ pass
pyproject.toml ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [project]
2
+ name = "docbot"
3
+ version = "0.1.0"
4
+ description = "A chatbot for docs"
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+ dependencies = [
8
+ "gunicorn>=23.0.0",
9
+ "nest-asyncio>=1.6.0",
10
+ "llama-index==0.10.68",
11
+ "google-generativeai>=0.5.4",
12
+ "llama-index-llms-gemini==0.2.0",
13
+ "llama-index-embeddings-google==0.1.6",
14
+ "llama-index-retrievers-bm25==0.2.2",
15
+ "mesop>=1.0.0",
16
+ ]
17
+
18
+ # uv required properties:
19
+
20
+ [tool.uv]
21
+ dev-dependencies = []
22
+
23
+ [tool.uv.workspace]
24
+
25
+ [build-system]
26
+ requires = ["hatchling"]
27
+ build-backend = "hatchling.build"
28
+
29
+ # See: https://github.com/astral-sh/uv/issues/6293
30
+ [tool.hatch.build.targets.wheel]
31
+ packages = ["."]
recorder.py ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Create a folder at out_dir + query (percent encoded)
2
+ import argparse
3
+ import os
4
+ import sys
5
+ import urllib.parse
6
+
7
+ from docs_index import blocking_query_engine
8
+ from llama_index.core.instrumentation import get_dispatcher
9
+ from llama_index.core.instrumentation.event_handlers import BaseEventHandler
10
+ from llama_index.core.instrumentation.events.llm import (
11
+ LLMChatEndEvent,
12
+ LLMCompletionEndEvent,
13
+ )
14
+
15
+
16
+ class ModelEventHandler(BaseEventHandler):
17
+ @classmethod
18
+ def class_name(cls) -> str:
19
+ """Class name."""
20
+ return "ModelEventHandler"
21
+
22
+ def handle(self, event) -> None:
23
+ """Logic for handling event."""
24
+ if isinstance(event, LLMCompletionEndEvent):
25
+ print(f"LLM Prompt length: {len(event.prompt)}")
26
+ print(f"LLM Prompt CONTENT: {event.prompt}")
27
+ print(f"LLM Completion: {event.response.text!s}")
28
+ elif isinstance(event, LLMChatEndEvent):
29
+ messages_str = "\n".join([str(x.content) for x in event.messages])
30
+ print(f"LLM Input Messages RAW: {event.messages}")
31
+ print(f"LLM Input Messages length: {len(messages_str)}")
32
+ print(f"LLM Input Messages CONTENT: {messages_str}")
33
+ print(f"LLM Response: {event.response.message.content!s}")
34
+
35
+ # Create a folder for the query
36
+ query_folder = os.path.join(args.out_dir, urllib.parse.quote(query))
37
+ os.makedirs(query_folder, exist_ok=True)
38
+ print(f"Created folder for query: {query_folder}")
39
+
40
+ # Save the LLM input and output to files
41
+ with open(os.path.join(query_folder, "input.txt"), "w") as f:
42
+ f.write(messages_str)
43
+ with open(os.path.join(query_folder, "output.txt"), "w") as f:
44
+ f.write(str(event.response.message.content))
45
+
46
+
47
+ # root dispatcher
48
+ root_dispatcher = get_dispatcher()
49
+
50
+ # register event handler
51
+ root_dispatcher.add_event_handler(ModelEventHandler())
52
+
53
+ QUERIES = [
54
+ "How can I reset an input component?",
55
+ "Show me how to style a component",
56
+ "Create a multi-page app",
57
+ "Is it possible to create custom components?",
58
+ "Implement authentication",
59
+ "Deploy a Mesop app",
60
+ "Optimize performance",
61
+ "Can I use JavaScript libraries in Mesop?",
62
+ "Stream UI updates from an LLM API",
63
+ "Debug a Mesop application",
64
+ "Is Mesop ready for production use?",
65
+ "Create a mobile-friendly and responsive UI",
66
+ "Handle asynchronous operations",
67
+ "Implement dark mode",
68
+ "Add tooltips to Mesop components",
69
+ "Render a pandas DataFrame as a table",
70
+ "Add charts",
71
+ "Handle file uploads",
72
+ ]
73
+
74
+ # QUERIES = [
75
+ # "How do I test a Mesop application?",
76
+ # "What components are available in Mesop?",
77
+ # "How can I reset a text input field in Mesop?",
78
+ # "Show me how to style a component in Mesop",
79
+ # "Create a multi-page app using Mesop",
80
+ # "Is it possible to create custom components in Mesop?",
81
+ # "Implement authentication in a Mesop app",
82
+ # "How do I call an API from a Mesop application?",
83
+ # "What's the process for deploying a Mesop app?",
84
+ # "Optimize performance in a Mesop application",
85
+ # "Implement a datepicker in Mesop",
86
+ # "Can I use JavaScript libraries with Mesop?",
87
+ # "Implement real-time updates in a Mesop app",
88
+ # "Stream UI updates from an LLM API in Mesop",
89
+ # "Debug a Mesop application",
90
+ # "Is Mesop ready for production use?",
91
+ # "Implement form validation in Mesop",
92
+ # "Create a mobile-friendly Mesop app",
93
+ # "Handle asynchronous operations in Mesop",
94
+ # "Implement dark mode in a Mesop application",
95
+ # "Add keyboard shortcuts to a Mesop app",
96
+ # "Implement drag and drop functionality in Mesop",
97
+ # "Create an infinite scroll feature in Mesop",
98
+ # "How to make a row of components in Mesop",
99
+ # "Add tooltips to Mesop components",
100
+ # "Render a pandas DataFrame in a Mesop app",
101
+ # "Add charts to a Mesop application",
102
+ # "Create a table component in Mesop",
103
+ # "Handle file uploads in a Mesop app",
104
+ # "Use command-line flags with a Mesop application",
105
+ # "Create a clickable link in Mesop",
106
+ # "Implement a download link in a Mesop app",
107
+ # ]
108
+
109
+
110
+ parser = argparse.ArgumentParser(
111
+ description="Process queries and record model events."
112
+ )
113
+ parser.add_argument(
114
+ "--out-dir", type=str, help="Output directory for recorded events"
115
+ )
116
+ args = parser.parse_args()
117
+
118
+ if args.out_dir:
119
+ print(f"Output directory set to: {args.out_dir}")
120
+
121
+ # Create the output directory if it doesn't exist
122
+ os.makedirs(args.out_dir, exist_ok=True)
123
+ print(f"Created output directory: {args.out_dir}")
124
+ else:
125
+ print("No output directory specified. Exiting! Specify with --out-dir")
126
+ sys.exit(1)
127
+
128
+
129
+ for query in QUERIES:
130
+ blocking_query_engine.query(query)
requirements.txt ADDED
@@ -0,0 +1,374 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file was autogenerated by uv via the following command:
2
+ # uv pip compile pyproject.toml -o requirements.txt
3
+ absl-py==2.1.0
4
+ # via mesop
5
+ aiohappyeyeballs==2.4.0
6
+ # via aiohttp
7
+ aiohttp==3.10.11
8
+ # via
9
+ # llama-index-core
10
+ # llama-index-legacy
11
+ aiosignal==1.3.1
12
+ # via aiohttp
13
+ annotated-types==0.7.0
14
+ # via pydantic
15
+ anyio==4.4.0
16
+ # via
17
+ # httpx
18
+ # openai
19
+ async-timeout==4.0.3
20
+ # via aiohttp
21
+ attrs==24.2.0
22
+ # via aiohttp
23
+ beautifulsoup4==4.12.3
24
+ # via llama-index-readers-file
25
+ blinker==1.8.2
26
+ # via flask
27
+ bm25s==0.1.10
28
+ # via llama-index-retrievers-bm25
29
+ cachetools==5.5.0
30
+ # via google-auth
31
+ certifi==2024.8.30
32
+ # via
33
+ # httpcore
34
+ # httpx
35
+ # requests
36
+ charset-normalizer==3.3.2
37
+ # via requests
38
+ click==8.1.7
39
+ # via
40
+ # flask
41
+ # nltk
42
+ dataclasses-json==0.6.7
43
+ # via
44
+ # llama-index-core
45
+ # llama-index-legacy
46
+ deepdiff==6.7.1
47
+ # via mesop
48
+ deprecated==1.2.14
49
+ # via
50
+ # llama-index-core
51
+ # llama-index-legacy
52
+ dirtyjson==1.0.8
53
+ # via
54
+ # llama-index-core
55
+ # llama-index-legacy
56
+ distro==1.9.0
57
+ # via openai
58
+ exceptiongroup==1.2.2
59
+ # via anyio
60
+ flask==3.0.3
61
+ # via mesop
62
+ frozenlist==1.4.1
63
+ # via
64
+ # aiohttp
65
+ # aiosignal
66
+ fsspec==2024.6.1
67
+ # via
68
+ # llama-index-core
69
+ # llama-index-legacy
70
+ google-ai-generativelanguage==0.6.4
71
+ # via google-generativeai
72
+ google-api-core==2.19.1
73
+ # via
74
+ # google-ai-generativelanguage
75
+ # google-api-python-client
76
+ # google-generativeai
77
+ google-api-python-client==2.142.0
78
+ # via google-generativeai
79
+ google-auth==2.34.0
80
+ # via
81
+ # google-ai-generativelanguage
82
+ # google-api-core
83
+ # google-api-python-client
84
+ # google-auth-httplib2
85
+ # google-generativeai
86
+ google-auth-httplib2==0.2.0
87
+ # via google-api-python-client
88
+ google-generativeai==0.5.4
89
+ # via
90
+ # docbot (pyproject.toml)
91
+ # llama-index-embeddings-google
92
+ # llama-index-llms-gemini
93
+ googleapis-common-protos==1.63.2
94
+ # via
95
+ # google-api-core
96
+ # grpcio-status
97
+ greenlet==3.0.3
98
+ # via sqlalchemy
99
+ grpcio==1.66.0
100
+ # via
101
+ # google-api-core
102
+ # grpcio-status
103
+ grpcio-status==1.62.3
104
+ # via google-api-core
105
+ gunicorn==23.0.0
106
+ # via docbot (pyproject.toml)
107
+ h11==0.14.0
108
+ # via httpcore
109
+ httpcore==1.0.5
110
+ # via httpx
111
+ httplib2==0.22.0
112
+ # via
113
+ # google-api-python-client
114
+ # google-auth-httplib2
115
+ httpx==0.27.0
116
+ # via
117
+ # llama-cloud
118
+ # llama-index-core
119
+ # llama-index-legacy
120
+ # openai
121
+ idna==3.8
122
+ # via
123
+ # anyio
124
+ # httpx
125
+ # requests
126
+ # yarl
127
+ itsdangerous==2.2.0
128
+ # via flask
129
+ jinja2==3.1.4
130
+ # via flask
131
+ jiter==0.5.0
132
+ # via openai
133
+ joblib==1.4.2
134
+ # via nltk
135
+ llama-cloud==0.0.15
136
+ # via llama-index-indices-managed-llama-cloud
137
+ llama-index==0.10.68
138
+ # via docbot (pyproject.toml)
139
+ llama-index-agent-openai==0.2.9
140
+ # via
141
+ # llama-index
142
+ # llama-index-program-openai
143
+ llama-index-cli==0.1.13
144
+ # via llama-index
145
+ llama-index-core==0.10.68.post1
146
+ # via
147
+ # llama-index
148
+ # llama-index-agent-openai
149
+ # llama-index-cli
150
+ # llama-index-embeddings-google
151
+ # llama-index-embeddings-openai
152
+ # llama-index-indices-managed-llama-cloud
153
+ # llama-index-llms-gemini
154
+ # llama-index-llms-openai
155
+ # llama-index-multi-modal-llms-openai
156
+ # llama-index-program-openai
157
+ # llama-index-question-gen-openai
158
+ # llama-index-readers-file
159
+ # llama-index-readers-llama-parse
160
+ # llama-index-retrievers-bm25
161
+ # llama-parse
162
+ llama-index-embeddings-google==0.1.6
163
+ # via docbot (pyproject.toml)
164
+ llama-index-embeddings-openai==0.1.11
165
+ # via
166
+ # llama-index
167
+ # llama-index-cli
168
+ llama-index-indices-managed-llama-cloud==0.2.7
169
+ # via llama-index
170
+ llama-index-legacy==0.9.48.post3
171
+ # via llama-index
172
+ llama-index-llms-gemini==0.2.0
173
+ # via docbot (pyproject.toml)
174
+ llama-index-llms-openai==0.1.31
175
+ # via
176
+ # llama-index
177
+ # llama-index-agent-openai
178
+ # llama-index-cli
179
+ # llama-index-multi-modal-llms-openai
180
+ # llama-index-program-openai
181
+ # llama-index-question-gen-openai
182
+ llama-index-multi-modal-llms-openai==0.1.9
183
+ # via llama-index
184
+ llama-index-program-openai==0.1.7
185
+ # via
186
+ # llama-index
187
+ # llama-index-question-gen-openai
188
+ llama-index-question-gen-openai==0.1.3
189
+ # via llama-index
190
+ llama-index-readers-file==0.1.33
191
+ # via llama-index
192
+ llama-index-readers-llama-parse==0.1.6
193
+ # via llama-index
194
+ llama-index-retrievers-bm25==0.2.2
195
+ # via docbot (pyproject.toml)
196
+ llama-parse==0.4.9
197
+ # via llama-index-readers-llama-parse
198
+ markupsafe==2.1.5
199
+ # via
200
+ # jinja2
201
+ # werkzeug
202
+ marshmallow==3.22.0
203
+ # via dataclasses-json
204
+ mesop==1.0.0
205
+ # via docbot (pyproject.toml)
206
+ msgpack==1.0.8
207
+ # via mesop
208
+ multidict==6.0.5
209
+ # via
210
+ # aiohttp
211
+ # yarl
212
+ mypy-extensions==1.0.0
213
+ # via typing-inspect
214
+ nest-asyncio==1.6.0
215
+ # via
216
+ # docbot (pyproject.toml)
217
+ # llama-index-core
218
+ # llama-index-legacy
219
+ networkx==3.3
220
+ # via
221
+ # llama-index-core
222
+ # llama-index-legacy
223
+ nltk==3.9.1
224
+ # via
225
+ # llama-index-core
226
+ # llama-index-legacy
227
+ numpy==1.26.4
228
+ # via
229
+ # bm25s
230
+ # llama-index-core
231
+ # llama-index-legacy
232
+ # pandas
233
+ # scipy
234
+ openai==1.42.0
235
+ # via
236
+ # llama-index-agent-openai
237
+ # llama-index-legacy
238
+ # llama-index-llms-openai
239
+ ordered-set==4.1.0
240
+ # via deepdiff
241
+ packaging==24.1
242
+ # via
243
+ # gunicorn
244
+ # marshmallow
245
+ pandas==2.2.2
246
+ # via
247
+ # llama-index-core
248
+ # llama-index-legacy
249
+ pillow==10.4.0
250
+ # via
251
+ # llama-index-core
252
+ # llama-index-llms-gemini
253
+ propcache==0.3.0
254
+ # via yarl
255
+ proto-plus==1.24.0
256
+ # via
257
+ # google-ai-generativelanguage
258
+ # google-api-core
259
+ protobuf==4.25.4
260
+ # via
261
+ # google-ai-generativelanguage
262
+ # google-api-core
263
+ # google-generativeai
264
+ # googleapis-common-protos
265
+ # grpcio-status
266
+ # mesop
267
+ # proto-plus
268
+ pyasn1==0.6.0
269
+ # via
270
+ # pyasn1-modules
271
+ # rsa
272
+ pyasn1-modules==0.4.0
273
+ # via google-auth
274
+ pydantic==2.8.2
275
+ # via
276
+ # google-generativeai
277
+ # llama-cloud
278
+ # llama-index-core
279
+ # mesop
280
+ # openai
281
+ pydantic-core==2.20.1
282
+ # via pydantic
283
+ pyparsing==3.1.4
284
+ # via httplib2
285
+ pypdf==4.3.1
286
+ # via llama-index-readers-file
287
+ pystemmer==2.2.0.1
288
+ # via llama-index-retrievers-bm25
289
+ python-dateutil==2.9.0.post0
290
+ # via pandas
291
+ python-dotenv==1.0.1
292
+ # via mesop
293
+ pytz==2024.1
294
+ # via pandas
295
+ pyyaml==6.0.2
296
+ # via llama-index-core
297
+ regex==2024.7.24
298
+ # via
299
+ # nltk
300
+ # tiktoken
301
+ requests==2.32.3
302
+ # via
303
+ # google-api-core
304
+ # llama-index-core
305
+ # llama-index-legacy
306
+ # tiktoken
307
+ rsa==4.9
308
+ # via google-auth
309
+ scipy==1.14.1
310
+ # via bm25s
311
+ six==1.16.0
312
+ # via python-dateutil
313
+ sniffio==1.3.1
314
+ # via
315
+ # anyio
316
+ # httpx
317
+ # openai
318
+ soupsieve==2.6
319
+ # via beautifulsoup4
320
+ sqlalchemy==2.0.32
321
+ # via
322
+ # llama-index-core
323
+ # llama-index-legacy
324
+ striprtf==0.0.26
325
+ # via llama-index-readers-file
326
+ tenacity==8.5.0
327
+ # via
328
+ # llama-index-core
329
+ # llama-index-legacy
330
+ tiktoken==0.7.0
331
+ # via
332
+ # llama-index-core
333
+ # llama-index-legacy
334
+ tqdm==4.66.5
335
+ # via
336
+ # google-generativeai
337
+ # llama-index-core
338
+ # nltk
339
+ # openai
340
+ typing-extensions==4.12.2
341
+ # via
342
+ # anyio
343
+ # google-generativeai
344
+ # llama-index-core
345
+ # llama-index-legacy
346
+ # openai
347
+ # pydantic
348
+ # pydantic-core
349
+ # pypdf
350
+ # sqlalchemy
351
+ # typing-inspect
352
+ typing-inspect==0.9.0
353
+ # via
354
+ # dataclasses-json
355
+ # llama-index-core
356
+ # llama-index-legacy
357
+ tzdata==2024.1
358
+ # via pandas
359
+ uritemplate==4.1.1
360
+ # via google-api-python-client
361
+ urllib3==2.2.2
362
+ # via requests
363
+ watchdog==4.0.2
364
+ # via mesop
365
+ werkzeug==3.0.6
366
+ # via
367
+ # flask
368
+ # mesop
369
+ wrapt==1.16.0
370
+ # via
371
+ # deprecated
372
+ # llama-index-core
373
+ yarl==1.18.3
374
+ # via aiohttp
scrollable.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {
2
+ LitElement,
3
+ html,
4
+ css,
5
+ } from 'https://cdn.jsdelivr.net/gh/lit/dist@3/core/lit-core.min.js';
6
+
7
+ class ScrollableComponent extends LitElement {
8
+ renderRoot() {
9
+ return this;
10
+ }
11
+ firstUpdated() {
12
+ // this.focus();
13
+ }
14
+ render() {
15
+ this.tabIndex = 0;
16
+ this.style.overflowY = 'auto';
17
+ this.style.outline = 'none';
18
+ }
19
+ }
20
+
21
+ customElements.define('scrollable-component', ScrollableComponent);
uv.lock ADDED
The diff for this file is too large to render. See raw diff