github-actions[bot] commited on
Commit
d26c057
·
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:$HF_TOKEN@huggingface.co/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, 52511, 53918, 55147, 56513, 58168, 59391, 60763, 61986, 63491, 64931, 66272, 67592, 68983, 70494, 71773, 73205, 75030, 76466, 78193, 79728, 81072, 82405, 83765, 85089, 86360, 87904, 89493, 90790, 92225, 93495, 94943, 96208, 98195, 100123, 101478, 103087, 104820, 109305, 111356, 112862, 115903, 117447, 118857, 120339, 121974, 124629, 128528, 132678, 136830, 140845, 145010, 147939, 149579, 150998, 152601, 154162, 157732, 160709, 164405, 168452, 171456, 173002, 174698, 176102, 177700, 179266, 183009, 187447, 191693, 194930, 197577, 199662, 202702, 204485, 205874, 207795, 209224, 210580, 211936, 213219, 214798, 216458, 218254, 219876, 221339, 222970, 224320, 225870, 227821, 229342, 231291, 233012, 235229, 237027, 239108, 240813, 242731, 244218, 246048, 247391, 248687, 249964, 251756, 253101, 254767, 256144, 257440, 258717, 260049, 261331, 262590, 263897, 265200, 266569, 267932, 269284, 270779, 272070, 273359, 274811, 276142, 277431, 278688, 280050, 281367, 282865, 284201, 285495, 286763, 288192, 289530, 290927, 292399, 293779, 295251, 296608, 297918, 299213, 300525, 301821, 303098, 304677, 306043, 307545, 309145, 310439, 311707, 313035, 314324, 315592, 316882, 318178, 319455, 320873, 322137, 323896, 325472, 327040, 329500, 330777, 332889, 335583, 337009, 338864, 341406, 342792, 344088, 345497, 346809, 348098, 349366, 350669, 351991, 353295, 354605, 355894, 357162, 358567, 359912, 361331, 362768, 364141, 365517, 366848, 368144, 369527, 370887, 372195, 373657, 375020, 376330, 377625, 379022, 380367, 381850, 383211, 384514, 385861, 387199, 388495, 389772, 391182, 392534, 393863, 395272, 396617, 397938, 399256, 400545, 401813, 403263, 404580, 406010, 407325, 408635, 409930, 411331, 412648, 414118, 415461, 416757, 418034, 419314, 420574, 422324, 423704, 425449, 426971, 428437, 429701, 431332, 432708, 434728, 436555, 438180, 439927, 441576, 443836, 445345, 446882, 448421, 449967, 452054, 453563, 454949, 456283, 457659, 459163, 460849, 462379, 463786, 465834, 467947, 469764, 471861, 473294, 475333, 476836, 478870, 480275, 481840, 483377, 486042, 488523, 490187, 491579, 493030, 494490, 495849, 497252, 499048, 500568, 502253, 503617, 505163, 506785, 508299, 509662, 510980, 512335, 513734, 515400, 516828, 518168, 519542, 520984, 522384, 523935, 525573, 526965, 528384, 530111, 531591, 533097, 534572, 537144, 538439, 540054, 542155, 544274, 545554, 548152, 550320, 551607, 554286, 555665, 557146, 559497, 560990, 562459, 563740, 565958, 567827, 569597, 571582, 572929, 574235, 575680, 577308, 578753, 579999, 581447, 582947, 584552, 586421, 587655, 589282, 591392, 593294, 595517, 597121, 598495, 600022, 601696, 603101, 604571, 605869, 607674, 609438, 611100, 612509, 614647, 616257, 617684, 619240, 620699, 622393, 625926, 627789, 629917, 631614, 633943, 635230, 636648, 638092, 639677, 641159, 643050, 644626, 646235, 647586, 649252, 650926, 653767, 655261, 656883, 658702, 660913, 662585, 664344, 665783, 667138, 668600, 670422, 672214, 674040, 675806, 677247, 678519, 680164, 681980, 683713, 685343, 686914, 688281, 691127, 695105, 699192, 703497, 707292, 710179, 713556, 714822, 716623, 718043, 719613, 721353, 722864, 724216, 725943, 728917, 730744, 732665, 734643, 736101, 737864, 739209, 740586, 742450, 743955, 746316, 748626, 750941, 752292]
gen/bm25_retriever/data.csc.index.npy ADDED
Binary file (45.1 kB). View file
 
gen/bm25_retriever/indices.csc.index.npy ADDED
Binary file (45.1 kB). View file
 
