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