github-actions[bot] commited on
Commit
a044259
·
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-flash-latest")
145
+ retriever = QueryFusionRetriever(
146
+ [
147
+ index.as_retriever(similarity_top_k=5),
148
+ bm25_retriever,
149
+ ],
150
+ llm=llm,
151
+ num_queries=1,
152
+ use_async=True,
153
+ similarity_top_k=5,
154
+ )
155
+ query_engine = CitationQueryEngine.from_args(
156
+ index,
157
+ retriever=retriever,
158
+ llm=llm,
159
+ citation_qa_template=CITATION_QA_TEMPLATE,
160
+ similarity_top_k=5,
161
+ embedding_model=embed_model,
162
+ streaming=True,
163
+ )
164
+
165
+ blocking_query_engine = CitationQueryEngine.from_args(
166
+ index,
167
+ retriever=retriever,
168
+ llm=llm,
169
+ citation_qa_template=CITATION_QA_TEMPLATE,
170
+ similarity_top_k=5,
171
+ embedding_model=embed_model,
172
+ streaming=False,
173
+ )
174
+ # TODO: replace with proper mechanism for persisting objects
175
+ # across hot reloads
176
+ me._query_engine = query_engine
177
+ me._bm25_retriever = bm25_retriever
178
+
179
+
180
+ NEWLINE = "\n"
181
+
182
+
183
+ def ask(query: str):
184
+ return query_engine.query(query)
185
+
186
+
187
+ def retrieve(query: str):
188
+ return bm25_retriever.retrieve(query)
eval_viewer.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import itertools
2
+ import os
3
+ import sys
4
+ import urllib.parse
5
+ from dataclasses import dataclass, field
6
+
7
+ import mesop as me
8
+
9
+ # Get the directory from the environment variable
10
+ EVAL_DIR = os.environ.get("EVAL_DIR")
11
+
12
+ if EVAL_DIR:
13
+ print(f"Directory set to: {EVAL_DIR}")
14
+ else:
15
+ print(
16
+ "No directory specified. Exiting! Set the EVAL_DIR environment variable."
17
+ )
18
+ sys.exit(1)
19
+
20
+ EVAL_DIR_2 = os.environ.get("EVAL_DIR_2")
21
+
22
+ if EVAL_DIR_2:
23
+ print(f"Eval directory 2 set to: {EVAL_DIR_2}")
24
+
25
+
26
+ @dataclass
27
+ class Item:
28
+ query: str = ""
29
+ input: str = ""
30
+ output: str = ""
31
+
32
+
33
+ @dataclass
34
+ class EvalGroup:
35
+ items: list[Item] = field(default_factory=list)
36
+
37
+
38
+ @me.stateclass
39
+ class State:
40
+ directories: list[str]
41
+ group_1: EvalGroup
42
+ group_2: EvalGroup
43
+
44
+
45
+ def load_eval_dir(eval_dir: str):
46
+ # Read all directories from args.dir
47
+ directories = [
48
+ d for d in os.listdir(eval_dir) if os.path.isdir(os.path.join(eval_dir, d))
49
+ ]
50
+ items: list[Item] = []
51
+ for dir in directories:
52
+ input_path = os.path.join(eval_dir, dir, "input.txt")
53
+ output_path = os.path.join(eval_dir, dir, "output.txt")
54
+
55
+ with open(input_path) as f:
56
+ input_content = f.read()
57
+ with open(output_path) as f:
58
+ output_content = f.read()
59
+
60
+ item = Item(
61
+ input=input_content,
62
+ output=output_content,
63
+ query=urllib.parse.unquote(dir),
64
+ )
65
+ items.append(item)
66
+ return items
67
+
68
+
69
+ def on_load(e: me.LoadEvent):
70
+ state = me.state(State)
71
+ assert EVAL_DIR
72
+ state.group_1.items = load_eval_dir(EVAL_DIR)
73
+ if EVAL_DIR_2:
74
+ state.group_2.items = load_eval_dir(EVAL_DIR_2)
75
+ print("state.group_2.items", state.group_2.items)
76
+
77
+ # Store the directories in the state for later use
78
+ # me.state(State).directories = directories
79
+
80
+
81
+ @me.page(
82
+ on_load=on_load,
83
+ security_policy=me.SecurityPolicy(
84
+ allowed_script_srcs=[
85
+ "https://cdn.jsdelivr.net",
86
+ ]
87
+ ),
88
+ )
89
+ def index():
90
+ state = me.state(State)
91
+ with scrollable():
92
+ with me.box(
93
+ style=me.Style(
94
+ margin=me.Margin.symmetric(horizontal="auto", vertical=24),
95
+ # background="white",
96
+ padding=me.Padding.symmetric(horizontal=16),
97
+ )
98
+ ):
99
+ me.text("Eval viewer", type="headline-3")
100
+ me.text(f"Group 1: {len(state.group_1.items)} items")
101
+ me.text(f"Group 2: {len(state.group_2.items)} items")
102
+
103
+ # Zip group_1 and group_2 items
104
+ zipped_items = list(
105
+ itertools.zip_longest(
106
+ state.group_1.items, state.group_2.items, fillvalue=None
107
+ )
108
+ )
109
+ with me.box(
110
+ style=me.Style(
111
+ display="grid",
112
+ grid_template_columns="160px 300px 1fr 300px 1fr"
113
+ if state.group_2.items
114
+ else "160px 1fr 1fr",
115
+ gap=16,
116
+ )
117
+ ):
118
+ # Header
119
+ me.text("Query", style=me.Style(font_weight=500))
120
+ me.text("Input (1)", style=me.Style(font_weight=500))
121
+ me.text("Output (1)", style=me.Style(font_weight=500))
122
+ if state.group_2.items:
123
+ me.text("Input (2)", style=me.Style(font_weight=500))
124
+ me.text("Output (2)", style=me.Style(font_weight=500))
125
+ # Body
126
+ for item_1, item_2 in zipped_items:
127
+ if item_1:
128
+ me.text(item_1.query, style=me.Style(font_weight=500))
129
+ me.markdown(
130
+ item_1.input, style=me.Style(overflow_y="auto", max_height=400)
131
+ )
132
+ me.text(item_1.output)
133
+
134
+ if item_2:
135
+ me.markdown(
136
+ item_2.input, style=me.Style(overflow_y="auto", max_height=400)
137
+ )
138
+ me.text(item_2.output)
139
+
140
+
141
+ @me.web_component(path="./scrollable.js")
142
+ def scrollable(
143
+ *,
144
+ key: str | None = None,
145
+ ):
146
+ return me.insert_web_component(
147
+ name="scrollable-component",
148
+ key=key,
149
+ )
frame_listener.js ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Listen for 'focus' message from the parent window
2
+ window.addEventListener('message', function (event) {
3
+ if (event.data === 'focus') {
4
+ // Find the textarea element
5
+ const textarea = document.querySelector('textarea');
6
+ console.log('focusing on textarea', textarea);
7
+ // If the textarea is found, focus on it
8
+ if (textarea) {
9
+ textarea.focus();
10
+ } else {
11
+ console.warn('Textarea not found for focus');
12
+ }
13
+ }
14
+ });
15
+
16
+ window.addEventListener('keydown', function (event) {
17
+ if (event.key === 'Escape') {
18
+ if (document.activeElement) {
19
+ document.activeElement.blur();
20
+ }
21
+ // Send a message to the parent window to close this iframe
22
+ window.parent.postMessage('closeDocbot', '*');
23
+ }
24
+ });
gen/bm25_retriever/corpus.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
gen/bm25_retriever/corpus.mmindex.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [0, 1458, 2833, 4188, 5580, 6906, 8205, 9686, 11068, 12431, 13999, 15367, 16714, 17934, 19236, 20471, 22878, 24507, 26058, 28184, 30194, 33572, 36486, 37986, 39471, 40953, 42418, 44129, 45501, 47145, 49547, 51007, 52519, 54023, 55430, 56659, 58025, 59680, 60903, 62275, 63498, 65003, 66443, 67784, 69104, 70495, 72006, 73285, 74717, 76542, 77978, 79705, 81240, 82584, 83917, 85277, 86601, 87872, 89416, 91005, 92302, 93737, 95007, 96455, 97720, 99707, 101635, 102990, 104599, 106332, 110817, 112868, 114374, 117415, 118959, 120369, 121851, 123486, 126141, 130040, 134190, 138342, 142357, 146522, 149451, 151091, 152510, 154113, 155674, 159233, 162297, 165993, 170040, 173044, 174590, 176286, 177690, 179288, 180854, 184597, 189035, 193281, 196518, 199165, 201250, 204290, 206073, 207462, 209383, 210812, 212168, 213524, 214807, 216386, 218046, 219842, 221464, 222927, 224558, 225908, 227458, 229409, 230930, 232879, 234600, 236817, 238615, 240696, 242401, 244319, 245806, 247636, 248979, 250275, 251552, 253344, 254689, 256355, 257732, 259028, 260305, 261637, 262919, 264178, 265485, 266788, 268157, 269520, 270872, 272367, 273658, 274947, 276399, 277730, 279019, 280276, 281638, 282955, 284453, 285789, 287083, 288351, 289780, 291118, 292515, 293987, 295367, 296839, 298196, 299506, 300801, 302113, 303409, 304686, 306265, 307631, 309133, 310733, 312027, 313295, 314623, 315912, 317180, 318470, 319766, 321043, 322461, 323725, 325484, 327060, 328628, 331088, 332365, 334477, 337171, 338597, 340452, 342994, 344380, 345676, 347085, 348397, 349686, 350954, 352257, 353579, 354883, 356193, 357482, 358750, 360155, 361500, 362919, 364356, 365729, 367105, 368436, 369732, 371115, 372475, 373783, 375245, 376608, 377918, 379213, 380610, 381955, 383438, 384799, 386102, 387449, 388787, 390083, 391360, 392770, 394122, 395451, 396860, 398205, 399526, 400844, 402133, 403401, 404851, 406168, 407598, 408913, 410223, 411518, 412919, 414236, 415706, 417049, 418345, 419622, 420902, 422162, 423912, 425292, 427037, 428559, 430025, 431289, 432920, 434296, 436316, 438143, 439768, 441515, 443164, 445424, 446933, 448470, 450009, 451555, 453642, 455151, 456537, 457871, 459247, 460751, 462437, 464156, 465563, 467611, 469724, 471541, 473638, 475071, 477110, 478613, 480647, 482052, 483617, 485154, 487819, 490300, 491964, 493356, 494807, 496267, 497626, 499029, 500825, 502345, 504030, 505394, 506940, 508562, 510076, 511439, 512757, 514112, 515511, 517177, 518836, 520264, 521604, 522978, 524420, 525820, 527371, 529009, 530401, 531820, 533547, 535027, 536533, 538008, 540580, 541875, 543490, 545591, 547710, 548990, 551588, 553756, 555043, 557722, 559101, 560582, 562933, 564426, 565895, 567176, 569394, 571263, 573033, 575018, 576365, 577671, 579116, 580744, 582189, 583435, 584883, 586383, 587988, 589857, 591091, 592718, 594828, 596730, 598953, 600557, 601931, 603458, 605132, 606537, 608007, 609305, 611110, 612874, 614536, 615945, 618083, 619693, 621120, 622676, 624135, 625829, 629362, 631225, 632730, 634091, 635630, 637253, 638772, 640171, 641914, 643519, 645258, 646673, 648607, 650345, 652476, 653982, 656110, 657807, 660136, 661423, 662841, 664285, 665870, 667352, 669243, 670819, 672428, 673779, 675445, 677119, 679960, 681454, 683076, 684895, 687106, 688778, 690537, 691976, 693331, 694793, 696615, 698407, 700233, 701999, 703440, 704712, 706357, 708173, 709906, 711536, 713107, 714474, 717320, 721298, 725385, 729690, 733485, 736372, 739749, 741015, 742816, 744236, 745806, 747546, 749057, 750409, 752136, 755110, 756937, 758858, 760836, 762294, 764057, 765402, 766779, 768643, 770148, 772509, 774819, 777134, 778485]
gen/bm25_retriever/data.csc.index.npy ADDED
Binary file (46.6 kB). View file
 
gen/bm25_retriever/indices.csc.index.npy ADDED
Binary file (46.6 kB). View file
 