gen/bm25_retriever/indptr.csc.index.npy ADDED
Binary file (7.5 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": 446,
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
+ {"callsit": 0, "repres": 1, "mutabl": 2, "true": 3, "mesop_concurrent_updates_en": 4, "rememb": 5, "black": 6, "loop": 7, "badg": 8, "critic": 9, "locat": 10, "selectselectionchangeev": 11, "width": 12, "applic": 13, "asdict": 14, "traceback": 15, "chat": 16, "trace": 17, "reusabl": 18, "capabl": 19, "prefer": 20, "slider": 21, "titl": 22, "unsaf": 23, "instead": 24, "ren": 25, "via": 26, "deeper": 27, "environ": 28, "scroll_into_view": 29, "logic": 30, "toggle_them": 31, "print": 32, "reuseexistingserv": 33, "emb": 34, "stringent": 35, "30": 36, "extend": 37, "baseurl": 38, "whi": 39, "altern": 40, "microphon": 41, "product": 42, "clone": 43, "anoth": 44, "clickjack": 45, "belief": 46, "background": 47, "galleri": 48, "backward": 49, "button_click": 50, "on_image_upload": 51, "endpoint": 52, "navig": 53, "680px": 54, "limit": 55, "accordion": 56, "function": 57, "radioopt": 58, "operating_system": 59, "claud": 60, "congress": 61, "everyth": 62, "ui": 63, "storag": 64, "sandbox": 65, "queri": 66, "wwwillchen": 67, "special": 68, "mesop_http_cache_js_bundl": 69, "desktop": 70, "suit": 71, "icon": 72, "disclaim": 73, "ubuntu22": 74, "security_polici": 75, "blank": 76, "tri": 77, "summari": 78, "call_api": 79, "iter": 80, "inputblurev": 81, "end_of_messag": 82, "give": 83, "opendemogalleryinnewtab": 84, "ipynb": 85, "dictionari": 86, "line_height": 87, "in": 88, "overflow_i": 89, "light_mod": 90, "viewport_s": 91, "face": 92, "wrong": 93, "gradio": 94, "defin": 95, "link": 96, "pip": 97, "research": 98, "placehold": 99, "besid": 100, "run": 101, "advanc": 102, "protect": 103, "decor": 104, "ipython": 105, "general": 106, "see": 107, "content": 108, "view": 109, "50": 110, "magic": 111, "typic": 112, "__user": 113, "css2": 114, "dialog_act": 115, "respons": 116, "class": 117, "readabl": 118, "panda": 119, "smaller": 120, "understand": 121, "avail": 122, "search": 123, "found": 124, "either": 125, "inspir": 126, "assign": 127, "worker": 128, "show": 129, "nest": 130, "new_param": 131, "confirm": 132, "tip": 133, "helper": 134, "maco": 135, "repeated_param": 136, "info": 137, "setup": 138, "our": 139, "ps1": 140, "attract": 141, "verbos": 142, "progressbaranimationendev": 143, "daterangepickerchangeev": 144, "del": 145, "layout": 146, "expos": 147, "network": 148, "side": 149, "workaround": 150, "regular": 151, "otherwis": 152, "switch_model": 153, "fraction": 154, "correct": 155, "scalabl": 156, "level": 157, "stale": 158, "560px": 159, "els": 160, "modeldialogst": 161, "grand": 162, "trustedhtml": 163, "approach": 164, "devic": 165, "hello": 166, "sometim": 167, "command": 168, "alreadi": 169, "sleep": 170, "127": 171, "set_page_titl": 172, "part": 173, "mode": 174, "gcloud": 175, "breakpoint": 176, "autosc": 177, "await": 178, "strive": 179, "mesop_state_session_backend": 180, "instruct": 181, "buttontogglechangeev": 182, "host": 183, "prod": 184, "10": 185, "still": 186, "footgun": 187, "re": 188, "on_ent": 189, "full": 190, "sqlite3": 191, "communiti": 192, "tailwind_input": 193, "buttontogglebutton": 194, "39": 195, "chat_input": 196, "quiet": 197, "immut": 198, "dswharshit": 199, "listen": 200, "particular": 201, "much": 202, "unopinion": 203, "white": 204, "send_prompt_pro": 205, "potenti": 206, "avoid": 207, "forth": 208, "localroot": 209, "ci": 210, "arbitrari": 211, "syntax": 212, "pleas": 213, "protocol": 214, "express": 215, "couldn": 216, "simplic": 217, "complic": 218, "failur": 219, "select": 220, "link_compon": 221, "straight": 222, "achiev": 223, "shortcut": 224, "well": 225, "hf": 226, "outlin": 227, "earli": 228, "server": 229, "23": 230, "debugg": 231, "bucket": 232, "platform": 233, "mesop_websockets_en": 234, "data_model": 235, "vast": 236, "instal": 237, "communic": 238, "term": 239, "prototyp": 240, "those": 241, "215px": 242, "return": 243, "improv": 244, "appli": 245, "plugin": 246, "cpu": 247, "cmd": 248, "idea": 249, "weight": 250, "drawback": 251, "ide": 252, "proper": 253, "namespac": 254, "fruit": 255, "declar": 256, "scaffold": 257, "36": 258, "event": 259, "appl": 260, "troubl": 261, "encourag": 262, "problem": 263, "logo": 264, "autom": 265, "block": 266, "howev": 267, "common": 268, "googleapi": 269, "remind": 270, "date_range_pick": 271, "safest": 272, "slowli": 273, "page2": 274, "auto": 275, "utf": 276, "mel": 277, "kit": 278, "3px": 279, "didn": 280, "colorto": 281, "cdn": 282, "goodby": 283, "count": 284, "align_item": 285, "eas": 286, "bandwidth": 287, "access": 288, "mesopev": 289, "z_index": 290, "consol": 291, "filenam": 292, "tune": 293, "vertic": 294, "self": 295, "safeti": 296, "vscode": 297, "slide": 298, "stylesheet": 299, "up": 300, "plan": 301, "caveat": 302, "store": 303, "technolog": 304, "suitabl": 305, "wsgi_app": 306, "bind": 307, "__native__": 308, "credenti": 309, "order": 310, "involv": 311, "within": 312, "best": 313, "troubleshoot": 314, "stage": 315, "below": 316, "cach": 317, "directori": 318, "param": 319, "connection_uri": 320, "input": 321, "detect": 322, "prompt": 323, "mesop": 324, "fluid": 325, "sign": 326, "date": 327, "justify_cont": 328, "multi": 329, "slot": 330, "fit": 331, "have": 332, "spec": 333, "race": 334, "rare": 335, "eventu": 336, "abov": 337, "them": 338, "1024": 339, "modifi": 340, "on_load_gener": 341, "indic": 342, "stateless": 343, "often": 344, "swap": 345, "auth": 346, "both": 347, "grow": 348, "group": 349, "edgy0afg6u": 350, "method": 351, "mean": 352, "manner": 353, "entir": 354, "exact": 355, "incom": 356, "pad": 357, "finish": 358, "librari": 359, "com": 360, "horizont": 361, "offer": 362, "manual": 363, "earlier": 364, "fix": 365, "pyproject": 366, "send_messag": 367, "pictur": 368, "doe": 369, "quickstart": 370, "quick": 371, "dedic": 372, "blue": 373, "on_click": 374, "5678": 375, "__component__": 376, "even": 377, "privacypolicyurl": 378, "configur": 379, "memori": 380, "b64encod": 381, "bar": 382, "deseri": 383, "text_to_imag": 384, "compatibilti": 385, "lambda": 386, "create_engin": 387, "over": 388, "on_auth_chang": 389, "progress_bar": 390, "fulli": 391, "also": 392, "startswith": 393, "me": 394, "current": 395, "status": 396, "case": 397, "gcp_project": 398, "spin": 399, "goto": 400, "scienc": 401, "md": 402, "goe": 403, "newer": 404, "philosophi": 405, "determin": 406, "adopt": 407, "content_slide_toggl": 408, "dkvt0rboqumapk5d": 409, "allowed_iframe_par": 410, "trust": 411, "final": 412, "violat": 413, "sh": 414, "keep": 415, "bundl": 416, "llm_respons": 417, "some": 418, "justify_item": 419, "price": 420, "image_data": 421, "bring": 422, "just": 423, "larger": 424, "grid_template_row": 425, "absenc": 426, "minim": 427, "check": 428, "tell": 429, "ambigu": 430, "set_theme_mod": 431, "www": 432, "explain": 433, "rank": 434, "twitter": 435, "tool": 436, "field": 437, "did": 438, "annot": 439, "_this": 440, "callback": 441, "pathmap": 442, "markdown": 443, "remoteroot": 444, "flow": 445, "serializ": 446, "20240229": 447, "config": 448, "nonc": 449, "tailwind": 450, "complex": 451, "between": 452, "model": 453, "selected_model": 454, "known": 455, "elem": 456, "upgrad": 457, "ram": 458, "ask": 459, "hamburg": 460, "interoper": 461, "counter_component_app": 462, "mesop_state_session_backend_firestore_collect": 463, "accept": 464, "figur": 465, "step": 466, "trigger": 467, "referrerpolici": 468, "real": 469, "py": 470, "popular": 471, "resist": 472, "unit": 473, "thalnerkar": 474, "valu": 475, "ctrl": 476, "integ": 477, "ts": 478, "fuss": 479, "rgba": 480, "datepickerchangeev": 481, "pass": 482, "picker": 483, "chrome": 484, "save": 485, "domain": 486, "specif": 487, "conversation_pag": 488, "mention": 489, "base64": 490, "2767": 491, "result": 492, "value2": 493, "someth": 494, "design": 495, "progress": 496, "wire": 497, "night": 498, "bash": 499, "out": 500, "descript": 501, "share": 502, "choic": 503, "probabl": 504, "kw_on": 505, "paradigm": 506, "exc": 507, "_zr64fycojgbcdqbjpla": 508, "integr": 509, "yield": 510, "termin": 511, "it": 512, "streamlin": 513, "shell": 514, "overview": 515, "expans": 516, "wrestl": 517, "risk": 518, "temperatur": 519, "async_await": 520, "replac": 521, "selectopt": 522, "xs": 523, "gemini_1_5_flash": 524, "sophist": 525, "empti": 526, "html": 527, "colorfrom": 528, "change_model_opt": 529, "customiz": 530, "on_upload": 531, "relat": 532, "style": 533, "securitypolici": 534, "broader": 535, "plumb": 536, "util": 537, "model_nam": 538, "deal": 539, "attempt": 540, "dialog": 541, "nestedst": 542, "metadata": 543, "680": 544, "unnecessari": 545, "64": 546, "f0f0f0": 547, "enter": 548, "s9ag_yndl0m": 549, "95": 550, "viewabl": 551, "untrust": 552, "account": 553, "apach": 554, "accumul": 555, "background_color": 556, "theme_var": 557, "support": 558, "classif": 559, "hint": 560, "other": 561, "loadev": 562, "keyboard": 563, "simultan": 564, "strict": 565, "sensit": 566, "famili": 567, "largebinari": 568, "disallow": 569, "light": 570, "a_web_compon": 571, "entri": 572, "toml": 573, "set_gemini_api_key": 574, "histori": 575, "8192": 576, "pic": 577, "granular": 578, "tosurl": 579, "under": 580, "should": 581, "add_query_param": 582, "review": 583, "def": 584, "respect": 585, "few": 586, "happen": 587, "examples_row": 588, "mesop_colab_getting_start": 589, "32px": 590, "initial_input_valu": 591, "densiti": 592, "gap": 593, "generation_config": 594, "send_prompt": 595, "devtool": 596, "autocompleteoptiongroup": 597, "react": 598, "export": 599, "rais": 600, "starter_kit": 601, "minimalist": 602, "requir": 603, "posit": 604, "pattern": 605, "page_2": 606, "procfil": 607, "showcas": 608, "compon": 609, "min": 610, "fair": 611, "dump": 612, "steeper": 613, "primarili": 614, "smbah5leri": 615, "text": 616, "label": 617, "vs": 618, "expect": 619, "id": 620, "right": 621, "depth": 622, "component_": 623, "dure": 624, "caus": 625, "5etfw": 626, "_not_": 627, "table_nam": 628, "http": 629, "doubl": 630, "abc": 631, "is_desktop": 632, "selectopenedchangeev": 633, "date_pick": 634, "radio": 635, "enterpris": 636, "xhr": 637, "sure": 638, "hood": 639, "toggl": 640, "in_progress": 641, "across": 642, "think": 643, "mediadevic": 644, "possibl": 645, "time": 646, "next": 647, "git": 648, "grid": 649, "care": 650, "away": 651, "manual_sc": 652, "workspacefold": 653, "whether": 654, "test": 655, "comparison": 656, "equival": 657, "show_menu_button": 658, "8080": 659, "src": 660, "debug": 661, "issu": 662, "ssh": 663, "fff": 664, "programmingerror": 665, "cloudsql": 666, "activ": 667, "variable_nam": 668, "theme": 669, "factori": 670, "retain": 671, "con": 672, "your_project_id": 673, "viewport": 674, "lab": 675, "extern": 676, "serious": 677, "work": 678, "dev": 679, "hidden": 680, "don": 681, "uploadev": 682, "restart": 683, "callabl": 684, "correspond": 685, "home": 686, "screenshot": 687, "purpos": 688, "datepick": 689, "flex": 690, "back": 691, "50vh": 692, "instanc": 693, "notebook": 694, "download": 695, "detection_compon": 696, "blur": 697, "kufpisujrw": 698, "current_input_valu": 699, "sanchay": 700, "2px": 701, "copi": 702, "engin": 703, "justmycod": 704, "miss": 705, "symbol": 706, "select_menu_key": 707, "put": 708, "compromis": 709, "alway": 710, "typeerror": 711, "mutat": 712, "dynapubow3aft47i": 713, "chatmessag": 714, "typeset": 715, "charact": 716, "content_button": 717, "grid_template_column": 718, "request": 719, "frame": 720, "payload": 721, "toler": 722, "inform": 723, "new": 724, "collect": 725, "v2": 726, "html_demo": 727, "co": 728, "most": 729, "firestor": 730, "chunk": 731, "messag": 732, "intern": 733, "suffici": 734, "hello_world": 735, "complement": 736, "demonstr": 737, "js": 738, "queu": 739, "on_chang": 740, "browser": 741, "cd": 742, "structur": 743, "genai": 744, "debugpi": 745, "feel": 746, "languag": 747, "ok": 748, "key": 749, "configure_gemini": 750, "state": 751, "differenti": 752, "subtre": 753, "through": 754, "repositori": 755, "initi": 756, "hub": 757, "multipl": 758, "20": 759, "fragment": 760, "trustworthi": 761, "except": 762, "fastapi": 763, "longer": 764, "occasion": 765, "good": 766, "construct": 767, "delight": 768, "menu_width": 769, "rather": 770, "unnecessarili": 771, "highlight": 772, "further": 773, "now": 774, "clear": 775, "appropri": 776, "2fr": 777, "safe": 778, "anatomi": 779, "default": 780, "leak": 781, "mesopdeveloperexcept": 782, "one": 783, "160": 784, "scale": 785, "harshit": 786, "dialog_st": 787, "component_help": 788, "size": 789, "evolv": 790, "24": 791, "module_nam": 792, "text_to_text": 793, "sse": 794, "autocompleteopt": 795, "localhost": 796, "render": 797, "send_prompt_flash": 798, "is_model_picker_dialog_open": 799, "hate": 800, "shadow": 801, "too": 802, "concaten": 803, "typescript": 804, "github": 805, "explicit": 806, "dangerously_disable_trusted_typ": 807, "claude_3_5_sonnet": 808, "bob": 809, "written": 810, "imper": 811, "handl": 812, "autocompleteenterev": 813, "symmetr": 814, "315": 815, "wsgi": 816, "captur": 817, "intuit": 818, "page_b": 819, "same": 820, "mesop_state_session_backend_sql_connection_uri": 821, "readm": 822, "local": 823, "parti": 824, "page": 825, "contain": 826, "standalon": 827, "again": 828, "entrypoint": 829, "input_valu": 830, "2024": 831, "wght": 832, "max_output_token": 833, "mechan": 834, "gradiomesop": 835, "v1": 836, "increment": 837, "max": 838, "data": 839, "veri": 840, "liner": 841, "colab": 842, "user_messag": 843, "intend": 844, "zone": 845, "headlin": 846, "solut": 847, "closur": 848, "mobil": 849, "sanit": 850, "tmp": 851, "team": 852, "sorri": 853, "while": 854, "incred": 855, "detect_object": 856, "expertis": 857, "who": 858, "url": 859, "app_port": 860, "optim": 861, "third": 862, "menu": 863, "secur": 864, "sleek": 865, "css": 866, "home_pag": 867, "later": 868, "expiresat": 869, "hot": 870, "e7f2ff": 871, "main": 872, "card": 873, "redact": 874, "on_load": 875, "has": 876, "adc": 877, "font_weight": 878, "fallback": 879, "where": 880, "explor": 881, "line": 882, "action": 883, "assum": 884, "1000": 885, "more": 886, "480": 887, "pre": 888, "traffic": 889, "packag": 890, "consider": 891, "code_demo": 892, "sent": 893, "tupl": 894, "firebase_auth": 895, "models_px": 896, "various": 897, "convent": 898, "demo": 899, "16gb": 900, "_blank": 901, "verifi": 902, "refus": 903, "grant": 904, "target": 905, "none": 906, "mesop_static_fold": 907, "pin": 908, "mdn": 909, "string": 910, "init": 911, "font_siz": 912, "fals": 913, "note": 914, "all_valu": 915, "hide": 916, "h1": 917, "statement": 918, "specifi": 919, "after": 920, "media": 921, "parent": 922, "dispatchev": 923, "invalid": 924, "panel": 925, "demand": 926, "confidenti": 927, "cancel": 928, "becom": 929, "page1": 930, "space": 931, "scope": 932, "ve": 933, "async": 934, "futur": 935, "1798673386425786724": 936, "differ": 937, "busi": 938, "deprec": 939, "direct": 940, "lifetim": 941, "base": 942, "toc": 943, "get_al": 944, "decreas": 945, "clickev": 946, "token": 947, "firebaseui": 948, "attach": 949, "cdns": 950, "code": 951, "inject": 952, "python": 953, "cli": 954, "runtime_config": 955, "load": 956, "stack": 957, "beginn": 958, "claude_api_key": 959, "lower": 960, "three": 961, "build": 962, "inputev": 963, "allows_ifram": 964, "consist": 965, "bg": 966, "kind": 967, "bodi": 968, "intermedi": 969, "flex_grow": 970, "prod_bundl": 971, "paramet": 972, "rest": 973, "bill": 974, "bordersid": 975, "scheme": 976, "each": 977, "insert_web_compon": 978, "ifram": 979, "node": 980, "allowfullscreen": 981, "unfortun": 982, "extrem": 983, "guid": 984, "page_a": 985, "concept": 986, "mkdir": 987, "firebas": 988, "visual": 989, "expand": 990, "abstract": 991, "coupl": 992, "ident": 993, "match": 994, "wide": 995, "googl": 996, "mesop_layout_colab": 997, "concurr": 998, "nav_compon": 999, "blob": 1000, "degrad": 1001, "txt": 1002, "almost": 1003, "png": 1004, "transport": 1005, "audio": 1006, "world": 1007, "inner": 1008, "1804890091816644906": 1009, "gemini_1_5_pro": 1010, "easier": 1011, "requisit": 1012, "constraint": 1013, "top": 1014, "autocomplet": 1015, "mistak": 1016, "select_demo": 1017, "boost": 1018, "disk": 1019, "tedious": 1020, "embrac": 1021, "model_picker_dialog": 1022, "insid": 1023, "player": 1024, "5px": 1025, "len": 1026, "unless": 1027, "db": 1028, "firebase_auth_compon": 1029, "less": 1030, "websocket": 1031, "congrat": 1032, "hit": 1033, "long": 1034, "your_servic": 1035, "checkboxindeterminatechangeev": 1036, "alloc": 1037, "multi_page_nav": 1038, "dark_mod": 1039, "lost": 1040, "progress_spinn": 1041, "srv": 1042, "anthrop": 1043, "system": 1044, "say": 1045, "privaci": 1046, "o1": 1047, "e0e0e0": 1048, "onto": 1049, "value1": 1050, "40px": 1051, "conveni": 1052, "problemat": 1053, "consum": 1054, "500": 1055, "built": 1056, "initial_valu": 1057, "dark": 1058, "path": 1059, "addit": 1060, "identitytoolkit": 1061, "whichev": 1062, "io": 1063, "be": 1064, "own": 1065, "themevar": 1066, "bat": 1067, "success": 1068, "you": 1069, "isol": 1070, "dynam": 1071, "all": 1072, "depend": 1073, "nativ": 1074, "slidervaluechangeev": 1075, "first": 1076, "navigate_hom": 1077, "fault": 1078, "enhanc": 1079, "document": 1080, "flash": 1081, "receiv": 1082, "refer": 1083, "csp": 1084, "rang": 1085, "congratul": 1086, "virtual": 1087, "reason": 1088, "moder": 1089, "widget": 1090, "nice": 1091, "substr": 1092, "set": 1093, "refin": 1094, "etc": 1095, "may": 1096, "call": 1097, "markdown_demo": 1098, "licens": 1099, "project": 1100, "adjust": 1101, "ttl": 1102, "modul": 1103, "provid": 1104, "replica": 1105, "rout": 1106, "color": 1107, "venv": 1108, "hl_line": 1109, "your": 1110, "help": 1111, "2rem": 1112, "effortless": 1113, "2f": 1114, "anywher": 1115, "semant": 1116, "api_key": 1117, "stream": 1118, "asset": 1119, "medium": 1120, "execut": 1121, "crux": 1122, "split": 1123, "focus_compon": 1124, "believ": 1125, "setattr": 1126, "elimin": 1127, "been": 1128, "plenti": 1129, "red": 1130, "quota": 1131, "object_detector": 1132, "catch": 1133, "privileg": 1134, "xlr8harder": 1135, "env": 1136, "question": 1137, "recogn": 1138, "ref_src": 1139, "radiochangeev": 1140, "onc": 1141, "disk_size_gb": 1142, "100vh": 1143, "card_cont": 1144, "variabl": 1145, "detail": 1146, "add": 1147, "whenev": 1148, "_or_": 1149, "height": 1150, "frontend": 1151, "wait": 1152, "frequent": 1153, "address": 1154, "can": 1155, "port": 1156, "column": 1157, "0003": 1158, "accur": 1159, "social": 1160, "px": 1161, "come": 1162, "itself": 1163, "simpl": 1164, "off": 1165, "vcpu": 1166, "decod": 1167, "send": 1168, "runtime_vers": 1169, "display_convers": 1170, "free": 1171, "file": 1172, "user": 1173, "lose": 1174, "infrastructur": 1175, "somewher": 1176, "choos": 1177, "32123": 1178, "api": 1179, "sinc": 1180, "how": 1181, "saniti": 1182, "append": 1183, "click": 1184, "instant": 1185, "continu": 1186, "similar": 1187, "want": 1188, "jpeg": 1189, "chang": 1190, "could": 1191, "bunch": 1192, "gave": 1193, "two": 1194, "start_chat": 1195, "life": 1196, "powershel": 1197, "jsdelivr": 1198, "playwright": 1199, "cell": 1200, "sqlalchemi": 1201, "cross": 1202, "especi": 1203, "some_cont": 1204, "modular": 1205, "essenti": 1206, "100": 1207, "town": 1208, "call_claude_sonnet": 1209, "en": 1210, "inter": 1211, "counter": 1212, "bottom": 1213, "web": 1214, "header": 1215, "principl": 1216, "like": 1217, "point": 1218, "num": 1219, "on_blur": 1220, "interfac": 1221, "elif": 1222, "although": 1223, "mdash": 1224, "focus": 1225, "writeabl": 1226, "memory_gb": 1227, "gemini": 1228, "mount": 1229, "experi": 1230, "my": 1231, "extens": 1232, "bottleneck": 1233, "font": 1234, "attribut": 1235, "front": 1236, "set_theme_dens": 1237, "foo": 1238, "signific": 1239, "welcom": 1240, "serial": 1241, "overal": 1242, "materi": 1243, "word": 1244, "mani": 1245, "retriev": 1246, "snippet": 1247, "12": 1248, "mesop_state_session_backend_sql_t": 1249, "model_messag": 1250, "separ": 1251, "difficult": 1252, "root_box_styl": 1253, "max_token": 1254, "srcdoc": 1255, "compat": 1256, "end": 1257, "facilit": 1258, "oftentim": 1259, "gunicorn": 1260, "walk": 1261, "updat": 1262, "banana": 1263, "innerhtml": 1264, "button_toggl": 1265, "includ": 1266, "conclus": 1267, "role": 1268, "evalu": 1269, "power": 1270, "acceleromet": 1271, "root": 1272, "featur": 1273, "develop": 1274, "resolv": 1275, "establish": 1276, "conform": 1277, "slide_toggl": 1278, "larg": 1279, "display_messag": 1280, "top_p": 1281, "0000001f": 1282, "polic": 1283, "must": 1284, "reli": 1285, "extract": 1286, "machin": 1287, "resourc": 1288, "deploy": 1289, "close_model_picker_dialog": 1290, "assist": 1291, "around": 1292, "moment": 1293, "deep": 1294, "boilerpl": 1295, "prebuilt": 1296, "break": 1297, "checkbox": 1298, "process": 1299, "use": 1300, "umd": 1301, "lock": 1302, "output": 1303, "tab": 1304, "from": 1305, "on_input": 1306, "firebase_auth_app": 1307, "let": 1308, "read": 1309, "enabl": 1310, "reduc": 1311, "mesop_state_session_backend_file_base_dir": 1312, "import": 1313, "top_k": 1314, "llm": 1315, "were": 1316, "update_st": 1317, "flexbox": 1318, "confirm_model_picker_dialog": 1319, "way": 1320, "anti": 1321, "contact": 1322, "imag": 1323, "postgresql": 1324, "disabl": 1325, "pagebst": 1326, "categori": 1327, "combin": 1328, "idiomat": 1329, "card_head": 1330, "launch": 1331, "old": 1332, "least": 1333, "sequenti": 1334, "1fr": 1335, "b9e1ff": 1336, "matplotlib": 1337, "str": 1338, "set_claude_api_key": 1339, "dozen": 1340, "place": 1341, "allowed_script_src": 1342, "box_shadow": 1343, "wildcard": 1344, "twsrc": 1345, "consid": 1346, "1800557173073691000": 1347, "readi": 1348, "deliv": 1349, "row": 1350, "cloud": 1351, "tradit": 1352, "filter": 1353, "namedslot": 1354, "640": 1355, "rapid": 1356, "serv": 1357, "generat": 1358, "cover": 1359, "what": 1360, "standard": 1361, "repo": 1362, "varieti": 1363, "anchor": 1364, "format": 1365, "gh": 1366, "binari": 1367, "textarea": 1368, "name": 1369, "singl": 1370, "unfamiliar": 1371, "authent": 1372, "dispatch": 1373, "autocompleteselectionchangeev": 1374, "is_open": 1375, "repeat": 1376, "lightweight": 1377, "video": 1378, "warn": 1379, "usual": 1380, "look": 1381, "effici": 1382, "introduc": 1383, "theme_bright": 1384, "random": 1385, "recommend": 1386, "pointer": 1387, "persist": 1388, "versatil": 1389, "stabl": 1390, "overridden": 1391, "viewer": 1392, "friction": 1393, "divid": 1394, "dive": 1395, "battl": 1396, "offset": 1397, "tutori": 1398, "experiment": 1399, "strong": 1400, "number": 1401, "individu": 1402, "prevent": 1403, "var": 1404, "ultim": 1405, "encod": 1406, "comprehens": 1407, "rich": 1408, "getusermedia": 1409, "dict": 1410, "pros": 1411, "decrementev": 1412, "ai": 1413, "defer": 1414, "object": 1415, "switch": 1416, "high": 1417, "instanti": 1418, "session": 1419, "upload": 1420, "databas": 1421, "display": 1422, "togeth": 1423, "prioriti": 1424, "1028": 1425, "text_stream": 1426, "clean": 1427, "unhandl": 1428, "calendar": 1429, "uniqu": 1430, "make": 1431, "named_slot": 1432, "default_factori": 1433, "gemini_api_key": 1434, "folder": 1435, "easi": 1436, "incompat": 1437, "aj4rqzs2mmwvxfo": 1438, "doesn": 1439, "streamlit": 1440, "pick": 1441, "checkboxchangeev": 1442, "tooltip": 1443, "comput": 1444, "autoplay": 1445, "section": 1446, "webev": 1447, "know": 1448, "subtl": 1449, "mesop_web_components_http_cache_key": 1450, "card_act": 1451, "implement": 1452, "contribut": 1453, "milk": 1454, "11": 1455, "without": 1456, "confid": 1457, "usag": 1458, "subject": 1459, "click_navigate_button": 1460, "go": 1461, "mesop_static_url_path": 1462, "hug": 1463, "ad": 1464, "shift": 1465, "aim": 1466, "script": 1467, "npx": 1468, "unselect": 1469, "custom": 1470, "describ": 1471, "start": 1472, "webserv": 1473, "us": 1474, "actual": 1475, "templat": 1476, "need": 1477, "dockerfil": 1478, "sourc": 1479, "increas": 1480, "plot": 1481, "context": 1482, "dataclass": 1483, "accommod": 1484, "asyncio": 1485, "minut": 1486, "valid": 1487, "site": 1488, "gray": 1489, "balanc": 1490, "unredact": 1491, "tend": 1492, "_first_": 1493, "7anchay": 1494, "primary_key": 1495, "exist": 1496, "emoji": 1497, "slotclass": 1498, "treat": 1499, "ll": 1500, "until": 1501, "join": 1502, "app": 1503, "do": 1504, "generativeai": 1505, "mutableclass": 1506, "program": 1507, "defens": 1508, "int": 1509, "huggingfac": 1510, "follow": 1511, "lot": 1512, "800": 1513, "900": 1514, "fewer": 1515, "clipboard": 1516, "take": 1517, "ffffff": 1518, "basic": 1519, "area": 1520, "lit": 1521, "ensur": 1522, "mesop_state_sess": 1523, "latest": 1524, "encrypt": 1525, "priorit": 1526, "net": 1527, "counter_compon": 1528, "calc": 1529, "youtub": 1530, "pageast": 1531, "javascript": 1532, "which": 1533, "screen": 1534, "shown": 1535, "insensit": 1536, "previous": 1537, "align": 1538, "answer": 1539, "knowledg": 1540, "letter_spac": 1541, "seamless": 1542, "250px": 1543, "interpol": 1544, "unifi": 1545, "core": 1546, "remot": 1547, "slow": 1548, "tailwindcss": 1549, "absolut": 1550, "desir": 1551, "layoutslot": 1552, "among": 1553, "properti": 1554, "open": 1555, "cannot": 1556, "resiz": 1557, "duochat": 1558, "leverag": 1559, "si": 1560, "adapt": 1561, "colab_run": 1562, "sort": 1563, "transform": 1564, "exampl": 1565, "ml": 1566, "purpl": 1567, "polici": 1568, "560": 1569, "expansion_panel": 1570, "find": 1571, "strength": 1572, "inadvert": 1573, "generic": 1574, "framework": 1575, "given": 1576, "content_compon": 1577, "minimum": 1578, "center": 1579, "permiss": 1580, "when": 1581, "scratch": 1582, "june": 1583, "releas": 1584, "thing": 1585, "outsid": 1586, "angular": 1587, "window": 1588, "oper": 1589, "allow": 1590, "codelab": 1591, "would": 1592, "_ondecr": 1593, "omit": 1594, "notic": 1595, "automat": 1596, "sequenc": 1597, "query_param": 1598, "backend": 1599, "16px": 1600, "agnost": 1601, "handler": 1602, "learn": 1603, "rerun": 1604, "relax": 1605, "downsid": 1606, "condit": 1607, "abl": 1608, "dsl": 1609, "write": 1610, "architectur": 1611, "modern": 1612, "native_textarea": 1613, "bin": 1614, "identifi": 1615, "create_al": 1616, "due": 1617, "affin": 1618, "past": 1619, "option": 1620, "3d3929": 1621, "footer": 1622, "excel": 1623, "decrement": 1624, "tabl": 1625, "familiar": 1626, "act": 1627, "second": 1628, "index": 1629, "so": 1630, "email": 1631, "flask": 1632, "bad": 1633, "easili": 1634, "maintain": 1635, "ani": 1636, "obj": 1637, "dist": 1638, "everi": 1639, "robust": 1640, "pro": 1641, "straightforward": 1642, "firebaseconfig": 1643, "uploadedfil": 1644, "jumpstart": 1645, "flexibl": 1646, "created_at": 1647, "slidetogglechangeev": 1648, "framebord": 1649, "json": 1650, "budget": 1651, "i18n": 1652, "done": 1653, "tree": 1654, "offici": 1655, "safelist": 1656, "dens": 1657, "signinsuccessurl": 1658, "simplest": 1659, "reus": 1660, "16": 1661, "bool": 1662, "trustedscripturl": 1663, "produc": 1664, "ttls": 1665, "inspect": 1666, "yaml": 1667, "favicon": 1668, "proto": 1669, "version": 1670, "768px": 1671, "font_famili": 1672, "tyagi": 1673, "compos": 1674, "onli": 1675, "connect": 1676, "than": 1677, "remov": 1678, "wiki": 1679, "web_compon": 1680, "log": 1681, "emit": 1682, "sever": 1683, "servic": 1684, "bi": 1685, "get": 1686, "touch": 1687, "reset": 1688, "toy": 1689, "form": 1690, "made": 1691, "docker": 1692, "content_layout": 1693, "border_radius": 1694, "generativemodel": 1695, "convers": 1696, "goal": 1697, "button": 1698, "here": 1699, "child": 1700, "last": 1701, "delet": 1702, "zi1dngoryho": 1703, "flavor": 1704, "alic": 1705, "fail": 1706, "param_nam": 1707, "person": 1708, "content_upload": 1709, "reload": 1710, "is_load": 1711, "sidebar": 1712, "manag": 1713, "admin": 1714, "left": 1715, "we": 1716, "inputenterev": 1717, "associ": 1718, "ico": 1719, "list": 1720, "transmit": 1721, "anyth": 1722, "outer": 1723, "href": 1724, "move": 1725, "chat_sess": 1726, "ever": 1727, "amount": 1728, "ecosystem": 1729, "scroll": 1730, "behavior": 1731, "svelt": 1732, "subdomain": 1733, "enum": 1734, "commit": 1735, "becaus": 1736, "variat": 1737, "flex_direct": 1738, "argument": 1739, "allowed_connect_src": 1740, "margin": 1741, "element": 1742, "mark": 1743, "regist": 1744, "befor": 1745, "gcp": 1746, "complet": 1747, "starter": 1748, "1px": 1749, "click_exampl": 1750, "error": 1751, "switcher": 1752, "stateclass": 1753, "curv": 1754, "clariti": 1755, "roundtrip": 1756, "small": 1757, "danger": 1758, "fetch": 1759, "nav": 1760, "nullabl": 1761, "pretti": 1762, "defined__": 1763, "static": 1764, "wrap": 1765, "accord": 1766, "uncom": 1767, "minor": 1768, "charset": 1769, "uri": 1770, "migrat": 1771, "imagin": 1772, "soon": 1773, "skew": 1774, "keyerror": 1775, "push": 1776, "hashtag": 1777, "00000024": 1778, "jupyt": 1779, "perform": 1780, "_root": 1781, "box_siz": 1782, "mesop_prod_unredacted_error": 1783, "gyroscop": 1784, "creat": 1785, "expansionpaneltoggleev": 1786, "doc": 1787, "person_dict": 1788, "compar": 1789, "branch": 1790, "about": 1791, "https": 1792, "decoupl": 1793, "client": 1794, "collection_nam": 1795, "veloc": 1796, "interact": 1797, "login": 1798, "children": 1799, "border": 1800, "cursor": 1801, "dom": 1802, "content__inn": 1803, "type": 1804, "datetim": 1805, "impos": 1806, "ahd": 1807, "low": 1808, "control": 1809, "though": 1810, "sidenav": 1811, "per": 1812, "sql": 1813, "create_wsgi_app": 1814, "val": 1815, "datapick": 1816, "content_checkbox": 1817, "fast": 1818, "unread": 1819, "gentl": 1820, "overflow_x": 1821, "trick": 1822, "respond": 1823, "spinner": 1824, "linux": 1825, "sdk": 1826, "tier": 1827, "better": 1828, "box": 1829, "wrapper": 1830, "cryptic": 1831, "global": 1832, "sonnet": 1833, "liter": 1834, "higher": 1835, "origin": 1836, "runtim": 1837, "abil": 1838, "param_to_delet": 1839, "mesop_app_base_path": 1840, "amongst": 1841, "valuabl": 1842}
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": {"867fa14e-8243-47e8-b9eb-b207d8b2f99f": {"__type__": "vector_store", "__data__": "{\"index_id\": \"867fa14e-8243-47e8-b9eb-b207d8b2f99f\", \"summary\": null, \"nodes_dict\": {\"c0b5e292-dc5a-4e94-bdf9-6ffaf177e97b\": \"c0b5e292-dc5a-4e94-bdf9-6ffaf177e97b\", \"d1e4936c-ff5d-4650-be78-1451212a4585\": \"d1e4936c-ff5d-4650-be78-1451212a4585\", \"cc4f2b8f-5f59-46c6-ae56-afb127516093\": \"cc4f2b8f-5f59-46c6-ae56-afb127516093\", \"e385e5be-4df6-40ac-83a9-9cf0eed1040e\": \"e385e5be-4df6-40ac-83a9-9cf0eed1040e\", \"c60f175b-add1-419a-868b-9abfba9d0582\": \"c60f175b-add1-419a-868b-9abfba9d0582\", \"9b7033d1-71ad-4a28-a2d7-3efcc553bac2\": \"9b7033d1-71ad-4a28-a2d7-3efcc553bac2\", \"bd4d7d92-dba1-4901-94ab-74c96acf5790\": \"bd4d7d92-dba1-4901-94ab-74c96acf5790\", \"2c8eca3a-d74b-47bc-a07b-7a46ca2f9d2f\": \"2c8eca3a-d74b-47bc-a07b-7a46ca2f9d2f\", \"9a303341-e595-400f-a4e5-3c250f2f5225\": \"9a303341-e595-400f-a4e5-3c250f2f5225\", \"deccfd07-abc1-4758-8c92-bc77f8527a71\": \"deccfd07-abc1-4758-8c92-bc77f8527a71\", \"10491fc4-5dfe-4b87-a3d3-a78cdba0e2fc\": \"10491fc4-5dfe-4b87-a3d3-a78cdba0e2fc\", \"dc9c53f6-4046-4fc8-a70b-b1570e74d45e\": \"dc9c53f6-4046-4fc8-a70b-b1570e74d45e\", \"9edca234-9c43-4925-b74e-c37f0c6a52a4\": \"9edca234-9c43-4925-b74e-c37f0c6a52a4\", \"cc3a0554-a309-432a-9295-057a0b2a4f28\": \"cc3a0554-a309-432a-9295-057a0b2a4f28\", \"83588cdd-797a-4dac-937e-466a455a1005\": \"83588cdd-797a-4dac-937e-466a455a1005\", \"41d3fdf8-f59f-4c7a-9b17-5ecbbad2d9be\": \"41d3fdf8-f59f-4c7a-9b17-5ecbbad2d9be\", \"c4d64fee-2f50-4b11-9fdf-c3a132c08ccb\": \"c4d64fee-2f50-4b11-9fdf-c3a132c08ccb\", \"ef8dc4f5-8b46-49af-9b53-d7aeea9a92d9\": \"ef8dc4f5-8b46-49af-9b53-d7aeea9a92d9\", \"b8988c59-82c6-41dd-8a3d-66c44dcbf56f\": \"b8988c59-82c6-41dd-8a3d-66c44dcbf56f\", \"9135760a-c915-407e-b726-4d0270299d7c\": \"9135760a-c915-407e-b726-4d0270299d7c\", \"888ae77c-ef7b-48cb-ab03-3b33cfa52d68\": \"888ae77c-ef7b-48cb-ab03-3b33cfa52d68\", \"b35bf1ea-fc71-4105-b7b4-2173082fa781\": \"b35bf1ea-fc71-4105-b7b4-2173082fa781\", \"562d3889-0533-4219-9c83-5bc732bdb7cc\": \"562d3889-0533-4219-9c83-5bc732bdb7cc\", \"28895d37-b9a6-49c3-9215-357ac8b4050e\": \"28895d37-b9a6-49c3-9215-357ac8b4050e\", \"8a36b4d6-052e-4f4b-a8b5-bff2781d53da\": \"8a36b4d6-052e-4f4b-a8b5-bff2781d53da\", \"28b6027e-fd53-4988-998e-07b756dd38e2\": \"28b6027e-fd53-4988-998e-07b756dd38e2\", \"0d5321cd-c3a0-4957-9e8e-0a7f6d6efab0\": \"0d5321cd-c3a0-4957-9e8e-0a7f6d6efab0\", \"366c07d0-08b0-414f-bce9-1c6ce95b4372\": \"366c07d0-08b0-414f-bce9-1c6ce95b4372\", \"de6e97ea-02fe-4380-930a-da7240632b78\": \"de6e97ea-02fe-4380-930a-da7240632b78\", \"ae60a00f-bf0d-42b7-8e07-4dea6d37281d\": \"ae60a00f-bf0d-42b7-8e07-4dea6d37281d\", \"22d4546c-a7ab-4aa8-86da-2e44fcefba29\": \"22d4546c-a7ab-4aa8-86da-2e44fcefba29\", \"e22d94dd-7c3f-4b55-b9a3-72b706c23a22\": \"e22d94dd-7c3f-4b55-b9a3-72b706c23a22\", \"c32d968f-61d0-423d-8a76-d82f196ad4e5\": \"c32d968f-61d0-423d-8a76-d82f196ad4e5\", \"c27b1d18-110d-4e7b-93ca-7121b933144b\": \"c27b1d18-110d-4e7b-93ca-7121b933144b\", \"08a0ed83-4a38-4c7a-bff5-68b3505ba6b5\": \"08a0ed83-4a38-4c7a-bff5-68b3505ba6b5\", \"8802e2f5-d5f0-49a6-a4ae-100468f432d3\": \"8802e2f5-d5f0-49a6-a4ae-100468f432d3\", \"b785d7fb-19a0-4433-99bc-43ea04394329\": \"b785d7fb-19a0-4433-99bc-43ea04394329\", \"b2252472-6cd1-4a8c-82c5-9f7c483020b9\": \"b2252472-6cd1-4a8c-82c5-9f7c483020b9\", \"b301e940-626c-46a3-abd3-572e796ee252\": \"b301e940-626c-46a3-abd3-572e796ee252\", \"b51c262e-2928-4adf-9090-2843f2003710\": \"b51c262e-2928-4adf-9090-2843f2003710\", \"a623f7e6-fb09-4fc9-bf2c-75b233052fd3\": \"a623f7e6-fb09-4fc9-bf2c-75b233052fd3\", \"92011972-08b3-4bc9-8b84-93fdd1b642e1\": \"92011972-08b3-4bc9-8b84-93fdd1b642e1\", \"d9ac7bab-4c6e-4157-b37a-8d28533862eb\": \"d9ac7bab-4c6e-4157-b37a-8d28533862eb\", \"3ff69f03-c365-4d04-97fe-a66715f1f35b\": \"3ff69f03-c365-4d04-97fe-a66715f1f35b\", \"59a9bf2b-c3ee-476a-b2b8-116a43e1a92e\": \"59a9bf2b-c3ee-476a-b2b8-116a43e1a92e\", \"2bc2328a-96e9-4b05-8f87-18493c020dec\": \"2bc2328a-96e9-4b05-8f87-18493c020dec\", \"5e2250dd-fdae-4980-8d37-2c2c460f0ecd\": \"5e2250dd-fdae-4980-8d37-2c2c460f0ecd\", \"c78fcc1e-5102-4879-8ba2-837f653f2a16\": \"c78fcc1e-5102-4879-8ba2-837f653f2a16\", \"73bff48a-3b6e-4825-80d2-e76832d61c7a\": \"73bff48a-3b6e-4825-80d2-e76832d61c7a\", \"a9bfca3b-990d-4b5b-81be-4ee3788517ff\": \"a9bfca3b-990d-4b5b-81be-4ee3788517ff\", \"89cea2bb-7504-442c-956f-5d1479ebb505\": \"89cea2bb-7504-442c-956f-5d1479ebb505\", \"81cb10d1-340a-4848-8f8d-a8bf90e34b4b\": \"81cb10d1-340a-4848-8f8d-a8bf90e34b4b\", \"daa06ba1-2a18-4b76-a3f4-8ad4978d6f93\": \"daa06ba1-2a18-4b76-a3f4-8ad4978d6f93\", \"48cc3616-e984-4cf6-aacb-48b8ca97a34a\": \"48cc3616-e984-4cf6-aacb-48b8ca97a34a\", \"90a0b788-92ad-4415-ae14-d034b27b9ecc\": \"90a0b788-92ad-4415-ae14-d034b27b9ecc\", \"2a9abc16-188e-40f5-ae1c-3259e8ca8104\": \"2a9abc16-188e-40f5-ae1c-3259e8ca8104\", \"f7a2cea3-277f-4c2e-a50a-31257211d505\": \"f7a2cea3-277f-4c2e-a50a-31257211d505\", \"ca44a48f-94ae-49bb-9164-7d18c513dc0b\": \"ca44a48f-94ae-49bb-9164-7d18c513dc0b\", \"4fc4f12b-2c18-4889-a00f-a475bfbbd6f5\": \"4fc4f12b-2c18-4889-a00f-a475bfbbd6f5\", \"e2489d71-f5d2-45bd-9409-e973ffbde3b0\": \"e2489d71-f5d2-45bd-9409-e973ffbde3b0\", \"96d62216-88ff-4a8c-bdd4-bba9b0f68456\": \"96d62216-88ff-4a8c-bdd4-bba9b0f68456\", \"ec522033-5376-45d9-a46a-15255b83542d\": \"ec522033-5376-45d9-a46a-15255b83542d\", \"172e0dbf-2efa-486f-9bf9-cfb30877a9e1\": \"172e0dbf-2efa-486f-9bf9-cfb30877a9e1\", \"22a3317e-c7be-461b-8b37-1631a5df83e7\": \"22a3317e-c7be-461b-8b37-1631a5df83e7\", \"b3340c1c-ec1b-4af1-b7d3-4a6b2290668a\": \"b3340c1c-ec1b-4af1-b7d3-4a6b2290668a\", \"68f09045-e5a2-4b15-9628-68091ff156ec\": \"68f09045-e5a2-4b15-9628-68091ff156ec\", \"b23ea6db-a89b-426f-8f51-103ff831d42d\": \"b23ea6db-a89b-426f-8f51-103ff831d42d\", \"b03adfb4-5ffe-4fac-99cf-751f6643e2a8\": \"b03adfb4-5ffe-4fac-99cf-751f6643e2a8\", \"66406f98-cecd-4446-9f3d-9f22365dc265\": \"66406f98-cecd-4446-9f3d-9f22365dc265\", \"72a8823f-1c31-42b9-b71e-6bbec9dc7875\": \"72a8823f-1c31-42b9-b71e-6bbec9dc7875\", \"6478da3f-5e0e-47ad-86ff-f3e8be597bae\": \"6478da3f-5e0e-47ad-86ff-f3e8be597bae\", \"317d0ca9-3e94-428e-9a9a-730a1d655dd1\": \"317d0ca9-3e94-428e-9a9a-730a1d655dd1\", \"95a99263-f3ca-4819-8b17-56c451c410bd\": \"95a99263-f3ca-4819-8b17-56c451c410bd\", \"dd160e49-d4bd-4019-a01c-1748aae5a576\": \"dd160e49-d4bd-4019-a01c-1748aae5a576\", \"436cf9f9-85ba-4b1b-ad6d-4217e5613763\": \"436cf9f9-85ba-4b1b-ad6d-4217e5613763\", \"21da8605-fde6-4ce8-bdf7-adc688b67cff\": \"21da8605-fde6-4ce8-bdf7-adc688b67cff\", \"0262f85c-2959-474f-b65e-c46fbe81bb33\": \"0262f85c-2959-474f-b65e-c46fbe81bb33\", \"a3d3e59b-517c-4d68-8fdc-09003a263b90\": \"a3d3e59b-517c-4d68-8fdc-09003a263b90\", \"761aba5d-e1a7-4e4a-976c-170cd7d9b47f\": \"761aba5d-e1a7-4e4a-976c-170cd7d9b47f\", \"3a367dbd-18a1-4865-8602-f600e948ce89\": \"3a367dbd-18a1-4865-8602-f600e948ce89\", \"b0374bf8-8133-4672-8d7b-833c9b46bd65\": \"b0374bf8-8133-4672-8d7b-833c9b46bd65\", \"51ae9e4a-c69b-4dde-958a-1fd0eb736a54\": \"51ae9e4a-c69b-4dde-958a-1fd0eb736a54\", \"efe9a48a-5d30-43b6-a839-c2cbf138de95\": \"efe9a48a-5d30-43b6-a839-c2cbf138de95\", \"122c4ac2-151a-4142-914e-866f0fb79257\": \"122c4ac2-151a-4142-914e-866f0fb79257\", \"9566aaa5-fe89-4615-904e-083769c1f1cc\": \"9566aaa5-fe89-4615-904e-083769c1f1cc\", \"6d91e9cb-8b35-4634-8984-e2aab643882d\": \"6d91e9cb-8b35-4634-8984-e2aab643882d\", \"83a89f1a-621d-4406-9e23-ce689c7ac76c\": \"83a89f1a-621d-4406-9e23-ce689c7ac76c\", \"039e5ce5-0793-417f-88cf-562c5da7114e\": \"039e5ce5-0793-417f-88cf-562c5da7114e\", \"de7c289a-d006-41cb-8f4d-b0d9d5ca4d37\": \"de7c289a-d006-41cb-8f4d-b0d9d5ca4d37\", \"e96e7bd8-a969-4bb0-b37d-3340c3086a34\": \"e96e7bd8-a969-4bb0-b37d-3340c3086a34\", \"5424898a-8966-4cae-88b3-68cf06faeab3\": \"5424898a-8966-4cae-88b3-68cf06faeab3\", \"abfd12d2-ace6-4a2b-953a-510853153af0\": \"abfd12d2-ace6-4a2b-953a-510853153af0\", \"81afe512-1e8d-4c30-ad7d-66fa6f846ee1\": \"81afe512-1e8d-4c30-ad7d-66fa6f846ee1\", \"17473f19-5d1a-44db-b43a-75cb4ce4eb4f\": \"17473f19-5d1a-44db-b43a-75cb4ce4eb4f\", \"a9fcecbf-e654-4b3b-b3af-f030213ce7d9\": \"a9fcecbf-e654-4b3b-b3af-f030213ce7d9\", \"38a9f23e-8360-420e-b12c-8ce2352875c5\": \"38a9f23e-8360-420e-b12c-8ce2352875c5\", \"622cff5a-f03d-4676-9456-c9e95ccd9ee5\": \"622cff5a-f03d-4676-9456-c9e95ccd9ee5\", \"9dbcd7aa-43ab-4c97-bb52-58fdc197ab29\": \"9dbcd7aa-43ab-4c97-bb52-58fdc197ab29\", \"b61b503d-98fb-4570-8355-1a4a874aed92\": \"b61b503d-98fb-4570-8355-1a4a874aed92\", \"85445ec0-b9d9-410d-ace3-65abf36effec\": \"85445ec0-b9d9-410d-ace3-65abf36effec\", \"d6fd530d-2a89-4333-97b3-47f0bba9bf45\": \"d6fd530d-2a89-4333-97b3-47f0bba9bf45\", \"d8a951bd-6a84-46f1-9a5a-3e4ccf2cf7fe\": \"d8a951bd-6a84-46f1-9a5a-3e4ccf2cf7fe\", \"de2161cb-52f7-4e8a-89de-01f7d55fdad4\": \"de2161cb-52f7-4e8a-89de-01f7d55fdad4\", \"aff71c52-7068-46b4-8b0a-d81fda59592f\": \"aff71c52-7068-46b4-8b0a-d81fda59592f\", \"3fae2a88-dd96-4105-a7d1-4fb37e241eb3\": \"3fae2a88-dd96-4105-a7d1-4fb37e241eb3\", \"04201b1a-367e-4625-9a9a-3b2e25f4018c\": \"04201b1a-367e-4625-9a9a-3b2e25f4018c\", \"5b34b9ad-e097-4484-ac0f-6112434088ed\": \"5b34b9ad-e097-4484-ac0f-6112434088ed\", \"50b24a87-a425-4056-be92-4e3974f37063\": \"50b24a87-a425-4056-be92-4e3974f37063\", \"113f4536-3593-4b10-854e-ed5dd6562cd8\": \"113f4536-3593-4b10-854e-ed5dd6562cd8\", \"58e42546-77fe-4281-bd57-d92ce667ab7c\": \"58e42546-77fe-4281-bd57-d92ce667ab7c\", \"aab2f857-48b3-470a-9cd7-8e937ac39d46\": \"aab2f857-48b3-470a-9cd7-8e937ac39d46\", \"cd1d3053-e560-46cf-8d06-e4de70cee7cc\": \"cd1d3053-e560-46cf-8d06-e4de70cee7cc\", \"ac1bafd1-a846-4f4d-96b6-24fee187847b\": \"ac1bafd1-a846-4f4d-96b6-24fee187847b\", \"64fe34b1-ad46-42e2-b0a0-12d43217abbc\": \"64fe34b1-ad46-42e2-b0a0-12d43217abbc\", \"7c62e4e6-4238-4721-b116-4d47f1789183\": \"7c62e4e6-4238-4721-b116-4d47f1789183\", \"bcf54828-1e91-421e-94de-f0ac352069a3\": \"bcf54828-1e91-421e-94de-f0ac352069a3\", \"1e16d7e9-da44-491c-931b-6e3895babcd9\": \"1e16d7e9-da44-491c-931b-6e3895babcd9\", \"79212d87-b7de-4688-a097-c9a9e8af3405\": \"79212d87-b7de-4688-a097-c9a9e8af3405\", \"b0e912b4-e82c-4ef3-a1a2-92f2f91cadc3\": \"b0e912b4-e82c-4ef3-a1a2-92f2f91cadc3\", \"382e1e28-9fb7-4d3d-9520-71505968a7e3\": \"382e1e28-9fb7-4d3d-9520-71505968a7e3\", \"d6873104-e039-4320-9d1b-e151ba29b213\": \"d6873104-e039-4320-9d1b-e151ba29b213\", \"4c13a1a3-bcbe-473d-9081-c722c1521a2f\": \"4c13a1a3-bcbe-473d-9081-c722c1521a2f\", \"5ff7c20c-235c-40f8-8729-089cdf8ce447\": \"5ff7c20c-235c-40f8-8729-089cdf8ce447\", \"e6d65908-32f4-4fa7-afdc-8b0927bd5f3d\": \"e6d65908-32f4-4fa7-afdc-8b0927bd5f3d\", \"c6fe89b3-551d-47b5-99a5-a6b783d069a3\": \"c6fe89b3-551d-47b5-99a5-a6b783d069a3\", \"beffeec7-6396-4307-a968-bf09e61804b6\": \"beffeec7-6396-4307-a968-bf09e61804b6\", \"3860159c-d3d4-429e-9cf7-d0253b9439b6\": \"3860159c-d3d4-429e-9cf7-d0253b9439b6\", \"38f4d37b-cf76-4e59-a9f7-ca394e450773\": \"38f4d37b-cf76-4e59-a9f7-ca394e450773\", \"416b223a-9683-405d-a1b7-f64745270bc6\": \"416b223a-9683-405d-a1b7-f64745270bc6\", \"004a56b3-2881-48f0-987e-7fc7a2cb721f\": \"004a56b3-2881-48f0-987e-7fc7a2cb721f\", \"4154725c-9d89-4e3d-b5d2-e7998edd251e\": \"4154725c-9d89-4e3d-b5d2-e7998edd251e\", \"b0c8e493-ea01-44c7-860c-4451d2e81d79\": \"b0c8e493-ea01-44c7-860c-4451d2e81d79\", \"10cefc1b-9d1d-4b20-b416-71323486e3b6\": \"10cefc1b-9d1d-4b20-b416-71323486e3b6\", \"ecf98177-371e-4e92-af6b-045f212b51dc\": \"ecf98177-371e-4e92-af6b-045f212b51dc\", \"4f5d09d7-34a9-4c33-bf52-bc36b5436344\": \"4f5d09d7-34a9-4c33-bf52-bc36b5436344\", \"eb5fe01d-b670-476c-b4f6-757251e14b1f\": \"eb5fe01d-b670-476c-b4f6-757251e14b1f\", \"4ec71a30-f7f9-4a9e-a4e5-192e6aa62297\": \"4ec71a30-f7f9-4a9e-a4e5-192e6aa62297\", \"bf154a09-c8fe-477b-b7fb-1ead3815d4a0\": \"bf154a09-c8fe-477b-b7fb-1ead3815d4a0\", \"faaf5b53-9b72-466f-bb38-cc401b9155bb\": \"faaf5b53-9b72-466f-bb38-cc401b9155bb\", \"bc6fe755-db8e-4367-9398-a87ba0cfd26f\": \"bc6fe755-db8e-4367-9398-a87ba0cfd26f\", \"eeee1b63-7093-467b-9bb6-e3ec5b0e42f7\": \"eeee1b63-7093-467b-9bb6-e3ec5b0e42f7\", \"da2360ca-2930-4da5-b1fa-d5e853e96c35\": \"da2360ca-2930-4da5-b1fa-d5e853e96c35\", \"da957d0a-10f2-4f36-93e2-16c5f2b09d1f\": \"da957d0a-10f2-4f36-93e2-16c5f2b09d1f\", \"f3e57274-b4e1-4c55-b8b8-b094e3af7a34\": \"f3e57274-b4e1-4c55-b8b8-b094e3af7a34\", \"f5a3dfc5-818a-4b19-80a4-9ddd1340487a\": \"f5a3dfc5-818a-4b19-80a4-9ddd1340487a\", \"5cc301bf-e42e-4cf2-bbc2-a6610e061e9d\": \"5cc301bf-e42e-4cf2-bbc2-a6610e061e9d\", \"5b5099cb-8101-4f49-a775-869d691b12ba\": \"5b5099cb-8101-4f49-a775-869d691b12ba\", \"79832cdd-4e8c-425a-afa6-6410d621f2f5\": \"79832cdd-4e8c-425a-afa6-6410d621f2f5\", \"ceb4f5f4-e16a-456b-9163-1647046cb3dd\": \"ceb4f5f4-e16a-456b-9163-1647046cb3dd\", \"774f95a0-f174-4f41-9b23-e0e279014158\": \"774f95a0-f174-4f41-9b23-e0e279014158\", \"75af7657-d1cc-4c95-8ab4-dac9a0e2d160\": \"75af7657-d1cc-4c95-8ab4-dac9a0e2d160\", \"93ad8a8e-8228-4acf-bb27-3190af1486d6\": \"93ad8a8e-8228-4acf-bb27-3190af1486d6\", \"72cb8e0a-ef3a-4c2a-b48c-42b447cc572a\": \"72cb8e0a-ef3a-4c2a-b48c-42b447cc572a\", \"34e22c73-8139-4c64-a4a4-a4df741916cf\": \"34e22c73-8139-4c64-a4a4-a4df741916cf\", \"e57cd054-0aea-44eb-908d-f4d9096df95d\": \"e57cd054-0aea-44eb-908d-f4d9096df95d\", \"4afac790-4245-4963-afb6-779a25a614c8\": \"4afac790-4245-4963-afb6-779a25a614c8\", \"2b08fb17-a9e8-4c38-8aca-a1a10f90993d\": \"2b08fb17-a9e8-4c38-8aca-a1a10f90993d\", \"17130598-e602-407f-8803-1350042fc000\": \"17130598-e602-407f-8803-1350042fc000\", \"99b92e81-4553-4241-9914-5ba5dd6246bf\": \"99b92e81-4553-4241-9914-5ba5dd6246bf\", \"974b83a7-c121-4000-891d-f4fa5bf8f4d9\": \"974b83a7-c121-4000-891d-f4fa5bf8f4d9\", \"b0693e35-2453-46d7-a717-02a0b802d47f\": \"b0693e35-2453-46d7-a717-02a0b802d47f\", \"13b68550-d97c-4a31-b8f4-bbbf34bd5fdb\": \"13b68550-d97c-4a31-b8f4-bbbf34bd5fdb\", \"22ff3925-e8d8-444b-88c6-691ec86a247e\": \"22ff3925-e8d8-444b-88c6-691ec86a247e\", \"a7caece7-2a5d-4107-b785-4a2f1af38bb9\": \"a7caece7-2a5d-4107-b785-4a2f1af38bb9\", \"bdb8aa72-ad12-462f-adf1-1520794ec3fb\": \"bdb8aa72-ad12-462f-adf1-1520794ec3fb\", \"0eb11a48-6b47-43af-bd2e-62a7391e2005\": \"0eb11a48-6b47-43af-bd2e-62a7391e2005\", \"638cabda-1abe-4174-92db-d70278843d44\": \"638cabda-1abe-4174-92db-d70278843d44\", \"e49e5a69-72a7-4d42-99f2-4fbfece2021c\": \"e49e5a69-72a7-4d42-99f2-4fbfece2021c\", \"c6251910-12fe-4c58-b3e8-4dc8b407e716\": \"c6251910-12fe-4c58-b3e8-4dc8b407e716\", \"876bf242-bc38-48d0-8899-a2dfd6a3143e\": \"876bf242-bc38-48d0-8899-a2dfd6a3143e\", \"c6e160b6-8956-480d-8405-3d8759a58914\": \"c6e160b6-8956-480d-8405-3d8759a58914\", \"74059e66-989a-4ba5-bbd5-a5a7d9a60cf1\": \"74059e66-989a-4ba5-bbd5-a5a7d9a60cf1\", \"4abc6402-f9cb-446f-b122-b8f4296df11b\": \"4abc6402-f9cb-446f-b122-b8f4296df11b\", \"a35908d6-57b0-4d2d-b698-a572537454e1\": \"a35908d6-57b0-4d2d-b698-a572537454e1\", \"4f7d836e-7130-4f55-9b9b-dc01cbd4e0a0\": \"4f7d836e-7130-4f55-9b9b-dc01cbd4e0a0\", \"4481e971-8b33-4671-af93-076b6a680d16\": \"4481e971-8b33-4671-af93-076b6a680d16\", \"addc83d7-d1c2-436d-9ba0-f8746047edf9\": \"addc83d7-d1c2-436d-9ba0-f8746047edf9\", \"f03938c3-c9ec-423e-a037-c1187a5c669e\": \"f03938c3-c9ec-423e-a037-c1187a5c669e\", \"b1dba20a-0392-48f9-a75b-d1665126fc15\": \"b1dba20a-0392-48f9-a75b-d1665126fc15\", \"c10f76e1-06cf-4ec8-a299-d42579e1c333\": \"c10f76e1-06cf-4ec8-a299-d42579e1c333\", \"6d3e0b43-85de-4d80-95cd-e25d684a65fd\": \"6d3e0b43-85de-4d80-95cd-e25d684a65fd\", \"5ab165e7-7a37-48a3-abb0-fa2f5f658ebc\": \"5ab165e7-7a37-48a3-abb0-fa2f5f658ebc\", \"778d77fe-110d-494e-8a7d-cbfaacdeb60a\": \"778d77fe-110d-494e-8a7d-cbfaacdeb60a\", \"439540c1-d0c1-42b1-bfa0-6761dc21c0ae\": \"439540c1-d0c1-42b1-bfa0-6761dc21c0ae\", \"160872a3-3df9-41b9-9410-60090dbf2c9f\": \"160872a3-3df9-41b9-9410-60090dbf2c9f\", \"fdafebe1-0d82-4337-bca6-0fc32eeb5ff2\": \"fdafebe1-0d82-4337-bca6-0fc32eeb5ff2\", \"634c6f71-dd7f-4d5f-a69b-71fbcdff6754\": \"634c6f71-dd7f-4d5f-a69b-71fbcdff6754\", \"a9f8e8e9-e448-439c-aa0c-88cf167e59e5\": \"a9f8e8e9-e448-439c-aa0c-88cf167e59e5\", \"23b6e7a0-8f8c-4692-9d0f-1fa8b905039b\": \"23b6e7a0-8f8c-4692-9d0f-1fa8b905039b\", \"37c88225-dfb1-4dd6-b81e-3eab02b81a34\": \"37c88225-dfb1-4dd6-b81e-3eab02b81a34\", \"a9d9ce26-16e0-40fb-ad72-27af7b673d6c\": \"a9d9ce26-16e0-40fb-ad72-27af7b673d6c\", \"5577fc58-c0e7-49ac-9eb5-c8a871c89536\": \"5577fc58-c0e7-49ac-9eb5-c8a871c89536\", \"a1e3a6ad-9ae3-4f87-bd56-aa20a2519412\": \"a1e3a6ad-9ae3-4f87-bd56-aa20a2519412\", \"e42b0c34-e47d-48bb-9ef4-dcaa436614f5\": \"e42b0c34-e47d-48bb-9ef4-dcaa436614f5\", \"8791a9cf-5bbf-4690-abfa-3424761806fe\": \"8791a9cf-5bbf-4690-abfa-3424761806fe\", \"2205918a-782d-47e8-b77f-47fb98c4d3fb\": \"2205918a-782d-47e8-b77f-47fb98c4d3fb\", \"fab2fc2b-df59-47d0-850a-c7f2af275d9c\": \"fab2fc2b-df59-47d0-850a-c7f2af275d9c\", \"9d463f3f-b1dd-46ad-94ce-380164c58977\": \"9d463f3f-b1dd-46ad-94ce-380164c58977\", \"594d7353-227c-4731-b936-9cb0be999a07\": \"594d7353-227c-4731-b936-9cb0be999a07\", \"d112c612-0213-424c-bd1f-62a5f3404542\": \"d112c612-0213-424c-bd1f-62a5f3404542\", \"5ee5d557-f824-4a53-b4f5-9f4da43a6172\": \"5ee5d557-f824-4a53-b4f5-9f4da43a6172\", \"00313c86-210a-4997-82f3-3b814550e6d0\": \"00313c86-210a-4997-82f3-3b814550e6d0\", \"9d5621e4-0218-4b6d-a924-b79e0259bfbd\": \"9d5621e4-0218-4b6d-a924-b79e0259bfbd\", \"46719109-2c72-44fd-b4c4-563dc365fbbb\": \"46719109-2c72-44fd-b4c4-563dc365fbbb\", \"b14e9689-e829-47ad-b688-54a2360b56de\": \"b14e9689-e829-47ad-b688-54a2360b56de\", \"80a8d805-dbcc-4fe9-8a55-1c8aa0140590\": \"80a8d805-dbcc-4fe9-8a55-1c8aa0140590\", \"60218397-e2e8-4f92-bd4d-7a1f466ad276\": \"60218397-e2e8-4f92-bd4d-7a1f466ad276\", \"aaae4af5-86d7-4e76-8994-ed31acedfe72\": \"aaae4af5-86d7-4e76-8994-ed31acedfe72\", \"3e9980ab-789f-4939-92f2-2c5a72a00e10\": \"3e9980ab-789f-4939-92f2-2c5a72a00e10\", \"2a1269a2-2a86-4251-aec4-ca5357f2621c\": \"2a1269a2-2a86-4251-aec4-ca5357f2621c\", \"c7186b6c-da2d-4d78-b3a9-2c987bf645da\": \"c7186b6c-da2d-4d78-b3a9-2c987bf645da\", \"0f27e085-30e8-4d14-a095-28e401b2ca1a\": \"0f27e085-30e8-4d14-a095-28e401b2ca1a\", \"c5afc2d3-209e-4684-a411-6d830e7258f4\": \"c5afc2d3-209e-4684-a411-6d830e7258f4\", \"3f873ede-e57e-41de-9c20-10b7c45a7946\": \"3f873ede-e57e-41de-9c20-10b7c45a7946\", \"c55db0bb-9532-4398-a0c7-f4a819fb9111\": \"c55db0bb-9532-4398-a0c7-f4a819fb9111\", \"6749525c-af9f-47d6-bda3-e8fa0cbdcfe7\": \"6749525c-af9f-47d6-bda3-e8fa0cbdcfe7\", \"ddef7c79-db4c-4e45-a34e-c76812ca0658\": \"ddef7c79-db4c-4e45-a34e-c76812ca0658\", \"4da257d8-dcff-45c6-be45-a8a5e0cdb38e\": \"4da257d8-dcff-45c6-be45-a8a5e0cdb38e\", \"79d503e0-a12e-48e9-bee8-0f42a69ed591\": \"79d503e0-a12e-48e9-bee8-0f42a69ed591\", \"e876bf57-ace8-4e6c-9f73-46124e216d60\": \"e876bf57-ace8-4e6c-9f73-46124e216d60\", \"5f01152d-40d6-4714-adab-8ef35498c20b\": \"5f01152d-40d6-4714-adab-8ef35498c20b\", \"1bd4de25-ca85-47c4-a046-827227560129\": \"1bd4de25-ca85-47c4-a046-827227560129\", \"36eb8afc-4d4c-43ac-a955-1323aca97d22\": \"36eb8afc-4d4c-43ac-a955-1323aca97d22\", \"1ff49480-3cb7-44a2-a7c6-94884e242e13\": \"1ff49480-3cb7-44a2-a7c6-94884e242e13\", \"fa92489a-4285-4cff-8af2-c93db4bd2555\": \"fa92489a-4285-4cff-8af2-c93db4bd2555\", \"07a9e6da-983c-4168-8637-4ad5bc16dbcf\": \"07a9e6da-983c-4168-8637-4ad5bc16dbcf\", \"65e56750-2ac7-47fe-b2ed-6943d7909c58\": \"65e56750-2ac7-47fe-b2ed-6943d7909c58\", \"60fcebfd-4071-4956-8787-d566be3c1a1c\": \"60fcebfd-4071-4956-8787-d566be3c1a1c\", \"093d7f09-197b-44e1-b2ca-e5b83a0ec2e0\": \"093d7f09-197b-44e1-b2ca-e5b83a0ec2e0\", \"1dcf7918-8acc-4323-ab1e-a24a5edaa0b6\": \"1dcf7918-8acc-4323-ab1e-a24a5edaa0b6\", \"510afac6-86e3-4cb4-8244-b14f45b83b17\": \"510afac6-86e3-4cb4-8244-b14f45b83b17\", \"cd5b0d16-8264-4d4a-a397-0935ae327102\": \"cd5b0d16-8264-4d4a-a397-0935ae327102\", \"7b6041b4-a046-4953-884f-6d7de20079ed\": \"7b6041b4-a046-4953-884f-6d7de20079ed\", \"a18ad8d2-4237-4225-9235-5462c862dab6\": \"a18ad8d2-4237-4225-9235-5462c862dab6\", \"86c48590-137f-46cd-bc68-e0d11fdcfb50\": \"86c48590-137f-46cd-bc68-e0d11fdcfb50\", \"0281826e-5055-4593-9993-954863c76052\": \"0281826e-5055-4593-9993-954863c76052\", \"88ad1ea3-69db-4eb8-b185-b44ea37a5c2a\": \"88ad1ea3-69db-4eb8-b185-b44ea37a5c2a\", \"4542da2e-892c-4391-8388-a9a9a5ae818d\": \"4542da2e-892c-4391-8388-a9a9a5ae818d\", \"0ae1ca96-2293-4713-bf76-abe69b04ff71\": \"0ae1ca96-2293-4713-bf76-abe69b04ff71\", \"9d702ae6-19e5-4ffe-969c-a94cc64e87da\": \"9d702ae6-19e5-4ffe-969c-a94cc64e87da\", \"5951fd37-04b0-4cd1-b910-eb3592ea0abe\": \"5951fd37-04b0-4cd1-b910-eb3592ea0abe\", \"5ac2fbc8-4e6c-4f7e-8c62-29e7fe3d397f\": \"5ac2fbc8-4e6c-4f7e-8c62-29e7fe3d397f\", \"2f2ba9be-17e5-48bb-9728-29fc1ae3b088\": \"2f2ba9be-17e5-48bb-9728-29fc1ae3b088\", \"b4c8d0fb-6083-4a8b-bfa3-d34b136b83f1\": \"b4c8d0fb-6083-4a8b-bfa3-d34b136b83f1\", \"c5aeaa86-f334-4475-8f9a-5c85555d093c\": \"c5aeaa86-f334-4475-8f9a-5c85555d093c\", \"85abf60a-2c60-415a-a2dd-a78833d4035a\": \"85abf60a-2c60-415a-a2dd-a78833d4035a\", \"886c7be6-7d44-4552-ada7-c85e4cd60068\": \"886c7be6-7d44-4552-ada7-c85e4cd60068\", \"ef2cc595-e280-4e30-99da-203f27198682\": \"ef2cc595-e280-4e30-99da-203f27198682\", \"2efbfa7c-9a7b-467d-bb61-519d1ef21a03\": \"2efbfa7c-9a7b-467d-bb61-519d1ef21a03\", \"169ba9d9-2765-429f-8865-096b50508475\": \"169ba9d9-2765-429f-8865-096b50508475\", \"79bd28db-1720-4ac1-86f4-283695910429\": \"79bd28db-1720-4ac1-86f4-283695910429\", \"793375bb-8495-42bb-a83b-c7ca7bbc01ff\": \"793375bb-8495-42bb-a83b-c7ca7bbc01ff\", \"1adead0a-b429-4afa-8c3c-4390d2c4ac81\": \"1adead0a-b429-4afa-8c3c-4390d2c4ac81\", \"51ceda0b-788c-4d12-9561-19dd30635190\": \"51ceda0b-788c-4d12-9561-19dd30635190\", \"16f5f792-ad78-4533-91fa-e6194d7377ff\": \"16f5f792-ad78-4533-91fa-e6194d7377ff\", \"88775fb2-881e-468e-97db-697531e55f00\": \"88775fb2-881e-468e-97db-697531e55f00\", \"4ed2e410-a16f-487e-8955-1111afb8122d\": \"4ed2e410-a16f-487e-8955-1111afb8122d\", \"15b582a8-131f-4a47-a0db-7a012e7f6946\": \"15b582a8-131f-4a47-a0db-7a012e7f6946\", \"e012e2fc-0a35-45c3-a025-ffa09178187a\": \"e012e2fc-0a35-45c3-a025-ffa09178187a\", \"c793bf0e-664f-4a73-8a62-6d75b84a2eb9\": \"c793bf0e-664f-4a73-8a62-6d75b84a2eb9\", \"c70ee01d-badd-406d-88fd-60a3184baf6e\": \"c70ee01d-badd-406d-88fd-60a3184baf6e\", \"26ebe51d-db2e-4499-b1a1-1d691b3808cb\": \"26ebe51d-db2e-4499-b1a1-1d691b3808cb\", \"ed584373-cd07-4f71-b402-1c80c7bcdaa1\": \"ed584373-cd07-4f71-b402-1c80c7bcdaa1\", \"99e2e3b8-086c-472c-8f45-29402ba7412d\": \"99e2e3b8-086c-472c-8f45-29402ba7412d\", \"5b0c9316-509e-4cdc-8bf5-01b76f3b59d5\": \"5b0c9316-509e-4cdc-8bf5-01b76f3b59d5\", \"9bd8fc83-51ed-4834-abc0-a808ee7e163f\": \"9bd8fc83-51ed-4834-abc0-a808ee7e163f\", \"fcb640d1-0256-4e37-8361-909348963940\": \"fcb640d1-0256-4e37-8361-909348963940\", \"2a83ba44-0744-4c9d-ad60-24c8426b9564\": \"2a83ba44-0744-4c9d-ad60-24c8426b9564\", \"768b8fe7-c400-48ce-84e0-3db7bdabe118\": \"768b8fe7-c400-48ce-84e0-3db7bdabe118\", \"9f40cbba-e5c8-4df1-86d4-42ca41984ebc\": \"9f40cbba-e5c8-4df1-86d4-42ca41984ebc\", \"bd7746e0-03b2-40f3-9c95-36b5eba0682d\": \"bd7746e0-03b2-40f3-9c95-36b5eba0682d\", \"1f7b5fcd-4789-4df5-bdda-6d0b672d933d\": \"1f7b5fcd-4789-4df5-bdda-6d0b672d933d\", \"93c7c169-efea-4d34-a787-c0705e93893a\": \"93c7c169-efea-4d34-a787-c0705e93893a\", \"7dac5a2a-7293-4aa7-a462-27da35f18f88\": \"7dac5a2a-7293-4aa7-a462-27da35f18f88\", \"7c0bd555-c7d5-4730-a988-8c8433c012e0\": \"7c0bd555-c7d5-4730-a988-8c8433c012e0\", \"7886eab4-b5f9-4c0b-9bf5-c18556dccb77\": \"7886eab4-b5f9-4c0b-9bf5-c18556dccb77\", \"f2acbeb2-6368-45ee-9bb1-6896eedd7638\": \"f2acbeb2-6368-45ee-9bb1-6896eedd7638\", \"ff24e712-bb4f-412a-8dd0-d6853f253dff\": \"ff24e712-bb4f-412a-8dd0-d6853f253dff\", \"deeb33d7-656b-44db-9206-9a82446f96aa\": \"deeb33d7-656b-44db-9206-9a82446f96aa\", \"31d16fbf-bfed-4ad2-9d31-241c49820bb7\": \"31d16fbf-bfed-4ad2-9d31-241c49820bb7\", \"9d38779a-52af-4827-a905-c0b7acef7e89\": \"9d38779a-52af-4827-a905-c0b7acef7e89\", \"9912691f-0f8a-4301-9f89-c3f173703914\": \"9912691f-0f8a-4301-9f89-c3f173703914\", \"e42c8db1-5d21-4157-9618-cc8879a2b4fc\": \"e42c8db1-5d21-4157-9618-cc8879a2b4fc\", \"a04843f2-341d-4daa-8c07-cff5e533de9f\": \"a04843f2-341d-4daa-8c07-cff5e533de9f\", \"dc379093-81be-4820-bf6f-d6768fc64798\": \"dc379093-81be-4820-bf6f-d6768fc64798\", \"dd9f352e-9c0c-4b10-9205-f3a85b1780c4\": \"dd9f352e-9c0c-4b10-9205-f3a85b1780c4\", \"c0c69807-e8cb-4e9f-bd4c-17b90693432f\": \"c0c69807-e8cb-4e9f-bd4c-17b90693432f\", \"85b98c12-fc24-4826-b915-826b3fb0726c\": \"85b98c12-fc24-4826-b915-826b3fb0726c\", \"4a1c1f0d-19a2-430b-8f98-791ccb969af2\": \"4a1c1f0d-19a2-430b-8f98-791ccb969af2\", \"63d92e71-ac97-4811-ae9e-dcfbc74e2acf\": \"63d92e71-ac97-4811-ae9e-dcfbc74e2acf\", \"bfe44480-86fc-4930-bbc5-3030cf220c34\": \"bfe44480-86fc-4930-bbc5-3030cf220c34\", \"78b8ef36-0ba3-4853-b1ef-f17847e26bd0\": \"78b8ef36-0ba3-4853-b1ef-f17847e26bd0\", \"9f4d4777-296d-4add-91d0-460aac375448\": \"9f4d4777-296d-4add-91d0-460aac375448\", \"eeecc466-3708-4500-960a-42c6226d6bce\": \"eeecc466-3708-4500-960a-42c6226d6bce\", \"5b89fa23-f3b4-4ca8-ae97-ac52e6c17629\": \"5b89fa23-f3b4-4ca8-ae97-ac52e6c17629\", \"6198cb44-6468-4c1d-ae4d-ff3bd27ff539\": \"6198cb44-6468-4c1d-ae4d-ff3bd27ff539\", \"2e037445-6071-4e16-99d0-3abc2b1a2ca4\": \"2e037445-6071-4e16-99d0-3abc2b1a2ca4\", \"6e1c51b3-dd91-413c-8fe6-b0b958cc7aac\": \"6e1c51b3-dd91-413c-8fe6-b0b958cc7aac\", \"68e80eb1-9ca7-4e75-90a0-61d7671cd6ef\": \"68e80eb1-9ca7-4e75-90a0-61d7671cd6ef\", \"866ccf17-c55d-414c-ad81-bcb6aac2487d\": \"866ccf17-c55d-414c-ad81-bcb6aac2487d\", \"4a0b3115-ddfb-4733-98e7-f0e005d0489a\": \"4a0b3115-ddfb-4733-98e7-f0e005d0489a\", \"30289a5a-1899-47dc-bce8-c1b80fcb1033\": \"30289a5a-1899-47dc-bce8-c1b80fcb1033\", \"ea093c3b-e46b-4f84-99c4-ab618e573e8a\": \"ea093c3b-e46b-4f84-99c4-ab618e573e8a\", \"3d265740-f27f-4958-8adb-256d546d9314\": \"3d265740-f27f-4958-8adb-256d546d9314\", \"bad23b7a-9362-4644-994d-11832b1704f8\": \"bad23b7a-9362-4644-994d-11832b1704f8\", \"43be42c2-ddc2-4ba4-a111-1e2b36a274c6\": \"43be42c2-ddc2-4ba4-a111-1e2b36a274c6\", \"4957a8b3-42be-4b03-9f1b-b08a01b094b9\": \"4957a8b3-42be-4b03-9f1b-b08a01b094b9\", \"caa831fc-0cec-46c1-aa09-69c7aa393313\": \"caa831fc-0cec-46c1-aa09-69c7aa393313\", \"1c83fbd8-e5ff-4924-bbbe-4bfa4d244b8f\": \"1c83fbd8-e5ff-4924-bbbe-4bfa4d244b8f\", \"e5ae5dc5-3f41-4af6-9893-caa6be28c3f6\": \"e5ae5dc5-3f41-4af6-9893-caa6be28c3f6\", \"8398b775-32f3-4a83-871d-19bc678c9ca3\": \"8398b775-32f3-4a83-871d-19bc678c9ca3\", \"36409c6a-8a14-476d-aa16-0ac9a40e2984\": \"36409c6a-8a14-476d-aa16-0ac9a40e2984\", \"a2f48116-ce82-4154-ba2c-878c6f05f658\": \"a2f48116-ce82-4154-ba2c-878c6f05f658\", \"9c6d5b45-6246-49dc-bc8c-43478cc98e9c\": \"9c6d5b45-6246-49dc-bc8c-43478cc98e9c\", \"3f1d3e53-65b6-4548-91b4-5555eb9dea3c\": \"3f1d3e53-65b6-4548-91b4-5555eb9dea3c\", \"a9ed9453-f93d-4155-9719-0dc1e3674ef3\": \"a9ed9453-f93d-4155-9719-0dc1e3674ef3\", \"7c36450f-acbb-4fc3-9501-81ee5fad0608\": \"7c36450f-acbb-4fc3-9501-81ee5fad0608\", \"1dc0aa86-bcbe-4ca9-9169-43d1e9e1e580\": \"1dc0aa86-bcbe-4ca9-9169-43d1e9e1e580\", \"3f1c4078-b8a7-4ef6-909e-5f9919d471b6\": \"3f1c4078-b8a7-4ef6-909e-5f9919d471b6\", \"092585fe-dd36-43dd-8907-f6aa97ab6193\": \"092585fe-dd36-43dd-8907-f6aa97ab6193\", \"12c2775c-2323-4c03-b55e-412d057ca54c\": \"12c2775c-2323-4c03-b55e-412d057ca54c\", \"7149ef1e-d260-4e8f-8a0f-948b9cf556f5\": \"7149ef1e-d260-4e8f-8a0f-948b9cf556f5\", \"6890c165-d20f-4b88-94af-06a4b051194e\": \"6890c165-d20f-4b88-94af-06a4b051194e\", \"fc65b8c4-9a08-42e4-8ba3-7934dbe315fb\": \"fc65b8c4-9a08-42e4-8ba3-7934dbe315fb\", \"f8493d0c-3bf5-4915-a199-17bf789f7665\": \"f8493d0c-3bf5-4915-a199-17bf789f7665\", \"35452803-0d25-4aa5-81a2-6f923063a8be\": \"35452803-0d25-4aa5-81a2-6f923063a8be\", \"76d69286-c9a8-4dd8-90f2-7040bb50f61b\": \"76d69286-c9a8-4dd8-90f2-7040bb50f61b\", \"b116d036-a588-46e0-93f8-066a3591c33d\": \"b116d036-a588-46e0-93f8-066a3591c33d\", \"29986546-34f4-41fb-9b89-2234756dbd5c\": \"29986546-34f4-41fb-9b89-2234756dbd5c\", \"cf418e9a-9df5-426c-ba09-6b598c62e3de\": \"cf418e9a-9df5-426c-ba09-6b598c62e3de\", \"def9c422-bea0-4a13-89e0-4993d84d420a\": \"def9c422-bea0-4a13-89e0-4993d84d420a\", \"1748d87a-9604-4c41-806e-0b9e5eaf2a0b\": \"1748d87a-9604-4c41-806e-0b9e5eaf2a0b\", \"0743e609-1e65-4230-bbd6-3e22126d8c41\": \"0743e609-1e65-4230-bbd6-3e22126d8c41\", \"39dfa9b2-0545-4d21-9d66-64d7a288d882\": \"39dfa9b2-0545-4d21-9d66-64d7a288d882\", \"29933106-b5ba-4dda-93e0-72b5a40efa7a\": \"29933106-b5ba-4dda-93e0-72b5a40efa7a\", \"68ed67ed-4e87-4901-ae0c-45ace5ef4830\": \"68ed67ed-4e87-4901-ae0c-45ace5ef4830\", \"a578bb84-fe1a-4649-8acc-2aa8f57d1258\": \"a578bb84-fe1a-4649-8acc-2aa8f57d1258\", \"00c96096-0bd7-44b4-ad5c-a3fcdd1bc708\": \"00c96096-0bd7-44b4-ad5c-a3fcdd1bc708\", \"06d279c9-3b84-4c00-a582-1fc0a637813e\": \"06d279c9-3b84-4c00-a582-1fc0a637813e\", \"81b27c9a-9f5f-4536-8c73-16c16af14ccf\": \"81b27c9a-9f5f-4536-8c73-16c16af14ccf\", \"8846c95b-2a16-408a-828c-32b07dae378b\": \"8846c95b-2a16-408a-828c-32b07dae378b\", \"1894474d-9df3-4a8c-b015-61cdc156ce0b\": \"1894474d-9df3-4a8c-b015-61cdc156ce0b\", \"4a0f7b85-a081-4c6b-9820-3f5b1075b027\": \"4a0f7b85-a081-4c6b-9820-3f5b1075b027\", \"0973f910-9999-41c3-b40f-4956cdc71e9e\": \"0973f910-9999-41c3-b40f-4956cdc71e9e\", \"7aaefacc-40ed-4ff5-bec6-4ee26b3f98a1\": \"7aaefacc-40ed-4ff5-bec6-4ee26b3f98a1\", \"25bc07cf-1ded-4ddd-98b1-a35488f4872c\": \"25bc07cf-1ded-4ddd-98b1-a35488f4872c\", \"692ab1a9-f4b2-4eff-a6a8-522075decebf\": \"692ab1a9-f4b2-4eff-a6a8-522075decebf\", \"fcc01e76-9178-467e-9635-2de072b8731d\": \"fcc01e76-9178-467e-9635-2de072b8731d\", \"7586f190-7eed-4cf7-af09-b1af644a66c0\": \"7586f190-7eed-4cf7-af09-b1af644a66c0\", \"4500eb21-7411-4403-a43c-669e6410e04c\": \"4500eb21-7411-4403-a43c-669e6410e04c\", \"00c049f7-cdc4-4f48-b3e9-b8c5f9cfc759\": \"00c049f7-cdc4-4f48-b3e9-b8c5f9cfc759\", \"b5f44d6a-af5e-44de-9742-e2461658ce4f\": \"b5f44d6a-af5e-44de-9742-e2461658ce4f\", \"01e3880a-c4b1-4834-bb42-28a69bf65db0\": \"01e3880a-c4b1-4834-bb42-28a69bf65db0\", \"45e24a2d-11e7-4718-891d-f3c21c6107c5\": \"45e24a2d-11e7-4718-891d-f3c21c6107c5\", \"58ae8d0c-ff38-4a9b-b97b-70a4f93571e0\": \"58ae8d0c-ff38-4a9b-b97b-70a4f93571e0\", \"4d39c5b9-a9b5-43c3-8360-4d098165cb5b\": \"4d39c5b9-a9b5-43c3-8360-4d098165cb5b\", \"e2e7b8e6-8784-4fe9-b044-eb71448b8d30\": \"e2e7b8e6-8784-4fe9-b044-eb71448b8d30\", \"7c50a5f3-7b44-4357-8fdf-457dca0084d1\": \"7c50a5f3-7b44-4357-8fdf-457dca0084d1\", \"0b5af0fd-d7fc-49c7-8f9d-6194841c3747\": \"0b5af0fd-d7fc-49c7-8f9d-6194841c3747\", \"6a04a904-eea5-4c4d-8c64-e097a48eab1f\": \"6a04a904-eea5-4c4d-8c64-e097a48eab1f\", \"08bbac6b-dcc8-4d71-ab8f-bbdd6b26826b\": \"08bbac6b-dcc8-4d71-ab8f-bbdd6b26826b\", \"9a40d5b4-1ae1-4855-887a-bc14358308e7\": \"9a40d5b4-1ae1-4855-887a-bc14358308e7\", \"087877c6-6de0-4d94-bdc5-3f74f2580a46\": \"087877c6-6de0-4d94-bdc5-3f74f2580a46\", \"e554bae8-e167-4f11-a7f3-1c65ff6188cf\": \"e554bae8-e167-4f11-a7f3-1c65ff6188cf\", \"14ac9aae-a268-4501-bb6d-06d24fbdde66\": \"14ac9aae-a268-4501-bb6d-06d24fbdde66\", \"c4960b0b-d4de-46da-bd6e-23aa58d5250d\": \"c4960b0b-d4de-46da-bd6e-23aa58d5250d\", \"54090fc9-7ad3-415a-8ce3-a4673c148176\": \"54090fc9-7ad3-415a-8ce3-a4673c148176\", \"459a0d73-55ec-44ca-a62a-85f4a37a900d\": \"459a0d73-55ec-44ca-a62a-85f4a37a900d\", \"a823d9fd-b1a8-451a-a8f7-4cc5349a0c1e\": \"a823d9fd-b1a8-451a-a8f7-4cc5349a0c1e\", \"d643e950-7717-4d43-bc90-55ab0eb6fb75\": \"d643e950-7717-4d43-bc90-55ab0eb6fb75\", \"f486431f-cc65-4e90-a8f5-3711904bdc0b\": \"f486431f-cc65-4e90-a8f5-3711904bdc0b\", \"d6eaf235-deee-4807-afd4-b96140bc56e3\": \"d6eaf235-deee-4807-afd4-b96140bc56e3\", \"13b02bd2-90ae-438a-b3d1-b3d39122a4e4\": \"13b02bd2-90ae-438a-b3d1-b3d39122a4e4\", \"12e88a25-2755-4b07-b117-359b655d4173\": \"12e88a25-2755-4b07-b117-359b655d4173\", \"c59c9641-707b-4f1d-8f38-6eefae42b5c3\": \"c59c9641-707b-4f1d-8f38-6eefae42b5c3\", \"5bfad162-5282-4d9a-88ad-b8655c8dd0f4\": \"5bfad162-5282-4d9a-88ad-b8655c8dd0f4\", \"6e54d04b-9bb8-4380-8024-f337a255f286\": \"6e54d04b-9bb8-4380-8024-f337a255f286\", \"53b18837-e111-41ce-97ee-99d1d4846073\": \"53b18837-e111-41ce-97ee-99d1d4846073\", \"83642cd4-3f7f-4a88-aa73-58e4825415dd\": \"83642cd4-3f7f-4a88-aa73-58e4825415dd\", \"9c7e764b-ec40-481c-a57d-990892a193a4\": \"9c7e764b-ec40-481c-a57d-990892a193a4\", \"11b242f3-7e70-4f8b-9bbd-74df3c0c5f2f\": \"11b242f3-7e70-4f8b-9bbd-74df3c0c5f2f\", \"816b47c5-6187-4b7d-a921-9902229ee738\": \"816b47c5-6187-4b7d-a921-9902229ee738\", \"65afb7a6-3129-446e-b1a1-4b771a85e4f6\": \"65afb7a6-3129-446e-b1a1-4b771a85e4f6\", \"0acb98ea-7593-4d2c-93c6-8113d538a8be\": \"0acb98ea-7593-4d2c-93c6-8113d538a8be\", \"75b6fecf-de81-4ad9-8724-bb0211d698c3\": \"75b6fecf-de81-4ad9-8724-bb0211d698c3\", \"2a014e5a-1690-4582-9df6-5d16fb5b359c\": \"2a014e5a-1690-4582-9df6-5d16fb5b359c\", \"a398fe57-13ff-48f8-ac6a-b6679f701ef4\": \"a398fe57-13ff-48f8-ac6a-b6679f701ef4\", \"c452f52b-c699-46d1-b521-417097a0f3af\": \"c452f52b-c699-46d1-b521-417097a0f3af\", \"2a98d775-9de3-4881-aa2e-25fa3956890f\": \"2a98d775-9de3-4881-aa2e-25fa3956890f\", \"e14d352a-3140-4294-83cf-4fa422ac33fc\": \"e14d352a-3140-4294-83cf-4fa422ac33fc\", \"18a50039-7ed0-49cd-acfe-806fb0aca4e7\": \"18a50039-7ed0-49cd-acfe-806fb0aca4e7\", \"73cc682e-5f7b-400e-8621-d5a6296326e1\": \"73cc682e-5f7b-400e-8621-d5a6296326e1\", \"dfc2c78c-f744-4ba5-b402-279c2ef44eba\": \"dfc2c78c-f744-4ba5-b402-279c2ef44eba\", \"e7a5469c-ee49-4afc-9773-6f9a901fc8f5\": \"e7a5469c-ee49-4afc-9773-6f9a901fc8f5\", \"20260c4a-e32a-46da-b456-be0dced7d7eb\": \"20260c4a-e32a-46da-b456-be0dced7d7eb\", \"f546ac71-5086-4c11-9903-fa4c8e0fbacd\": \"f546ac71-5086-4c11-9903-fa4c8e0fbacd\", \"b249818e-9cbf-4dfc-a43a-a13d5fc0968f\": \"b249818e-9cbf-4dfc-a43a-a13d5fc0968f\", \"a81125d5-901f-4311-a6a1-a29feafe82f5\": \"a81125d5-901f-4311-a6a1-a29feafe82f5\", \"8cc6c222-9c96-4f02-8c7c-83f1d7bb2fd1\": \"8cc6c222-9c96-4f02-8c7c-83f1d7bb2fd1\", \"dcad4738-588f-457c-9083-7fa211b4b1f8\": \"dcad4738-588f-457c-9083-7fa211b4b1f8\", \"d0a0140a-698d-40e9-9a57-fe0a3bd1beec\": \"d0a0140a-698d-40e9-9a57-fe0a3bd1beec\", \"dea04175-bee7-44ce-8468-9042269d0c15\": \"dea04175-bee7-44ce-8468-9042269d0c15\", \"0935f870-6b4e-4249-b11d-05540dcf0842\": \"0935f870-6b4e-4249-b11d-05540dcf0842\", \"1d1f70c8-d6e7-4d6e-9dea-a621c51692fb\": \"1d1f70c8-d6e7-4d6e-9dea-a621c51692fb\", \"9b24089a-c3d3-45cf-913f-087a58182e33\": \"9b24089a-c3d3-45cf-913f-087a58182e33\", \"33dd00d6-be17-434e-8ee0-89a920150b62\": \"33dd00d6-be17-434e-8ee0-89a920150b62\", \"31ca37e2-6f76-4ce7-879d-1ce3592fa26b\": \"31ca37e2-6f76-4ce7-879d-1ce3592fa26b\", \"c50f0dad-b40e-4e6d-9d65-bd2f89e35316\": \"c50f0dad-b40e-4e6d-9d65-bd2f89e35316\", \"832dff5c-49f5-46ca-a164-c61f2856addb\": \"832dff5c-49f5-46ca-a164-c61f2856addb\", \"78de7f2c-24af-4058-b1dd-0dbddaad2f35\": \"78de7f2c-24af-4058-b1dd-0dbddaad2f35\", \"f2dbad8f-3bdb-412a-88fd-b3c2890b5f75\": \"f2dbad8f-3bdb-412a-88fd-b3c2890b5f75\", \"de7c87d7-39cd-42e8-a070-f9c510573318\": \"de7c87d7-39cd-42e8-a070-f9c510573318\", \"1fa441a4-f551-470c-9336-96b1eb0ad7cb\": \"1fa441a4-f551-470c-9336-96b1eb0ad7cb\", \"0e886634-87ff-4aee-afd4-4abcb8bf4815\": \"0e886634-87ff-4aee-afd4-4abcb8bf4815\", \"817bc169-9c5a-4368-9203-b784e6804fa3\": \"817bc169-9c5a-4368-9203-b784e6804fa3\", \"e3bb98aa-c206-4eff-83b9-aed00ba49be9\": \"e3bb98aa-c206-4eff-83b9-aed00ba49be9\", \"92082a32-2b3e-45e6-bfe7-9a6f1cb0513d\": \"92082a32-2b3e-45e6-bfe7-9a6f1cb0513d\", \"90c97c1e-9d2d-4f53-97d6-ed9d1b169762\": \"90c97c1e-9d2d-4f53-97d6-ed9d1b169762\", \"2a7a90e8-5a06-4eb9-8238-104f54a28b1d\": \"2a7a90e8-5a06-4eb9-8238-104f54a28b1d\", \"8909e1bd-0d0c-4cc4-9f95-25c20b2c9c0a\": \"8909e1bd-0d0c-4cc4-9f95-25c20b2c9c0a\", \"f2743d49-1f76-41cb-9735-1150c27e35a3\": \"f2743d49-1f76-41cb-9735-1150c27e35a3\", \"10a5538a-e07e-41c1-a09f-66ed8cbe0c6f\": \"10a5538a-e07e-41c1-a09f-66ed8cbe0c6f\", \"5368cf12-c135-4fd2-9fd9-d51fd726c6f0\": \"5368cf12-c135-4fd2-9fd9-d51fd726c6f0\", \"8deaf4b3-da49-43ad-b8d1-3bde9ca424c4\": \"8deaf4b3-da49-43ad-b8d1-3bde9ca424c4\", \"47f3a63a-8a2e-45e7-a4de-0c8ef926f9c4\": \"47f3a63a-8a2e-45e7-a4de-0c8ef926f9c4\", \"81c3b4c6-32a9-4f67-bdb7-5647c56c8772\": \"81c3b4c6-32a9-4f67-bdb7-5647c56c8772\", \"3c84836b-dd01-4060-9c4d-c0c935e6a084\": \"3c84836b-dd01-4060-9c4d-c0c935e6a084\", \"166778e3-ffa9-4b6a-b4f4-cf4452f40bd7\": \"166778e3-ffa9-4b6a-b4f4-cf4452f40bd7\", \"a70e2595-adcf-4b6d-873a-04c5f61ff627\": \"a70e2595-adcf-4b6d-873a-04c5f61ff627\", \"1f8d748a-8f45-41f7-b128-dc01a88b04d9\": \"1f8d748a-8f45-41f7-b128-dc01a88b04d9\", \"a075e6b0-8ea6-4a64-b823-f380f0d35d09\": \"a075e6b0-8ea6-4a64-b823-f380f0d35d09\"}, \"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