Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
add downloadable documents | add full demo link
Browse files- backend/clean_and_restart_eval.py +25 -48
- backend/tasks/evaluation_task.py +10 -8
- frontend/public/hurricane-faq.md +193 -0
- frontend/public/pokemon-guide.txt +252 -0
- frontend/public/the-bitter-lesson.html +131 -0
- frontend/src/components/BenchmarkCreateForm.jsx +71 -1
- frontend/src/components/ExternalLinks.jsx +12 -0
backend/clean_and_restart_eval.py
CHANGED
@@ -1,17 +1,16 @@
|
|
1 |
#!/usr/bin/env python3
|
2 |
"""
|
3 |
-
Script pour
|
4 |
"""
|
5 |
import os
|
6 |
import sys
|
7 |
-
import shutil
|
8 |
import argparse
|
9 |
import asyncio
|
10 |
from pathlib import Path
|
11 |
from datetime import datetime
|
12 |
|
13 |
# Importer la tâche d'évaluation
|
14 |
-
from tasks.evaluation_task import EvaluationTask
|
15 |
|
16 |
|
17 |
def log(message):
|
@@ -19,66 +18,37 @@ def log(message):
|
|
19 |
print(f"[{datetime.now().strftime('%H:%M:%S')}] {message}")
|
20 |
|
21 |
|
22 |
-
async def main(session_id, dataset_name,
|
23 |
"""
|
24 |
-
|
25 |
|
26 |
Args:
|
27 |
session_id: ID de la session à traiter
|
28 |
dataset_name: Nom du dataset à évaluer
|
29 |
-
|
30 |
"""
|
31 |
# Vérifier que le dossier de session existe
|
32 |
session_dir = Path(f"uploaded_files/{session_id}")
|
33 |
if not session_dir.exists():
|
34 |
log(f"Erreur: Le dossier de session {session_id} n'existe pas")
|
35 |
return 1
|
36 |
-
|
37 |
-
# Chemin vers les résultats LightEval
|
38 |
-
results_dir = session_dir / "lighteval_results"
|
39 |
-
|
40 |
-
# Suppression des anciens résultats
|
41 |
-
if results_dir.exists():
|
42 |
-
log(f"Suppression de l'ancien dossier de résultats: {results_dir}")
|
43 |
-
shutil.rmtree(results_dir)
|
44 |
-
log("Nettoyage terminé")
|
45 |
|
46 |
-
#
|
47 |
-
if
|
48 |
-
|
49 |
-
lighteval_task_path = Path("lighteval_task/lighteval_task.py")
|
50 |
-
|
51 |
-
# Modifier le module uniquement s'il existe
|
52 |
-
if lighteval_task_path.exists():
|
53 |
-
log(f"Ajustement du seuil d'analyse de sentiment à {threshold}")
|
54 |
-
|
55 |
-
# Lire le contenu
|
56 |
-
with open(lighteval_task_path, 'r', encoding='utf-8') as file:
|
57 |
-
content = file.read()
|
58 |
-
|
59 |
-
# Remplacer le seuil dans la code
|
60 |
-
content = content.replace(
|
61 |
-
"pos_count > neg_count + 2", # Seuil par défaut
|
62 |
-
f"pos_count > neg_count + {threshold}"
|
63 |
-
)
|
64 |
-
content = content.replace(
|
65 |
-
"neg_count > pos_count + 2", # Seuil par défaut
|
66 |
-
f"neg_count > pos_count + {threshold}"
|
67 |
-
)
|
68 |
-
|
69 |
-
# Écrire le fichier modifié
|
70 |
-
with open(lighteval_task_path, 'w', encoding='utf-8') as file:
|
71 |
-
file.write(content)
|
72 |
-
|
73 |
-
log(f"Seuil d'analyse de sentiment ajusté à {threshold}")
|
74 |
|
75 |
-
# Créer une nouvelle tâche d'évaluation
|
76 |
log("Initialisation d'une nouvelle tâche d'évaluation")
|
77 |
-
evaluation_task = EvaluationTask(
|
|
|
|
|
|
|
|
|
|
|
78 |
|
79 |
# Exécuter l'évaluation
|
80 |
log("Démarrage de l'évaluation...")
|
81 |
-
await evaluation_task.run(
|
82 |
|
83 |
# Vérifier les résultats
|
84 |
if evaluation_task.is_completed:
|
@@ -93,7 +63,14 @@ async def main(session_id, dataset_name, threshold=None):
|
|
93 |
|
94 |
|
95 |
if __name__ == "__main__":
|
96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
# Exécuter la fonction principale de manière asynchrone
|
98 |
-
exit_code = asyncio.run(main(
|
99 |
sys.exit(exit_code)
|
|
|
1 |
#!/usr/bin/env python3
|
2 |
"""
|
3 |
+
Script pour relancer l'évaluation LightEval avec un timeout personnalisé
|
4 |
"""
|
5 |
import os
|
6 |
import sys
|
|
|
7 |
import argparse
|
8 |
import asyncio
|
9 |
from pathlib import Path
|
10 |
from datetime import datetime
|
11 |
|
12 |
# Importer la tâche d'évaluation
|
13 |
+
from tasks.evaluation_task import EvaluationTask, DEFAULT_EVALUATION_TIMEOUT
|
14 |
|
15 |
|
16 |
def log(message):
|
|
|
18 |
print(f"[{datetime.now().strftime('%H:%M:%S')}] {message}")
|
19 |
|
20 |
|
21 |
+
async def main(session_id, dataset_name, timeout=None):
|
22 |
"""
|
23 |
+
Relance l'évaluation avec un timeout personnalisé
|
24 |
|
25 |
Args:
|
26 |
session_id: ID de la session à traiter
|
27 |
dataset_name: Nom du dataset à évaluer
|
28 |
+
timeout: Timeout en secondes pour chaque évaluation de modèle (utilise la valeur par défaut si None)
|
29 |
"""
|
30 |
# Vérifier que le dossier de session existe
|
31 |
session_dir = Path(f"uploaded_files/{session_id}")
|
32 |
if not session_dir.exists():
|
33 |
log(f"Erreur: Le dossier de session {session_id} n'existe pas")
|
34 |
return 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
|
36 |
+
# Afficher le timeout utilisé
|
37 |
+
timeout_value = timeout if timeout is not None else DEFAULT_EVALUATION_TIMEOUT
|
38 |
+
log(f"Utilisation d'un timeout de {timeout_value} secondes pour l'évaluation")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
|
40 |
+
# Créer une nouvelle tâche d'évaluation avec le timeout spécifié
|
41 |
log("Initialisation d'une nouvelle tâche d'évaluation")
|
42 |
+
evaluation_task = EvaluationTask(
|
43 |
+
session_uid=session_id,
|
44 |
+
dataset_name=dataset_name,
|
45 |
+
clean_old_results=True, # Nettoyer automatiquement les anciens résultats
|
46 |
+
timeout=timeout
|
47 |
+
)
|
48 |
|
49 |
# Exécuter l'évaluation
|
50 |
log("Démarrage de l'évaluation...")
|
51 |
+
await evaluation_task.run()
|
52 |
|
53 |
# Vérifier les résultats
|
54 |
if evaluation_task.is_completed:
|
|
|
63 |
|
64 |
|
65 |
if __name__ == "__main__":
|
66 |
+
parser = argparse.ArgumentParser(description="Relancer l'évaluation LightEval avec un timeout personnalisé")
|
67 |
+
parser.add_argument("session_id", help="ID de la session à traiter")
|
68 |
+
parser.add_argument("dataset_name", help="Nom du dataset à évaluer")
|
69 |
+
parser.add_argument("--timeout", type=float, default=None,
|
70 |
+
help=f"Timeout en secondes pour chaque évaluation de modèle (défaut: {DEFAULT_EVALUATION_TIMEOUT})")
|
71 |
+
|
72 |
+
args = parser.parse_args()
|
73 |
+
|
74 |
# Exécuter la fonction principale de manière asynchrone
|
75 |
+
exit_code = asyncio.run(main(args.session_id, args.dataset_name, args.timeout))
|
76 |
sys.exit(exit_code)
|
backend/tasks/evaluation_task.py
CHANGED
@@ -16,15 +16,15 @@ from tasks.get_model_providers import get_model_providers
|
|
16 |
from huggingface_hub import HfApi
|
17 |
import asyncio
|
18 |
|
19 |
-
#
|
20 |
-
|
21 |
|
22 |
class EvaluationTask:
|
23 |
"""
|
24 |
Task to run evaluation using lighteval
|
25 |
"""
|
26 |
|
27 |
-
def __init__(self, session_uid: str, dataset_name: str, clean_old_results: bool = False):
|
28 |
"""
|
29 |
Initialize the evaluation task
|
30 |
|
@@ -32,12 +32,14 @@ class EvaluationTask:
|
|
32 |
session_uid: Session ID for this task
|
33 |
dataset_name: Name of the dataset to evaluate
|
34 |
clean_old_results: If True, clean old results before evaluation
|
|
|
35 |
"""
|
36 |
self.session_uid = session_uid
|
37 |
self.dataset_name = dataset_name
|
38 |
self.is_completed = False
|
39 |
self.results = []
|
40 |
self.hf_api = HfApi()
|
|
|
41 |
|
42 |
# Nettoyer les anciens résultats si demandé
|
43 |
if clean_old_results:
|
@@ -107,7 +109,7 @@ class EvaluationTask:
|
|
107 |
except Exception as e:
|
108 |
print(f"[{datetime.now().strftime('%H:%M:%S')}] Failed to save results to Hub: {str(e)}")
|
109 |
|
110 |
-
async def _run_lighteval(self, model_name: str, provider: str
|
111 |
start_time = time.time()
|
112 |
print(f"[{datetime.now().strftime('%H:%M:%S')}] Starting evaluation with {provider} provider for {model_name}")
|
113 |
|
@@ -118,7 +120,7 @@ class EvaluationTask:
|
|
118 |
from lighteval_task.lighteval_task import create_yourbench_task
|
119 |
|
120 |
# Create yourbench task
|
121 |
-
yourbench = create_yourbench_task("{dataset_name}", "single_shot_questions")
|
122 |
|
123 |
# Define TASKS_TABLE needed by lighteval
|
124 |
TASKS_TABLE = [yourbench]
|
@@ -153,7 +155,7 @@ TASKS_TABLE = [yourbench]
|
|
153 |
)
|
154 |
|
155 |
try:
|
156 |
-
await asyncio.wait_for(process.communicate(), timeout=
|
157 |
except asyncio.TimeoutError:
|
158 |
process.kill()
|
159 |
print(f"[{datetime.now().strftime('%H:%M:%S')}] Evaluation timed out for {model_name} after {time.time() - start_time:.2f}s")
|
@@ -165,7 +167,7 @@ TASKS_TABLE = [yourbench]
|
|
165 |
"model": model_name,
|
166 |
"provider": provider,
|
167 |
"accuracy": 0.0,
|
168 |
-
"execution_time":
|
169 |
"status": "timeout"
|
170 |
}
|
171 |
except Exception as e:
|
@@ -250,7 +252,7 @@ TASKS_TABLE = [yourbench]
|
|
250 |
tasks = []
|
251 |
for model_name, providers in model_providers:
|
252 |
if providers: # Only run if providers are available
|
253 |
-
tasks.append(self._run_lighteval(model_name, providers[0]
|
254 |
|
255 |
self.results = await asyncio.gather(*tasks)
|
256 |
|
|
|
16 |
from huggingface_hub import HfApi
|
17 |
import asyncio
|
18 |
|
19 |
+
# Valeur par défaut du timeout
|
20 |
+
DEFAULT_EVALUATION_TIMEOUT = 60.0 # 1 minute par défaut
|
21 |
|
22 |
class EvaluationTask:
|
23 |
"""
|
24 |
Task to run evaluation using lighteval
|
25 |
"""
|
26 |
|
27 |
+
def __init__(self, session_uid: str, dataset_name: str, clean_old_results: bool = False, timeout: float = None):
|
28 |
"""
|
29 |
Initialize the evaluation task
|
30 |
|
|
|
32 |
session_uid: Session ID for this task
|
33 |
dataset_name: Name of the dataset to evaluate
|
34 |
clean_old_results: If True, clean old results before evaluation
|
35 |
+
timeout: Timeout in seconds for each model evaluation (if None, uses default)
|
36 |
"""
|
37 |
self.session_uid = session_uid
|
38 |
self.dataset_name = dataset_name
|
39 |
self.is_completed = False
|
40 |
self.results = []
|
41 |
self.hf_api = HfApi()
|
42 |
+
self.timeout = timeout if timeout is not None else DEFAULT_EVALUATION_TIMEOUT
|
43 |
|
44 |
# Nettoyer les anciens résultats si demandé
|
45 |
if clean_old_results:
|
|
|
109 |
except Exception as e:
|
110 |
print(f"[{datetime.now().strftime('%H:%M:%S')}] Failed to save results to Hub: {str(e)}")
|
111 |
|
112 |
+
async def _run_lighteval(self, model_name: str, provider: str) -> dict:
|
113 |
start_time = time.time()
|
114 |
print(f"[{datetime.now().strftime('%H:%M:%S')}] Starting evaluation with {provider} provider for {model_name}")
|
115 |
|
|
|
120 |
from lighteval_task.lighteval_task import create_yourbench_task
|
121 |
|
122 |
# Create yourbench task
|
123 |
+
yourbench = create_yourbench_task("{self.dataset_name}", "single_shot_questions")
|
124 |
|
125 |
# Define TASKS_TABLE needed by lighteval
|
126 |
TASKS_TABLE = [yourbench]
|
|
|
155 |
)
|
156 |
|
157 |
try:
|
158 |
+
await asyncio.wait_for(process.communicate(), timeout=self.timeout)
|
159 |
except asyncio.TimeoutError:
|
160 |
process.kill()
|
161 |
print(f"[{datetime.now().strftime('%H:%M:%S')}] Evaluation timed out for {model_name} after {time.time() - start_time:.2f}s")
|
|
|
167 |
"model": model_name,
|
168 |
"provider": provider,
|
169 |
"accuracy": 0.0,
|
170 |
+
"execution_time": self.timeout,
|
171 |
"status": "timeout"
|
172 |
}
|
173 |
except Exception as e:
|
|
|
252 |
tasks = []
|
253 |
for model_name, providers in model_providers:
|
254 |
if providers: # Only run if providers are available
|
255 |
+
tasks.append(self._run_lighteval(model_name, providers[0]))
|
256 |
|
257 |
self.results = await asyncio.gather(*tasks)
|
258 |
|
frontend/public/hurricane-faq.md
ADDED
@@ -0,0 +1,193 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Hurricanes: Interesting Facts and F.A.Q.
|
2 |
+
|
3 |
+
The word hurricane comes from the Taino Native American word, hurucane, meaning
|
4 |
+
|
5 |
+
evil spirit of the wind.
|
6 |
+
|
7 |
+
The first time anyone flew into a hurricane happened in 1943 in the middle of World
|
8 |
+
|
9 |
+
War II.
|
10 |
+
|
11 |
+
A tropical storm is classified as a hurricane once winds goes up to 74 miles per hour or
|
12 |
+
|
13 |
+
higher.
|
14 |
+
|
15 |
+
Hurricanes are the only weather disasters that have been given their own names.
|
16 |
+
|
17 |
+
All hurricanes begin life in a warm moist atmosphere over tropical ocean waters.
|
18 |
+
|
19 |
+
A typical hurricane can dump 6 inches to a foot of rain across a region.
|
20 |
+
|
21 |
+
The most violent winds and heaviest rains take place in the eye wall, the ring of clouds
|
22 |
+
|
23 |
+
and thunderstorms closely surrounding the eye.
|
24 |
+
|
25 |
+
Every second, a large hurricane releases the energy of 10 atomic bombs.
|
26 |
+
|
27 |
+
Hurricanes can also produce tornadoes. They are not as strong as regular tornadoes and
|
28 |
+
|
29 |
+
last only a few minutes.
|
30 |
+
|
31 |
+
Slow moving hurricanes produce more rainfall and can cause more damage from
|
32 |
+
|
33 |
+
flooding than faster-moving, more powerful hurricanes.
|
34 |
+
|
35 |
+
Hurricane Floyd was barely a category I hurricane, but it still managed to mow down 19
|
36 |
+
|
37 |
+
million trees and caused over a billion dollars in damage.
|
38 |
+
|
39 |
+
Most people who die in hurricanes are killed by the towering walls of sea water that
|
40 |
+
|
41 |
+
comes inland.
|
42 |
+
|
43 |
+
|
44 |
+
|
45 |
+
In the Pacific Ocean, Hurricanes are generally known as typhoons. In the Indian Ocean
|
46 |
+
they are called tropical cyclones.
|
47 |
+
|
48 |
+
The man who first gave names to hurricanes was an Australian weather forecaster
|
49 |
+
|
50 |
+
named C. Wragge in the early 1900s.
|
51 |
+
|
52 |
+
The first hurricane of the year is given a name beginning with the letter “A”.
|
53 |
+
|
54 |
+
Hurricane season is from June to November when the seas are at their warmest and
|
55 |
+
|
56 |
+
most humid, which are ripe conditions for a hurricane to develop.
|
57 |
+
|
58 |
+
The planet Jupiter has a hurricane which has been going on for over 300 years. It can be
|
59 |
+
seen as a red spot on the planet. This hurricane on Jupiter is bigger than the Earth itself.
|
60 |
+
|
61 |
+
Q. What are “Cape Verde” type hurricanes?
|
62 |
+
|
63 |
+
Cape Verde-type hurricanes are those Atlantic basin tropical cyclones that develop into tropical
|
64 |
+
storms fairly close (<1000km or so) to the Cape Verde Islands and then become hurricanes
|
65 |
+
before reaching the Caribbean. (there may be other definitions). Typically, this occurs in August
|
66 |
+
and September, but in rare years (like 1995), there may be some in late July and/or early
|
67 |
+
October. The numbers range from none up to around five per year, with an average of around
|
68 |
+
2.
|
69 |
+
|
70 |
+
Q. What is the “eye?” How is it formed and maintained?
|
71 |
+
The “eye”(cid:157) is a roughly circular area of comparatively light winds and fair weather found at the
|
72 |
+
center of a severe tropical cyclone. Although the winds are calm at the axis of rotation, strong
|
73 |
+
winds may extend well into the eye. There is little or no precipitation in the eye, and sometimes
|
74 |
+
blue sky or stars can be seen. The eye is the region of lowest surface pressure and warmest
|
75 |
+
temperatures aloft: the eye temperature may be more than 10°C (18°F) warmer at an altitude
|
76 |
+
of 12 km (8 mi) than the surrounding environment, but only 0-2°C (0-3°F) warmer at the surface
|
77 |
+
in the tropical cyclone. Eyes range in size from 8 km (5 mi) to over 200 km (120 mi) across, but
|
78 |
+
most are approximately 30–60 km (20–40 mi) in diameter. The eye is surrounded by the
|
79 |
+
eyewall—”the roughly circular area of deep convection which is the area of highest surface
|
80 |
+
winds in the tropical cyclone. The eye is composed of air that is slowly sinking and the eyewall
|
81 |
+
has a net upward flow as a result of many moderate and occasionally strong updrafts and
|
82 |
+
downdrafts. The eye’s warm temperatures are due to compressional warming of the subsiding
|
83 |
+
air. Most soundings taken within the eye show a low-level layer which is relatively moist, with
|
84 |
+
an inversion above. This suggests that the sinking in the eye typically does not reach the ocean
|
85 |
+
surface, but instead only gets to around 1–3 km of the surface.
|
86 |
+
|
87 |
+
The general mechanisms by which the eye and eyewall are formed are not fully understood,
|
88 |
+
although observations have shed some light on the subject. The calm eye of the tropical
|
89 |
+
cyclone shares many qualitative characteristics with other vortical systems such as tornadoes,
|
90 |
+
waterspouts, dust devils and whirlpools. Given that many of these lack a change of phase of
|
91 |
+
water (i.e. no clouds and diabatic heating involved), it may be that the eye feature is a
|
92 |
+
fundamental component to all rotating fluids. It has been hypothesized that supergradient wind
|
93 |
+
flow (i.e. swirling winds that are stronger than what the local pressure gradient can typically
|
94 |
+
support) near the radius of maximum winds (RMW) causes air to be centrifuged out of the eye
|
95 |
+
into the eyewall, thus accounting for the subsidence in the eye. However, Willoughby found
|
96 |
+
that the swirling winds within several tropical storms and hurricanes were within 1–4% of
|
97 |
+
gradient balance. It may be that the amount of supergradient flow needed to cause such
|
98 |
+
centrifuging of air is only on the order of a couple percent and thus difficult to measure.
|
99 |
+
|
100 |
+
Another feature of tropical cyclones that probably plays a role in forming and maintaining the
|
101 |
+
eye is the eyewall convection. Convection in tropical cyclones is organized into long, narrow
|
102 |
+
rainbands which are oriented in the same direction as the horizontal wind. Because these
|
103 |
+
bands seem to spiral into the center of a tropical cyclone, they are sometimes called spiral
|
104 |
+
bands. Along these bands, low-level convergence is at a maximum, and therefore, upper-level
|
105 |
+
divergence is most pronounced above. A direct circulation develops in which warm, moist air
|
106 |
+
converges at the surface, ascends through these bands, diverges aloft, and descends on both
|
107 |
+
sides of the bands. Subsidence is distributed over a wide area on the outside of the rainband
|
108 |
+
but is concentrated in the small inside area. As the air subsides, adiabatic warming takes place,
|
109 |
+
and the air dries. Because subsidence is concentrated on the inside of the band, the adiabatic
|
110 |
+
|
111 |
+
warming is stronger inward from the band causing a sharp fall in pressure across the band since
|
112 |
+
warm air is lighter than cold air. Because of the pressure drops on the inside, the tangential
|
113 |
+
winds around the tropical cyclone increase due to the increases in the pressure gradient.
|
114 |
+
Eventually, the band moves toward the center and encircles it and the eye and eyewall form.
|
115 |
+
|
116 |
+
Thus, the cloud-free eye may be due to a combination of dynamically forced centrifuging of
|
117 |
+
mass out of the eye into the eyewall and to a forced descent caused by the moist convection of
|
118 |
+
the eyewall. This topic is certainly one that can use more research to ascertain which
|
119 |
+
mechanism is primary.
|
120 |
+
|
121 |
+
Some of the most intense tropical cyclones exhibit concentric eyewalls—two or more eyewall
|
122 |
+
structures centered at the circulation center of the storm. Just as the inner eyewall forms,
|
123 |
+
convection surrounding the eyewall can become organized into distinct rings. Eventually, the
|
124 |
+
inner eye begins to feel the effects of the subsidence resulting from the outer eyewall, and the
|
125 |
+
inner eyewall weakens to be replaced by the outer eyewall. The increasing pressure due to the
|
126 |
+
destruction of the inner eyewall is usually more rapid than the decreasing pressure caused by
|
127 |
+
the intensification of the outer eyewall, causing the cyclone to weaken for a short period of
|
128 |
+
time.
|
129 |
+
|
130 |
+
Q. What does an average hurricane season mean?
|
131 |
+
An average hurricane season brings 10.6 tropical storms. Six of those become hurricanes and
|
132 |
+
two become major hurricanes, meaning category 3 or greater.
|
133 |
+
|
134 |
+
The average is based on data from 1968 to 2003. Officially, the Atlantic hurricane season is
|
135 |
+
from June 1 to November 30, although storms can form outside this time period.
|
136 |
+
|
137 |
+
Q. What year was the most active? What year was the least active?
|
138 |
+
Until recently, 1933 had the most named storms on record with 21. In 2005, that record was
|
139 |
+
broken when the National Hurricane Center identified 28 storms. Since all of the traditional
|
140 |
+
names had been used for 2005, the last six named storms were called "Alpha," "Beta,"
|
141 |
+
"Gamma," "Delta," "Epsilon," and "Zeta," the first six letters of the Greek alphabet.
|
142 |
+
|
143 |
+
1933 is now second, and 1995 is third with 19 tropical storms. 2005 also had the most
|
144 |
+
hurricanes in one season with 15. The least number of tropical storms happened in 1983 when
|
145 |
+
just four storms formed. In 1982, just two hurricanes formed, making it the year with the least
|
146 |
+
amount of hurricanes since 1968.
|
147 |
+
|
148 |
+
Q. Do I need to open my windows when a hurricane approaches?
|
149 |
+
That's a question we get every hurricane season. The answer is a resounding no. It is a myth
|
150 |
+
that opening windows will help equalize pressure in your house when a hurricane approaches.
|
151 |
+
|
152 |
+
Your windows should be boarded up with plywood or shutters. Leaving your windows open will
|
153 |
+
just bring a lot of rain into your house and flying debris could fly into your home, too. Don't
|
154 |
+
waste time taping your windows either. It won't help prevent hurricane damage. It's just
|
155 |
+
another myth.
|
156 |
+
|
157 |
+
Q. Why are hurricanes named?
|
158 |
+
|
159 |
+
A tropical cyclone is given a name when it becomes a tropical storm. It's much easier to
|
160 |
+
remember the name of a storm than try to track it by using latitude and longitude. It also helps
|
161 |
+
prevent confusion when there is more than one tropical storm or hurricane occurring at the
|
162 |
+
same time.
|
163 |
+
|
164 |
+
In 1953, the U.S. Weather Bureau began assigning women's names to tropical storms. In 1979,
|
165 |
+
men's names were included on the list. The names are in alphabetical order, excluding the
|
166 |
+
letters Q, U, X, Y and Z.
|
167 |
+
|
168 |
+
Today, the list includes names of English, Spanish and French origin because these languages
|
169 |
+
are most commonly used by the countries in the Atlantic Basin. There are six lists of names.
|
170 |
+
Each list is used in rotation every six years.
|
171 |
+
|
172 |
+
Q. How and why are names retired?
|
173 |
+
A name is retired when the storm caused so many deaths or so much destruction that it would
|
174 |
+
be confusing or insensitive to use the name again. The World Meteorological Organization is in
|
175 |
+
charge of retiring hurricane names and choosing new names.
|
176 |
+
|
177 |
+
The headline-making hurricanes of 2004 -- Charley, Frances, Ivan and Jeanne -- have all been
|
178 |
+
retired. They will be replaced by Colin, Fiona, Igor, and Julia when the list is used again this
|
179 |
+
year.
|
180 |
+
|
181 |
+
Q. Does El Niño affect hurricanes?
|
182 |
+
It can. In years with an El Niño, there are typically fewer tropical storms and hurricanes because
|
183 |
+
vertical shear increases during El Niño years. The vertical shear can prevent tropical cyclones
|
184 |
+
from forming and can prevent storms from intensifying.
|
185 |
+
|
186 |
+
El Niño is a warming of the equatorial Pacific Ocean waters, which usually occurs every three to
|
187 |
+
seven years and affects weather patterns around the world.
|
188 |
+
|
189 |
+
La Niña is the opposite of El Niño and is characterized by cooler than normal ocean waters in
|
190 |
+
the tropical Pacific. In years with La Niña, researchers have found that there is an increased
|
191 |
+
number of hurricanes and an increased chance that the United States and Caribbean will
|
192 |
+
experience hurricanes.
|
193 |
+
|
frontend/public/pokemon-guide.txt
ADDED
@@ -0,0 +1,252 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
SCARLET POKEDEX
|
2 |
+
0001-00 Bulbasaur For some time after its birth, it uses the nutrients that are packed into the seed on its back in order to grow.
|
3 |
+
0002-00 Ivysaur The more sunlight Ivysaur bathes in, the more strength wells up within it, allowing the bud on its back to grow larger.
|
4 |
+
0003-00 Venusaur While it basks in the sun, it can convert the light into energy. As a result, it is more powerful in the summertime.
|
5 |
+
0004-00 Charmander The flame on its tail shows the strength of its life-force. If Charmander is weak, the flame also burns weakly.
|
6 |
+
0005-00 Charmeleon When it swings its burning tail, the temperature around it rises higher and higher, tormenting its opponents.
|
7 |
+
0006-00 Charizard If Charizard becomes truly angered, the flame at the tip of its tail burns in a light blue shade.
|
8 |
+
0007-00 Squirtle After birth, its back swells and hardens into a shell. It sprays a potent foam from its mouth.
|
9 |
+
0008-00 Wartortle Wartortle’s long, furry tail is a symbol of longevity, so this Pokémon is quite popular among older people.
|
10 |
+
0009-00 Blastoise It deliberately increases its body weight so it can withstand the recoil of the water jets it fires.
|
11 |
+
0023-00 Ekans It can freely detach its jaw to swallow large prey whole. It can become too heavy to move, however.
|
12 |
+
0024-00 Arbok The pattern on its belly appears to be a frightening face. Weak foes will flee just at the sight of the pattern.
|
13 |
+
0025-00 Pikachu When it is angered, it immediately discharges the energy stored in the pouches in its cheeks.
|
14 |
+
0026-00 Raichu Its tail discharges electricity into the ground, protecting it from getting shocked.
|
15 |
+
0027-00 Sandshrew It digs deep burrows to live in. When in danger, it rolls up its body to withstand attacks.
|
16 |
+
0027-01 Sandshrew-1 It lives on snowy mountains. Its steel shell is very hard—so much so, it can’t roll its body up into a ball.
|
17 |
+
0028-00 Sandslash It is adept at attacking with the spines on its back and its sharp claws while quickly scurrying about.
|
18 |
+
0028-01 Sandslash-1 This Pokémon’s steel spikes are sheathed in ice. Stabs from these spikes cause deep wounds and severe frostbite as well.
|
19 |
+
0035-00 Clefairy On nights with a full moon, Clefairy gather from all over and dance. Bathing in moonlight makes them float.
|
20 |
+
0036-00 Clefable Said to live in quiet, remote mountains, this type of fairy has a strong aversion to being seen.
|
21 |
+
0037-00 Vulpix If it is attacked by an enemy that is stronger than itself, it feigns injury to fool the enemy and escapes.
|
22 |
+
0037-01 Vulpix-1 They live together in a skulk, helping one another. Before eating their prey, they freeze it solid with their −58 degree Fahrenheit breath.
|
23 |
+
0038-00 Ninetales Some legends claim that each of its nine tails has its own unique type of special mystical power.
|
24 |
+
0038-01 Ninetales-1 Possessing a calm demeanor, this Pokémon was revered as a deity incarnate before it was identified as a regional variant of Ninetales.
|
25 |
+
0039-00 Jigglypuff When its huge eyes waver, it sings a mysteriously soothing melody that lulls its enemies to sleep.
|
26 |
+
0040-00 Wigglytuff It has a very fine fur. Take care not to make it angry, or it may inflate steadily and hit with a body slam.
|
27 |
+
0043-00 Oddish Its scientific name is Oddium wanderus. It is said to cover distances as far as 1,000 feet when night falls, walking on its two roots.
|
28 |
+
0044-00 Gloom The fluid that oozes from its mouth isn’t drool. It is a nectar that is used to attract prey.
|
29 |
+
0045-00 Vileplume The bud bursts into bloom with a bang. It then starts scattering allergenic, poisonous pollen.
|
30 |
+
0048-00 Venonat Poison oozes from all over its body. It catches small bug Pokémon at night that are attracted by light.
|
31 |
+
0049-00 Venomoth The wings are covered with dustlike scales. Every time it flaps its wings, it looses highly toxic dust.
|
32 |
+
0050-00 Diglett It lives about one yard underground, where it feeds on plant roots. It sometimes appears aboveground.
|
33 |
+
0050-01 Diglett-1 The things growing from its head are whiskers that have become metallic. Diglett communicates with its comrades by waving them.
|
34 |
+
0051-00 Dugtrio Its three heads bob separately up and down to loosen the soil nearby, making it easier for it to burrow.
|
35 |
+
0051-01 Dugtrio-1 Its shining gold whiskers are advanced sensors that can detect vibrations from sounds several miles away.
|
36 |
+
0052-00 Meowth All it does is sleep during the daytime. At night, it patrols its territory with its eyes aglow.
|
37 |
+
0053-00 Persian Although its fur has many admirers, it is tough to raise as a pet because of its fickle meanness.
|
38 |
+
0054-00 Psyduck It is constantly wracked by a headache. When the headache turns intense, it begins using mysterious powers.
|
39 |
+
0055-00 Golduck When it swims at full speed using its long, webbed limbs, its forehead somehow begins to glow.
|
40 |
+
0056-00 Mankey It lives in groups in the treetops. If it loses sight of its group, it becomes infuriated by its loneliness.
|
41 |
+
0057-00 Primeape It becomes wildly furious if it even senses someone looking at it. It chases anyone that meets its glare.
|
42 |
+
0058-00 Growlithe It has a brave and trustworthy nature. It fearlessly stands up to bigger and stronger foes.
|
43 |
+
0059-00 Arcanine An ancient picture scroll shows that people were captivated by its movement as it ran through prairies.
|
44 |
+
0060-00 Poliwag The swirl on its belly is its insides showing through the skin. It appears more clearly after Poliwag eats.
|
45 |
+
0061-00 Poliwhirl Its two legs are well developed. Even though it can live on the ground, it prefers living in water.
|
46 |
+
0062-00 Poliwrath Although it’s skilled in a style of dynamic swimming that uses all its muscles, for some reason it lives on dry land.
|
47 |
+
0069-00 Bellsprout No matter what Bellsprout is doing, if it detects movement nearby, it will immediately react by reaching out with its thin vines.
|
48 |
+
0070-00 Weepinbell Even though it is filled with acid, it does not melt because it also oozes a protective fluid.
|
49 |
+
0071-00 Victreebel It lures prey into its mouth with a nectar-like aroma. The helpless prey is melted with a dissolving fluid.
|
50 |
+
0072-00 Tentacool When the tide goes out, dehydrated Tentacool can be found left behind on the shore.
|
51 |
+
0073-00 Tentacruel On the rare occasions that large outbreaks of Tentacruel occur, all fish Pokémon disappear from the surrounding sea.
|
52 |
+
0074-00 Geodude At rest, it looks just like a rock. Carelessly stepping on it will make it swing its fists angrily.
|
53 |
+
0074-01 Geodude-1 Its body is a magnetic stone. Iron sand attaches firmly to the portions of its body that are particularly magnetic.
|
54 |
+
0075-00 Graveler A slow walker, it rolls to move. It pays no attention to any object that happens to be in its path.
|
55 |
+
0075-01 Graveler-1 They eat rocks and often get into a scrap over them. The impact of Graveler smashing together causes a flash of light and a booming noise.
|
56 |
+
0076-00 Golem It is enclosed in a hard shell that is as rugged as slabs of rock. It sheds skin once a year to grow larger.
|
57 |
+
0076-01 Golem-1 It’s grumpy and stubborn. If you upset it, it discharges electricity from the surface of its body and growls with a voice like thunder.
|
58 |
+
0079-00 Slowpoke It is incredibly slow and dopey. It takes five seconds for it to feel pain when under attack.
|
59 |
+
0079-01 Slowpoke-1 It gives off a stimulating scent because of chemicals that have seeped into its body from the spice that it eats as its staple food.
|
60 |
+
0080-00 Slowbro When a Slowpoke went hunting in the sea, its tail was bitten by a Shellder. That made it evolve into Slowbro.
|
61 |
+
0080-02 Slowbro-2 Shellder seems blissful over the taste of Slowbro even though the toxins seeping from the bite have caused Shellder to faint.
|
62 |
+
0081-00 Magnemite The electromagnetic waves emitted by the units at the sides of its head expel antigravity, which allows it to float.
|
63 |
+
0082-00 Magneton Three Magnemite are linked by a strong magnetic force. Earaches will occur if you get too close.
|
64 |
+
0084-00 Doduo Its twin heads have exactly the same genes and battle in perfect sync with each other.
|
65 |
+
0085-00 Dodrio It now has three hearts and three sets of lungs. Though it can’t run as fast as Doduo, Dodrio can keep running for longer stretches of time.
|
66 |
+
0086-00 Seel The protrusion on its head is very hard. It is used for bashing through thick ice.
|
67 |
+
0087-00 Dewgong It sleeps under shallow ocean waters during the day, then looks for food at night when it’s colder.
|
68 |
+
0088-00 Grimer Born from sludge, these Pokémon now gather in polluted places and increase the bacteria in their bodies.
|
69 |
+
0088-01 Grimer-1 They store their toxins inside their bodies, so unlike Grimer from other regions, they don’t smell bad even up close.
|
70 |
+
0089-00 Muk It’s thickly covered with a filthy, vile sludge. It is so toxic, even its footprints contain poison.
|
71 |
+
0089-01 Muk-1 There are over a hundred kinds of poison inside its body. Chemical reactions between different poisons are the source of its vitality.
|
72 |
+
0090-00 Shellder It is encased in a shell that is harder than diamond. Inside, however, it is surprisingly tender.
|
73 |
+
0091-00 Cloyster Cloyster that live in seas with harsh tidal currents grow large, sharp spikes on their shells.
|
74 |
+
0092-00 Gastly It wraps its opponent in its gas-like body, slowly weakening its prey by poisoning it through the skin.
|
75 |
+
0093-00 Haunter It likes to lurk in the dark and tap shoulders with a gaseous hand. Its touch causes endless shuddering.
|
76 |
+
0094-00 Gengar To steal the life of its target, it slips into the prey’s shadow and silently waits for an opportunity.
|
77 |
+
0096-00 Drowzee It remembers every dream it eats. It rarely eats the dreams of adults because children’s are much tastier.
|
78 |
+
0097-00 Hypno When it locks eyes with an enemy, it will use a mix of psi moves, such as Hypnosis and Confusion.
|
79 |
+
0100-00 Voltorb It rolls to move. If the ground is uneven, a sudden jolt from hitting a bump can cause it to explode.
|
80 |
+
0101-00 Electrode The more energy it charges up, the faster it gets. But this also makes it more likely to explode.
|
81 |
+
0102-00 Exeggcute If you touch one of Exeggcute’s heads, mistaking it for an egg, the other heads will quickly gather and attack you in a swarm.
|
82 |
+
0103-00 Exeggutor It is called the Walking Jungle. Each of the nuts has a face and a will of its own.
|
83 |
+
0103-01 Exeggutor-1 It swings its long neck like a whip and smacks its head into opponents. This makes Exeggutor itself a little dizzy too.
|
84 |
+
0106-00 Hitmonlee At the exact moment it lands a kick on its target, Hitmonlee hardens the muscles on the sole of its foot, maximizing the power of the kick.
|
85 |
+
0107-00 Hitmonchan It corners its foes with combo punches from both sides, then finishes them off with a single straight punch launched at over 300 mph.
|
86 |
+
0109-00 Koffing Toxic gas is held within its thin, balloon-shaped body, so it can cause massive explosions.
|
87 |
+
0110-00 Weezing Top-grade perfume is made using its internal poison gases by diluting them to the highest level.
|
88 |
+
0111-00 Rhyhorn Rhyhorn claims an area with over a six mile radius as its territory. It apparently forgets where this territory is when running, however.
|
89 |
+
0112-00 Rhydon The horn of a Rhydon is powerful enough to crush raw diamonds. These Pokémon polish their horns by bashing them together.
|
90 |
+
0113-00 Chansey This kindly Pokémon lays highly nutritious eggs and shares them with injured Pokémon or people.
|
91 |
+
0116-00 Horsea If attacked—even by a large enemy—Horsea effortlessly swims to safety by utilizing its well-developed dorsal fin.
|
92 |
+
0117-00 Seadra The male raises the young. If it is approached while caring for young, it will use its toxic spines to fend off the intruder.
|
93 |
+
0123-00 Scyther It slashes through grass with its sharp scythes, moving too fast for the human eye to track.
|
94 |
+
0125-00 Electabuzz Its body constantly discharges electricity. Getting close to it will make your hair stand on end.
|
95 |
+
0126-00 Magmar Found near the mouth of a volcano. This fire-breather’s body temperature is nearly 2,200 degrees Fahrenheit.
|
96 |
+
0128-00 Tauros When it targets an enemy, it charges furiously while whipping its body with its long tails.
|
97 |
+
0128-01 Tauros-1 This Pokémon has a muscular body and excels at close-quarters combat. It uses its short horns to strike the opponent’s weak spots.
|
98 |
+
0128-02 Tauros-2 When heated by fire energy, its horns can get hotter than 1,800 degrees Fahrenheit. Those gored by them will suffer both wounds and burns.
|
99 |
+
0128-03 Tauros-3 This Pokémon blasts water from holes on the tips of its horns—the high-pressure jets pierce right through Tauros’s enemies.
|
100 |
+
0129-00 Magikarp An underpowered, pathetic Pokémon. It may jump high on rare occasions but never more than seven feet.
|
101 |
+
0130-00 Gyarados Once it appears, it goes on a rampage. It remains enraged until it demolishes everything around it.
|
102 |
+
0131-00 Lapras It ferries people across the sea on its back. It may sing an enchanting cry if it is in a good mood.
|
103 |
+
0132-00 Ditto Its transformation ability is perfect. However, if made to laugh, it can’t maintain its disguise.
|
104 |
+
0133-00 Eevee Its ability to evolve into many forms allows it to adapt smoothly and perfectly to any environment.
|
105 |
+
0134-00 Vaporeon It lives close to water. Its long tail is ridged with a fin, which is often mistaken for a mermaid’s.
|
106 |
+
0135-00 Jolteon It concentrates the weak electric charges emitted by its cells and launches wicked lightning bolts.
|
107 |
+
0136-00 Flareon Inhaled air is carried to its flame sac, heated, and exhaled as fire that reaches over 3,000 degrees Fahrenheit.
|
108 |
+
0137-00 Porygon It is an artificial Pokémon. Since it doesn’t breathe, people are excited by its potential to be useful in any environment.
|
109 |
+
0143-00 Snorlax This gluttonous Pokémon eats constantly, apart from when it’s asleep. It devours nearly 900 pounds of food per day.
|
110 |
+
0147-00 Dratini It sheds many layers of skin as it grows larger. During this process, it is protected by a rapid waterfall.
|
111 |
+
0148-00 Dragonair They say that if it emits an aura from its whole body, the weather will begin to change instantly.
|
112 |
+
0149-00 Dragonite It is said that somewhere in the ocean lies an island where these gather. Only they live there.
|
113 |
+
0152-00 Chikorita It loves to bask in the sunlight. It uses the leaf on its head to seek out warm places.
|
114 |
+
0153-00 Bayleef The spicy scent that wafts from around Bayleef’s neck somehow makes those who smell it want to fight.
|
115 |
+
0154-00 Meganium Anyone who stands beside it becomes refreshed, just as if they were soaking in the soothing atmosphere of a forest.
|
116 |
+
0155-00 Cyndaquil It usually stays hunched over. If it is angry or surprised, it shoots flames out of its back.
|
117 |
+
0156-00 Quilava Before battle, it turns its back on its opponent to demonstrate how ferociously its fire blazes.
|
118 |
+
0157-00 Typhlosion It has a secret, devastating move. It rubs its blazing fur to cause huge explosions.
|
119 |
+
0158-00 Totodile Its powerful, well-developed jaws are capable of crushing anything. Even its Trainer must be careful.
|
120 |
+
0159-00 Croconaw The tips of its fangs are slanted backward. Once those fangs clamp down, the prey has no hope of escape.
|
121 |
+
0160-00 Feraligatr When it bites with its massive and powerful jaws, it shakes its head and savagely tears its victim up.
|
122 |
+
0161-00 Sentret This Pokémon is extremely cautious. Its supple tail is well muscled and firm to the touch.
|
123 |
+
0162-00 Furret It raises its offspring inside a long, narrow nest. Once they’re old enough, it takes them outside the nest to prepare them for independence.
|
124 |
+
0163-00 Hoothoot Hoothoot’s internal clock is precise at all times. It tilts its head in a fixed rhythm.
|
125 |
+
0164-00 Noctowl Its eyes are specially adapted. They concentrate even faint light and enable it to see in the dark.
|
126 |
+
0167-00 Spinarak Even while there are prey ensnared in its nest of spun thread, Spinarak will wait motionlessly until darkness falls.
|
127 |
+
0168-00 Ariados A single strand of a special thread is endlessly spun out of its rear. The thread leads back to its nest.
|
128 |
+
0170-00 Chinchou It lives in ocean depths beyond the reach of sunlight. It flashes lights on its antennae to communicate with others of its kind.
|
129 |
+
0171-00 Lanturn Portions of its dorsal fin mutated, becoming the parts that glow brightly to lure prey.
|
130 |
+
0172-00 Pichu It is unskilled at storing electric power. Any kind of shock causes it to discharge energy spontaneously.
|
131 |
+
0173-00 Cleffa On late nights illuminated by shooting stars, it gazes intently skyward, as if thinking of its home.
|
132 |
+
0174-00 Igglybuff Its body has a faintly sweet scent and is bouncy and soft. If it bounces even once, it cannot stop.
|
133 |
+
0179-00 Mareep If static electricity builds in its body, its fleece doubles in volume. Touching it will shock you.
|
134 |
+
0180-00 Flaaffy As a result of storing too much electricity, it developed patches where even downy wool won’t grow.
|
135 |
+
0181-00 Ampharos The bright light on its tail can be seen far away. It has been treasured since ancient times as a beacon.
|
136 |
+
0182-00 Bellossom Due to the effects of the Sun Stone, it is now active during the daytime. It likes to dance in pools of sunlight.
|
137 |
+
0183-00 Marill The fur on its body naturally repels water. It can stay dry even when it plays in the water.
|
138 |
+
0184-00 Azumarill Its long ears are superb sensors. It can distinguish the movements of things in water and tell what they are.
|
139 |
+
0185-00 Sudowoodo Although it always pretends to be a tree, its composition appears more similar to rock than to vegetation.
|
140 |
+
0186-00 Politoed If Poliwag and Poliwhirl hear its echoing cry, they respond by gathering from far and wide.
|
141 |
+
0187-00 Hoppip This Pokémon is blown across vast distances by the wind. It is unclear where the Hoppip of Paldea originally came from.
|
142 |
+
0188-00 Skiploom Skiploom enthusiasts can apparently tell where a Skiploom was born by the scent drifting from the flower on the Pokémon’s head.
|
143 |
+
0189-00 Jumpluff Jumpluff travels on seasonal winds. Once its cotton spores run out, its journey ends, as does its life.
|
144 |
+
0190-00 Aipom It lives atop tall trees. When leaping from branch to branch, it deftly uses its tail for balance.
|
145 |
+
0191-00 Sunkern It suddenly falls out of the sky in the morning. Knowing it’s weak, it simply feeds until it evolves.
|
146 |
+
0192-00 Sunflora In the daytime, it rushes about in a hectic manner, but it comes to a complete stop when the sun sets.
|
147 |
+
0193-00 Yanma As Yanma surveys its territory, it periodically stops to hover in place by flapping its wings at high speeds.
|
148 |
+
0194-00 Wooper A transparent mucous membrane covers its body. Touching it bare-handed will cause a tingling numbness.
|
149 |
+
0194-01 Wooper-1 After losing a territorial struggle, Wooper began living on land. The Pokémon changed over time, developing a poisonous film to protect its body.
|
150 |
+
0195-00 Quagsire This carefree Pokémon has an easygoing nature. While swimming, it always bumps into boat hulls.
|
151 |
+
0196-00 Espeon The tip of its forked tail quivers when it is predicting its opponent’s next move.
|
152 |
+
0197-00 Umbreon When exposed to the moon’s aura, the rings on its body glow faintly and it gains a mysterious power.
|
153 |
+
0198-00 Murkrow Feared and loathed by many, it is believed to bring misfortune to all those who see it at night.
|
154 |
+
0199-00 Slowking When its head was bitten, toxins entered Slowpoke’s head and unlocked an extraordinary power.
|
155 |
+
0199-01 Slowking-1 It administers its potions to weakened Pokémon it sees. These potions are derived from poison and secreted from holes in Slowking’s horns.
|
156 |
+
0200-00 Misdreavus This Pokémon startles people in the middle of the night. It gathers fear as its energy.
|
157 |
+
0203-00 Girafarig Though very small, the brain in its tail is still considered an important organ because it emits powerful psychic energy.
|
158 |
+
0204-00 Pineco It likes to make its shell thicker by adding layers of tree bark. The additional weight doesn’t bother it.
|
159 |
+
0205-00 Forretress It’s usually found hanging on to a fat tree trunk. It shoots out bits of its shell when it sees action.
|
160 |
+
0206-00 Dunsparce It creates mazes in dark locations. When spotted, it flees into the ground by digging with its tail.
|
161 |
+
0207-00 Gligar It builds its nest on a steep cliff. When it is done gliding, it hops along the ground back to its nest.
|
162 |
+
0209-00 Snubbull In truth, it is a cowardly Pokémon. It growls eagerly in order to hide its fear from its opponent.
|
163 |
+
0210-00 Granbull It is actually timid and easily spooked. If attacked, it desperately flails its limbs about in an attempt to repel its opponent.
|
164 |
+
0211-00 Qwilfish Be cautious if this Pokémon starts sucking in water—it will soon attack by scattering the toxic spikes that grow all over its body.
|
165 |
+
0211-01 Qwilfish-1 It lives just offshore in cold parts of the world. Its poisonous spikes are thicker and shorter than those of other regions’ Qwilfish.
|
166 |
+
0212-00 Scizor This Pokémon’s pincers, which contain steel, can crush any hard object they get ahold of into bits.
|
167 |
+
0214-00 Heracross It loves sweet nectar. To keep all the nectar to itself, it hurls rivals away with its prized horn.
|
168 |
+
0215-00 Sneasel This cunning Pokémon hides under the cover of darkness, waiting to attack its prey.
|
169 |
+
0216-00 Teddiursa This Pokémon discreetly follows Combee to find their hive. It scoops up big dollops of honey in its palms to eat.
|
170 |
+
0217-00 Ursaring It usually wears a hardened expression, but when it’s licking up honey—which it loves—the joy it feels will cause it to break into a wide grin.
|
171 |
+
0218-00 Slugma Its lava body can cool and chip away at times, but a magma bath will heal it right up.
|
172 |
+
0219-00 Magcargo This Pokémon lives near the craters of volcanoes. It stores fire energy in its shell of cooled and hardened magma.
|
173 |
+
0220-00 Swinub It searches for food by digging into the ground with its snout. Even frozen ground doesn’t give it any trouble.
|
174 |
+
0221-00 Piloswine Covered by a shaggy coat, it is resistant to the cold. Its tusks of ice thicken when it snows.
|
175 |
+
0225-00 Delibird It carries food all day long. There are tales about lost people who were saved by the food it had.
|
176 |
+
0227-00 Skarmory Its sturdy, heavy-looking iron body is actually thin and light, so it can fly at speeds over 180 mph.
|
177 |
+
0228-00 Houndour It is smart enough to hunt in packs. It uses a variety of cries for communicating with others.
|
178 |
+
0229-00 Houndoom If you are burned by the flames it shoots from its mouth, the pain will never go away.
|
179 |
+
0230-00 Kingdra It sleeps deep on the ocean floor to build its energy. It is said to cause tornadoes as it wakes.
|
180 |
+
0231-00 Phanpy This Pokémon lives and nests on a riverbank. After playing in the mud, it won’t be able to settle down unless it washes its body.
|
181 |
+
0232-00 Donphan Donphan is covered in tough hide, so even being hit by a car won’t faze this Pokémon. However, it is extremely susceptible to rain.
|
182 |
+
0233-00 Porygon2 This artificial Pokémon evolved thanks to cutting- edge science. It sometimes displays behavior that is not in its programming.
|
183 |
+
0234-00 Stantler This Pokémon apparently used to live in much harsher environments, and thus it once had stronger psychic powers than it does now.
|
184 |
+
0235-00 Smeargle Once a Smeargle reaches adulthood, it will have other members of its species leave paw prints on its back.
|
185 |
+
0236-00 Tyrogue This earnest Pokémon battles all sorts of opponents, searching for the fighting style that suits it best.
|
186 |
+
0237-00 Hitmontop This Pokémon is adept at dance-like kicks. The horn atop its head is made from the same substance that generally forms fur and claws.
|
187 |
+
0239-00 Elekid It loves violent thunder. The space between its horns flickers bluish white when it is charging energy.
|
188 |
+
0240-00 Magby Each and every time it inhales and exhales, sparks leak from its mouth and nostrils.
|
189 |
+
0242-00 Blissey Anyone who takes even one taste of Blissey’s egg becomes unfailingly caring and pleasant to everyone.
|
190 |
+
0246-00 Larvitar Born deep underground, this Pokémon becomes a pupa after eating enough dirt to make a mountain.
|
191 |
+
0247-00 Pupitar This pupa flies around wildly by venting with great force the gas pressurized inside its body.
|
192 |
+
0248-00 Tyranitar Extremely strong, it can change the landscape. It is so insolent that it doesn’t care about others.
|
193 |
+
0252-00 Treecko The small hooks on the soles of its feet latch on to walls and ceilings, so it will never fall even while hanging upside down.
|
194 |
+
0253-00 Grovyle Its strongly developed thigh muscles give it astounding agility and jumping performance.
|
195 |
+
0254-00 Sceptile It agilely flits through the jungle and uses the sharp-edged leaves on its arms to cut down its prey.
|
196 |
+
0255-00 Torchic Torchic feels toasty warm if you hug it. It has a flame sac inside its belly, and the flames burn continuously as long as Torchic has life in it.
|
197 |
+
0256-00 Combusken It boosts its concentration by emitting harsh cries. Its kicks have outstanding destructive power.
|
198 |
+
0257-00 Blaziken When facing a tough foe, it looses flames from its wrists. Its powerful legs let it jump clear over buildings.
|
199 |
+
0258-00 Mudkip It has the power to crush large boulders into pieces. To rest, it buries itself in mud at the bottom of a river.
|
200 |
+
0259-00 Marshtomp Living on muddy ground that provides poor footing has served to train its lower body and caused it to develop sturdy legs.
|
201 |
+
0260-00 Swampert Its arms are hard as rock. With one swing, it can break an enormous boulder into pieces.
|
202 |
+
0261-00 Poochyena It bares its large fangs and barks vigorously to try to intimidate opponents, but this is actually a manifestation of its cowardly nature.
|
203 |
+
0262-00 Mightyena They faithfully follow the orders of their leader. Prey targeted by Mightyena is never allowed to escape the outstanding teamwork of its pursuers.
|
204 |
+
0270-00 Lotad The leaf on its head is naturally dirt repellent and will stay clean even after transporting Pokémon that are covered in mud.
|
205 |
+
0271-00 Lombre Old folklore in Kitakami tells of a mischievous child who was reborn as a Pokémon.
|
206 |
+
0272-00 Ludicolo There are structures throughout its whole body that produce energy when hit by sound waves with a cheerful rhythm.
|
207 |
+
0273-00 Seedot To expand its habitat, it pretends to be a nut so that bird Pokémon will pick it up and carry it far away.
|
208 |
+
0274-00 Nuzleaf It leads a quiet life deep in the forest. If anything wanders into its territory, Nuzleaf will warn the intruder by sounding its grass flute.
|
209 |
+
0275-00 Shiftry It is said that when Shiftry flaps its leafy fans atop ancient trees, chilly winds blow and the season rolls into winter.
|
210 |
+
0278-00 Wingull It soars high in the sky, riding on updrafts like a glider. It carries food tucked in its bill.
|
211 |
+
0279-00 Pelipper It is a flying transporter that carries small Pokémon in its beak. It bobs on the waves to rest its wings.
|
212 |
+
0280-00 Ralts The horns on its head provide a strong power that enables it to sense people’s emotions.
|
213 |
+
0281-00 Kirlia It has a psychic power that enables it to distort the space around it and see into the future.
|
214 |
+
0282-00 Gardevoir To protect its Trainer, it will expend all its psychic power to create a small black hole.
|
215 |
+
0283-00 Surskit They usually live on ponds, but after an evening shower, they may appear on puddles in towns.
|
216 |
+
0284-00 Masquerain It flaps its four wings to hover and fly freely in any direction—to and fro and sideways.
|
217 |
+
0285-00 Shroomish It prefers damp places. By day it remains still in the forest shade. It releases toxic powder from its head.
|
218 |
+
0286-00 Breloom It scatters poisonous spores and throws powerful punches while its foe is hampered by inhaled spores.
|
219 |
+
0287-00 Slakoth It sleeps for 20 hours every day. Making drowsy those that see it is one of its abilities.
|
220 |
+
0288-00 Vigoroth Its stress level rises if it cannot keep moving constantly. Too much stress makes it feel sick.
|
221 |
+
0289-00 Slaking It is the world’s most slothful Pokémon. However, it can exert horrifying power by releasing pent-up energy all at once.
|
222 |
+
0296-00 Makuhita It grows stronger by enduring harsh training. It is a gutsy Pokémon that can withstand any attack.
|
223 |
+
0297-00 Hariyama It loves challenging others to tests of strength. It has the power to stop a train with a slap.
|
224 |
+
0298-00 Azurill Its tail bounces like a rubber ball. It flings that tail around to fight opponents bigger than itself.
|
225 |
+
0299-00 Nosepass The magnet in Nosepass’s nose provides an unerring compass, making this Pokémon an excellent partner for Trainers going on a journey.
|
226 |
+
0302-00 Sableye It dwells in the darkness of caves. It uses its sharp claws to dig up gems to nourish itself.
|
227 |
+
0307-00 Meditite It never skips its daily yoga training. It heightens its inner strength through meditation.
|
228 |
+
0308-00 Medicham Through yoga training, it gained the psychic power to predict its foe’s next move.
|
229 |
+
0311-00 Plusle It cheers on partners while scattering sparks from its body. It climbs telephone poles to absorb electricity.
|
230 |
+
0312-00 Minun Exposure to electricity from Minun and Plusle promotes blood circulation and relaxes muscles.
|
231 |
+
0313-00 Volbeat It lives around clean ponds. At night, its rear lights up. It converses with others by flashing its light.
|
232 |
+
0314-00 Illumise Illumise uses its sweet scent to guide Volbeat, having them form over 200 patterns in the night sky.
|
233 |
+
0316-00 Gulpin There is nothing its stomach can’t digest. While it is digesting, vile, overpowering gases are expelled.
|
234 |
+
0317-00 Swalot It gulps anything that fits in its mouth. Its special enzymes can dissolve anything.
|
235 |
+
0322-00 Numel Magma of almost 2,200 degrees Fahrenheit courses through its body. When it grows cold, the magma hardens and slows it.
|
236 |
+
0323-00 Camerupt It lives in the crater of a volcano. It is well known that the humps on its back erupt every 10 years.
|
237 |
+
0324-00 Torkoal It burns coal inside its shell for energy. It blows out black soot if it is endangered.
|
238 |
+
0325-00 Spoink Spoink will die if it stops bouncing. The pearl on its head amplifies its psychic powers.
|
239 |
+
0326-00 Grumpig It can perform odd dance steps to influence foes. Its style of dancing became hugely popular overseas.
|
240 |
+
0328-00 Trapinch This Pokémon lives in arid deserts. It patiently awaits prey inside its funnel- shaped nest.
|
241 |
+
0329-00 Vibrava Rather than using its underdeveloped wings for flight, it rubs them together, emitting ultrasonic waves to attack its enemies.
|
242 |
+
0330-00 Flygon Known as the Desert Spirit, this Pokémon hides in the sandstorms it causes by beating its wings.
|
243 |
+
0331-00 Cacnea It prefers harsh environments, such as deserts. It can survive for 30 days on water stored in its body.
|
244 |
+
0332-00 Cacturne Packs of them follow travelers through the desert until the travelers can no longer move.
|
245 |
+
0333-00 Swablu It constantly grooms its cotton-like wings. It takes a shower to clean itself if it becomes dirty.
|
246 |
+
0334-00 Altaria If it bonds with a person, it will gently envelop the friend with its soft wings, then hum.
|
247 |
+
0335-00 Zangoose It’s Seviper’s archrival. To threaten those it encounters, it fans out the claws on its front paws.
|
248 |
+
0336-00 Seviper It sharpens its swordlike tail on hard rocks. It hides in tall grass and strikes unwary prey with venomous fangs.
|
249 |
+
0339-00 Barboach Its two whiskers provide a sensitive radar. Even in muddy waters, it can detect its prey’s location.
|
250 |
+
0340-00 Whiscash It is extremely protective of its territory. If any foe approaches, it attacks using vicious tremors.
|
251 |
+
0341-00 Corphish It came from overseas. It is a very hardy creature that will quickly proliferate, even in polluted streams.
|
252 |
+
0342-00 Crawdaunt Loving to battle, this Pokémon pinches all Pokémon that enter its territory with its pincers and throws them out.
|
frontend/public/the-bitter-lesson.html
ADDED
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<html><head>
|
2 |
+
<title>The Bitter Lesson</title>
|
3 |
+
<style type="text/css">
|
4 |
+
<!--
|
5 |
+
.style1 {font-family: Palatino}
|
6 |
+
-->
|
7 |
+
</style>
|
8 |
+
</head>
|
9 |
+
<body>
|
10 |
+
<span class="style1">
|
11 |
+
<h1>The Bitter Lesson<br>
|
12 |
+
</h1>
|
13 |
+
<h2>Rich Sutton</h2>
|
14 |
+
<h3>March 13, 2019<br>
|
15 |
+
</h3>
|
16 |
+
The biggest lesson that can be read from 70 years of AI research is
|
17 |
+
that general methods that leverage computation are ultimately the most
|
18 |
+
effective, and by a large margin. The ultimate reason for this is
|
19 |
+
Moore's law, or rather its generalization of continued exponentially
|
20 |
+
falling cost per unit of computation. Most AI research has been
|
21 |
+
conducted as if the computation available to the agent were constant
|
22 |
+
(in which case leveraging human knowledge would be one of the only ways
|
23 |
+
to improve performance) but, over a slightly longer time than a typical
|
24 |
+
research project, massively more computation inevitably becomes
|
25 |
+
available. Seeking an improvement that makes a difference in the
|
26 |
+
shorter term, researchers seek to leverage their human knowledge of the
|
27 |
+
domain, but the only thing that matters in the long run is the
|
28 |
+
leveraging of computation. These two need not run counter to each
|
29 |
+
other, but in practice they tend to. Time spent on one is time not
|
30 |
+
spent on the other. There are psychological commitments to investment
|
31 |
+
in one approach or the other. And the human-knowledge approach tends to
|
32 |
+
complicate methods in ways that make them less suited to taking
|
33 |
+
advantage of general methods leveraging computation. There were
|
34 |
+
many examples of AI researchers' belated learning of this bitter
|
35 |
+
lesson,
|
36 |
+
and it is instructive to review some of the most prominent.<br>
|
37 |
+
<br>
|
38 |
+
In computer chess, the methods that defeated the world champion,
|
39 |
+
Kasparov, in 1997, were based on massive, deep search. At the time,
|
40 |
+
this was looked upon with dismay by the majority of computer-chess
|
41 |
+
researchers who had pursued methods that leveraged human understanding
|
42 |
+
of the special structure of chess. When a simpler, search-based
|
43 |
+
approach with special hardware and software proved vastly more
|
44 |
+
effective, these human-knowledge-based chess researchers were not good
|
45 |
+
losers. They said that ``brute force" search may have won this time,
|
46 |
+
but it was not a general strategy, and anyway it was not how people
|
47 |
+
played chess. These researchers wanted methods based on human input to
|
48 |
+
win and were disappointed when they did not.<br>
|
49 |
+
<br>
|
50 |
+
A similar pattern of research progress was seen in computer Go, only
|
51 |
+
delayed by a further 20 years. Enormous initial efforts went into
|
52 |
+
avoiding search by taking advantage of human knowledge, or of the
|
53 |
+
special features of the game, but all those efforts proved irrelevant,
|
54 |
+
or worse, once search was applied effectively at scale. Also important
|
55 |
+
was the use of learning by self play to learn a value function (as it
|
56 |
+
was in many other games and even in chess, although learning did not
|
57 |
+
play a big role in the 1997 program that first beat a world champion).
|
58 |
+
Learning by self play, and learning in general, is like search in that
|
59 |
+
it enables massive computation to be brought to bear. Search and
|
60 |
+
learning are the two most important classes of techniques for utilizing
|
61 |
+
massive amounts of computation in AI research. In computer Go, as in
|
62 |
+
computer chess, researchers' initial effort was directed towards
|
63 |
+
utilizing human understanding (so that less search was needed) and only
|
64 |
+
much later was much greater success had by embracing search and
|
65 |
+
learning.<br>
|
66 |
+
<br>
|
67 |
+
In speech recognition, there was an early competition, sponsored by
|
68 |
+
DARPA, in the 1970s. Entrants included a host of special methods that
|
69 |
+
took
|
70 |
+
advantage of human knowledge---knowledge of words, of phonemes, of the
|
71 |
+
human vocal tract, etc. On the other side were newer methods that were
|
72 |
+
more statistical in nature and did much more computation, based on
|
73 |
+
hidden Markov models (HMMs). Again, the statistical methods won out
|
74 |
+
over the human-knowledge-based methods. This led to a major change in
|
75 |
+
all of natural language processing, gradually over decades, where
|
76 |
+
statistics and computation came to dominate the field. The recent rise
|
77 |
+
of deep learning in speech recognition is the most recent step in this
|
78 |
+
consistent direction. Deep learning methods rely even less on human
|
79 |
+
knowledge, and use even more computation, together with learning on
|
80 |
+
huge training sets, to produce dramatically better speech recognition
|
81 |
+
systems. As in the games, researchers always tried to make systems that
|
82 |
+
worked the way the researchers thought their own minds worked---they
|
83 |
+
tried to put that knowledge in their systems---but it proved ultimately
|
84 |
+
counterproductive, and a colossal waste of researcher's time, when,
|
85 |
+
through Moore's law, massive computation became available and a means
|
86 |
+
was found to put it to good use.<br>
|
87 |
+
<br>
|
88 |
+
In computer vision, there has been a similar pattern. Early methods
|
89 |
+
conceived of vision as searching for edges, or generalized cylinders,
|
90 |
+
or in terms of SIFT features. But today all this is discarded. Modern
|
91 |
+
deep-learning neural networks use only the notions of convolution and
|
92 |
+
certain kinds of invariances, and perform much better.<br>
|
93 |
+
<br>
|
94 |
+
This is a big lesson. As a field, we still have not thoroughly learned
|
95 |
+
it, as we are continuing to make the same kind of mistakes. To see
|
96 |
+
this, and to effectively resist it, we have to understand the appeal of
|
97 |
+
these mistakes. We have to learn the bitter lesson that building in how
|
98 |
+
we think we think does not work in the long run. The bitter lesson is
|
99 |
+
based on the historical observations that 1) AI researchers have often
|
100 |
+
tried to build knowledge into their agents, 2) this always helps in the
|
101 |
+
short term, and is personally satisfying to the researcher, but 3) in
|
102 |
+
the long run it plateaus and even inhibits further progress, and 4)
|
103 |
+
breakthrough progress eventually arrives by an opposing approach based
|
104 |
+
on scaling computation by search and learning. The eventual success is
|
105 |
+
tinged with bitterness, and often incompletely digested, because it is
|
106 |
+
success over a favored, human-centric approach. <br>
|
107 |
+
<br>
|
108 |
+
One thing that should be learned from the bitter lesson is the great
|
109 |
+
power of general purpose methods, of methods that continue to scale
|
110 |
+
with increased computation even as the available computation becomes
|
111 |
+
very great. The two methods that seem to scale arbitrarily in this way
|
112 |
+
are <span style="font-style: italic;">search</span> and <span style="font-style: italic;">learning</span>. <br>
|
113 |
+
<br>
|
114 |
+
The second general point to be learned from the bitter lesson is that
|
115 |
+
the actual contents of minds are tremendously, irredeemably complex; we
|
116 |
+
should stop trying to find simple ways to think about the contents of
|
117 |
+
minds, such as simple ways to think about space, objects, multiple
|
118 |
+
agents, or symmetries. All these are part of the arbitrary,
|
119 |
+
intrinsically-complex, outside world. They are not what should be built
|
120 |
+
in, as their complexity is endless; instead we should build in only the
|
121 |
+
meta-methods that can find and capture this arbitrary complexity.
|
122 |
+
Essential to these methods is that they can find good approximations,
|
123 |
+
but the search for them should be by our methods, not by us. We want AI
|
124 |
+
agents that can discover like we can, not which contain what we have
|
125 |
+
discovered. Building in our discoveries only makes it harder to see how
|
126 |
+
the discovering process can be done.<br>
|
127 |
+
<br>
|
128 |
+
</span>
|
129 |
+
|
130 |
+
|
131 |
+
</body></html>
|
frontend/src/components/BenchmarkCreateForm.jsx
CHANGED
@@ -8,6 +8,8 @@ import {
|
|
8 |
Snackbar,
|
9 |
Alert,
|
10 |
Grid,
|
|
|
|
|
11 |
} from "@mui/material";
|
12 |
import { alpha } from "@mui/material/styles";
|
13 |
import CloudUploadIcon from "@mui/icons-material/CloudUpload";
|
@@ -16,6 +18,7 @@ import InsertDriveFileIcon from "@mui/icons-material/InsertDriveFile";
|
|
16 |
import DescriptionIcon from "@mui/icons-material/Description";
|
17 |
import ArticleIcon from "@mui/icons-material/Article";
|
18 |
import MenuBookIcon from "@mui/icons-material/MenuBook";
|
|
|
19 |
import { useThemeMode } from "../hooks/useThemeMode";
|
20 |
import getTheme from "../config/theme";
|
21 |
import API_CONFIG from "../config/api";
|
@@ -37,6 +40,7 @@ function BenchmarkCreateForm({ onStartGeneration }) {
|
|
37 |
const [openSnackbar, setOpenSnackbar] = useState(false);
|
38 |
const [selectedDocument, setSelectedDocument] = useState(null);
|
39 |
const [isDefaultDocument, setIsDefaultDocument] = useState(false);
|
|
|
40 |
const fileInputRef = useRef(null);
|
41 |
|
42 |
const defaultDocuments = [
|
@@ -180,6 +184,42 @@ function BenchmarkCreateForm({ onStartGeneration }) {
|
|
180 |
}
|
181 |
};
|
182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
return (
|
184 |
<Box sx={{ mt: -2 }}>
|
185 |
<Typography
|
@@ -205,7 +245,7 @@ function BenchmarkCreateForm({ onStartGeneration }) {
|
|
205 |
cursor: "pointer",
|
206 |
transition: "all 0.2s ease",
|
207 |
height: "100%",
|
208 |
-
|
209 |
border:
|
210 |
selectedDocument?.id === doc.id
|
211 |
? `2px solid ${theme.palette.primary.main}`
|
@@ -217,6 +257,36 @@ function BenchmarkCreateForm({ onStartGeneration }) {
|
|
217 |
}}
|
218 |
onClick={() => handleDefaultDocClick(doc)}
|
219 |
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
220 |
<Box sx={{ color: "primary.main", mb: 1 }}>{doc.icon}</Box>
|
221 |
<Typography variant="subtitle1" component="div" gutterBottom>
|
222 |
{doc.name}
|
|
|
8 |
Snackbar,
|
9 |
Alert,
|
10 |
Grid,
|
11 |
+
IconButton,
|
12 |
+
Tooltip,
|
13 |
} from "@mui/material";
|
14 |
import { alpha } from "@mui/material/styles";
|
15 |
import CloudUploadIcon from "@mui/icons-material/CloudUpload";
|
|
|
18 |
import DescriptionIcon from "@mui/icons-material/Description";
|
19 |
import ArticleIcon from "@mui/icons-material/Article";
|
20 |
import MenuBookIcon from "@mui/icons-material/MenuBook";
|
21 |
+
import DownloadIcon from "@mui/icons-material/Download";
|
22 |
import { useThemeMode } from "../hooks/useThemeMode";
|
23 |
import getTheme from "../config/theme";
|
24 |
import API_CONFIG from "../config/api";
|
|
|
40 |
const [openSnackbar, setOpenSnackbar] = useState(false);
|
41 |
const [selectedDocument, setSelectedDocument] = useState(null);
|
42 |
const [isDefaultDocument, setIsDefaultDocument] = useState(false);
|
43 |
+
const [isDownloading, setIsDownloading] = useState(false);
|
44 |
const fileInputRef = useRef(null);
|
45 |
|
46 |
const defaultDocuments = [
|
|
|
184 |
}
|
185 |
};
|
186 |
|
187 |
+
const handleDownloadDocument = async (doc) => {
|
188 |
+
setIsDownloading(true);
|
189 |
+
try {
|
190 |
+
const link = document.createElement("a");
|
191 |
+
link.href = `/${doc.id}.${
|
192 |
+
doc.id === "the-bitter-lesson"
|
193 |
+
? "html"
|
194 |
+
: doc.id === "hurricane-faq"
|
195 |
+
? "md"
|
196 |
+
: "txt"
|
197 |
+
}`;
|
198 |
+
link.setAttribute(
|
199 |
+
"download",
|
200 |
+
`${doc.name}.${
|
201 |
+
doc.id === "the-bitter-lesson"
|
202 |
+
? "html"
|
203 |
+
: doc.id === "hurricane-faq"
|
204 |
+
? "md"
|
205 |
+
: "txt"
|
206 |
+
}`
|
207 |
+
);
|
208 |
+
document.body.appendChild(link);
|
209 |
+
link.click();
|
210 |
+
document.body.removeChild(link);
|
211 |
+
} catch (error) {
|
212 |
+
console.error("Error downloading document:", error);
|
213 |
+
setUploadStatus({
|
214 |
+
success: false,
|
215 |
+
message: "Error downloading document",
|
216 |
+
});
|
217 |
+
setOpenSnackbar(true);
|
218 |
+
} finally {
|
219 |
+
setIsDownloading(false);
|
220 |
+
}
|
221 |
+
};
|
222 |
+
|
223 |
return (
|
224 |
<Box sx={{ mt: -2 }}>
|
225 |
<Typography
|
|
|
245 |
cursor: "pointer",
|
246 |
transition: "all 0.2s ease",
|
247 |
height: "100%",
|
248 |
+
position: "relative",
|
249 |
border:
|
250 |
selectedDocument?.id === doc.id
|
251 |
? `2px solid ${theme.palette.primary.main}`
|
|
|
257 |
}}
|
258 |
onClick={() => handleDefaultDocClick(doc)}
|
259 |
>
|
260 |
+
<Tooltip title="Download document">
|
261 |
+
<IconButton
|
262 |
+
onClick={(e) => {
|
263 |
+
e.stopPropagation();
|
264 |
+
handleDownloadDocument(doc);
|
265 |
+
}}
|
266 |
+
sx={{
|
267 |
+
position: "absolute",
|
268 |
+
top: 4,
|
269 |
+
right: 4,
|
270 |
+
color: "text.secondary",
|
271 |
+
opacity: 0.6,
|
272 |
+
"&:hover": {
|
273 |
+
opacity: 1,
|
274 |
+
backgroundColor: alpha(theme.palette.primary.main, 0.05),
|
275 |
+
},
|
276 |
+
padding: 0.5,
|
277 |
+
"& .MuiSvgIcon-root": {
|
278 |
+
fontSize: 18,
|
279 |
+
},
|
280 |
+
}}
|
281 |
+
disabled={isDownloading}
|
282 |
+
>
|
283 |
+
{isDownloading ? (
|
284 |
+
<CircularProgress size={16} />
|
285 |
+
) : (
|
286 |
+
<DownloadIcon />
|
287 |
+
)}
|
288 |
+
</IconButton>
|
289 |
+
</Tooltip>
|
290 |
<Box sx={{ color: "primary.main", mb: 1 }}>{doc.icon}</Box>
|
291 |
<Typography variant="subtitle1" component="div" gutterBottom>
|
292 |
{doc.name}
|
frontend/src/components/ExternalLinks.jsx
CHANGED
@@ -76,6 +76,18 @@ const ExternalLinks = () => {
|
|
76 |
Documentation
|
77 |
<OpenInNewIcon sx={{ fontSize: "0.75rem", ml: 0.5, opacity: 0.6 }} />
|
78 |
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
</Typography>
|
80 |
<Box sx={{ display: "flex", alignItems: "center" }}>
|
81 |
<Tooltip title="Share">
|
|
|
76 |
Documentation
|
77 |
<OpenInNewIcon sx={{ fontSize: "0.75rem", ml: 0.5, opacity: 0.6 }} />
|
78 |
</a>
|
79 |
+
<Typography component="span" sx={{ opacity: 0.5 }}>
|
80 |
+
•
|
81 |
+
</Typography>
|
82 |
+
<a
|
83 |
+
href="https://huggingface.co/spaces/yourbench/yourbench-demo"
|
84 |
+
target="_blank"
|
85 |
+
rel="noopener noreferrer"
|
86 |
+
style={{ textDecoration: "none", color: "inherit" }}
|
87 |
+
>
|
88 |
+
Full demo
|
89 |
+
<OpenInNewIcon sx={{ fontSize: "0.75rem", ml: 0.5, opacity: 0.6 }} />
|
90 |
+
</a>
|
91 |
</Typography>
|
92 |
<Box sx={{ display: "flex", alignItems: "center" }}>
|
93 |
<Tooltip title="Share">
|