gen/bm25_retriever/indptr.csc.index.npy ADDED
Binary file (7.74 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": 462,
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
+ {"tend": 0, "date": 1, "pic": 2, "enabl": 3, "alt": 4, "debug": 5, "mel": 6, "concurr": 7, "content_upload": 8, "incompat": 9, "event": 10, "receiv": 11, "maco": 12, "display_messag": 13, "ask": 14, "subtre": 15, "mesopdeveloperexcept": 16, "queu": 17, "chunk": 18, "control": 19, "git": 20, "mechan": 21, "complic": 22, "execut": 23, "happen": 24, "low": 25, "buttontogglechangeev": 26, "anoth": 27, "contain": 28, "project": 29, "old": 30, "contact": 31, "param_nam": 32, "traffic": 33, "much": 34, "smaller": 35, "frontend": 36, "request": 37, "refus": 38, "stage": 39, "ipynb": 40, "prefix": 41, "media": 42, "differ": 43, "conform": 44, "effortless": 45, "anthrop": 46, "__user": 47, "rank": 48, "chromeo": 49, "shift": 50, "isol": 51, "inter": 52, "appl": 53, "when": 54, "header": 55, "purpos": 56, "1000": 57, "spinner": 58, "problem": 59, "posit": 60, "315": 61, "share": 62, "bi": 63, "even": 64, "480": 65, "problemat": 66, "accord": 67, "what": 68, "congress": 69, "50": 70, "pyproject": 71, "simplest": 72, "nav": 73, "omit": 74, "manner": 75, "syntax": 76, "status_cod": 77, "thalnerkar": 78, "rang": 79, "made": 80, "work": 81, "36": 82, "self": 83, "solut": 84, "unread": 85, "moder": 86, "wire": 87, "dark": 88, "gave": 89, "accumul": 90, "expansionpaneltoggleev": 91, "simplic": 92, "privileg": 93, "mutabl": 94, "split": 95, "platform": 96, "allows_ifram": 97, "disk": 98, "agnost": 99, "store": 100, "init": 101, "bob": 102, "somewher": 103, "occasion": 104, "bundl": 105, "huggingfac": 106, "debugg": 107, "default_factori": 108, "design": 109, "typescript": 110, "max": 111, "text_to_text": 112, "purpl": 113, "callsit": 114, "bring": 115, "__native__": 116, "safe": 117, "angular": 118, "7anchay": 119, "els": 120, "5678": 121, "download": 122, "app": 123, "either": 124, "8192": 125, "subject": 126, "tell": 127, "while": 128, "3px": 129, "viewer": 130, "aim": 131, "may": 132, "baseurl": 133, "around": 134, "send_prompt_pro": 135, "enum": 136, "sdk": 137, "polici": 138, "abl": 139, "lightweight": 140, "toggle_them": 141, "counter_compon": 142, "directori": 143, "address": 144, "multi": 145, "replica": 146, "automat": 147, "infrastructur": 148, "lot": 149, "confirm_model_picker_dialog": 150, "closur": 151, "bodi": 152, "z_index": 153, "font_siz": 154, "encourag": 155, "easier": 156, "50vh": 157, "must": 158, "is_open": 159, "firebase_auth": 160, "standard": 161, "logic": 162, "src": 163, "imper": 164, "templat": 165, "scalabl": 166, "file_cont": 167, "could": 168, "limit": 169, "flash": 170, "colorfrom": 171, "tool": 172, "zone": 173, "goodby": 174, "100": 175, "last": 176, "fix": 177, "behavior": 178, "within": 179, "inform": 180, "prod": 181, "text_to_imag": 182, "delight": 183, "attempt": 184, "here": 185, "collection_nam": 186, "random": 187, "sourc": 188, "add": 189, "style": 190, "bandwidth": 191, "deploy": 192, "interfac": 193, "mesop_static_fold": 194, "2rem": 195, "set_gemini_api_key": 196, "though": 197, "pip": 198, "optim": 199, "audio": 200, "switcher": 201, "belief": 202, "new_param": 203, "max_output_token": 204, "bucket": 205, "tune": 206, "mesop_concurrent_updates_en": 207, "extend": 208, "lab": 209, "id": 210, "grand": 211, "iter": 212, "trust": 213, "sidebar": 214, "on_load": 215, "component_": 216, "entrypoint": 217, "entri": 218, "codelab": 219, "claude_api_key": 220, "215px": 221, "ram": 222, "call": 223, "16gb": 224, "signinsuccessurl": 225, "progressbaranimationendev": 226, "remind": 227, "1804890091816644906": 228, "wght": 229, "server": 230, "xlr8harder": 231, "1798673386425786724": 232, "drawback": 233, "pad": 234, "inputenterev": 235, "mdash": 236, "query_param": 237, "warn": 238, "comprehens": 239, "embrac": 240, "take": 241, "ad": 242, "authent": 243, "value2": 244, "backend": 245, "stack": 246, "disabl": 247, "valid": 248, "20240229": 249, "local": 250, "auth": 251, "usual": 252, "develop": 253, "small": 254, "create_al": 255, "bottleneck": 256, "gap": 257, "a_web_compon": 258, "ll": 259, "privaci": 260, "allowed_connect_src": 261, "debugpi": 262, "info": 263, "callabl": 264, "pointer": 265, "string": 266, "further": 267, "css": 268, "librari": 269, "f0f0f0": 270, "webev": 271, "path": 272, "_first_": 273, "json": 274, "set_claude_api_key": 275, "model_picker_dialog": 276, "layout": 277, "network": 278, "panel": 279, "updat": 280, "probabl": 281, "about": 282, "uri": 283, "gemini_api_key": 284, "instal": 285, "int": 286, "_this": 287, "box_shadow": 288, "mesop_state_session_backend_file_base_dir": 289, "manag": 290, "tier": 291, "decod": 292, "leverag": 293, "common": 294, "assum": 295, "pattern": 296, "especi": 297, "longer": 298, "tutori": 299, "queri": 300, "viewport_s": 301, "xhr": 302, "card": 303, "deal": 304, "prod_bundl": 305, "ttl": 306, "ssh": 307, "violat": 308, "done": 309, "lifetim": 310, "yield": 311, "dozen": 312, "learn": 313, "500": 314, "abov": 315, "12": 316, "down": 317, "filter": 318, "associ": 319, "postgresql": 320, "claude_3_5_sonnet": 321, "net": 322, "factori": 323, "intend": 324, "autosc": 325, "mutat": 326, "replac": 327, "creat": 328, "resiz": 329, "repeat": 330, "overal": 331, "rich": 332, "familiar": 333, "known": 334, "email": 335, "40px": 336, "calendar": 337, "theme": 338, "render": 339, "reload": 340, "ts": 341, "input_valu": 342, "base64": 343, "namedslot": 344, "nest": 345, "await": 346, "make": 347, "streamlin": 348, "val": 349, "center": 350, "extern": 351, "workaround": 352, "chat_sess": 353, "24": 354, "locat": 355, "up": 356, "did": 357, "re": 358, "improv": 359, "3d3929": 360, "we": 361, "flavor": 362, "str": 363, "static": 364, "prioriti": 365, "releas": 366, "prompt": 367, "num": 368, "myapp": 369, "align_item": 370, "gcloud": 371, "lit": 372, "horizont": 373, "demo": 374, "fault": 375, "asyncio": 376, "ident": 377, "whi": 378, "switch": 379, "tab": 380, "security_polici": 381, "besid": 382, "sign": 383, "milk": 384, "principl": 385, "inadvert": 386, "finish": 387, "github": 388, "value1": 389, "file": 390, "curv": 391, "mean": 392, "apach": 393, "mediadevic": 394, "newer": 395, "introduc": 396, "straight": 397, "start_chat": 398, "empti": 399, "addit": 400, "cursor": 401, "paradigm": 402, "operating_system": 403, "end_of_messag": 404, "opendemogalleryinnewtab": 405, "proto": 406, "intern": 407, "setup": 408, "devic": 409, "although": 410, "playwright": 411, "choos": 412, "harshit": 413, "abil": 414, "broader": 415, "immut": 416, "pass": 417, "dom": 418, "advanc": 419, "sse": 420, "built": 421, "credenti": 422, "1800557173073691000": 423, "care": 424, "databas": 425, "help": 426, "workspacefold": 427, "feel": 428, "interact": 429, "starter_kit": 430, "en": 431, "ifram": 432, "grid": 433, "hint": 434, "justify_cont": 435, "ml": 436, "declar": 437, "box_siz": 438, "npx": 439, "step": 440, "starter": 441, "virtual": 442, "person": 443, "port": 444, "font_famili": 445, "sever": 446, "ui": 447, "test": 448, "11": 449, "sequenc": 450, "dialog_st": 451, "absolut": 452, "hot": 453, "permiss": 454, "proxi": 455, "red": 456, "on_input": 457, "accur": 458, "clean": 459, "flex_direct": 460, "safelist": 461, "clickjack": 462, "localroot": 463, "script": 464, "argument": 465, "page_2": 466, "float": 467, "uniqu": 468, "response_text": 469, "insert_web_compon": 470, "architectur": 471, "sorri": 472, "fetch": 473, "simpl": 474, "markdown": 475, "use": 476, "you": 477, "note": 478, "runtime_vers": 479, "crux": 480, "valu": 481, "localhost": 482, "39": 483, "home": 484, "pre": 485, "grant": 486, "protocol": 487, "lower": 488, "bottom": 489, "filenam": 490, "parti": 491, "param_to_delet": 492, "has": 493, "how": 494, "respons": 495, "statement": 496, "trace": 497, "now": 498, "rgba": 499, "thing": 500, "verbos": 501, "send": 502, "gemini": 503, "scienc": 504, "among": 505, "selectopenedchangeev": 506, "scratch": 507, "sort": 508, "good": 509, "version": 510, "680px": 511, "wrapper": 512, "secur": 513, "person_dict": 514, "plenti": 515, "googleapi": 516, "lock": 517, "generation_config": 518, "web": 519, "left": 520, "selectopt": 521, "kw_on": 522, "initial_valu": 523, "buffer": 524, "new": 525, "exist": 526, "scheme": 527, "set": 528, "includ": 529, "16": 530, "tradit": 531, "code": 532, "jpeg": 533, "found": 534, "box": 535, "messag": 536, "config": 537, "decrement": 538, "user_messag": 539, "verifi": 540, "slidetogglechangeev": 541, "compatibilti": 542, "trustworthi": 543, "slowli": 544, "app_port": 545, "find": 546, "_zr64fycojgbcdqbjpla": 547, "duochat": 548, "navigate_hom": 549, "progress_spinn": 550, "link": 551, "wrap": 552, "favicon": 553, "expiresat": 554, "name": 555, "medium": 556, "v1": 557, "create_engin": 558, "safest": 559, "fallback": 560, "llm_respons": 561, "identitytoolkit": 562, "birthday": 563, "linux": 564, "tree": 565, "680": 566, "datetim": 567, "nested_dict": 568, "readi": 569, "tailwind": 570, "error": 571, "s9ag_yndl0m": 572, "reuseexistingserv": 573, "layoutslot": 574, "open": 575, "sent": 576, "action": 577, "upgrad": 578, "function": 579, "fruit": 580, "recogn": 581, "interoper": 582, "abc": 583, "form": 584, "relat": 585, "minimalist": 586, "congratul": 587, "compos": 588, "login": 589, "rerun": 590, "capabl": 591, "nativ": 592, "largebinari": 593, "product": 594, "been": 595, "parent": 596, "bool": 597, "pageast": 598, "load": 599, "via": 600, "smbah5leri": 601, "generic": 602, "basic": 603, "convent": 604, "requir": 605, "bad": 606, "direct": 607, "trustedhtml": 608, "doe": 609, "onto": 610, "doc": 611, "endpoint": 612, "input": 613, "814": 614, "increment": 615, "get_al": 616, "i18n": 617, "button_click": 618, "prefer": 619, "cach": 620, "facilit": 621, "5px": 622, "row": 623, "world": 624, "granular": 625, "branch": 626, "slow": 627, "min": 628, "suit": 629, "datafram": 630, "param": 631, "react": 632, "word": 633, "font_weight": 634, "affin": 635, "view": 636, "boilerpl": 637, "firebase_auth_app": 638, "px": 639, "node": 640, "outlin": 641, "want": 642, "reduc": 643, "decoupl": 644, "overflow_i": 645, "let": 646, "summari": 647, "defens": 648, "o1": 649, "firebaseui": 650, "payload": 651, "dedic": 652, "ren": 653, "lost": 654, "date_range_pick": 655, "firebase_auth_compon": 656, "compon": 657, "pictur": 658, "origin": 659, "session": 660, "button_toggl": 661, "explain": 662, "each": 663, "encrypt": 664, "firestor": 665, "inputblurev": 666, "set_theme_dens": 667, "retain": 668, "say": 669, "mesop_base_url_path": 670, "alloc": 671, "content_checkbox": 672, "appli": 673, "gradio": 674, "send_messag": 675, "ide": 676, "checkbox": 677, "send_prompt_flash": 678, "offset": 679, "800": 680, "flow": 681, "robust": 682, "content_layout": 683, "explicit": 684, "variable_nam": 685, "output": 686, "swap": 687, "specif": 688, "program": 689, "modifi": 690, "paramet": 691, "couldn": 692, "multipl": 693, "which": 694, "field": 695, "hit": 696, "color": 697, "e0e0e0": 698, "basemodel": 699, "bordersid": 700, "quick": 701, "expansion_panel": 702, "foo": 703, "flex_grow": 704, "text": 705, "prebuilt": 706, "invalid": 707, "sql": 708, "see": 709, "srv": 710, "evalu": 711, "doesn": 712, "troubl": 713, "mesop_state_session_backend_sql_connection_uri": 714, "complex_config": 715, "your": 716, "cpu": 717, "edgy0afg6u": 718, "setattr": 719, "ever": 720, "variat": 721, "set_page_titl": 722, "come": 723, "expertis": 724, "del": 725, "models_px": 726, "wsgi": 727, "txt": 728, "dictionari": 729, "few": 730, "srcdoc": 731, "access": 732, "picker": 733, "class": 734, "focus": 735, "correspond": 736, "fail": 737, "face": 738, "high": 739, "detection_compon": 740, "wrong": 741, "descript": 742, "content_compon": 743, "created_at": 744, "condit": 745, "given": 746, "licens": 747, "exampl": 748, "again": 749, "depth": 750, "object_detector": 751, "writeabl": 752, "mistak": 753, "uncom": 754, "ps1": 755, "retriev": 756, "languag": 757, "absenc": 758, "can": 759, "conclus": 760, "inject": 761, "typeerror": 762, "cli": 763, "line": 764, "datepickerchangeev": 765, "hub": 766, "process": 767, "saniti": 768, "wide": 769, "regular": 770, "approach": 771, "badg": 772, "height": 773, "2px": 774, "clipboard": 775, "friction": 776, "connect": 777, "url": 778, "compromis": 779, "walk": 780, "binari": 781, "convert": 782, "assign": 783, "handler": 784, "primit": 785, "specifi": 786, "scroll": 787, "clickev": 788, "gradiomesop": 789, "append": 790, "minut": 791, "db": 792, "consist": 793, "materi": 794, "slide_toggl": 795, "seamless": 796, "better": 797, "sequenti": 798, "depend": 799, "letter_spac": 800, "between": 801, "area": 802, "video": 803, "vcpu": 804, "doubl": 805, "move": 806, "mesop": 807, "footer": 808, "behind": 809, "experi": 810, "packag": 811, "respond": 812, "deep": 813, "real": 814, "widget": 815, "correct": 816, "instanti": 817, "requisit": 818, "link_compon": 819, "byte": 820, "con": 821, "unfortun": 822, "devtool": 823, "dark_mod": 824, "continu": 825, "third": 826, "galleri": 827, "viewport": 828, "ecosystem": 829, "put": 830, "nested_list": 831, "gh": 832, "runtime_config": 833, "look": 834, "gyroscop": 835, "black": 836, "sqlalchemi": 837, "slotclass": 838, "framework": 839, "si": 840, "namespac": 841, "most": 842, "unsaf": 843, "custom": 844, "cdn": 845, "caus": 846, "defin": 847, "differenti": 848, "defer": 849, "conversation_pag": 850, "autocomplet": 851, "higher": 852, "hello_world": 853, "mention": 854, "didn": 855, "bar": 856, "futur": 857, "mutableclass": 858, "excel": 859, "side": 860, "integ": 861, "right": 862, "genai": 863, "selected_model": 864, "progress": 865, "minimum": 866, "launch": 867, "order": 868, "cloud": 869, "straightforward": 870, "visual": 871, "flexbox": 872, "margin": 873, "panda": 874, "colorto": 875, "plugin": 876, "cover": 877, "expect": 878, "expans": 879, "until": 880, "enterpris": 881, "match": 882, "non": 883, "2024": 884, "api_key": 885, "protect": 886, "card_head": 887, "runtim": 888, "modul": 889, "wsgi_app": 890, "relax": 891, "decrementev": 892, "after": 893, "html_demo": 894, "unnecessarili": 895, "configure_gemini": 896, "suffici": 897, "gemini_1_5_pro": 898, "theme_var": 899, "combin": 900, "repositori": 901, "desktop": 902, "redact": 903, "detail": 904, "three": 905, "issu": 906, "zi1dngoryho": 907, "dev": 908, "race": 909, "page": 910, "best": 911, "plot": 912, "detect": 913, "chatmessag": 914, "border_radius": 915, "on_ent": 916, "understand": 917, "strive": 918, "dialog_act": 919, "toc": 920, "module_nam": 921, "balanc": 922, "select_demo": 923, "consol": 924, "point": 925, "semant": 926, "life": 927, "highlight": 928, "user": 929, "95": 930, "manual": 931, "push": 932, "block": 933, "serv": 934, "on_chang": 935, "dynam": 936, "nullabl": 937, "5etfw": 938, "consider": 939, "dataclass": 940, "properti": 941, "width": 942, "believ": 943, "table_nam": 944, "standalon": 945, "outer": 946, "annot": 947, "identifi": 948, "connection_uri": 949, "pleas": 950, "href": 951, "ai": 952, "default": 953, "larg": 954, "disk_size_gb": 955, "befor": 956, "oftentim": 957, "banana": 958, "regist": 959, "keyboard": 960, "environ": 961, "actual": 962, "choic": 963, "engin": 964, "various": 965, "itself": 966, "date_pick": 967, "end": 968, "size": 969, "insensit": 970, "md": 971, "rare": 972, "screen": 973, "python": 974, "construct": 975, "dive": 976, "offici": 977, "support": 978, "js": 979, "serious": 980, "magic": 981, "allowed_iframe_par": 982, "instead": 983, "fewer": 984, "root": 985, "hf": 986, "eas": 987, "shadow": 988, "env": 989, "unfamiliar": 990, "per": 991, "pydant": 992, "your_project_id": 993, "team": 994, "extrem": 995, "adc": 996, "beginn": 997, "amount": 998, "troubleshoot": 999, "footgun": 1000, "site": 1001, "mesop_web_components_http_cache_key": 1002, "exact": 1003, "safeti": 1004, "20": 1005, "ci": 1006, "sonnet": 1007, "allowed_script_src": 1008, "autocompleteselectionchangeev": 1009, "least": 1010, "hidden": 1011, "symbol": 1012, "token": 1013, "instant": 1014, "64": 1015, "unique_id": 1016, "rest": 1017, "adjust": 1018, "16px": 1019, "object": 1020, "reset": 1021, "integr": 1022, "subdomain": 1023, "is_model_picker_dialog_open": 1024, "claud": 1025, "sometim": 1026, "onc": 1027, "two": 1028, "notic": 1029, "domain": 1030, "chat": 1031, "update_st": 1032, "content__inn": 1033, "ubuntu22": 1034, "clariti": 1035, "less": 1036, "skew": 1037, "polic": 1038, "should": 1039, "callback": 1040, "increas": 1041, "due": 1042, "mesop_state_session_backend_sql_t": 1043, "potenti": 1044, "mesop_layout_colab": 1045, "child": 1046, "congrat": 1047, "remov": 1048, "encod": 1049, "unhandl": 1050, "ambigu": 1051, "model": 1052, "bg": 1053, "modeldialogst": 1054, "risk": 1055, "select": 1056, "readabl": 1057, "plumb": 1058, "is_desktop": 1059, "without": 1060, "mark": 1061, "main": 1062, "particular": 1063, "variabl": 1064, "click_exampl": 1065, "traceback": 1066, "go": 1067, "strict": 1068, "research": 1069, "state": 1070, "on_login": 1071, "stateless": 1072, "account": 1073, "tosurl": 1074, "overview": 1075, "shown": 1076, "display": 1077, "_or_": 1078, "toml": 1079, "allow": 1080, "part": 1081, "justmycod": 1082, "datapick": 1083, "page2": 1084, "fluid": 1085, "mesopev": 1086, "icon": 1087, "mesop_http_cache_js_bundl": 1088, "dispatch": 1089, "describ": 1090, "alic": 1091, "pd": 1092, "cannot": 1093, "data_model": 1094, "symmetr": 1095, "keep": 1096, "show": 1097, "our": 1098, "boolean": 1099, "microphon": 1100, "player": 1101, "subtl": 1102, "py": 1103, "strategi": 1104, "citi": 1105, "togeth": 1106, "change_model_opt": 1107, "slidervaluechangeev": 1108, "larger": 1109, "rout": 1110, "emb": 1111, "calc": 1112, "window": 1113, "framebord": 1114, "content_button": 1115, "reli": 1116, "emoji": 1117, "trigger": 1118, "com": 1119, "deeper": 1120, "etc": 1121, "price": 1122, "anchor": 1123, "prevent": 1124, "examples_row": 1125, "often": 1126, "slide": 1127, "securitypolici": 1128, "640": 1129, "context": 1130, "abstract": 1131, "becaus": 1132, "confirm": 1133, "offer": 1134, "googl": 1135, "headlin": 1136, "https": 1137, "8080": 1138, "compar": 1139, "emit": 1140, "ahd": 1141, "follow": 1142, "reason": 1143, "shell": 1144, "slot": 1145, "page_a": 1146, "ensur": 1147, "ico": 1148, "typeset": 1149, "them": 1150, "sinc": 1151, "chat_input": 1152, "power": 1153, "still": 1154, "autocompleteoptiongroup": 1155, "suitabl": 1156, "textarea": 1157, "560": 1158, "theme_bright": 1159, "migrat": 1160, "complex": 1161, "top_p": 1162, "customiz": 1163, "elif": 1164, "entir": 1165, "toy": 1166, "fff": 1167, "pin": 1168, "catch": 1169, "june": 1170, "me": 1171, "general": 1172, "run": 1173, "rapid": 1174, "perform": 1175, "confid": 1176, "all": 1177, "mesop_state_session_backend_firestore_collect": 1178, "item": 1179, "ttls": 1180, "final": 1181, "fastapi": 1182, "minor": 1183, "is_load": 1184, "colab_run": 1185, "concept": 1186, "detect_object": 1187, "streamlit": 1188, "vast": 1189, "show_menu_button": 1190, "adapt": 1191, "async": 1192, "get": 1193, "signific": 1194, "mesop_websockets_en": 1195, "csp": 1196, "applic": 1197, "too": 1198, "grid_template_row": 1199, "who": 1200, "mesop_colab_getting_start": 1201, "h1": 1202, "native_textarea": 1203, "otherwis": 1204, "persist": 1205, "command": 1206, "us": 1207, "subclass": 1208, "flexibl": 1209, "were": 1210, "daterangepickerchangeev": 1211, "webserv": 1212, "machin": 1213, "idiomat": 1214, "toler": 1215, "next": 1216, "logo": 1217, "remoteroot": 1218, "easili": 1219, "100vh": 1220, "themevar": 1221, "_ondecr": 1222, "0003": 1223, "add_query_param": 1224, "home_pag": 1225, "scaffold": 1226, "http": 1227, "ctrl": 1228, "svelt": 1229, "enhanc": 1230, "everi": 1231, "32px": 1232, "like": 1233, "900": 1234, "use_config": 1235, "expos": 1236, "implement": 1237, "none": 1238, "llm": 1239, "unopinion": 1240, "v2": 1241, "read": 1242, "target": 1243, "on_upload": 1244, "card_act": 1245, "incred": 1246, "tailwindcss": 1247, "docker": 1248, "screenshot": 1249, "bind": 1250, "transport": 1251, "cryptic": 1252, "away": 1253, "famili": 1254, "primary_key": 1255, "insid": 1256, "nonc": 1257, "load_complex_config": 1258, "instanc": 1259, "tmp": 1260, "radiochangeev": 1261, "counter": 1262, "latest": 1263, "usermodel": 1264, "deliv": 1265, "def": 1266, "api": 1267, "startswith": 1268, "www": 1269, "eventu": 1270, "set_theme_mod": 1271, "quota": 1272, "background_color": 1273, "30": 1274, "accordion": 1275, "mani": 1276, "becom": 1277, "score": 1278, "send_prompt": 1279, "option": 1280, "1px": 1281, "express": 1282, "night": 1283, "background": 1284, "boost": 1285, "250px": 1286, "trick": 1287, "activ": 1288, "alreadi": 1289, "don": 1290, "bash": 1291, "page_b": 1292, "those": 1293, "0000001f": 1294, "frame": 1295, "disclaim": 1296, "level": 1297, "auto": 1298, "dump": 1299, "listen": 1300, "nice": 1301, "intuit": 1302, "return": 1303, "provid": 1304, "fuss": 1305, "arbitrari": 1306, "yaml": 1307, "var": 1308, "colab": 1309, "tupl": 1310, "repres": 1311, "grow": 1312, "folder": 1313, "current_input_valu": 1314, "loadev": 1315, "plan": 1316, "aj4rqzs2mmwvxfo": 1317, "max_token": 1318, "xs": 1319, "ok": 1320, "call_claude_sonnet": 1321, "it": 1322, "dockerfil": 1323, "mdn": 1324, "wildcard": 1325, "initi": 1326, "flex": 1327, "downsid": 1328, "check": 1329, "sanit": 1330, "readm": 1331, "term": 1332, "dist": 1333, "goal": 1334, "overridden": 1335, "memori": 1336, "current": 1337, "repo": 1338, "hate": 1339, "firebas": 1340, "procfil": 1341, "refer": 1342, "blob": 1343, "full": 1344, "resist": 1345, "earlier": 1346, "progress_bar": 1347, "stream": 1348, "caveat": 1349, "guidanc": 1350, "transform": 1351, "trustedscripturl": 1352, "well": 1353, "decor": 1354, "restart": 1355, "almost": 1356, "e7f2ff": 1357, "consum": 1358, "grid_template_column": 1359, "datepick": 1360, "clear": 1361, "venv": 1362, "innerhtml": 1363, "consid": 1364, "log": 1365, "histori": 1366, "initial_input_valu": 1367, "save": 1368, "altern": 1369, "uploadev": 1370, "explor": 1371, "160": 1372, "featur": 1373, "jumpstart": 1374, "scope": 1375, "proper": 1376, "allowfullscreen": 1377, "display_convers": 1378, "client": 1379, "cd": 1380, "white": 1381, "autoplay": 1382, "some": 1383, "column": 1384, "would": 1385, "profil": 1386, "fraction": 1387, "tabl": 1388, "resourc": 1389, "my": 1390, "export": 1391, "tri": 1392, "stale": 1393, "later": 1394, "do": 1395, "evolv": 1396, "mesop_static_url_path": 1397, "type": 1398, "document": 1399, "welcom": 1400, "dens": 1401, "unnecessari": 1402, "tailwind_input": 1403, "565": 1404, "generativemodel": 1405, "collect": 1406, "way": 1407, "mount": 1408, "answer": 1409, "leak": 1410, "fine": 1411, "unless": 1412, "dure": 1413, "asdict": 1414, "dict": 1415, "deprec": 1416, "elem": 1417, "chrome": 1418, "align": 1419, "cloudsql": 1420, "javascript": 1421, "imag": 1422, "serializ": 1423, "index": 1424, "hl_line": 1425, "untrust": 1426, "difficult": 1427, "be": 1428, "disallow": 1429, "config_json": 1430, "children": 1431, "getusermedia": 1432, "anyth": 1433, "matplotlib": 1434, "reusabl": 1435, "howev": 1436, "stringent": 1437, "through": 1438, "gcp_project": 1439, "560px": 1440, "viewabl": 1441, "charset": 1442, "role": 1443, "figur": 1444, "densiti": 1445, "quiet": 1446, "multi_page_nav": 1447, "unit": 1448, "light_mod": 1449, "asset": 1450, "line_height": 1451, "refin": 1452, "on_load_gener": 1453, "notebook": 1454, "stylesheet": 1455, "10": 1456, "remot": 1457, "justify_item": 1458, "oper": 1459, "sandbox": 1460, "comput": 1461, "busi": 1462, "complet": 1463, "text_stream": 1464, "avoid": 1465, "rememb": 1466, "versatil": 1467, "decreas": 1468, "socket": 1469, "metadata": 1470, "sophist": 1471, "status": 1472, "tedious": 1473, "sleep": 1474, "named_slot": 1475, "extract": 1476, "hug": 1477, "image_data": 1478, "sure": 1479, "everyth": 1480, "weight": 1481, "shortcut": 1482, "uploadedfil": 1483, "data": 1484, "page1": 1485, "resolv": 1486, "earli": 1487, "delet": 1488, "keyerror": 1489, "one": 1490, "intermedi": 1491, "build": 1492, "nestedst": 1493, "appropri": 1494, "fast": 1495, "obj": 1496, "touch": 1497, "2767": 1498, "fals": 1499, "autom": 1500, "blank": 1501, "experiment": 1502, "button": 1503, "markdown_demo": 1504, "hamburg": 1505, "click": 1506, "strong": 1507, "checkboxindeterminatechangeev": 1508, "659": 1509, "categori": 1510, "_root": 1511, "servic": 1512, "pro": 1513, "know": 1514, "b64encod": 1515, "youtub": 1516, "bunch": 1517, "jsdelivr": 1518, "on_blur": 1519, "pagebst": 1520, "inspir": 1521, "in": 1522, "_not_": 1523, "failur": 1524, "dangerously_disable_trusted_typ": 1525, "gentl": 1526, "on_auth_chang": 1527, "twitter": 1528, "format": 1529, "join": 1530, "content_slide_toggl": 1531, "slash": 1532, "frequent": 1533, "click_navigate_button": 1534, "back": 1535, "more": 1536, "section": 1537, "typic": 1538, "png": 1539, "programmingerror": 1540, "defined__": 1541, "across": 1542, "stabl": 1543, "utf": 1544, "wwwillchen": 1545, "chang": 1546, "modern": 1547, "under": 1548, "cross": 1549, "web_compon": 1550, "easi": 1551, "bill": 1552, "ultim": 1553, "revers": 1554, "2f": 1555, "all_valu": 1556, "print": 1557, "primarili": 1558, "sqlite3": 1559, "backward": 1560, "constraint": 1561, "handl": 1562, "determin": 1563, "vs": 1564, "ani": 1565, "io": 1566, "tyagi": 1567, "border": 1568, "than": 1569, "1028": 1570, "jupyt": 1571, "aren": 1572, "generativeai": 1573, "mesop_state_sess": 1574, "divid": 1575, "off": 1576, "equival": 1577, "unselect": 1578, "worker": 1579, "liner": 1580, "vscode": 1581, "inner": 1582, "moment": 1583, "pretti": 1584, "ref_src": 1585, "write": 1586, "whenev": 1587, "exc": 1588, "ffffff": 1589, "blue": 1590, "anatomi": 1591, "scroll_into_view": 1592, "768px": 1593, "unifi": 1594, "vertic": 1595, "core": 1596, "tooltip": 1597, "possibl": 1598, "dif": 1599, "respect": 1600, "social": 1601, "anti": 1602, "soon": 1603, "street": 1604, "deseri": 1605, "hashtag": 1606, "awar": 1607, "communiti": 1608, "serial": 1609, "wait": 1610, "dswharshit": 1611, "1024": 1612, "usag": 1613, "except": 1614, "adopt": 1615, "select_menu_key": 1616, "minim": 1617, "on_image_upload": 1618, "achiev": 1619, "contribut": 1620, "00000024": 1621, "whether": 1622, "expand": 1623, "mesop_state_session_backend": 1624, "question": 1625, "unredact": 1626, "fair": 1627, "navig": 1628, "demand": 1629, "firebaseconfig": 1630, "comparison": 1631, "kind": 1632, "127": 1633, "gunicorn": 1634, "attract": 1635, "32123": 1636, "previous": 1637, "userprofil": 1638, "umd": 1639, "storag": 1640, "captur": 1641, "avail": 1642, "true": 1643, "toggl": 1644, "bat": 1645, "in_progress": 1646, "cmd": 1647, "gcp": 1648, "individu": 1649, "manual_sc": 1650, "forth": 1651, "popular": 1652, "recommend": 1653, "critic": 1654, "menu": 1655, "autocompleteenterev": 1656, "top_k": 1657, "on_click": 1658, "valuabl": 1659, "below": 1660, "steeper": 1661, "cancel": 1662, "own": 1663, "element": 1664, "card_cont": 1665, "singl": 1666, "danger": 1667, "past": 1668, "interpol": 1669, "knowledg": 1670, "inputev": 1671, "len": 1672, "method": 1673, "accept": 1674, "pros": 1675, "alway": 1676, "desir": 1677, "generat": 1678, "mkdir": 1679, "1fr": 1680, "spin": 1681, "concaten": 1682, "review": 1683, "miss": 1684, "your_servic": 1685, "fragment": 1686, "tip": 1687, "_blank": 1688, "admin": 1689, "list": 1690, "battl": 1691, "sanchay": 1692, "sensit": 1693, "rais": 1694, "group": 1695, "blur": 1696, "written": 1697, "kit": 1698, "anywher": 1699, "browser": 1700, "both": 1701, "assist": 1702, "hide": 1703, "second": 1704, "some_cont": 1705, "is_en": 1706, "idea": 1707, "mesop_app_base_path": 1708, "just": 1709, "involv": 1710, "__component__": 1711, "autocompleteopt": 1712, "degrad": 1713, "incom": 1714, "kufpisujrw": 1715, "long": 1716, "dispatchev": 1717, "spec": 1718, "radioopt": 1719, "counter_component_app": 1720, "guid": 1721, "result": 1722, "maintain": 1723, "util": 1724, "veri": 1725, "conveni": 1726, "special": 1727, "api_respons": 1728, "root_box_styl": 1729, "varieti": 1730, "radio": 1731, "bin": 1732, "give": 1733, "copi": 1734, "hello": 1735, "treat": 1736, "dynapubow3aft47i": 1737, "wiki": 1738, "dkvt0rboqumapk5d": 1739, "technolog": 1740, "age": 1741, "number": 1742, "outsid": 1743, "similar": 1744, "budget": 1745, "rather": 1746, "sh": 1747, "base": 1748, "first": 1749, "lose": 1750, "onli": 1751, "switch_model": 1752, "placehold": 1753, "have": 1754, "23": 1755, "case": 1756, "dialog": 1757, "referrerpolici": 1758, "mesop_prod_unredacted_error": 1759, "flask": 1760, "create_wsgi_app": 1761, "think": 1762, "snippet": 1763, "substr": 1764, "count": 1765, "search": 1766, "system": 1767, "stateclass": 1768, "temperatur": 1769, "configur": 1770, "lambda": 1771, "overflow_x": 1772, "so": 1773, "async_await": 1774, "light": 1775, "charact": 1776, "amongst": 1777, "also": 1778, "separ": 1779, "roundtrip": 1780, "liter": 1781, "coupl": 1782, "2fr": 1783, "buttontogglebutton": 1784, "communic": 1785, "convers": 1786, "over": 1787, "attribut": 1788, "pathmap": 1789, "css2": 1790, "simultan": 1791, "instruct": 1792, "indic": 1793, "prototyp": 1794, "commit": 1795, "repeated_param": 1796, "loop": 1797, "space": 1798, "classif": 1799, "accommod": 1800, "break": 1801, "enter": 1802, "menu_width": 1803, "structur": 1804, "b9e1ff": 1805, "from": 1806, "pick": 1807, "modular": 1808, "acceleromet": 1809, "model_messag": 1810, "imagin": 1811, "cell": 1812, "nav_compon": 1813, "fulli": 1814, "establish": 1815, "gray": 1816, "demonstr": 1817, "ve": 1818, "unsupport": 1819, "gemini_1_5_flash": 1820, "elimin": 1821, "trail": 1822, "slider": 1823, "veloc": 1824, "start": 1825, "close_model_picker_dialog": 1826, "mobil": 1827, "upload": 1828, "myapppath": 1829, "whichev": 1830, "host": 1831, "transmit": 1832, "strength": 1833, "selectselectionchangeev": 1834, "complement": 1835, "helper": 1836, "dsl": 1837, "twsrc": 1838, "town": 1839, "fit": 1840, "co": 1841, "priorit": 1842, "philosophi": 1843, "goto": 1844, "code_demo": 1845, "breakpoint": 1846, "same": 1847, "powershel": 1848, "cdns": 1849, "success": 1850, "titl": 1851, "memory_gb": 1852, "other": 1853, "scale": 1854, "key": 1855, "free": 1856, "extens": 1857, "call_api": 1858, "privacypolicyurl": 1859, "ipython": 1860, "time": 1861, "effici": 1862, "top": 1863, "produc": 1864, "someth": 1865, "import": 1866, "essenti": 1867, "need": 1868, "checkboxchangeev": 1869, "compat": 1870, "impos": 1871, "sleek": 1872, "mode": 1873, "inspect": 1874, "label": 1875, "goe": 1876, "websocket": 1877, "clone": 1878, "thread": 1879, "component_help": 1880, "confidenti": 1881, "model_nam": 1882, "reus": 1883, "where": 1884, "act": 1885, "html": 1886, "place": 1887, "hood": 1888, "out": 1889, "focus_compon": 1890, "sidenav": 1891, "quickstart": 1892, "attach": 1893, "wrestl": 1894, "front": 1895, "termin": 1896, "data_fram": 1897, "content": 1898, "font": 1899, "showcas": 1900, "global": 1901}
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": {"312fae99-c253-49e3-b5a2-ad25a3f18c43": {"__type__": "vector_store", "__data__": "{\"index_id\": \"312fae99-c253-49e3-b5a2-ad25a3f18c43\", \"summary\": null, \"nodes_dict\": {\"381052e1-25b6-482c-9b8c-3813950b3afb\": \"381052e1-25b6-482c-9b8c-3813950b3afb\", \"82259c92-2206-4fad-b39f-8d65e3cd6bc1\": \"82259c92-2206-4fad-b39f-8d65e3cd6bc1\", \"60d24f6c-bb9d-4c5e-9cd0-ff7e64753265\": \"60d24f6c-bb9d-4c5e-9cd0-ff7e64753265\", \"a0678bbd-dd7f-4dad-ae34-77aeb52ff754\": \"a0678bbd-dd7f-4dad-ae34-77aeb52ff754\", \"49885b96-7d1f-48fa-819f-26ade55476eb\": \"49885b96-7d1f-48fa-819f-26ade55476eb\", \"c305576b-c578-4038-a983-680048d35175\": \"c305576b-c578-4038-a983-680048d35175\", \"057f6393-f51a-4c21-9ecf-aba002e41759\": \"057f6393-f51a-4c21-9ecf-aba002e41759\", \"a4d1cb17-8da9-4b08-9c95-7be508b27b62\": \"a4d1cb17-8da9-4b08-9c95-7be508b27b62\", \"96fb51e2-539c-4829-b175-0defcd7606d6\": \"96fb51e2-539c-4829-b175-0defcd7606d6\", \"97f573e7-e2de-4556-94c9-5d91f5898440\": \"97f573e7-e2de-4556-94c9-5d91f5898440\", \"8fdecda0-d89d-4859-b2c8-fea45687d7ad\": \"8fdecda0-d89d-4859-b2c8-fea45687d7ad\", \"7042fc47-1c75-494f-9e34-9fc35269942a\": \"7042fc47-1c75-494f-9e34-9fc35269942a\", \"a51f5239-8860-4c50-affa-1e22f390ec24\": \"a51f5239-8860-4c50-affa-1e22f390ec24\", \"3dc3d105-d1c3-456b-affd-8786eb136730\": \"3dc3d105-d1c3-456b-affd-8786eb136730\", \"c8529b77-3c26-459f-a913-cad371eaa858\": \"c8529b77-3c26-459f-a913-cad371eaa858\", \"7f1d091a-a38c-4adb-a177-d4b8f56a3beb\": \"7f1d091a-a38c-4adb-a177-d4b8f56a3beb\", \"95d703ca-55a2-498b-ac79-60acc72da1bb\": \"95d703ca-55a2-498b-ac79-60acc72da1bb\", \"55b65bb4-5fdd-4f89-87c8-bc7d4b33e6c2\": \"55b65bb4-5fdd-4f89-87c8-bc7d4b33e6c2\", \"c207ab36-851c-4725-a6e6-762ed371365a\": \"c207ab36-851c-4725-a6e6-762ed371365a\", \"45e24739-759a-4e96-b16b-af246081dd99\": \"45e24739-759a-4e96-b16b-af246081dd99\", \"484ef60d-97d9-4af8-89b8-e85b12f52810\": \"484ef60d-97d9-4af8-89b8-e85b12f52810\", \"ccc1ee7d-4e5f-4efa-924c-b578de1af369\": \"ccc1ee7d-4e5f-4efa-924c-b578de1af369\", \"0f7c9dbf-2fa8-43ac-a4c9-539d9085739e\": \"0f7c9dbf-2fa8-43ac-a4c9-539d9085739e\", \"d42dc191-ab80-4770-ba2a-92d28f105776\": \"d42dc191-ab80-4770-ba2a-92d28f105776\", \"f3c8519b-de1a-4236-b3f7-4a9dbae960b9\": \"f3c8519b-de1a-4236-b3f7-4a9dbae960b9\", \"a671d5c0-b2a1-488e-8ea0-f5b23f57a98a\": \"a671d5c0-b2a1-488e-8ea0-f5b23f57a98a\", \"fbbc40fa-13f7-4a81-9ada-974084dca940\": \"fbbc40fa-13f7-4a81-9ada-974084dca940\", \"055d78a8-5f9a-449d-bc2e-5fe2067bf55b\": \"055d78a8-5f9a-449d-bc2e-5fe2067bf55b\", \"dc292655-5d93-46c8-9156-6ba75e23be23\": \"dc292655-5d93-46c8-9156-6ba75e23be23\", \"12e938f3-4d15-46a3-b426-0bacf7530a21\": \"12e938f3-4d15-46a3-b426-0bacf7530a21\", \"557898e7-0d82-4a8d-92eb-6b1951e766ff\": \"557898e7-0d82-4a8d-92eb-6b1951e766ff\", \"e6423c16-c320-4e44-bc65-9d2ad2064031\": \"e6423c16-c320-4e44-bc65-9d2ad2064031\", \"2595d43b-4c96-475b-9f6c-bfd34de79d5f\": \"2595d43b-4c96-475b-9f6c-bfd34de79d5f\", \"9d77bd2f-d5fa-4d0c-ad23-43ab2f47773d\": \"9d77bd2f-d5fa-4d0c-ad23-43ab2f47773d\", \"a2c3e68f-3336-486b-b0be-1fb48131d066\": \"a2c3e68f-3336-486b-b0be-1fb48131d066\", \"38faeb54-8025-4037-a231-c3a3246ec4a0\": \"38faeb54-8025-4037-a231-c3a3246ec4a0\", \"87c0ab38-4ab3-4f72-bdb1-79565621be03\": \"87c0ab38-4ab3-4f72-bdb1-79565621be03\", \"046a1a2a-3f83-486f-807e-16ce128509aa\": \"046a1a2a-3f83-486f-807e-16ce128509aa\", \"996143a6-f841-4439-a21b-3246b269f5c9\": \"996143a6-f841-4439-a21b-3246b269f5c9\", \"d1f92a15-b99c-47a0-8827-7672933998f2\": \"d1f92a15-b99c-47a0-8827-7672933998f2\", \"a7512d00-cef4-49a7-8bd2-95c4a2da39c7\": \"a7512d00-cef4-49a7-8bd2-95c4a2da39c7\", \"765a1cde-33c4-4dab-a8cc-03ba8ba9e49b\": \"765a1cde-33c4-4dab-a8cc-03ba8ba9e49b\", \"d55e78f2-91c3-42c8-98f3-eaedcce047f9\": \"d55e78f2-91c3-42c8-98f3-eaedcce047f9\", \"6a350289-95be-4090-a506-96fc8ce2e4e1\": \"6a350289-95be-4090-a506-96fc8ce2e4e1\", \"592628a0-d1de-44db-98e6-12b4c8a26f68\": \"592628a0-d1de-44db-98e6-12b4c8a26f68\", \"28ba4cca-6ad8-4327-b354-53b4d6ba4661\": \"28ba4cca-6ad8-4327-b354-53b4d6ba4661\", \"1ca27cbb-f460-40c0-bccf-84904da4ddaa\": \"1ca27cbb-f460-40c0-bccf-84904da4ddaa\", \"c303a090-1d01-4883-9f3a-80f77bfc5d5f\": \"c303a090-1d01-4883-9f3a-80f77bfc5d5f\", \"fc80bbdf-308e-4c47-979b-c1b1f1da7d3e\": \"fc80bbdf-308e-4c47-979b-c1b1f1da7d3e\", \"efce4c69-f3e2-46a2-911b-58ab2df468df\": \"efce4c69-f3e2-46a2-911b-58ab2df468df\", \"8c88c7f2-79b0-4f0f-8335-b53b3888e918\": \"8c88c7f2-79b0-4f0f-8335-b53b3888e918\", \"9c33306d-344a-4d40-b2a9-d10c70e9ea48\": \"9c33306d-344a-4d40-b2a9-d10c70e9ea48\", \"7e5399d6-210c-4fe2-beae-9be2b108ff95\": \"7e5399d6-210c-4fe2-beae-9be2b108ff95\", \"414dccc1-cd84-48aa-a00f-fc6f758dcdd4\": \"414dccc1-cd84-48aa-a00f-fc6f758dcdd4\", \"4669d480-bc3f-4bbc-8114-2fd89f1ba765\": \"4669d480-bc3f-4bbc-8114-2fd89f1ba765\", \"fb777b3c-4e48-4bb7-bdac-364c605ca29e\": \"fb777b3c-4e48-4bb7-bdac-364c605ca29e\", \"f7ab662a-9655-442e-b6f0-b8372e82619c\": \"f7ab662a-9655-442e-b6f0-b8372e82619c\", \"6d205607-dee5-4e5e-9225-2a5473b52612\": \"6d205607-dee5-4e5e-9225-2a5473b52612\", \"22db4cc0-f046-4ac3-a091-8421f1a374ad\": \"22db4cc0-f046-4ac3-a091-8421f1a374ad\", \"20ea3eb1-4a72-4a08-876f-5565b6082881\": \"20ea3eb1-4a72-4a08-876f-5565b6082881\", \"a904242a-c9c3-4b92-8aed-5a9e6d3a4a47\": \"a904242a-c9c3-4b92-8aed-5a9e6d3a4a47\", \"6dcc46dd-cee8-49cc-91dd-64089fbce436\": \"6dcc46dd-cee8-49cc-91dd-64089fbce436\", \"c9942dcc-ea76-4d43-88f8-79dbe711997a\": \"c9942dcc-ea76-4d43-88f8-79dbe711997a\", \"1e9b97fd-8010-4f0e-909f-a3bda26edd17\": \"1e9b97fd-8010-4f0e-909f-a3bda26edd17\", \"9d5e74f6-1405-4111-80a0-e3bc9044dd11\": \"9d5e74f6-1405-4111-80a0-e3bc9044dd11\", \"4a55f4ff-e336-42fd-8141-6940a8159f3e\": \"4a55f4ff-e336-42fd-8141-6940a8159f3e\", \"4527e595-9d24-4e34-b56f-54c836636d80\": \"4527e595-9d24-4e34-b56f-54c836636d80\", \"38b57768-3763-428b-9f5d-b01ab2f53659\": \"38b57768-3763-428b-9f5d-b01ab2f53659\", \"a6ddd9b2-ca47-4fd0-9488-58b7572b5836\": \"a6ddd9b2-ca47-4fd0-9488-58b7572b5836\", \"2c012a92-edcc-4c8c-8766-171cc3de0305\": \"2c012a92-edcc-4c8c-8766-171cc3de0305\", \"f58696eb-3af8-45b2-bddf-b6fc0ea6245c\": \"f58696eb-3af8-45b2-bddf-b6fc0ea6245c\", \"d9cb4325-4947-43cd-93f1-4ad3cd88f1fb\": \"d9cb4325-4947-43cd-93f1-4ad3cd88f1fb\", \"dcebafa9-d590-40ec-9f36-24c4aecee755\": \"dcebafa9-d590-40ec-9f36-24c4aecee755\", \"4042664a-937c-4210-b167-c5679774a62d\": \"4042664a-937c-4210-b167-c5679774a62d\", \"5636e197-2f41-4ec9-9eb3-68169a613d05\": \"5636e197-2f41-4ec9-9eb3-68169a613d05\", \"156f3734-75de-4955-92d6-7e1335d5b81e\": \"156f3734-75de-4955-92d6-7e1335d5b81e\", \"dbdc021d-7132-432d-88db-093633bb7257\": \"dbdc021d-7132-432d-88db-093633bb7257\", \"fc1f68a1-214f-4af2-bdac-224285a2f96d\": \"fc1f68a1-214f-4af2-bdac-224285a2f96d\", \"6777a9b7-3936-4b78-a06a-050f33165f6c\": \"6777a9b7-3936-4b78-a06a-050f33165f6c\", \"9094b3d6-643b-44f5-ad57-dc2c16ffceea\": \"9094b3d6-643b-44f5-ad57-dc2c16ffceea\", \"1d819f06-ff1b-4b15-bf62-d5f824276f92\": \"1d819f06-ff1b-4b15-bf62-d5f824276f92\", \"d2ca339f-0727-47f8-af84-c724824d5d09\": \"d2ca339f-0727-47f8-af84-c724824d5d09\", \"97a23655-9241-419f-ad0b-bb0d854da57c\": \"97a23655-9241-419f-ad0b-bb0d854da57c\", \"2717c2f7-8149-4dff-8bb2-5c6548c35387\": \"2717c2f7-8149-4dff-8bb2-5c6548c35387\", \"bac73926-8d1d-4abf-83ca-10950b83156e\": \"bac73926-8d1d-4abf-83ca-10950b83156e\", \"4d5226ce-b2d8-4b5e-b1d8-28a38cc2d8c6\": \"4d5226ce-b2d8-4b5e-b1d8-28a38cc2d8c6\", \"3d8394df-5217-4f81-a28c-0b34c5a50769\": \"3d8394df-5217-4f81-a28c-0b34c5a50769\", \"f7e7d448-edeb-471c-bd96-720aa72867b8\": \"f7e7d448-edeb-471c-bd96-720aa72867b8\", \"f6a7c925-7f30-492b-8276-308b29d4194a\": \"f6a7c925-7f30-492b-8276-308b29d4194a\", \"6db8c6de-b9de-4cae-b91f-9c56e5f3a54e\": \"6db8c6de-b9de-4cae-b91f-9c56e5f3a54e\", \"9471d6a1-9882-49dd-9328-b90573e5ef1c\": \"9471d6a1-9882-49dd-9328-b90573e5ef1c\", \"edd0bf32-7d7d-4a00-84dc-b642c785fd60\": \"edd0bf32-7d7d-4a00-84dc-b642c785fd60\", \"2cabce5f-762f-4c4e-b3fa-033c7d0e32df\": \"2cabce5f-762f-4c4e-b3fa-033c7d0e32df\", \"bcb7286c-a3e7-4efe-95ef-f01f00b9abdc\": \"bcb7286c-a3e7-4efe-95ef-f01f00b9abdc\", \"aebb3435-b969-478a-ac82-32bde9132cab\": \"aebb3435-b969-478a-ac82-32bde9132cab\", \"7e0967b0-1054-43b7-9501-4e6b681d13ad\": \"7e0967b0-1054-43b7-9501-4e6b681d13ad\", \"0e7ffd89-450f-48e1-998b-840075054bf4\": \"0e7ffd89-450f-48e1-998b-840075054bf4\", \"032d07ff-b5b6-41bb-b649-0ff3bc3d8d4e\": \"032d07ff-b5b6-41bb-b649-0ff3bc3d8d4e\", \"8c2aea5e-d304-4031-a5f8-3725999ffe01\": \"8c2aea5e-d304-4031-a5f8-3725999ffe01\", \"91d3f8ff-ef9a-4d8e-9d59-7bb925a230a9\": \"91d3f8ff-ef9a-4d8e-9d59-7bb925a230a9\", \"7695a469-c8a8-438c-b664-66de95d22569\": \"7695a469-c8a8-438c-b664-66de95d22569\", \"446866aa-c6b7-4e5c-aec9-159f0d2d47f9\": \"446866aa-c6b7-4e5c-aec9-159f0d2d47f9\", \"d63501be-0b55-444b-9d47-ca4064cd7851\": \"d63501be-0b55-444b-9d47-ca4064cd7851\", \"508c7ca3-5d2c-4742-a14d-50f5ac1b8eea\": \"508c7ca3-5d2c-4742-a14d-50f5ac1b8eea\", \"1013041c-1785-4da8-8ffe-a4be2bade7dc\": \"1013041c-1785-4da8-8ffe-a4be2bade7dc\", \"7f3560ac-7157-481a-aa85-bffd2c2730db\": \"7f3560ac-7157-481a-aa85-bffd2c2730db\", \"c656a36d-3d2c-4620-a5c7-3b89b36ef22e\": \"c656a36d-3d2c-4620-a5c7-3b89b36ef22e\", \"b88ebcbc-f9f5-4fec-818c-af40a16004af\": \"b88ebcbc-f9f5-4fec-818c-af40a16004af\", \"9b6f2395-8047-47b8-a27b-c5256f40c13c\": \"9b6f2395-8047-47b8-a27b-c5256f40c13c\", \"bca8842d-ec76-4f3f-a2c4-6f957634ea33\": \"bca8842d-ec76-4f3f-a2c4-6f957634ea33\", \"a8d8a18f-14cc-43f2-8981-ba9844b6931e\": \"a8d8a18f-14cc-43f2-8981-ba9844b6931e\", \"b9d5747c-4f2b-4624-800e-51c9deaf097d\": \"b9d5747c-4f2b-4624-800e-51c9deaf097d\", \"c07a84aa-9769-458d-905c-4bf5d65e8dd8\": \"c07a84aa-9769-458d-905c-4bf5d65e8dd8\", \"af1d43ee-3c91-498f-9ad5-88a1375f8799\": \"af1d43ee-3c91-498f-9ad5-88a1375f8799\", \"9c743a4e-b874-415b-9291-96283adcd527\": \"9c743a4e-b874-415b-9291-96283adcd527\", \"6adf67b6-35b6-4a44-9a2b-8b23bc849e14\": \"6adf67b6-35b6-4a44-9a2b-8b23bc849e14\", \"9d62096c-8f2a-4f03-9771-8c826c146924\": \"9d62096c-8f2a-4f03-9771-8c826c146924\", \"ff74f167-a35f-43ec-9fcc-a05e5eab7d88\": \"ff74f167-a35f-43ec-9fcc-a05e5eab7d88\", \"14640128-8c75-41ee-8bfe-caa645e8bf44\": \"14640128-8c75-41ee-8bfe-caa645e8bf44\", \"df060512-fe26-483d-8fed-4a1c29a73f94\": \"df060512-fe26-483d-8fed-4a1c29a73f94\", \"cc22e6fb-b980-4679-bbcd-c48408eae3db\": \"cc22e6fb-b980-4679-bbcd-c48408eae3db\", \"3660a7fd-25e7-4767-a91c-12537e68e585\": \"3660a7fd-25e7-4767-a91c-12537e68e585\", \"fc241732-e444-401b-b122-e13fd5777605\": \"fc241732-e444-401b-b122-e13fd5777605\", \"a7bf6eb9-a0fa-4029-92a7-f7f9ce0d892e\": \"a7bf6eb9-a0fa-4029-92a7-f7f9ce0d892e\", \"20d5ed36-eb8f-4c59-928e-9ce5602939ae\": \"20d5ed36-eb8f-4c59-928e-9ce5602939ae\", \"784cd87f-05df-47fc-bf9a-87ebb3e535e1\": \"784cd87f-05df-47fc-bf9a-87ebb3e535e1\", \"35fa8570-d647-471d-9119-e034028a8492\": \"35fa8570-d647-471d-9119-e034028a8492\", \"d6233341-eed4-4d44-9664-3f7b693d79fd\": \"d6233341-eed4-4d44-9664-3f7b693d79fd\", \"a4aac7b8-5011-4ba6-9f9d-418c2781b6ef\": \"a4aac7b8-5011-4ba6-9f9d-418c2781b6ef\", \"8415ca41-3ef2-4ddc-b67f-189bb0725636\": \"8415ca41-3ef2-4ddc-b67f-189bb0725636\", \"e1aa0897-e694-4add-a4c4-75b5116cf897\": \"e1aa0897-e694-4add-a4c4-75b5116cf897\", \"fe2e1aa4-0e64-44a1-a42e-05b3ea54f270\": \"fe2e1aa4-0e64-44a1-a42e-05b3ea54f270\", \"a56385c0-13e8-4985-92c2-b73d0865ac4c\": \"a56385c0-13e8-4985-92c2-b73d0865ac4c\", \"cda5cd35-d9f3-4e4d-af35-e16834e7aaed\": \"cda5cd35-d9f3-4e4d-af35-e16834e7aaed\", \"5c9824f5-6108-46cb-96d0-792fea7278b6\": \"5c9824f5-6108-46cb-96d0-792fea7278b6\", \"3a897012-930d-4df3-a01a-a9c037165ebb\": \"3a897012-930d-4df3-a01a-a9c037165ebb\", \"0ac4207e-0f7e-4535-bc80-cecb680964dc\": \"0ac4207e-0f7e-4535-bc80-cecb680964dc\", \"ac54b265-6bda-44d6-8cd4-06b4014c902c\": \"ac54b265-6bda-44d6-8cd4-06b4014c902c\", \"1b7bfb69-d22b-421d-ba59-198b97b1d406\": \"1b7bfb69-d22b-421d-ba59-198b97b1d406\", \"7f7a5f5c-45b7-44df-81d1-82f88a551ce2\": \"7f7a5f5c-45b7-44df-81d1-82f88a551ce2\", \"f37d8c5c-714e-45a3-a8c6-6e0084211ac2\": \"f37d8c5c-714e-45a3-a8c6-6e0084211ac2\", \"c2a74961-d663-4eca-a90e-5984d7298a9e\": \"c2a74961-d663-4eca-a90e-5984d7298a9e\", \"fc6c4d84-1a87-4f5d-9b1b-5630079ab548\": \"fc6c4d84-1a87-4f5d-9b1b-5630079ab548\", \"42053742-8e59-4183-846e-f395ed64c452\": \"42053742-8e59-4183-846e-f395ed64c452\", \"fcbf14ac-8dda-4ebc-978f-b004d5ed56b5\": \"fcbf14ac-8dda-4ebc-978f-b004d5ed56b5\", \"a14394ed-37d2-41ad-98ac-106ceceaa057\": \"a14394ed-37d2-41ad-98ac-106ceceaa057\", \"2de0eb87-dd1b-46e1-85ea-ff72ec009abe\": \"2de0eb87-dd1b-46e1-85ea-ff72ec009abe\", \"7edb498c-59a4-4988-b8e1-f60957e05724\": \"7edb498c-59a4-4988-b8e1-f60957e05724\", \"ec7a6913-9a35-4568-b5f5-bfa5904e2588\": \"ec7a6913-9a35-4568-b5f5-bfa5904e2588\", \"c592b4c9-ffba-4bd1-9799-55e6088580d4\": \"c592b4c9-ffba-4bd1-9799-55e6088580d4\", \"509e7987-28d9-4e41-aaf9-15ea3213a6fc\": \"509e7987-28d9-4e41-aaf9-15ea3213a6fc\", \"380d939d-c2dc-46e9-a29f-06bc549cf2ae\": \"380d939d-c2dc-46e9-a29f-06bc549cf2ae\", \"2bf83a41-7ff0-4611-bd02-db7658e1eee2\": \"2bf83a41-7ff0-4611-bd02-db7658e1eee2\", \"a06f24d7-1c4d-4444-aa8e-f0f78f12ea31\": \"a06f24d7-1c4d-4444-aa8e-f0f78f12ea31\", \"d5884ac1-85ea-4f45-9b4c-600fe0b5bfe4\": \"d5884ac1-85ea-4f45-9b4c-600fe0b5bfe4\", \"87e1702b-4c77-49be-afbe-79d13047ddcb\": \"87e1702b-4c77-49be-afbe-79d13047ddcb\", \"f0b2e0b5-a252-4917-83b9-b116fb1fc6cf\": \"f0b2e0b5-a252-4917-83b9-b116fb1fc6cf\", \"de6a467d-2932-489f-8a69-d605a705f9cc\": \"de6a467d-2932-489f-8a69-d605a705f9cc\", \"3e904911-4e13-4fa8-aa08-4135048958c8\": \"3e904911-4e13-4fa8-aa08-4135048958c8\", \"be199ccc-498b-41a0-8438-f8cb1369106d\": \"be199ccc-498b-41a0-8438-f8cb1369106d\", \"33378187-1b8e-434e-b37a-d5ab4b5e6c5c\": \"33378187-1b8e-434e-b37a-d5ab4b5e6c5c\", \"48c417d3-d351-4b17-a342-bea1abafeb85\": \"48c417d3-d351-4b17-a342-bea1abafeb85\", \"7a82c89a-defb-4158-a944-c9bddcd9dd5c\": \"7a82c89a-defb-4158-a944-c9bddcd9dd5c\", \"43fab03c-3774-4bf2-9f04-9dd76ea791ef\": \"43fab03c-3774-4bf2-9f04-9dd76ea791ef\", \"84ce4224-d55e-4e36-b7e5-44f16d7bcdc6\": \"84ce4224-d55e-4e36-b7e5-44f16d7bcdc6\", \"061155c3-9f31-4928-a7df-cfce50e88313\": \"061155c3-9f31-4928-a7df-cfce50e88313\", \"8e91717a-5194-4ce5-9c65-80ea50e6547a\": \"8e91717a-5194-4ce5-9c65-80ea50e6547a\", \"7eb134d9-bce8-414a-ae6d-92439f40ee55\": \"7eb134d9-bce8-414a-ae6d-92439f40ee55\", \"2c74133e-1042-4ff4-b369-41eac16831c6\": \"2c74133e-1042-4ff4-b369-41eac16831c6\", \"2cbd0192-3c86-4d9b-a86f-3270dc84d27e\": \"2cbd0192-3c86-4d9b-a86f-3270dc84d27e\", \"a01839aa-5723-4669-939b-af7e69262ce3\": \"a01839aa-5723-4669-939b-af7e69262ce3\", \"9887858b-e493-45a6-9dba-fde742704c83\": \"9887858b-e493-45a6-9dba-fde742704c83\", \"0521bdd3-15a4-4cf5-a126-8dfb30d89df4\": \"0521bdd3-15a4-4cf5-a126-8dfb30d89df4\", \"86646a96-bea0-49f5-83e4-5092add3496a\": \"86646a96-bea0-49f5-83e4-5092add3496a\", \"f5fa4eb5-88a0-4bd5-946e-184b683ddb43\": \"f5fa4eb5-88a0-4bd5-946e-184b683ddb43\", \"b8c191e6-f666-4483-85a2-fb514206fd40\": \"b8c191e6-f666-4483-85a2-fb514206fd40\", \"2c28e192-a634-4869-9e36-3db8d9f67929\": \"2c28e192-a634-4869-9e36-3db8d9f67929\", \"07f5ef0e-2b99-4974-a3c2-112f688b747b\": \"07f5ef0e-2b99-4974-a3c2-112f688b747b\", \"66d0a6a7-cc46-4fcb-94f0-afbe94162f17\": \"66d0a6a7-cc46-4fcb-94f0-afbe94162f17\", \"7fedfb24-6fb5-4f47-932e-32db7bc33b38\": \"7fedfb24-6fb5-4f47-932e-32db7bc33b38\", \"eec022c1-c6c5-42d9-98e6-a39781660657\": \"eec022c1-c6c5-42d9-98e6-a39781660657\", \"dffb83cf-5260-438a-ac22-562cf8f84662\": \"dffb83cf-5260-438a-ac22-562cf8f84662\", \"75b2f71c-fd4e-444e-bfc6-f8452cb07a5a\": \"75b2f71c-fd4e-444e-bfc6-f8452cb07a5a\", \"50ed7abd-171b-4b08-b5b9-0717b3cbd332\": \"50ed7abd-171b-4b08-b5b9-0717b3cbd332\", \"40613dff-0d75-459c-8bd8-b56a37a9f22b\": \"40613dff-0d75-459c-8bd8-b56a37a9f22b\", \"eb81953b-3be7-4a64-9161-ffee806b3f4f\": \"eb81953b-3be7-4a64-9161-ffee806b3f4f\", \"d794dc51-56bc-4322-8c60-9c30c74c08dd\": \"d794dc51-56bc-4322-8c60-9c30c74c08dd\", \"c30b6719-b863-404c-a9c8-1af1c4d84204\": \"c30b6719-b863-404c-a9c8-1af1c4d84204\", \"b6210038-acad-4a56-861a-8a0ca25ec368\": \"b6210038-acad-4a56-861a-8a0ca25ec368\", \"984b4f01-90f3-4d2b-92e8-fcd28e0b3dfa\": \"984b4f01-90f3-4d2b-92e8-fcd28e0b3dfa\", \"f84ddd7d-efdb-4ef4-a14d-29d09c35f163\": \"f84ddd7d-efdb-4ef4-a14d-29d09c35f163\", \"38dde395-ba0c-492b-b8c1-eba966a3215e\": \"38dde395-ba0c-492b-b8c1-eba966a3215e\", \"3c42c2ce-99ed-4b4a-9b14-52935a35016b\": \"3c42c2ce-99ed-4b4a-9b14-52935a35016b\", \"45a8d50e-a5cb-4f44-a597-4f4217e5b958\": \"45a8d50e-a5cb-4f44-a597-4f4217e5b958\", \"de28eac3-783f-44d5-8649-f1a22b680328\": \"de28eac3-783f-44d5-8649-f1a22b680328\", \"9e5d884e-edbe-43a5-b0d8-7d3e9d1bfd9c\": \"9e5d884e-edbe-43a5-b0d8-7d3e9d1bfd9c\", \"b5c06246-229d-40e5-8ed0-3a5602c255da\": \"b5c06246-229d-40e5-8ed0-3a5602c255da\", \"f8365958-b962-4164-9327-eed6568f0927\": \"f8365958-b962-4164-9327-eed6568f0927\", \"d8346063-3f89-4c61-8263-eeb3e701ab5e\": \"d8346063-3f89-4c61-8263-eeb3e701ab5e\", \"3d956030-6caa-487a-b40b-681310abc327\": \"3d956030-6caa-487a-b40b-681310abc327\", \"0378fed7-e55e-4905-9a1a-da4e5568f5d7\": \"0378fed7-e55e-4905-9a1a-da4e5568f5d7\", \"b2979ec0-00d0-4fd8-bf79-ae67ad28407e\": \"b2979ec0-00d0-4fd8-bf79-ae67ad28407e\", \"f5df7a87-c674-459b-a054-114fc698b7c7\": \"f5df7a87-c674-459b-a054-114fc698b7c7\", \"e406bd30-5f15-44c3-8212-41e21dad1803\": \"e406bd30-5f15-44c3-8212-41e21dad1803\", \"54b314c2-4ca4-4e40-b268-d66ee3983586\": \"54b314c2-4ca4-4e40-b268-d66ee3983586\", \"30719e21-6d94-469f-8488-2a814d50233a\": \"30719e21-6d94-469f-8488-2a814d50233a\", \"07473fd1-5c9d-424d-8a89-1e51ad1c040c\": \"07473fd1-5c9d-424d-8a89-1e51ad1c040c\", \"32a189ec-e045-4a04-b319-db438e60ef41\": \"32a189ec-e045-4a04-b319-db438e60ef41\", \"600c973a-10b8-4805-9d65-5223bcfacf1a\": \"600c973a-10b8-4805-9d65-5223bcfacf1a\", \"ccab04a9-2a6c-4e3d-b787-bdd4b4210ab0\": \"ccab04a9-2a6c-4e3d-b787-bdd4b4210ab0\", \"bf5329a9-b14a-44f4-8c15-25903bfbac12\": \"bf5329a9-b14a-44f4-8c15-25903bfbac12\", \"3ab4b0b5-76c4-4c3b-9f3a-68838fac3ce2\": \"3ab4b0b5-76c4-4c3b-9f3a-68838fac3ce2\", \"0fc81356-e20e-4092-a847-65e5a8fdf30b\": \"0fc81356-e20e-4092-a847-65e5a8fdf30b\", \"62687a8e-5276-42fe-ae0b-b0d0a56d7922\": \"62687a8e-5276-42fe-ae0b-b0d0a56d7922\", \"13513327-37cb-4317-838e-8af402d3d32b\": \"13513327-37cb-4317-838e-8af402d3d32b\", \"ac606a0a-c092-43af-bcf9-5b8973d0b3d5\": \"ac606a0a-c092-43af-bcf9-5b8973d0b3d5\", \"83eec57a-feef-4ac0-a18e-48a3171eb007\": \"83eec57a-feef-4ac0-a18e-48a3171eb007\", \"b021f3f2-97cd-448e-a9cd-d37524ac1bea\": \"b021f3f2-97cd-448e-a9cd-d37524ac1bea\", \"759bdb8a-fdc8-4759-a2ae-fb5f884fe77f\": \"759bdb8a-fdc8-4759-a2ae-fb5f884fe77f\", \"a79907ba-4374-4ea4-a565-e68d72b0d0e9\": \"a79907ba-4374-4ea4-a565-e68d72b0d0e9\", \"1f7661bd-cd8f-4e35-8c56-53dea354acc9\": \"1f7661bd-cd8f-4e35-8c56-53dea354acc9\", \"961f8882-8384-4518-9c47-e268633568a9\": \"961f8882-8384-4518-9c47-e268633568a9\", \"037dbeac-6f59-49b7-a72e-626ed0db3aab\": \"037dbeac-6f59-49b7-a72e-626ed0db3aab\", \"b2e6e104-f8c5-4129-aa2c-246f02c0e61c\": \"b2e6e104-f8c5-4129-aa2c-246f02c0e61c\", \"4803a9d6-d00f-4db5-828e-9d9983788c67\": \"4803a9d6-d00f-4db5-828e-9d9983788c67\", \"07bfa0ff-9419-4782-a2e0-1448ddc76c57\": \"07bfa0ff-9419-4782-a2e0-1448ddc76c57\", \"41bcf934-e84c-46cd-a687-bedccb4007bb\": \"41bcf934-e84c-46cd-a687-bedccb4007bb\", \"d594a9c6-5154-4cce-b6bd-03f29c2b7a94\": \"d594a9c6-5154-4cce-b6bd-03f29c2b7a94\", \"5c4d8218-9e6f-4bb7-a2ad-0d6182f015bf\": \"5c4d8218-9e6f-4bb7-a2ad-0d6182f015bf\", \"864f410a-c078-4246-96dc-3563c64b2ad4\": \"864f410a-c078-4246-96dc-3563c64b2ad4\", \"bde84acf-5a34-4fa8-9ad5-2fc6a34cfc72\": \"bde84acf-5a34-4fa8-9ad5-2fc6a34cfc72\", \"a914a44a-426e-4dc3-a7ec-460bba7db6a7\": \"a914a44a-426e-4dc3-a7ec-460bba7db6a7\", \"c0b43229-f029-4a7e-a2e0-3b1ff69b23d9\": \"c0b43229-f029-4a7e-a2e0-3b1ff69b23d9\", \"f174fe09-0f38-42f4-81b7-be4ede1115e9\": \"f174fe09-0f38-42f4-81b7-be4ede1115e9\", \"f9894dd7-c5db-4a18-8608-c519dba13637\": \"f9894dd7-c5db-4a18-8608-c519dba13637\", \"135f0cf7-4d85-439f-8a1f-894303b5bc8a\": \"135f0cf7-4d85-439f-8a1f-894303b5bc8a\", \"d2525a7d-806f-4825-9f83-c2f9d875a356\": \"d2525a7d-806f-4825-9f83-c2f9d875a356\", \"4cf65231-a7e5-4c4a-853f-62b1b5fffca9\": \"4cf65231-a7e5-4c4a-853f-62b1b5fffca9\", \"108fe1f0-a695-4a1a-8014-19ca0f75af4b\": \"108fe1f0-a695-4a1a-8014-19ca0f75af4b\", \"1bbf7b95-f1d6-4dc5-801f-10b6eaa0e4e5\": \"1bbf7b95-f1d6-4dc5-801f-10b6eaa0e4e5\", \"732d2f42-1d11-43fb-aeda-677360926c0d\": \"732d2f42-1d11-43fb-aeda-677360926c0d\", \"48bb5d05-a6bc-465d-9b9b-2fd4622bdc79\": \"48bb5d05-a6bc-465d-9b9b-2fd4622bdc79\", \"cda3fae8-3798-4820-836c-51b0cbf177b1\": \"cda3fae8-3798-4820-836c-51b0cbf177b1\", \"aa04ad0c-c8fb-400f-a7c7-e8f9aea9f322\": \"aa04ad0c-c8fb-400f-a7c7-e8f9aea9f322\", \"8accdf20-69d4-4df1-82b0-66e8ce08123f\": \"8accdf20-69d4-4df1-82b0-66e8ce08123f\", \"6432650b-0522-44be-b8c1-cb3c967a83b1\": \"6432650b-0522-44be-b8c1-cb3c967a83b1\", \"2104986f-6544-4e2c-b242-abcb1439a1dc\": \"2104986f-6544-4e2c-b242-abcb1439a1dc\", \"0fe9589f-a38b-44bf-802a-313f40edbbe4\": \"0fe9589f-a38b-44bf-802a-313f40edbbe4\", \"088639c1-dcbd-4116-bd68-34dabcd0bdb2\": \"088639c1-dcbd-4116-bd68-34dabcd0bdb2\", \"9127abcc-7200-49be-96ea-efbe98d63422\": \"9127abcc-7200-49be-96ea-efbe98d63422\", \"60eb7526-d7c2-454a-a48a-9216993ca344\": \"60eb7526-d7c2-454a-a48a-9216993ca344\", \"cd68dbdd-74aa-4532-a790-603d556c7ea2\": \"cd68dbdd-74aa-4532-a790-603d556c7ea2\", \"0a92d490-10bf-478c-aab0-1fec8209fbf6\": \"0a92d490-10bf-478c-aab0-1fec8209fbf6\", \"d2cf8f7d-bfbf-4b67-a9b6-34fc8421e606\": \"d2cf8f7d-bfbf-4b67-a9b6-34fc8421e606\", \"36f7ec21-599e-4fd0-85a4-9198122c9b97\": \"36f7ec21-599e-4fd0-85a4-9198122c9b97\", \"4548023f-fa23-4779-8fdc-238c6476a02a\": \"4548023f-fa23-4779-8fdc-238c6476a02a\", \"678e5dbe-4647-48d8-b93e-5b3b680e637c\": \"678e5dbe-4647-48d8-b93e-5b3b680e637c\", \"30146be2-b22b-4469-b11e-0797a7d6a858\": \"30146be2-b22b-4469-b11e-0797a7d6a858\", \"3e6f83bd-0ea7-4dbd-9b6a-2cdd405200b0\": \"3e6f83bd-0ea7-4dbd-9b6a-2cdd405200b0\", \"38e9cc9f-0ea3-42d4-bc6b-1b1a74591397\": \"38e9cc9f-0ea3-42d4-bc6b-1b1a74591397\", \"bb4bb559-ae42-4da1-8e57-10684473bb86\": \"bb4bb559-ae42-4da1-8e57-10684473bb86\", \"4c3ccc2c-11ad-4a81-8bb9-620acc53bced\": \"4c3ccc2c-11ad-4a81-8bb9-620acc53bced\", \"18e24564-40c3-4792-b1df-f8fba5dcf5c9\": \"18e24564-40c3-4792-b1df-f8fba5dcf5c9\", \"bad05950-4756-43c0-a4df-5f13bb08eb1e\": \"bad05950-4756-43c0-a4df-5f13bb08eb1e\", \"e06a56c6-6c89-4c4e-a458-7d019700a07d\": \"e06a56c6-6c89-4c4e-a458-7d019700a07d\", \"bb1c500c-4e30-47e3-9571-283b1ace40eb\": \"bb1c500c-4e30-47e3-9571-283b1ace40eb\", \"4c60ec65-97b7-4957-8ce2-5fc4f4322a86\": \"4c60ec65-97b7-4957-8ce2-5fc4f4322a86\", \"16111680-7c52-4f36-8454-03af33283a9f\": \"16111680-7c52-4f36-8454-03af33283a9f\", \"9145eb03-01cc-4314-b8e7-1200ceee4f6d\": \"9145eb03-01cc-4314-b8e7-1200ceee4f6d\", \"d6bdb389-4290-4c3b-9bd8-30a212f7f1c3\": \"d6bdb389-4290-4c3b-9bd8-30a212f7f1c3\", \"162c00a9-1627-49de-bfb1-53f9c886b699\": \"162c00a9-1627-49de-bfb1-53f9c886b699\", \"5dfedece-5111-4b19-8d72-24f024f7c8aa\": \"5dfedece-5111-4b19-8d72-24f024f7c8aa\", \"1922c3b7-0187-4ecf-af2f-9a9d5074aa83\": \"1922c3b7-0187-4ecf-af2f-9a9d5074aa83\", \"6515a409-9885-4091-b928-35bf65a04d24\": \"6515a409-9885-4091-b928-35bf65a04d24\", \"3bb8e874-9bc9-43b6-a64d-cb3e87bee957\": \"3bb8e874-9bc9-43b6-a64d-cb3e87bee957\", \"8a5005ce-6afd-45eb-b266-025b1c3e4411\": \"8a5005ce-6afd-45eb-b266-025b1c3e4411\", \"0f6ed898-8748-419a-8847-89b9acf42d1d\": \"0f6ed898-8748-419a-8847-89b9acf42d1d\", \"46f5eb5a-5fda-4a98-83ca-f27a716a2c31\": \"46f5eb5a-5fda-4a98-83ca-f27a716a2c31\", \"f3c12aab-e3cb-48e5-a957-735b5cb86bae\": \"f3c12aab-e3cb-48e5-a957-735b5cb86bae\", \"745f47b4-d7b7-4b7b-b551-25b34669d5d8\": \"745f47b4-d7b7-4b7b-b551-25b34669d5d8\", \"f9cda98f-df47-464a-9f55-cf4eab2b5a11\": \"f9cda98f-df47-464a-9f55-cf4eab2b5a11\", \"130e8536-a87c-40f3-a0fb-9c2815c321c0\": \"130e8536-a87c-40f3-a0fb-9c2815c321c0\", \"5148b7b9-a08c-41be-9381-90e4caa2d926\": \"5148b7b9-a08c-41be-9381-90e4caa2d926\", \"8d721640-4bbb-4296-98ef-e6715b5230a2\": \"8d721640-4bbb-4296-98ef-e6715b5230a2\", \"a38e95a8-99c6-411d-ae1f-5428b5dbcd89\": \"a38e95a8-99c6-411d-ae1f-5428b5dbcd89\", \"58e7c697-6043-4a39-922f-49f3538360d0\": \"58e7c697-6043-4a39-922f-49f3538360d0\", \"71ad09fb-45cb-4209-ae77-0eef47aacbb3\": \"71ad09fb-45cb-4209-ae77-0eef47aacbb3\", \"e52ca55e-4588-481d-9662-f35a4969da49\": \"e52ca55e-4588-481d-9662-f35a4969da49\", \"dc41d413-e031-43c9-9094-eee4b0fa2475\": \"dc41d413-e031-43c9-9094-eee4b0fa2475\", \"2782f86e-c394-431a-bd7f-48a2b84c5106\": \"2782f86e-c394-431a-bd7f-48a2b84c5106\", \"90d7f560-033a-45da-8949-c542dd9def38\": \"90d7f560-033a-45da-8949-c542dd9def38\", \"3affe4ad-acc1-4a24-b502-d2c4d8db6e27\": \"3affe4ad-acc1-4a24-b502-d2c4d8db6e27\", \"e0294a45-04be-426d-8695-877dec1d47c1\": \"e0294a45-04be-426d-8695-877dec1d47c1\", \"b73104d8-e600-49bf-b5f9-cd20a8d22e5f\": \"b73104d8-e600-49bf-b5f9-cd20a8d22e5f\", \"3c197744-96f7-4169-9f82-5d928904314c\": \"3c197744-96f7-4169-9f82-5d928904314c\", \"2b3fdc2a-886d-4e43-8de3-77a0d217b5d8\": \"2b3fdc2a-886d-4e43-8de3-77a0d217b5d8\", \"bdbaeab7-bb55-40a9-8b7f-253fa6e17a5a\": \"bdbaeab7-bb55-40a9-8b7f-253fa6e17a5a\", \"54b5486d-0282-44fb-9533-e73cc9ced299\": \"54b5486d-0282-44fb-9533-e73cc9ced299\", \"75c8a5a8-2651-4dca-8321-5fc8f7f4219c\": \"75c8a5a8-2651-4dca-8321-5fc8f7f4219c\", \"86a6d6cf-8361-4fe9-8ec7-cbda27a754c3\": \"86a6d6cf-8361-4fe9-8ec7-cbda27a754c3\", \"2194a8a0-58ee-4d31-badb-baf5ada588ee\": \"2194a8a0-58ee-4d31-badb-baf5ada588ee\", \"e5e9e278-8ef0-45f4-bcc9-f0f4d85a2063\": \"e5e9e278-8ef0-45f4-bcc9-f0f4d85a2063\", \"a57cb858-09db-40cc-80ab-ed77228665ce\": \"a57cb858-09db-40cc-80ab-ed77228665ce\", \"32323564-20c1-49f4-9b4b-cc1cbbe74b33\": \"32323564-20c1-49f4-9b4b-cc1cbbe74b33\", \"d350d4e8-9967-4410-b2ca-4b35896d777b\": \"d350d4e8-9967-4410-b2ca-4b35896d777b\", \"2d802987-3571-4977-8abc-78779e076dea\": \"2d802987-3571-4977-8abc-78779e076dea\", \"c628f193-6948-41c3-b7b4-7d5253ee04d5\": \"c628f193-6948-41c3-b7b4-7d5253ee04d5\", \"ebb5cb20-cab0-4245-935e-716388e69b8a\": \"ebb5cb20-cab0-4245-935e-716388e69b8a\", \"7ac3d273-ff0d-4283-b9a9-d926d62f3a37\": \"7ac3d273-ff0d-4283-b9a9-d926d62f3a37\", \"39ba109f-1852-4dbf-914d-aec6434c03da\": \"39ba109f-1852-4dbf-914d-aec6434c03da\", \"0c993375-ffb6-4ffd-bf95-fce01d420421\": \"0c993375-ffb6-4ffd-bf95-fce01d420421\", \"c4b3343f-4f30-4a1a-80c8-55e419fba987\": \"c4b3343f-4f30-4a1a-80c8-55e419fba987\", \"3a9f9365-127f-4b83-b296-658bf52c7bc0\": \"3a9f9365-127f-4b83-b296-658bf52c7bc0\", \"05cc10fb-7084-4731-bef1-95fe31b811af\": \"05cc10fb-7084-4731-bef1-95fe31b811af\", \"b6f83b8d-5b6f-475e-853b-aae7e5cea877\": \"b6f83b8d-5b6f-475e-853b-aae7e5cea877\", \"cd28e351-ddef-497e-9b76-e115981d61cf\": \"cd28e351-ddef-497e-9b76-e115981d61cf\", \"07346672-8c4b-41dd-83b7-80a379fe1565\": \"07346672-8c4b-41dd-83b7-80a379fe1565\", \"1744f3a3-6366-4b2b-9744-baf583041ee9\": \"1744f3a3-6366-4b2b-9744-baf583041ee9\", \"1a994dd5-9e60-45c6-a676-8f0f5e2f734a\": \"1a994dd5-9e60-45c6-a676-8f0f5e2f734a\", \"6b2b11dd-9961-4b8c-81e0-840bcc273f43\": \"6b2b11dd-9961-4b8c-81e0-840bcc273f43\", \"78858f68-acdc-4c09-9190-aac326fbfd46\": \"78858f68-acdc-4c09-9190-aac326fbfd46\", \"ac0b354c-e6e1-4bd8-80ce-0a02f042a40c\": \"ac0b354c-e6e1-4bd8-80ce-0a02f042a40c\", \"2a002f2a-406b-41ef-b8e5-df1f9f3d1459\": \"2a002f2a-406b-41ef-b8e5-df1f9f3d1459\", \"864eed31-2af2-43cd-aadc-3ada12d2bd37\": \"864eed31-2af2-43cd-aadc-3ada12d2bd37\", \"5e02b96c-d75e-4c9e-bcb4-c183016b677d\": \"5e02b96c-d75e-4c9e-bcb4-c183016b677d\", \"c20196eb-86ce-43b6-ad2c-49d6a0ede806\": \"c20196eb-86ce-43b6-ad2c-49d6a0ede806\", \"d023f817-7bab-4073-a7c9-0054a97cf30b\": \"d023f817-7bab-4073-a7c9-0054a97cf30b\", \"6e946557-0e6c-49b0-b74a-b9a1cc9065d3\": \"6e946557-0e6c-49b0-b74a-b9a1cc9065d3\", \"aa347ac5-4e51-4b79-a97f-269543e8ad7a\": \"aa347ac5-4e51-4b79-a97f-269543e8ad7a\", \"a027221f-59c0-4df0-8dff-2f76d7a07589\": \"a027221f-59c0-4df0-8dff-2f76d7a07589\", \"ab06db72-37c7-4923-bd12-e40cb4243b35\": \"ab06db72-37c7-4923-bd12-e40cb4243b35\", \"5e849a9e-a16c-4d77-b134-0f3216ff88e4\": \"5e849a9e-a16c-4d77-b134-0f3216ff88e4\", \"53476336-5ef5-40fc-8513-e6304c9c1ecf\": \"53476336-5ef5-40fc-8513-e6304c9c1ecf\", \"b937c17d-67d7-46c8-9e9d-e8980dad8f6a\": \"b937c17d-67d7-46c8-9e9d-e8980dad8f6a\", \"c5d0a2c5-1f2a-479a-9958-6ebc25f6561c\": \"c5d0a2c5-1f2a-479a-9958-6ebc25f6561c\", \"b615f82e-c587-43bf-8862-9525cfdc26a0\": \"b615f82e-c587-43bf-8862-9525cfdc26a0\", \"e32f79cc-56e4-40a4-b4c7-8f8c11d8727e\": \"e32f79cc-56e4-40a4-b4c7-8f8c11d8727e\", \"1ef62832-721e-4745-831f-aa7794c0d709\": \"1ef62832-721e-4745-831f-aa7794c0d709\", \"8442adda-daa8-4b81-a43d-0af7f7260ede\": \"8442adda-daa8-4b81-a43d-0af7f7260ede\", \"825c7262-d7dd-4d54-9da0-03ac3417327d\": \"825c7262-d7dd-4d54-9da0-03ac3417327d\", \"fea887cf-d063-40ee-b78e-b2dd5dbc4af2\": \"fea887cf-d063-40ee-b78e-b2dd5dbc4af2\", \"68d9bf4f-9ed8-482f-857e-d72c93d6e774\": \"68d9bf4f-9ed8-482f-857e-d72c93d6e774\", \"252d5cc8-2e59-468a-8583-a95c33bb6dc2\": \"252d5cc8-2e59-468a-8583-a95c33bb6dc2\", \"1e182d65-3278-4626-8bec-4e8bb469461f\": \"1e182d65-3278-4626-8bec-4e8bb469461f\", \"461f2408-f095-4456-9794-086ec0e8a76b\": \"461f2408-f095-4456-9794-086ec0e8a76b\", \"78ee597c-11b5-43a5-b235-77ba2b5a80c0\": \"78ee597c-11b5-43a5-b235-77ba2b5a80c0\", \"a4cd941a-edcc-466d-8520-a51341952728\": \"a4cd941a-edcc-466d-8520-a51341952728\", \"53e90676-4854-4491-8dec-12f8fa47119e\": \"53e90676-4854-4491-8dec-12f8fa47119e\", \"911c663e-dcbe-438d-953d-8c6f58132522\": \"911c663e-dcbe-438d-953d-8c6f58132522\", \"399cf741-31b4-4561-9d61-78f9a7870bef\": \"399cf741-31b4-4561-9d61-78f9a7870bef\", \"800142ff-7684-4f77-a942-df706dac8bce\": \"800142ff-7684-4f77-a942-df706dac8bce\", \"a6b8b931-1f15-4b73-ac3d-7ba9bf55744c\": \"a6b8b931-1f15-4b73-ac3d-7ba9bf55744c\", \"c6a45a27-f159-4b9e-b446-fbafac5dd84f\": \"c6a45a27-f159-4b9e-b446-fbafac5dd84f\", \"d6a35b3c-98d2-462f-8d2a-f537b51c6df4\": \"d6a35b3c-98d2-462f-8d2a-f537b51c6df4\", \"bbb3e7f9-4748-44bd-9a9a-bf12cc0fa374\": \"bbb3e7f9-4748-44bd-9a9a-bf12cc0fa374\", \"9f24e144-f567-46d0-9e8c-f85f4e66ffca\": \"9f24e144-f567-46d0-9e8c-f85f4e66ffca\", \"a5d8a041-ebb0-439e-a4ac-0fcc0841f304\": \"a5d8a041-ebb0-439e-a4ac-0fcc0841f304\", \"d06a2707-7dd0-42a9-900b-f67b85319e38\": \"d06a2707-7dd0-42a9-900b-f67b85319e38\", \"69a6e0ad-b969-4fcc-b712-78ff9220a227\": \"69a6e0ad-b969-4fcc-b712-78ff9220a227\", \"dec29423-c682-4da7-bd68-3badbde6e38d\": \"dec29423-c682-4da7-bd68-3badbde6e38d\", \"872ebe7a-e729-4933-b465-de1db30e4ee4\": \"872ebe7a-e729-4933-b465-de1db30e4ee4\", \"6c826a5e-957c-4506-aa42-3e93f5888f50\": \"6c826a5e-957c-4506-aa42-3e93f5888f50\", \"46b0437b-6327-4e69-9826-d2494bb43f98\": \"46b0437b-6327-4e69-9826-d2494bb43f98\", \"82e2f4c8-0009-4504-9393-703ada46c88f\": \"82e2f4c8-0009-4504-9393-703ada46c88f\", \"0d099488-4ce1-40a5-bcf6-05c6fb0b15c2\": \"0d099488-4ce1-40a5-bcf6-05c6fb0b15c2\", \"376a5e26-526d-4393-9c85-2c82a4ea6524\": \"376a5e26-526d-4393-9c85-2c82a4ea6524\", \"062e9bb3-423c-422f-8725-19c75caa063f\": \"062e9bb3-423c-422f-8725-19c75caa063f\", \"2aaf6e8e-aabf-48dc-98e2-cd4db6e48652\": \"2aaf6e8e-aabf-48dc-98e2-cd4db6e48652\", \"ee61b73e-a30d-4200-9609-00947fc260bf\": \"ee61b73e-a30d-4200-9609-00947fc260bf\", \"c5de8191-0d00-4cab-be86-c7d421f0e552\": \"c5de8191-0d00-4cab-be86-c7d421f0e552\", \"edd0e35b-c4f7-4061-84ce-50ee4e8a6fe0\": \"edd0e35b-c4f7-4061-84ce-50ee4e8a6fe0\", \"9889a92c-e6da-4de3-acce-1107bb6dc377\": \"9889a92c-e6da-4de3-acce-1107bb6dc377\", \"f8bd23b8-ce39-4f55-95b9-4233630bf156\": \"f8bd23b8-ce39-4f55-95b9-4233630bf156\", \"059521f2-e734-4caf-8af6-8d2bee7a3d7f\": \"059521f2-e734-4caf-8af6-8d2bee7a3d7f\", \"f36c1a2c-d170-4b30-96f3-18e25984c85d\": \"f36c1a2c-d170-4b30-96f3-18e25984c85d\", \"c8a98b11-7fe5-46e1-b162-cddc8e9ebd8b\": \"c8a98b11-7fe5-46e1-b162-cddc8e9ebd8b\", \"40b28347-ec98-4e8f-afdf-48fdc06c6c4c\": \"40b28347-ec98-4e8f-afdf-48fdc06c6c4c\", \"718860fe-aee3-49aa-94f7-d494ccbcabef\": \"718860fe-aee3-49aa-94f7-d494ccbcabef\", \"96248987-3e1c-41a5-acbf-72bff3743839\": \"96248987-3e1c-41a5-acbf-72bff3743839\", \"820e7f31-75c5-4bc3-951d-c7b1492086ec\": \"820e7f31-75c5-4bc3-951d-c7b1492086ec\", \"1a0f1bbf-8aa6-480c-af4a-8ee4c5532876\": \"1a0f1bbf-8aa6-480c-af4a-8ee4c5532876\", \"3b7ade87-33d6-4b59-9353-457de126c3e1\": \"3b7ade87-33d6-4b59-9353-457de126c3e1\", \"4139e208-d3fd-463c-8b60-05e46c6dc009\": \"4139e208-d3fd-463c-8b60-05e46c6dc009\", \"125067c4-ee6a-4379-bc0b-fc2daf453dbd\": \"125067c4-ee6a-4379-bc0b-fc2daf453dbd\", \"2421b262-b3e8-4578-a640-9ffa5457ce55\": \"2421b262-b3e8-4578-a640-9ffa5457ce55\", \"5422801f-5028-44e3-aac3-ded06ae381eb\": \"5422801f-5028-44e3-aac3-ded06ae381eb\", \"348fa801-bdc0-42e9-91ac-e78a0c5cee8a\": \"348fa801-bdc0-42e9-91ac-e78a0c5cee8a\", \"751806ba-fe9c-47a1-9b9d-0a95ee3f072c\": \"751806ba-fe9c-47a1-9b9d-0a95ee3f072c\", \"79045798-2a15-4cdf-85a3-6337c0c150d8\": \"79045798-2a15-4cdf-85a3-6337c0c150d8\", \"5d74614b-5058-49ef-893e-5c86feed2d3e\": \"5d74614b-5058-49ef-893e-5c86feed2d3e\", \"ec582e0f-784f-40a5-a466-1aaac7c5eb47\": \"ec582e0f-784f-40a5-a466-1aaac7c5eb47\", \"8344ca7d-4cd7-4fdc-86d8-7e692824b317\": \"8344ca7d-4cd7-4fdc-86d8-7e692824b317\", \"7eebe43e-6862-4786-b7e5-c1a57d4fbc22\": \"7eebe43e-6862-4786-b7e5-c1a57d4fbc22\", \"ef3cbf2a-0323-48d6-adc9-839b0cec66c8\": \"ef3cbf2a-0323-48d6-adc9-839b0cec66c8\", \"2e3c702a-4b28-4d09-bec5-b4eedb0f449e\": \"2e3c702a-4b28-4d09-bec5-b4eedb0f449e\", \"70521719-ae02-4ee2-aaa5-05ce51d17953\": \"70521719-ae02-4ee2-aaa5-05ce51d17953\", \"4da1ac66-918a-4902-817f-1e0145da5c39\": \"4da1ac66-918a-4902-817f-1e0145da5c39\", \"2a22d6f9-aef1-492d-8966-dcc0276bf5a0\": \"2a22d6f9-aef1-492d-8966-dcc0276bf5a0\", \"de879882-1fcf-497d-9d16-2552f934ebda\": \"de879882-1fcf-497d-9d16-2552f934ebda\", \"ba919c7f-41ff-45de-a703-68e4b08245f0\": \"ba919c7f-41ff-45de-a703-68e4b08245f0\", \"b4ef9922-8a37-4250-ae82-7afca1355f7b\": \"b4ef9922-8a37-4250-ae82-7afca1355f7b\", \"2108d5a8-e98d-4f86-8922-d020996f70eb\": \"2108d5a8-e98d-4f86-8922-d020996f70eb\", \"5f6a6b97-ac82-48d6-92db-616bc0d6d9f7\": \"5f6a6b97-ac82-48d6-92db-616bc0d6d9f7\", \"3ee10ba7-48da-4e2f-943b-4907cd160ef0\": \"3ee10ba7-48da-4e2f-943b-4907cd160ef0\", \"bfb3c2f2-4cae-4491-904e-b13292ff89bd\": \"bfb3c2f2-4cae-4491-904e-b13292ff89bd\", \"bd3f1951-9db2-48ea-a7a5-24eda8962736\": \"bd3f1951-9db2-48ea-a7a5-24eda8962736\", \"ec313f78-4a44-4662-a662-e3d328c92983\": \"ec313f78-4a44-4662-a662-e3d328c92983\", \"36ba93d8-f818-4ba6-a8ab-47e82701ec64\": \"36ba93d8-f818-4ba6-a8ab-47e82701ec64\", \"d85287ec-7ae8-435f-9f60-0b8bafc091b7\": \"d85287ec-7ae8-435f-9f60-0b8bafc091b7\", \"929fe17a-e4b1-4485-8495-ccddc05ecb85\": \"929fe17a-e4b1-4485-8495-ccddc05ecb85\", \"4f8987e2-0266-4936-8777-b57224e7e888\": \"4f8987e2-0266-4936-8777-b57224e7e888\", \"197f1d66-f717-4051-b09f-b6d2a9382789\": \"197f1d66-f717-4051-b09f-b6d2a9382789\", \"c9a6a8f1-9784-45b0-aca5-4f4cdf7463b3\": \"c9a6a8f1-9784-45b0-aca5-4f4cdf7463b3\", \"7560a71f-0fc9-459c-934c-f75b37e0809f\": \"7560a71f-0fc9-459c-934c-f75b37e0809f\", \"ce3cb3b0-f059-4a13-9708-1dfcfad1d505\": \"ce3cb3b0-f059-4a13-9708-1dfcfad1d505\", \"26d70240-3004-40bd-bb44-2e99a921917c\": \"26d70240-3004-40bd-bb44-2e99a921917c\", \"1dd33758-f5df-4202-bd01-408c05f0c98b\": \"1dd33758-f5df-4202-bd01-408c05f0c98b\", \"f4b032c7-bafe-496e-a91a-7532415dc651\": \"f4b032c7-bafe-496e-a91a-7532415dc651\", \"2255ec4a-1aed-4afb-a456-4afd215f1981\": \"2255ec4a-1aed-4afb-a456-4afd215f1981\", \"0e5b4d96-afb6-40a8-a5be-294805c64d3f\": \"0e5b4d96-afb6-40a8-a5be-294805c64d3f\", \"8ba0416b-f68a-4020-8f5e-0b54f0ee601f\": \"8ba0416b-f68a-4020-8f5e-0b54f0ee601f\", \"3d538447-e148-4052-bd6a-9ce29c0b30f7\": \"3d538447-e148-4052-bd6a-9ce29c0b30f7\", \"0775e2af-6fb1-47b7-aeb6-55e5761fdbeb\": \"0775e2af-6fb1-47b7-aeb6-55e5761fdbeb\", \"b332edc9-182f-438c-ae36-53bdd53339bb\": \"b332edc9-182f-438c-ae36-53bdd53339bb\", \"fdeb84de-5c93-4bc3-97af-cf1e5fc54b2f\": \"fdeb84de-5c93-4bc3-97af-cf1e5fc54b2f\", \"859ebd4d-b1f9-43c5-9e84-adfab8875b99\": \"859ebd4d-b1f9-43c5-9e84-adfab8875b99\", \"185902f4-933f-445a-94d9-96c14d295218\": \"185902f4-933f-445a-94d9-96c14d295218\", \"f134b9cf-64d8-4376-bf1b-6be7a9807cac\": \"f134b9cf-64d8-4376-bf1b-6be7a9807cac\", \"6eb8711b-799f-4a36-aa71-2d357621786b\": \"6eb8711b-799f-4a36-aa71-2d357621786b\", \"65a62575-9486-4776-b0a3-ffbf013dc3f7\": \"65a62575-9486-4776-b0a3-ffbf013dc3f7\", \"ee653d01-b32a-49ad-a59f-da81f9c6b9db\": \"ee653d01-b32a-49ad-a59f-da81f9c6b9db\", \"4276fc73-6f53-4cb2-9e57-a5f475ec1108\": \"4276fc73-6f53-4cb2-9e57-a5f475ec1108\", \"349772dd-190e-4886-b5e8-eb17d5c7370c\": \"349772dd-190e-4886-b5e8-eb17d5c7370c\", \"d18743de-3626-478d-ba7b-12f6d849d78a\": \"d18743de-3626-478d-ba7b-12f6d849d78a\", \"b84ac5ab-6a56-443b-bd3a-79545461a8ec\": \"b84ac5ab-6a56-443b-bd3a-79545461a8ec\", \"6b91208e-d832-4320-be56-5fd540c54272\": \"6b91208e-d832-4320-be56-5fd540c54272\", \"d399f63a-acd1-47bc-97d2-f68cee37eeeb\": \"d399f63a-acd1-47bc-97d2-f68cee37eeeb\", \"b9a808b0-f4ae-4c4d-a143-8ec4a06e6744\": \"b9a808b0-f4ae-4c4d-a143-8ec4a06e6744\", \"71372737-31f7-45e9-8db9-0d2dc7248886\": \"71372737-31f7-45e9-8db9-0d2dc7248886\", \"a7bf8328-1a68-4064-85a9-c969a91dcd4d\": \"a7bf8328-1a68-4064-85a9-c969a91dcd4d\", \"81dfe0b8-8793-40dd-a83e-ad821409e904\": \"81dfe0b8-8793-40dd-a83e-ad821409e904\", \"87826348-cf59-4f7e-9da5-59d493a95215\": \"87826348-cf59-4f7e-9da5-59d493a95215\", \"bd918fa5-b4cb-4347-b389-7735eb3eeb33\": \"bd918fa5-b4cb-4347-b389-7735eb3eeb33\", \"0260b144-895f-4616-b443-0197629475a6\": \"0260b144-895f-4616-b443-0197629475a6\", \"c6f2daee-c24b-4f62-9076-a094953050ab\": \"c6f2daee-c24b-4f62-9076-a094953050ab\", \"1d874f84-e2fb-4f3b-9680-c856d279b1ca\": \"1d874f84-e2fb-4f3b-9680-c856d279b1ca\", \"9a82ad6d-05b7-4d6a-acc8-3364fc5a009a\": \"9a82ad6d-05b7-4d6a-acc8-3364fc5a009a\"}, \"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