billusanda007 commited on
Commit
1b3a7eb
·
verified ·
1 Parent(s): 3b1154f

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +162 -0
  2. requirements.txt +207 -0
app.py ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from transformers import GPT2LMHeadModel, GPT2Tokenizer
3
+ import gradio as gr
4
+ import pandas as pd
5
+ from collections import Counter, defaultdict
6
+ import os
7
+ from huggingface_hub import login
8
+
9
+ # Get the token from the environment variable
10
+ api_token = os.getenv('HF_TOKEN')
11
+
12
+ # Load pre-trained model and tokenizer
13
+ model_name = "gpt2"
14
+ model = GPT2LMHeadModel.from_pretrained(model_name)
15
+ tokenizer = GPT2Tokenizer.from_pretrained(model_name)
16
+ model.eval()
17
+
18
+ def create_ngrams(tokens, n):
19
+ return [tuple(tokens[i:i+n]) for i in range(len(tokens)-n+1)]
20
+
21
+ def calculate_probabilities(four_gram_counts, three_gram_counts):
22
+ probabilities = defaultdict(lambda: defaultdict(float))
23
+ for four_gram, count in four_gram_counts.items():
24
+ three_gram = four_gram[:-1]
25
+ probabilities[three_gram][four_gram[-1]] = count / three_gram_counts[three_gram]
26
+ return probabilities
27
+
28
+ def kneser_ney_smoothing(ngram_counts, lower_order_counts, discount=0.75):
29
+ continuation_counts = Counter()
30
+ lower_counts = Counter()
31
+
32
+ for ngram in ngram_counts:
33
+ lower_counts[ngram[1:]] += 1
34
+ continuation_counts[ngram[1:]] += 1
35
+
36
+ def continuation_probability(word):
37
+ return continuation_counts[word] / sum(continuation_counts.values())
38
+
39
+ probabilities = defaultdict(lambda: defaultdict(float))
40
+ for ngram, count in ngram_counts.items():
41
+ lower_ngram = ngram[:-1]
42
+ discounted_count = max(count - discount, 0)
43
+ lambda_factor = (discount / lower_order_counts[lower_ngram]) * len(continuation_counts)
44
+ probabilities[lower_ngram][ngram[-1]] = (discounted_count / lower_order_counts[lower_ngram]) + lambda_factor * continuation_probability(ngram[-1])
45
+
46
+ return probabilities
47
+
48
+ def generate_text_with_probs(initial_context, top_p, max_length, top_k):
49
+ input_ids = tokenizer.encode(initial_context, return_tensors="pt")
50
+ generated_text = initial_context
51
+ token_tables = []
52
+
53
+ with torch.no_grad():
54
+ for _ in range(max_length):
55
+ outputs = model(input_ids=input_ids)
56
+ next_token_logits = outputs.logits[:, -1, :]
57
+
58
+ # Apply top-p (nucleus) sampling
59
+ sorted_logits, sorted_indices = torch.sort(next_token_logits, descending=True)
60
+ cumulative_probs = torch.cumsum(torch.softmax(sorted_logits, dim=-1), dim=-1)
61
+ sorted_indices_to_remove = cumulative_probs > top_p
62
+ sorted_indices_to_remove[..., 1:] = sorted_indices_to_remove[..., :-1].clone()
63
+ sorted_indices_to_remove[..., 0] = 0
64
+
65
+ # Convert boolean mask to indices to set logits to -inf
66
+ indices_to_remove = sorted_indices[sorted_indices_to_remove]
67
+ next_token_logits[:, indices_to_remove] = -float('Inf')
68
+
69
+ # Compute probabilities
70
+ probabilities = torch.softmax(next_token_logits, dim=-1)
71
+
72
+ # Get the next token using multinomial sampling
73
+ next_token = torch.multinomial(probabilities, num_samples=1)
74
+
75
+ # Get next token and its probability
76
+ next_token_prob = probabilities[0, next_token].item()
77
+ next_token_text = tokenizer.decode(next_token.item())
78
+
79
+ # Get top tokens and their probabilities
80
+ top_tokens = sorted_indices[0, :top_k] # Get top k tokens
81
+ top_probs = probabilities[0, top_tokens]
82
+ top_token_probs = [(tokenizer.decode([token.item()]), prob.item()) for token, prob in zip(top_tokens, top_probs)]
83
+
84
+ # Create DataFrame for current token's top-k probabilities
85
+ df = pd.DataFrame(top_token_probs, columns=["Token", "Probability"])
86
+ df.index = df.index + 1 # Add numbering to the DataFrame
87
+ token_tables.append((f"Next token: {next_token_text} (Probability: {next_token_prob:.4f})", df))
88
+
89
+ # Add the next token to the input_ids
90
+ input_ids = torch.cat([input_ids, next_token], dim=-1)
91
+
92
+ if next_token.item() == tokenizer.eos_token_id:
93
+ break
94
+
95
+ # Decode the generated text
96
+ generated_text = tokenizer.decode(input_ids[0], skip_special_tokens=True)
97
+
98
+ return generated_text, token_tables
99
+
100
+ def predict_next_token_ngram(input_text, context_text, max_length):
101
+ context_tokens = tokenizer.tokenize(context_text)
102
+ four_grams = create_ngrams(context_tokens, 4)
103
+ four_gram_counts = Counter(four_grams)
104
+ three_gram_counts = Counter([gram[:-1] for gram in four_grams])
105
+ probabilities = calculate_probabilities(four_gram_counts, three_gram_counts)
106
+ probs = kneser_ney_smoothing(four_gram_counts, three_gram_counts)
107
+
108
+ input_tokens = tokenizer.tokenize(input_text)
109
+ generated_text = input_text
110
+ token_tables = []
111
+
112
+ if len(input_tokens) >= max_length:
113
+ generated_text = tokenizer.convert_tokens_to_string(input_tokens)
114
+ return generated_text, token_tables
115
+
116
+ while len(input_tokens) < max_length:
117
+ input_3_gram = tuple(input_tokens[-3:])
118
+ next_token_probs = probs.get(input_3_gram, {})
119
+ if not next_token_probs:
120
+ break
121
+ next_token = max(next_token_probs, key=next_token_probs.get)
122
+ input_tokens.append(next_token)
123
+
124
+ # Get top tokens and their probabilities
125
+ top_k = 4
126
+ top_k_tokens = sorted(next_token_probs.items(), key=lambda x: x[1], reverse=True)[:top_k]
127
+ top_k_tokens_df = pd.DataFrame(top_k_tokens, columns=["Token", "Probability"])
128
+ top_k_tokens_df.index = top_k_tokens_df.index + 1 # Add numbering to the DataFrame
129
+ top_k_tokens_df["Token"] = top_k_tokens_df["Token"].apply(lambda x: tokenizer.convert_tokens_to_string([x]))
130
+
131
+ token_tables.append((f"Next token: {next_token} (Predicted)", top_k_tokens_df))
132
+
133
+ generated_text = tokenizer.convert_tokens_to_string(input_tokens)
134
+ return generated_text, token_tables
135
+
136
+ def combined_model_predictions(context_text, initial_context, top_p, max_length, top_k):
137
+ generated_text, token_tables = generate_text_with_probs(initial_context, top_p, max_length, top_k)
138
+ ngram_generated_text, ngram_token_tables = predict_next_token_ngram(initial_context, context_text, max_length)
139
+
140
+ return generated_text, token_tables, ngram_generated_text, ngram_token_tables
141
+
142
+ iface = gr.Interface(
143
+ fn=combined_model_predictions,
144
+ inputs=[
145
+ gr.Textbox(lines=4, placeholder="Enter context for N-gram model..."),
146
+ gr.Textbox(lines=2, placeholder="Enter initial context here..."),
147
+ gr.Slider(0, 1, step=0.01, value=0.9, label="Top-p (nucleus) sampling"),
148
+ gr.Slider(1, 100, step=1, value=50, label="Max length"),
149
+ gr.Slider(1, 50, step=1, value=10, label="Top-k"), # Added Top-k slider
150
+ ],
151
+ outputs=[
152
+ gr.Textbox(label="Generated Text"),
153
+ gr.Dataframe(label="LLM Token Probabilities"), # Display DataFrame as output
154
+ gr.Textbox(label="N-gram Generated Text"),
155
+ gr.Dataframe(label="N-gram Token Predictions"), # Display N-gram model predictions
156
+ ],
157
+ title="Next Token Visualizer (GPT-2 - 124M param.)",
158
+ description="Generate text using GPT-2 with top-p (nucleus) sampling and see the probabilities of generated tokens in tables, along with N-gram model predictions.",
159
+ )
160
+
161
+ # Launch the Gradio app
162
+ iface.launch()
requirements.txt ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ absl-py==2.1.0
2
+ aiofiles==23.2.1
3
+ annotated-types==0.5.0
4
+ anyio @ file:///home/conda/feedstock_root/build_artifacts/anyio_1688651106312/work/dist
5
+ appnope @ file:///home/conda/feedstock_root/build_artifacts/appnope_1649077682618/work
6
+ argon2-cffi @ file:///home/conda/feedstock_root/build_artifacts/argon2-cffi_1640817743617/work
7
+ argon2-cffi-bindings @ file:///Users/runner/miniforge3/conda-bld/argon2-cffi-bindings_1666850912616/work
8
+ arrow @ file:///home/conda/feedstock_root/build_artifacts/arrow_1662382474514/work
9
+ asttokens @ file:///home/conda/feedstock_root/build_artifacts/asttokens_1670263926556/work
10
+ async-lru @ file:///home/conda/feedstock_root/build_artifacts/async-lru_1690563019058/work
11
+ attrs @ file:///home/conda/feedstock_root/build_artifacts/attrs_1683424013410/work
12
+ Babel @ file:///home/conda/feedstock_root/build_artifacts/babel_1677767029043/work
13
+ backcall @ file:///home/conda/feedstock_root/build_artifacts/backcall_1592338393461/work
14
+ backports.functools-lru-cache @ file:///home/conda/feedstock_root/build_artifacts/backports.functools_lru_cache_1687772187254/work
15
+ beautifulsoup4 @ file:///home/conda/feedstock_root/build_artifacts/beautifulsoup4_1680888073205/work
16
+ bitsandbytes==0.42.0
17
+ bleach @ file:///home/conda/feedstock_root/build_artifacts/bleach_1674535352125/work
18
+ blis==0.7.10
19
+ Brotli @ file:///Users/runner/miniforge3/conda-bld/brotli-split_1687884292427/work
20
+ cached-property @ file:///home/conda/feedstock_root/build_artifacts/cached_property_1615209429212/work
21
+ catalogue==2.0.9
22
+ certifi==2023.7.22
23
+ cffi @ file:///Users/runner/miniforge3/conda-bld/cffi_1671179605388/work
24
+ charset-normalizer @ file:///home/conda/feedstock_root/build_artifacts/charset-normalizer_1688813409104/work
25
+ chex==0.1.7
26
+ click==8.1.7
27
+ colorama @ file:///home/conda/feedstock_root/build_artifacts/colorama_1666700638685/work
28
+ comm @ file:///home/conda/feedstock_root/build_artifacts/comm_1691044910542/work
29
+ confection==0.1.3
30
+ contourpy @ file:///Users/runner/miniforge3/conda-bld/contourpy_1686734165903/work
31
+ cycler @ file:///home/conda/feedstock_root/build_artifacts/cycler_1635519461629/work
32
+ cymem==2.0.8
33
+ debugpy @ file:///Users/runner/miniforge3/conda-bld/debugpy_1691021385546/work
34
+ decorator @ file:///home/conda/feedstock_root/build_artifacts/decorator_1641555617451/work
35
+ defusedxml @ file:///home/conda/feedstock_root/build_artifacts/defusedxml_1615232257335/work
36
+ dm-tree==0.1.8
37
+ dnspython==2.6.1
38
+ email_validator==2.2.0
39
+ entrypoints @ file:///home/conda/feedstock_root/build_artifacts/entrypoints_1643888246732/work
40
+ etils==1.3.0
41
+ exceptiongroup @ file:///home/conda/feedstock_root/build_artifacts/exceptiongroup_1688381075899/work
42
+ executing @ file:///home/conda/feedstock_root/build_artifacts/executing_1667317341051/work
43
+ faiss-cpu==1.7.4
44
+ fastapi==0.111.1
45
+ fastapi-cli==0.0.4
46
+ fastjsonschema @ file:///home/conda/feedstock_root/build_artifacts/python-fastjsonschema_1690055433477/work/dist
47
+ ffmpy==0.4.0
48
+ filelock==3.12.2
49
+ flax==0.7.2
50
+ flit_core @ file:///home/conda/feedstock_root/build_artifacts/flit-core_1684084314667/work/source/flit_core
51
+ fonttools @ file:///Users/runner/miniforge3/conda-bld/fonttools_1691006833604/work
52
+ fqdn @ file:///home/conda/feedstock_root/build_artifacts/fqdn_1638810296540/work/dist
53
+ fsspec==2023.9.1
54
+ gradio==4.39.0
55
+ gradio_client==1.1.1
56
+ h11==0.14.0
57
+ httpcore==1.0.5
58
+ httptools==0.6.1
59
+ httpx==0.27.0
60
+ huggingface-hub==0.24.2
61
+ idna @ file:///home/conda/feedstock_root/build_artifacts/idna_1663625384323/work
62
+ importlib-metadata @ file:///home/conda/feedstock_root/build_artifacts/importlib-metadata_1688754491823/work
63
+ importlib-resources @ file:///home/conda/feedstock_root/build_artifacts/importlib_resources_1691408075105/work
64
+ ipykernel @ file:///Users/runner/miniforge3/conda-bld/ipykernel_1691424478312/work
65
+ ipython @ file:///Users/runner/miniforge3/conda-bld/ipython_1683289207929/work
66
+ ipywidgets @ file:///home/conda/feedstock_root/build_artifacts/ipywidgets_1690877070294/work
67
+ isoduration @ file:///home/conda/feedstock_root/build_artifacts/isoduration_1638811571363/work/dist
68
+ jax==0.4.13
69
+ jaxlib==0.4.13
70
+ jedi @ file:///home/conda/feedstock_root/build_artifacts/jedi_1690896916983/work
71
+ Jinja2 @ file:///home/conda/feedstock_root/build_artifacts/jinja2_1654302431367/work
72
+ joblib @ file:///home/conda/feedstock_root/build_artifacts/joblib_1691577114857/work
73
+ json5 @ file:///home/conda/feedstock_root/build_artifacts/json5_1688248289187/work
74
+ jsonpointer==2.0
75
+ jsonschema @ file:///home/conda/feedstock_root/build_artifacts/jsonschema-meta_1691407964752/work
76
+ jsonschema-specifications @ file:///home/conda/feedstock_root/build_artifacts/jsonschema-specifications_1689701150890/work
77
+ jupyter @ file:///Users/runner/miniforge3/conda-bld/jupyter_1670249744855/work
78
+ jupyter-console @ file:///home/conda/feedstock_root/build_artifacts/jupyter_console_1678118109161/work
79
+ jupyter-events @ file:///home/conda/feedstock_root/build_artifacts/jupyter_events_1691505939576/work
80
+ jupyter-lsp @ file:///home/conda/feedstock_root/build_artifacts/jupyter-lsp-meta_1685453365113/work/jupyter-lsp
81
+ jupyter_client @ file:///home/conda/feedstock_root/build_artifacts/jupyter_client_1687700988094/work
82
+ jupyter_core @ file:///Users/runner/miniforge3/conda-bld/jupyter_core_1686775732472/work
83
+ jupyter_server @ file:///home/conda/feedstock_root/build_artifacts/jupyter_server_1687869799272/work
84
+ jupyter_server_terminals @ file:///home/conda/feedstock_root/build_artifacts/jupyter_server_terminals_1673491454549/work
85
+ jupyterlab @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_1691085900640/work
86
+ jupyterlab-pygments @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_pygments_1649936611996/work
87
+ jupyterlab-widgets @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_widgets_1688489450369/work
88
+ jupyterlab_server @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_server_1690205927615/work
89
+ kiwisolver @ file:///Users/runner/miniforge3/conda-bld/kiwisolver_1666805848360/work
90
+ langcodes==3.3.0
91
+ markdown-it-py==3.0.0
92
+ MarkupSafe @ file:///Users/runner/miniforge3/conda-bld/markupsafe_1685769224358/work
93
+ matplotlib @ file:///Users/runner/miniforge3/conda-bld/matplotlib-suite_1688684899624/work
94
+ matplotlib-inline @ file:///home/conda/feedstock_root/build_artifacts/matplotlib-inline_1660814786464/work
95
+ mdurl==0.1.2
96
+ micrograd==0.1.0
97
+ mistune @ file:///home/conda/feedstock_root/build_artifacts/mistune_1686313613819/work/dist
98
+ ml-dtypes==0.2.0
99
+ mpmath==1.3.0
100
+ msgpack==1.0.8
101
+ munkres==1.1.4
102
+ murmurhash==1.0.10
103
+ nbclient @ file:///home/conda/feedstock_root/build_artifacts/nbclient_1684790896106/work
104
+ nbconvert @ file:///home/conda/feedstock_root/build_artifacts/nbconvert-meta_1690313290323/work
105
+ nbformat @ file:///home/conda/feedstock_root/build_artifacts/nbformat_1690814868471/work
106
+ nest-asyncio @ file:///home/conda/feedstock_root/build_artifacts/nest-asyncio_1664684991461/work
107
+ networkx==3.1
108
+ nltk==3.8.1
109
+ notebook @ file:///home/conda/feedstock_root/build_artifacts/notebook_1691139191280/work
110
+ notebook_shim @ file:///home/conda/feedstock_root/build_artifacts/notebook-shim_1682360583588/work
111
+ numpy @ file:///Users/runner/miniforge3/conda-bld/numpy_1687808433287/work
112
+ opt-einsum==3.3.0
113
+ optax==0.1.8
114
+ orbax-checkpoint==0.2.3
115
+ orjson==3.10.6
116
+ overrides @ file:///home/conda/feedstock_root/build_artifacts/overrides_1691338815398/work
117
+ packaging @ file:///home/conda/feedstock_root/build_artifacts/packaging_1681337016113/work
118
+ pandas @ file:///Users/runner/miniforge3/conda-bld/pandas_1688740593370/work
119
+ pandocfilters @ file:///home/conda/feedstock_root/build_artifacts/pandocfilters_1631603243851/work
120
+ parso @ file:///home/conda/feedstock_root/build_artifacts/parso_1638334955874/work
121
+ pathy==0.10.2
122
+ pexpect @ file:///home/conda/feedstock_root/build_artifacts/pexpect_1667297516076/work
123
+ pickleshare @ file:///home/conda/feedstock_root/build_artifacts/pickleshare_1602536217715/work
124
+ Pillow @ file:///Users/runner/miniforge3/conda-bld/pillow_1688255913792/work
125
+ pkgutil_resolve_name @ file:///home/conda/feedstock_root/build_artifacts/pkgutil-resolve-name_1633981968097/work
126
+ platformdirs @ file:///home/conda/feedstock_root/build_artifacts/platformdirs_1690813113769/work
127
+ pooch @ file:///home/conda/feedstock_root/build_artifacts/pooch_1679580333621/work
128
+ preshed==3.0.9
129
+ prometheus-client @ file:///home/conda/feedstock_root/build_artifacts/prometheus_client_1689032443210/work
130
+ prompt-toolkit @ file:///home/conda/feedstock_root/build_artifacts/prompt-toolkit_1688565951714/work
131
+ psutil @ file:///Users/runner/miniforge3/conda-bld/psutil_1681775366577/work
132
+ ptyprocess @ file:///home/conda/feedstock_root/build_artifacts/ptyprocess_1609419310487/work/dist/ptyprocess-0.7.0-py2.py3-none-any.whl
133
+ pure-eval @ file:///home/conda/feedstock_root/build_artifacts/pure_eval_1642875951954/work
134
+ pycparser @ file:///home/conda/feedstock_root/build_artifacts/pycparser_1636257122734/work
135
+ pydantic==2.3.0
136
+ pydantic_core==2.6.3
137
+ pydub==0.25.1
138
+ Pygments @ file:///home/conda/feedstock_root/build_artifacts/pygments_1691408637400/work
139
+ pyparsing @ file:///home/conda/feedstock_root/build_artifacts/pyparsing_1652235407899/work
140
+ PySocks @ file:///home/conda/feedstock_root/build_artifacts/pysocks_1661604839144/work
141
+ python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1626286286081/work
142
+ python-dotenv==1.0.1
143
+ python-json-logger @ file:///home/conda/feedstock_root/build_artifacts/python-json-logger_1677079630776/work
144
+ python-multipart==0.0.9
145
+ pytz @ file:///home/conda/feedstock_root/build_artifacts/pytz_1680088766131/work
146
+ PyYAML @ file:///Users/runner/miniforge3/conda-bld/pyyaml_1666772523114/work
147
+ pyzmq @ file:///Users/runner/miniforge3/conda-bld/pyzmq_1691667741827/work
148
+ referencing @ file:///home/conda/feedstock_root/build_artifacts/referencing_1691337268233/work
149
+ regex==2023.8.8
150
+ requests @ file:///home/conda/feedstock_root/build_artifacts/requests_1684774241324/work
151
+ rfc3339-validator @ file:///home/conda/feedstock_root/build_artifacts/rfc3339-validator_1638811747357/work
152
+ rfc3986-validator @ file:///home/conda/feedstock_root/build_artifacts/rfc3986-validator_1598024191506/work
153
+ rich==13.7.1
154
+ rpds-py @ file:///Users/runner/miniforge3/conda-bld/rpds-py_1689705310488/work
155
+ ruff==0.5.5
156
+ safetensors==0.4.3
157
+ scikit-learn @ file:///Users/runner/miniforge3/conda-bld/scikit-learn_1688116469994/work
158
+ scipy @ file:///Users/runner/miniforge3/conda-bld/scipy-split_1683900453702/work/base/dist/scipy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl#sha256=06d649e33fd400c8608c1083a7bb6f490989227277eae7f65577d925d87848e8
159
+ semantic-version==2.10.0
160
+ Send2Trash @ file:///home/conda/feedstock_root/build_artifacts/send2trash_1628511208346/work
161
+ sentencepiece==0.2.0
162
+ shellingham==1.5.4
163
+ six @ file:///home/conda/feedstock_root/build_artifacts/six_1620240208055/work
164
+ smart-open==6.4.0
165
+ sniffio @ file:///home/conda/feedstock_root/build_artifacts/sniffio_1662051266223/work
166
+ soupsieve @ file:///home/conda/feedstock_root/build_artifacts/soupsieve_1658207591808/work
167
+ spacy==3.6.1
168
+ spacy-legacy==3.0.12
169
+ spacy-loggers==1.0.5
170
+ srsly==2.4.7
171
+ stack-data @ file:///home/conda/feedstock_root/build_artifacts/stack_data_1669632077133/work
172
+ starlette==0.37.2
173
+ sympy==1.12
174
+ tensorstore==0.1.45
175
+ terminado @ file:///Users/runner/miniforge3/conda-bld/terminado_1670254106711/work
176
+ thinc==8.1.12
177
+ threadpoolctl @ file:///home/conda/feedstock_root/build_artifacts/threadpoolctl_1689261241048/work
178
+ tinycss2 @ file:///home/conda/feedstock_root/build_artifacts/tinycss2_1666100256010/work
179
+ tokenizers==0.19.1
180
+ tomli @ file:///home/conda/feedstock_root/build_artifacts/tomli_1644342247877/work
181
+ tomlkit==0.12.0
182
+ toolz==0.12.1
183
+ torch==2.0.1
184
+ torchaudio==2.0.2
185
+ torchvision==0.15.2
186
+ tornado @ file:///Users/runner/miniforge3/conda-bld/tornado_1684150249057/work
187
+ tqdm @ file:///home/conda/feedstock_root/build_artifacts/tqdm_1691671248568/work
188
+ traitlets @ file:///home/conda/feedstock_root/build_artifacts/traitlets_1675110562325/work
189
+ transformers==4.43.1
190
+ typer==0.12.3
191
+ typing-utils @ file:///home/conda/feedstock_root/build_artifacts/typing_utils_1622899189314/work
192
+ typing_extensions==4.12.2
193
+ tzdata @ file:///home/conda/feedstock_root/build_artifacts/python-tzdata_1680081134351/work
194
+ unicodedata2 @ file:///Users/runner/miniforge3/conda-bld/unicodedata2_1667240193675/work
195
+ uri-template @ file:///home/conda/feedstock_root/build_artifacts/uri-template_1688655812972/work/dist
196
+ urllib3 @ file:///home/conda/feedstock_root/build_artifacts/urllib3_1689789803562/work
197
+ uvicorn==0.30.3
198
+ uvloop==0.19.0
199
+ wasabi==1.1.2
200
+ watchfiles==0.22.0
201
+ wcwidth @ file:///home/conda/feedstock_root/build_artifacts/wcwidth_1673864653149/work
202
+ webcolors @ file:///home/conda/feedstock_root/build_artifacts/webcolors_1679900785843/work
203
+ webencodings==0.5.1
204
+ websocket-client @ file:///home/conda/feedstock_root/build_artifacts/websocket-client_1687789148259/work
205
+ websockets==11.0.3
206
+ widgetsnbextension @ file:///home/conda/feedstock_root/build_artifacts/widgetsnbextension_1688504439014/work
207
+ zipp @ file:///home/conda/feedstock_root/build_artifacts/zipp_1689374466814/work