Spaces:
Sleeping
Sleeping
vasilee
commited on
Commit
•
d223d29
0
Parent(s):
Duplicate from vasilee/flan-alpaca-gpt4-xl
Browse files- .gitattributes +35 -0
- Dockerfile +20 -0
- README.md +12 -0
- flan-alpaca-gpt4-xl-ct2/.gitattributes +34 -0
- flan-alpaca-gpt4-xl-ct2/README.md +59 -0
- flan-alpaca-gpt4-xl-ct2/config.json +8 -0
- flan-alpaca-gpt4-xl-ct2/generation_config.json +7 -0
- flan-alpaca-gpt4-xl-ct2/model.bin +3 -0
- flan-alpaca-gpt4-xl-ct2/model.binZone.Identifier +4 -0
- flan-alpaca-gpt4-xl-ct2/shared_vocabulary.txt +0 -0
- flan-alpaca-gpt4-xl-ct2/special_tokens_map.json +107 -0
- flan-alpaca-gpt4-xl-ct2/spiece.model +3 -0
- flan-alpaca-gpt4-xl-ct2/spiece.modelZone.Identifier +4 -0
- flan-alpaca-gpt4-xl-ct2/tokenizer.json +0 -0
- flan-alpaca-gpt4-xl-ct2/tokenizer_config.json +112 -0
- main.py +105 -0
- multilingual-e5-base/config.json +26 -0
- multilingual-e5-base/pytorch_model.bin +3 -0
- multilingual-e5-base/special_tokens_map.json +15 -0
- multilingual-e5-base/tokenizer.json +3 -0
- multilingual-e5-base/tokenizer_config.json +19 -0
- requirements.txt +7 -0
- static/index.html +36 -0
- static/script.js +21 -0
- static/style.css +45 -0
.gitattributes
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
28 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
29 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
30 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
31 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
32 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
33 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
34 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
35 |
+
multilingual-e5-base/tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
Dockerfile
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
FROM python:3.9
|
2 |
+
|
3 |
+
WORKDIR /code
|
4 |
+
|
5 |
+
COPY ./* /code
|
6 |
+
|
7 |
+
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
|
8 |
+
|
9 |
+
RUN useradd -m -u 1000 user
|
10 |
+
|
11 |
+
USER user
|
12 |
+
|
13 |
+
ENV HOME=/home/user \
|
14 |
+
PATH=/home/user/.local/bin:$PATH
|
15 |
+
|
16 |
+
WORKDIR $HOME/app
|
17 |
+
|
18 |
+
COPY --chown=user . $HOME/app
|
19 |
+
|
20 |
+
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
|
README.md
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: flan-alpaca-gpt4-xl-ct2
|
3 |
+
emoji: 💻
|
4 |
+
colorFrom: yellow
|
5 |
+
colorTo: yellow
|
6 |
+
sdk: docker
|
7 |
+
pinned: false
|
8 |
+
app_port: 7860
|
9 |
+
duplicated_from: vasilee/flan-alpaca-gpt4-xl
|
10 |
+
---
|
11 |
+
|
12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
flan-alpaca-gpt4-xl-ct2/.gitattributes
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
28 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
29 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
30 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
31 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
32 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
33 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
34 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
flan-alpaca-gpt4-xl-ct2/README.md
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
license: apache-2.0
|
3 |
+
language:
|
4 |
+
- en
|
5 |
+
tags:
|
6 |
+
- ctranslate2
|
7 |
+
- flan-alpaca-gpt4-xl
|
8 |
+
- quantization
|
9 |
+
- int8
|
10 |
+
---
|
11 |
+
|
12 |
+
# Model Card for Flan-Alpaca-GPT4-XL Q8
|
13 |
+
|
14 |
+
The model is quantized version of the [declare-lab/flan-alpaca-gpt4-xl](https://huggingface.co/declare-lab/flan-alpaca-gpt4-xl) with int8 quantization.
|
15 |
+
|
16 |
+
## Model Details
|
17 |
+
|
18 |
+
### Model Description
|
19 |
+
|
20 |
+
The model being quantized using [CTranslate2](https://opennmt.net/CTranslate2/) with the following command:
|
21 |
+
|
22 |
+
```
|
23 |
+
ct2-transformers-converter --model declare-lab/flan-alpaca-gpt4-xl --output_dir declare-lab/flan-alpaca-gpt4-xl-ct2 --copy_files generation_config.json tokenizer.json tokenizer_config.json special_tokens_map.json spiece.model --quantization int8 --force --low_cpu_mem_usage
|
24 |
+
```
|
25 |
+
|
26 |
+
If you want to perform the quantization yourself, you need to install the following dependencies:
|
27 |
+
|
28 |
+
```
|
29 |
+
pip install -qU ctranslate2 transformers[torch] sentencepiece accelerate
|
30 |
+
```
|
31 |
+
|
32 |
+
- **Shared by:** Lim Chee Kin
|
33 |
+
- **License:** Apache 2.0
|
34 |
+
|
35 |
+
## How to Get Started with the Model
|
36 |
+
|
37 |
+
Use the code below to get started with the model.
|
38 |
+
|
39 |
+
```python
|
40 |
+
import ctranslate2
|
41 |
+
import transformers
|
42 |
+
|
43 |
+
translator = ctranslate2.Translator("limcheekin/flan-alpaca-gpt4-xl-ct2")
|
44 |
+
tokenizer = transformers.AutoTokenizer.from_pretrained("limcheekin/flan-alpaca-gpt4-xl-ct2")
|
45 |
+
|
46 |
+
input_text = "translate English to German: The house is wonderful."
|
47 |
+
input_tokens = tokenizer.convert_ids_to_tokens(tokenizer.encode(input_text))
|
48 |
+
|
49 |
+
results = translator.translate_batch([input_tokens])
|
50 |
+
|
51 |
+
output_tokens = results[0].hypotheses[0]
|
52 |
+
output_text = tokenizer.decode(tokenizer.convert_tokens_to_ids(output_tokens))
|
53 |
+
|
54 |
+
print(output_text)
|
55 |
+
```
|
56 |
+
|
57 |
+
The code is taken from https://opennmt.net/CTranslate2/guides/transformers.html#t5.
|
58 |
+
|
59 |
+
The key method of the code above is `translate_batch`, you can find out [its supported parameters here](https://opennmt.net/CTranslate2/python/ctranslate2.Translator.html#ctranslate2.Translator.translate_batch).
|
flan-alpaca-gpt4-xl-ct2/config.json
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"add_source_bos": false,
|
3 |
+
"add_source_eos": false,
|
4 |
+
"bos_token": "<pad>",
|
5 |
+
"decoder_start_token": "<pad>",
|
6 |
+
"eos_token": "</s>",
|
7 |
+
"unk_token": "<unk>"
|
8 |
+
}
|
flan-alpaca-gpt4-xl-ct2/generation_config.json
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"_from_model_config": true,
|
3 |
+
"decoder_start_token_id": 0,
|
4 |
+
"eos_token_id": 1,
|
5 |
+
"pad_token_id": 0,
|
6 |
+
"transformers_version": "4.28.1"
|
7 |
+
}
|
flan-alpaca-gpt4-xl-ct2/model.bin
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:e767c6025eefa8b28780bc6e9deb02a279af9d19428670014095d75fc42635c3
|
3 |
+
size 2855549640
|
flan-alpaca-gpt4-xl-ct2/model.binZone.Identifier
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[ZoneTransfer]
|
2 |
+
ZoneId=3
|
3 |
+
ReferrerUrl=https://huggingface.co/
|
4 |
+
HostUrl=https://cdn-lfs.huggingface.co/repos/50/8c/508cde3506e8192b9f04a25f20189a6fdf232c6cc13b588be56f723b71729a35/e767c6025eefa8b28780bc6e9deb02a279af9d19428670014095d75fc42635c3?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27model.bin%3B+filename%3D%22model.bin%22%3B&response-content-type=application%2Foctet-stream&Expires=1687044499&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jZG4tbGZzLmh1Z2dpbmdmYWNlLmNvL3JlcG9zLzUwLzhjLzUwOGNkZTM1MDZlODE5MmI5ZjA0YTI1ZjIwMTg5YTZmZGYyMzJjNmNjMTNiNTg4YmU1NmY3MjNiNzE3MjlhMzUvZTc2N2M2MDI1ZWVmYThiMjg3ODBiYzZlOWRlYjAyYTI3OWFmOWQxOTQyODY3MDAxNDA5NWQ3NWZjNDI2MzVjMz9yZXNwb25zZS1jb250ZW50LWRpc3Bvc2l0aW9uPSomcmVzcG9uc2UtY29udGVudC10eXBlPSoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2ODcwNDQ0OTl9fX1dfQ__&Signature=afGMYCWFYR2QRwbfCcB2%7ED6hLfGrvkCX1ZqNdRJYvcT2PeaH6w8tIDW8pPYasVuGBEKEzV5q6YYvg45Dfc9TZvogmZ52zma5fKcreVHs8gTe4tLBzgsKQ9ipPGEVV5HkZxoiRWrPupSa-gnZR52-TOR3IHGb7cx4GbkulGZRQWJgcruPWTh6jgrNZS8TLDkR4WRnlEoCeI3D3lvUeVS2bywhMRwP%7EmVGf2GKh2yLVbm30IarmvNzAemtMneVDC2fjcbjoJjvMeiPm6T46fOOQJPQRACyFWB5BHiu2Qq%7EM8dh%7Eaaq4raFp8RIA0Jsijqrrf7YfQhf3XUW8kzs9oczYg__&Key-Pair-Id=KVTP0A1DKRTAX
|
flan-alpaca-gpt4-xl-ct2/shared_vocabulary.txt
ADDED
The diff for this file is too large to render.
See raw diff
|
|
flan-alpaca-gpt4-xl-ct2/special_tokens_map.json
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"additional_special_tokens": [
|
3 |
+
"<extra_id_0>",
|
4 |
+
"<extra_id_1>",
|
5 |
+
"<extra_id_2>",
|
6 |
+
"<extra_id_3>",
|
7 |
+
"<extra_id_4>",
|
8 |
+
"<extra_id_5>",
|
9 |
+
"<extra_id_6>",
|
10 |
+
"<extra_id_7>",
|
11 |
+
"<extra_id_8>",
|
12 |
+
"<extra_id_9>",
|
13 |
+
"<extra_id_10>",
|
14 |
+
"<extra_id_11>",
|
15 |
+
"<extra_id_12>",
|
16 |
+
"<extra_id_13>",
|
17 |
+
"<extra_id_14>",
|
18 |
+
"<extra_id_15>",
|
19 |
+
"<extra_id_16>",
|
20 |
+
"<extra_id_17>",
|
21 |
+
"<extra_id_18>",
|
22 |
+
"<extra_id_19>",
|
23 |
+
"<extra_id_20>",
|
24 |
+
"<extra_id_21>",
|
25 |
+
"<extra_id_22>",
|
26 |
+
"<extra_id_23>",
|
27 |
+
"<extra_id_24>",
|
28 |
+
"<extra_id_25>",
|
29 |
+
"<extra_id_26>",
|
30 |
+
"<extra_id_27>",
|
31 |
+
"<extra_id_28>",
|
32 |
+
"<extra_id_29>",
|
33 |
+
"<extra_id_30>",
|
34 |
+
"<extra_id_31>",
|
35 |
+
"<extra_id_32>",
|
36 |
+
"<extra_id_33>",
|
37 |
+
"<extra_id_34>",
|
38 |
+
"<extra_id_35>",
|
39 |
+
"<extra_id_36>",
|
40 |
+
"<extra_id_37>",
|
41 |
+
"<extra_id_38>",
|
42 |
+
"<extra_id_39>",
|
43 |
+
"<extra_id_40>",
|
44 |
+
"<extra_id_41>",
|
45 |
+
"<extra_id_42>",
|
46 |
+
"<extra_id_43>",
|
47 |
+
"<extra_id_44>",
|
48 |
+
"<extra_id_45>",
|
49 |
+
"<extra_id_46>",
|
50 |
+
"<extra_id_47>",
|
51 |
+
"<extra_id_48>",
|
52 |
+
"<extra_id_49>",
|
53 |
+
"<extra_id_50>",
|
54 |
+
"<extra_id_51>",
|
55 |
+
"<extra_id_52>",
|
56 |
+
"<extra_id_53>",
|
57 |
+
"<extra_id_54>",
|
58 |
+
"<extra_id_55>",
|
59 |
+
"<extra_id_56>",
|
60 |
+
"<extra_id_57>",
|
61 |
+
"<extra_id_58>",
|
62 |
+
"<extra_id_59>",
|
63 |
+
"<extra_id_60>",
|
64 |
+
"<extra_id_61>",
|
65 |
+
"<extra_id_62>",
|
66 |
+
"<extra_id_63>",
|
67 |
+
"<extra_id_64>",
|
68 |
+
"<extra_id_65>",
|
69 |
+
"<extra_id_66>",
|
70 |
+
"<extra_id_67>",
|
71 |
+
"<extra_id_68>",
|
72 |
+
"<extra_id_69>",
|
73 |
+
"<extra_id_70>",
|
74 |
+
"<extra_id_71>",
|
75 |
+
"<extra_id_72>",
|
76 |
+
"<extra_id_73>",
|
77 |
+
"<extra_id_74>",
|
78 |
+
"<extra_id_75>",
|
79 |
+
"<extra_id_76>",
|
80 |
+
"<extra_id_77>",
|
81 |
+
"<extra_id_78>",
|
82 |
+
"<extra_id_79>",
|
83 |
+
"<extra_id_80>",
|
84 |
+
"<extra_id_81>",
|
85 |
+
"<extra_id_82>",
|
86 |
+
"<extra_id_83>",
|
87 |
+
"<extra_id_84>",
|
88 |
+
"<extra_id_85>",
|
89 |
+
"<extra_id_86>",
|
90 |
+
"<extra_id_87>",
|
91 |
+
"<extra_id_88>",
|
92 |
+
"<extra_id_89>",
|
93 |
+
"<extra_id_90>",
|
94 |
+
"<extra_id_91>",
|
95 |
+
"<extra_id_92>",
|
96 |
+
"<extra_id_93>",
|
97 |
+
"<extra_id_94>",
|
98 |
+
"<extra_id_95>",
|
99 |
+
"<extra_id_96>",
|
100 |
+
"<extra_id_97>",
|
101 |
+
"<extra_id_98>",
|
102 |
+
"<extra_id_99>"
|
103 |
+
],
|
104 |
+
"eos_token": "</s>",
|
105 |
+
"pad_token": "<pad>",
|
106 |
+
"unk_token": "<unk>"
|
107 |
+
}
|
flan-alpaca-gpt4-xl-ct2/spiece.model
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d60acb128cf7b7f2536e8f38a5b18a05535c9e14c7a355904270e15b0945ea86
|
3 |
+
size 791656
|
flan-alpaca-gpt4-xl-ct2/spiece.modelZone.Identifier
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[ZoneTransfer]
|
2 |
+
ZoneId=3
|
3 |
+
ReferrerUrl=https://huggingface.co/
|
4 |
+
HostUrl=https://cdn-lfs.huggingface.co/repos/50/8c/508cde3506e8192b9f04a25f20189a6fdf232c6cc13b588be56f723b71729a35/d60acb128cf7b7f2536e8f38a5b18a05535c9e14c7a355904270e15b0945ea86?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27spiece.model%3B+filename%3D%22spiece.model%22%3B&Expires=1687044483&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jZG4tbGZzLmh1Z2dpbmdmYWNlLmNvL3JlcG9zLzUwLzhjLzUwOGNkZTM1MDZlODE5MmI5ZjA0YTI1ZjIwMTg5YTZmZGYyMzJjNmNjMTNiNTg4YmU1NmY3MjNiNzE3MjlhMzUvZDYwYWNiMTI4Y2Y3YjdmMjUzNmU4ZjM4YTViMThhMDU1MzVjOWUxNGM3YTM1NTkwNDI3MGUxNWIwOTQ1ZWE4Nj9yZXNwb25zZS1jb250ZW50LWRpc3Bvc2l0aW9uPSoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2ODcwNDQ0ODN9fX1dfQ__&Signature=KG7Nhu%7EKGmLBOqjQOQATbMpAQOqFfnxlwvIlRlIW4MkTVEKhWZa6UdFdaK9LLZU0EAVInTlu5KM5oLI3KWO4HTijSFxa9yMt8va3EWqWGgLW3oEf4KPlYSqORPbbBy%7EPEHys6x73T-DDmtQ3vFfZXPhoJTvtztnlVi7d-tAdmHfxEoGrru-Dp1VUMpLpZLnpZqOMcUWa%7EmNX1n2wH20YBwWI%7EtNn7Q4xRzEcRfd%7Eojnwp6qXgEdMFdlImdX0Q%7EmVdJ57QXc1U1ox8LweRWfw4At3UYt2GgFrHTrv2JFQjbcRXTsj22ZYstqdAiLZfQXjQudpU5r8GV1n4DfOO3kf-w__&Key-Pair-Id=KVTP0A1DKRTAX
|
flan-alpaca-gpt4-xl-ct2/tokenizer.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
flan-alpaca-gpt4-xl-ct2/tokenizer_config.json
ADDED
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"additional_special_tokens": [
|
3 |
+
"<extra_id_0>",
|
4 |
+
"<extra_id_1>",
|
5 |
+
"<extra_id_2>",
|
6 |
+
"<extra_id_3>",
|
7 |
+
"<extra_id_4>",
|
8 |
+
"<extra_id_5>",
|
9 |
+
"<extra_id_6>",
|
10 |
+
"<extra_id_7>",
|
11 |
+
"<extra_id_8>",
|
12 |
+
"<extra_id_9>",
|
13 |
+
"<extra_id_10>",
|
14 |
+
"<extra_id_11>",
|
15 |
+
"<extra_id_12>",
|
16 |
+
"<extra_id_13>",
|
17 |
+
"<extra_id_14>",
|
18 |
+
"<extra_id_15>",
|
19 |
+
"<extra_id_16>",
|
20 |
+
"<extra_id_17>",
|
21 |
+
"<extra_id_18>",
|
22 |
+
"<extra_id_19>",
|
23 |
+
"<extra_id_20>",
|
24 |
+
"<extra_id_21>",
|
25 |
+
"<extra_id_22>",
|
26 |
+
"<extra_id_23>",
|
27 |
+
"<extra_id_24>",
|
28 |
+
"<extra_id_25>",
|
29 |
+
"<extra_id_26>",
|
30 |
+
"<extra_id_27>",
|
31 |
+
"<extra_id_28>",
|
32 |
+
"<extra_id_29>",
|
33 |
+
"<extra_id_30>",
|
34 |
+
"<extra_id_31>",
|
35 |
+
"<extra_id_32>",
|
36 |
+
"<extra_id_33>",
|
37 |
+
"<extra_id_34>",
|
38 |
+
"<extra_id_35>",
|
39 |
+
"<extra_id_36>",
|
40 |
+
"<extra_id_37>",
|
41 |
+
"<extra_id_38>",
|
42 |
+
"<extra_id_39>",
|
43 |
+
"<extra_id_40>",
|
44 |
+
"<extra_id_41>",
|
45 |
+
"<extra_id_42>",
|
46 |
+
"<extra_id_43>",
|
47 |
+
"<extra_id_44>",
|
48 |
+
"<extra_id_45>",
|
49 |
+
"<extra_id_46>",
|
50 |
+
"<extra_id_47>",
|
51 |
+
"<extra_id_48>",
|
52 |
+
"<extra_id_49>",
|
53 |
+
"<extra_id_50>",
|
54 |
+
"<extra_id_51>",
|
55 |
+
"<extra_id_52>",
|
56 |
+
"<extra_id_53>",
|
57 |
+
"<extra_id_54>",
|
58 |
+
"<extra_id_55>",
|
59 |
+
"<extra_id_56>",
|
60 |
+
"<extra_id_57>",
|
61 |
+
"<extra_id_58>",
|
62 |
+
"<extra_id_59>",
|
63 |
+
"<extra_id_60>",
|
64 |
+
"<extra_id_61>",
|
65 |
+
"<extra_id_62>",
|
66 |
+
"<extra_id_63>",
|
67 |
+
"<extra_id_64>",
|
68 |
+
"<extra_id_65>",
|
69 |
+
"<extra_id_66>",
|
70 |
+
"<extra_id_67>",
|
71 |
+
"<extra_id_68>",
|
72 |
+
"<extra_id_69>",
|
73 |
+
"<extra_id_70>",
|
74 |
+
"<extra_id_71>",
|
75 |
+
"<extra_id_72>",
|
76 |
+
"<extra_id_73>",
|
77 |
+
"<extra_id_74>",
|
78 |
+
"<extra_id_75>",
|
79 |
+
"<extra_id_76>",
|
80 |
+
"<extra_id_77>",
|
81 |
+
"<extra_id_78>",
|
82 |
+
"<extra_id_79>",
|
83 |
+
"<extra_id_80>",
|
84 |
+
"<extra_id_81>",
|
85 |
+
"<extra_id_82>",
|
86 |
+
"<extra_id_83>",
|
87 |
+
"<extra_id_84>",
|
88 |
+
"<extra_id_85>",
|
89 |
+
"<extra_id_86>",
|
90 |
+
"<extra_id_87>",
|
91 |
+
"<extra_id_88>",
|
92 |
+
"<extra_id_89>",
|
93 |
+
"<extra_id_90>",
|
94 |
+
"<extra_id_91>",
|
95 |
+
"<extra_id_92>",
|
96 |
+
"<extra_id_93>",
|
97 |
+
"<extra_id_94>",
|
98 |
+
"<extra_id_95>",
|
99 |
+
"<extra_id_96>",
|
100 |
+
"<extra_id_97>",
|
101 |
+
"<extra_id_98>",
|
102 |
+
"<extra_id_99>"
|
103 |
+
],
|
104 |
+
"clean_up_tokenization_spaces": true,
|
105 |
+
"eos_token": "</s>",
|
106 |
+
"extra_ids": 100,
|
107 |
+
"model_max_length": 512,
|
108 |
+
"pad_token": "<pad>",
|
109 |
+
"sp_model_kwargs": {},
|
110 |
+
"tokenizer_class": "T5Tokenizer",
|
111 |
+
"unk_token": "<unk>"
|
112 |
+
}
|
main.py
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from torch import Tensor
|
2 |
+
from transformers import AutoTokenizer, AutoModel
|
3 |
+
from ctranslate2 import Translator
|
4 |
+
from typing import Union
|
5 |
+
|
6 |
+
from fastapi import FastAPI
|
7 |
+
from pydantic import BaseModel
|
8 |
+
|
9 |
+
|
10 |
+
def average_pool(last_hidden_states: Tensor,
|
11 |
+
attention_mask: Tensor) -> Tensor:
|
12 |
+
last_hidden = last_hidden_states.masked_fill(
|
13 |
+
~attention_mask[..., None].bool(), 0.0)
|
14 |
+
return last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]
|
15 |
+
|
16 |
+
|
17 |
+
# text-ada replacement
|
18 |
+
embeddingTokenizer = AutoTokenizer.from_pretrained(
|
19 |
+
'./multilingual-e5-base')
|
20 |
+
embeddingModel = AutoModel.from_pretrained('./multilingual-e5-base')
|
21 |
+
|
22 |
+
# chatGpt replacement
|
23 |
+
inferenceTokenizer = AutoTokenizer.from_pretrained(
|
24 |
+
"./flan-alpaca-gpt4-xl-ct2")
|
25 |
+
inferenceTranslator = Translator(
|
26 |
+
"./flan-alpaca-gpt4-xl-ct2", compute_type="int8", device="cpu")
|
27 |
+
|
28 |
+
|
29 |
+
class EmbeddingRequest(BaseModel):
|
30 |
+
input: Union[str, None] = None
|
31 |
+
|
32 |
+
|
33 |
+
class TokensCountRequest(BaseModel):
|
34 |
+
input: Union[str, None] = None
|
35 |
+
|
36 |
+
|
37 |
+
class InferenceRequest(BaseModel):
|
38 |
+
input: Union[str, None] = None
|
39 |
+
max_length: Union[int, None] = 0
|
40 |
+
|
41 |
+
|
42 |
+
app = FastAPI()
|
43 |
+
|
44 |
+
|
45 |
+
@app.get("/")
|
46 |
+
async def root():
|
47 |
+
return {"message": "Hello World"}
|
48 |
+
|
49 |
+
|
50 |
+
@app.post("/text-embedding")
|
51 |
+
async def text_embedding(request: EmbeddingRequest):
|
52 |
+
input = request.input
|
53 |
+
|
54 |
+
# Process the input data
|
55 |
+
batch_dict = embeddingTokenizer([input], max_length=512,
|
56 |
+
padding=True, truncation=True, return_tensors='pt')
|
57 |
+
outputs = embeddingModel(**batch_dict)
|
58 |
+
embeddings = average_pool(outputs.last_hidden_state,
|
59 |
+
batch_dict['attention_mask'])
|
60 |
+
|
61 |
+
# create response
|
62 |
+
return {
|
63 |
+
'embedding': embeddings[0].tolist()
|
64 |
+
}
|
65 |
+
|
66 |
+
|
67 |
+
@app.post('/inference')
|
68 |
+
async def inference(request: InferenceRequest):
|
69 |
+
input_text = request.input
|
70 |
+
max_length = 256
|
71 |
+
try:
|
72 |
+
max_length = int(request.max_length)
|
73 |
+
max_length = min(1024, max_length)
|
74 |
+
except:
|
75 |
+
pass
|
76 |
+
|
77 |
+
# process request
|
78 |
+
input_tokens = inferenceTokenizer.convert_ids_to_tokens(
|
79 |
+
inferenceTokenizer.encode(input_text))
|
80 |
+
|
81 |
+
results = inferenceTranslator.translate_batch(
|
82 |
+
[input_tokens], beam_size=1, max_input_length=0, max_decoding_length=max_length, num_hypotheses=1, repetition_penalty=1.3, sampling_topk=40, sampling_temperature=0.7, use_vmap=False)
|
83 |
+
|
84 |
+
output_tokens = results[0].hypotheses[0]
|
85 |
+
output_text = inferenceTokenizer.decode(
|
86 |
+
inferenceTokenizer.convert_tokens_to_ids(output_tokens))
|
87 |
+
|
88 |
+
# create response
|
89 |
+
return {
|
90 |
+
'generated_text': output_text
|
91 |
+
}
|
92 |
+
|
93 |
+
|
94 |
+
@app.post('/tokens-count')
|
95 |
+
async def tokens_count(request: TokensCountRequest):
|
96 |
+
input_text = request.input
|
97 |
+
|
98 |
+
tokens = inferenceTokenizer.convert_ids_to_tokens(
|
99 |
+
inferenceTokenizer.encode(input_text))
|
100 |
+
|
101 |
+
# create response
|
102 |
+
return {
|
103 |
+
'tokens': tokens,
|
104 |
+
'total': len(tokens)
|
105 |
+
}
|
multilingual-e5-base/config.json
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"_name_or_path": "intfloat/multilingual-e5-base",
|
3 |
+
"architectures": ["XLMRobertaModel"],
|
4 |
+
"attention_probs_dropout_prob": 0.1,
|
5 |
+
"bos_token_id": 0,
|
6 |
+
"classifier_dropout": null,
|
7 |
+
"eos_token_id": 2,
|
8 |
+
"hidden_act": "gelu",
|
9 |
+
"hidden_dropout_prob": 0.1,
|
10 |
+
"hidden_size": 768,
|
11 |
+
"initializer_range": 0.02,
|
12 |
+
"intermediate_size": 3072,
|
13 |
+
"layer_norm_eps": 1e-5,
|
14 |
+
"max_position_embeddings": 514,
|
15 |
+
"model_type": "xlm-roberta",
|
16 |
+
"num_attention_heads": 12,
|
17 |
+
"num_hidden_layers": 12,
|
18 |
+
"output_past": true,
|
19 |
+
"pad_token_id": 1,
|
20 |
+
"position_embedding_type": "absolute",
|
21 |
+
"torch_dtype": "float32",
|
22 |
+
"transformers_version": "4.29.2",
|
23 |
+
"type_vocab_size": 1,
|
24 |
+
"use_cache": true,
|
25 |
+
"vocab_size": 250002
|
26 |
+
}
|
multilingual-e5-base/pytorch_model.bin
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:f061cb7641880f52895cbacab7c4ab39b0844e2e6b73794f2798de460d9fa418
|
3 |
+
size 1112242989
|
multilingual-e5-base/special_tokens_map.json
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"bos_token": "<s>",
|
3 |
+
"cls_token": "<s>",
|
4 |
+
"eos_token": "</s>",
|
5 |
+
"mask_token": {
|
6 |
+
"content": "<mask>",
|
7 |
+
"lstrip": true,
|
8 |
+
"normalized": false,
|
9 |
+
"rstrip": false,
|
10 |
+
"single_word": false
|
11 |
+
},
|
12 |
+
"pad_token": "<pad>",
|
13 |
+
"sep_token": "</s>",
|
14 |
+
"unk_token": "<unk>"
|
15 |
+
}
|
multilingual-e5-base/tokenizer.json
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:62c24cdc13d4c9952d63718d6c9fa4c287974249e16b7ade6d5a85e7bbb75626
|
3 |
+
size 17082660
|
multilingual-e5-base/tokenizer_config.json
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"bos_token": "<s>",
|
3 |
+
"clean_up_tokenization_spaces": true,
|
4 |
+
"cls_token": "<s>",
|
5 |
+
"eos_token": "</s>",
|
6 |
+
"mask_token": {
|
7 |
+
"__type": "AddedToken",
|
8 |
+
"content": "<mask>",
|
9 |
+
"lstrip": true,
|
10 |
+
"normalized": true,
|
11 |
+
"rstrip": false,
|
12 |
+
"single_word": false
|
13 |
+
},
|
14 |
+
"model_max_length": 512,
|
15 |
+
"pad_token": "<pad>",
|
16 |
+
"sep_token": "</s>",
|
17 |
+
"tokenizer_class": "XLMRobertaTokenizer",
|
18 |
+
"unk_token": "<unk>"
|
19 |
+
}
|
requirements.txt
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
ctranslate2==3.14.0
|
2 |
+
fastapi==0.96.0
|
3 |
+
pydantic==1.10.8
|
4 |
+
torch==2.0.1
|
5 |
+
transformers==4.29.2
|
6 |
+
ctranslate2==3.14.0
|
7 |
+
uvicorn[standard]==0.17.*
|
static/index.html
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html lang="en">
|
3 |
+
<head>
|
4 |
+
<meta charset="UTF-8" />
|
5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
6 |
+
<title>Fast API 🤗 Space served with Uvicorn</title>
|
7 |
+
<link rel="stylesheet" href="style.css" />
|
8 |
+
<script type="module" src="script.js"></script>
|
9 |
+
</head>
|
10 |
+
<body>
|
11 |
+
<main>
|
12 |
+
<section id="text-gen">
|
13 |
+
<h1>Text generation using Flan T5</h1>
|
14 |
+
<p>
|
15 |
+
Model:
|
16 |
+
<a
|
17 |
+
href="https://huggingface.co/google/flan-t5-small"
|
18 |
+
rel="noreferrer"
|
19 |
+
target="_blank"
|
20 |
+
>google/flan-t5-small</a
|
21 |
+
>
|
22 |
+
</p>
|
23 |
+
<form class="text-gen-form">
|
24 |
+
<label for="text-gen-input">Text prompt</label>
|
25 |
+
<input
|
26 |
+
id="text-gen-input"
|
27 |
+
type="text"
|
28 |
+
value="English: Translate There are many ducks. German:"
|
29 |
+
/>
|
30 |
+
<button id="text-gen-submit">Submit</button>
|
31 |
+
<p class="text-gen-output"></p>
|
32 |
+
</form>
|
33 |
+
</section>
|
34 |
+
</main>
|
35 |
+
</body>
|
36 |
+
</html>
|
static/script.js
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const textGenForm = document.querySelector('.text-gen-form');
|
2 |
+
|
3 |
+
const translateText = async (text) => {
|
4 |
+
const inferResponse = await fetch(`infer_t5?input=${text}`);
|
5 |
+
const inferJson = await inferResponse.json();
|
6 |
+
|
7 |
+
return inferJson.output;
|
8 |
+
};
|
9 |
+
|
10 |
+
textGenForm.addEventListener('submit', async (event) => {
|
11 |
+
event.preventDefault();
|
12 |
+
|
13 |
+
const textGenInput = document.getElementById('text-gen-input');
|
14 |
+
const textGenParagraph = document.querySelector('.text-gen-output');
|
15 |
+
|
16 |
+
try {
|
17 |
+
textGenParagraph.textContent = await translateText(textGenInput.value);
|
18 |
+
} catch (err) {
|
19 |
+
console.error(err);
|
20 |
+
}
|
21 |
+
});
|
static/style.css
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
body {
|
2 |
+
--text: hsl(0 0% 15%);
|
3 |
+
padding: 2.5rem;
|
4 |
+
font-family: sans-serif;
|
5 |
+
color: var(--text);
|
6 |
+
}
|
7 |
+
|
8 |
+
body.dark-theme {
|
9 |
+
--text: hsl(0 0% 90%);
|
10 |
+
background-color: hsl(223 39% 7%);
|
11 |
+
}
|
12 |
+
|
13 |
+
main {
|
14 |
+
max-width: 80rem;
|
15 |
+
text-align: center;
|
16 |
+
}
|
17 |
+
|
18 |
+
section {
|
19 |
+
display: flex;
|
20 |
+
flex-direction: column;
|
21 |
+
align-items: center;
|
22 |
+
}
|
23 |
+
|
24 |
+
a {
|
25 |
+
color: var(--text);
|
26 |
+
}
|
27 |
+
|
28 |
+
form {
|
29 |
+
width: 30rem;
|
30 |
+
margin: 0 auto;
|
31 |
+
}
|
32 |
+
|
33 |
+
input {
|
34 |
+
width: 100%;
|
35 |
+
}
|
36 |
+
|
37 |
+
button {
|
38 |
+
cursor: pointer;
|
39 |
+
}
|
40 |
+
|
41 |
+
.text-gen-output {
|
42 |
+
min-height: 1.2rem;
|
43 |
+
margin: 1rem;
|
44 |
+
border: 0.5px solid grey;
|
45 |
+
}
|