├── templates ├── system_message.txt ├── final_answer.txt ├── extractive_summary.txt └── classification.txt ├── WiM.png ├── writing_in_the_margins_logo.png ├── requirements.txt ├── run_phi3.sh ├── run_qwen2.sh ├── run_llama3_1.sh ├── README.md ├── .gitignore ├── wim.py ├── run.py └── examples ├── babilong_8k.json └── babilong_16k.json /templates/system_message.txt: -------------------------------------------------------------------------------- 1 | {user_header} 2 | ``` -------------------------------------------------------------------------------- /WiM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/writer/writing-in-the-margins/HEAD/WiM.png -------------------------------------------------------------------------------- /templates/final_answer.txt: -------------------------------------------------------------------------------- 1 | ``` 2 | {margins} 3 | {query} 4 | {generation_header} -------------------------------------------------------------------------------- /writing_in_the_margins_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/writer/writing-in-the-margins/HEAD/writing_in_the_margins_logo.png -------------------------------------------------------------------------------- /templates/extractive_summary.txt: -------------------------------------------------------------------------------- 1 | ``` 2 | Given the above context, extract all information relevant to the query: "{query}". If the context is not relevant to the query, answer "I don't know."{generation_header} -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | torch==2.4.0 2 | torchaudio==2.4.0 3 | torchvision==0.19.0 4 | transformers==4.43.3 5 | fire==0.6.0 6 | nltk==3.8.1 7 | numpy==1.26.4 8 | tiktoken==0.7.0 9 | rich==13.7.1 10 | accelerate==0.33.0 11 | flash-attn==2.6.3 12 | -------------------------------------------------------------------------------- /run_phi3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | USER_HEADER=$"<|user|>\n" 4 | GENERATION_HEADER=$"<|end|>\n<|assistant|>\n" 5 | 6 | python run.py --model_id "microsoft/Phi-3-medium-128k-instruct" \ 7 | --attn_implementation "flash_attention_2" \ 8 | --input_file "babilong_64k.json" \ 9 | --user_header "$USER_HEADER" \ 10 | --generation_header "$GENERATION_HEADER" \ 11 | --dtype "bfloat16" \ 12 | --min_tokens_segment "4096" \ 13 | --max_new_tokens_extractive_summary "100" \ 14 | --max_new_tokens_final_answer "50" \ 15 | --max_new_tokens_classification "10" \ 16 | --do_sample "True" \ 17 | --top_p "0.9" \ 18 | --temperature "1.0" \ 19 | --early_stopping "True" \ 20 | --print_step_summary "True" -------------------------------------------------------------------------------- /run_qwen2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | USER_HEADER=$"<|im_start|>user\n" 4 | GENERATION_HEADER=$"<|im_end|>\n<|im_start|>assistant\n" 5 | 6 | python run.py --model_id "Qwen/Qwen2-7B-Instruct" \ 7 | --attn_implementation "flash_attention_2" \ 8 | --input_file "babilong_64k.json" \ 9 | --user_header "$USER_HEADER" \ 10 | --generation_header "$GENERATION_HEADER" \ 11 | --dtype "bfloat16" \ 12 | --min_tokens_segment "4096" \ 13 | --max_new_tokens_extractive_summary "100" \ 14 | --max_new_tokens_final_answer "50" \ 15 | --max_new_tokens_classification "10" \ 16 | --do_sample "True" \ 17 | --top_p "0.9" \ 18 | --temperature "1.0" \ 19 | --early_stopping "True" \ 20 | --print_step_summary "True" -------------------------------------------------------------------------------- /templates/classification.txt: -------------------------------------------------------------------------------- 1 | {user_header} 2 | I asked an LLM assistant whether a piece of document is related to the query: "{query}". This is its answer: 3 | ```text 4 | {answer} 5 | ``` 6 | Should I save it for later? 7 | Here are rules: 8 | - Answer YES if the answer contains information about the query. 9 | - Answer NO if the answer says the piece isn't related to the query. 10 | 11 | Provide the answer in the format: #. 12 | Here is are example answers: 13 | 14 | YES#Yes, the information contains an excerpt from a book that is related to the question. 15 | NO#No, the LLM assistant concluded the information isn't relevant. 16 | 17 | Don't add any other comments, all your remarks should be included in the "Explanation" section. 18 | {generation_header} -------------------------------------------------------------------------------- /run_llama3_1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | USER_HEADER=$"<|start_header_id|>user<|end_header_id|>\n\n" 4 | GENERATION_HEADER=$"<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n" 5 | 6 | python run.py --model_id "meta-llama/Meta-Llama-3.1-8B-Instruct" \ 7 | --attn_implementation "flash_attention_2" \ 8 | --input_file "babilong_64k.json" \ 9 | --user_header "$USER_HEADER" \ 10 | --generation_header "$GENERATION_HEADER" \ 11 | --dtype "bfloat16" \ 12 | --min_tokens_segment "4096" \ 13 | --max_new_tokens_extractive_summary "100" \ 14 | --max_new_tokens_final_answer "50" \ 15 | --max_new_tokens_classification "10" \ 16 | --do_sample "True" \ 17 | --top_p "0.9" \ 18 | --temperature "1.0" \ 19 | --early_stopping "True" \ 20 | --print_step_summary "True" -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Writing in the Margins 2 | 3 |

4 | 5 |

6 | 7 | ## Paper 8 | 9 | [Writing in the Margins: Better Inference Pattern for Long Context Retrieval](https://arxiv.org/abs/2408.14906) 10 | 11 | ## Introduction 12 | 13 | "Writing in the Margins" (WiM) is a new approach that leverages the chunked prefilling of the KV-Cache to perform a segment-wise inference, which enable efficient processing of extensive context along with generation and classification of intermediate information ("margins"), that guide the model towards specific tasks. This method increases computation marginally while significantly enhancing the performance of off-the-shelf models without the need for fine-tuning Additionally, we show how the proposed pattern fits into interactive retrieval design that provides end- users with ongoing updates about the progress of context processing and pinpoints the integration of relevant information into the final response. 14 | 15 | ## Using the code 16 | 17 | ### Install the requirements 18 | 19 | 20 | 1. Clone the repository 21 | 1. Create a new virtual environment using PyEnv or Conda. 22 | 1. Install the required packages using `pip install -r requirements.txt` 23 | 24 | ### Run the examples 25 | 26 | There are three examples for LLaMA 3.1, Phi3 and Qwen2. They can easily be run using one of the scripts, e.g. `./run_qwen2.sh`. 27 | 28 | ### How does it work 29 | 30 | WiM works by prefilling the KV-Cache in chunks and then leveraging the partially prefilled KV-Cache to extract a "margin note" which is then used at the end of the prompt to provide additional information to the model before asking a question. 31 | 32 | The logic is in the `run.py` file and it resembles the pseudocode in the paper. The basic steps are as follows: 33 | 34 | 1. Prefill the system message to the KV-Cache (`templates/system_message.txt`) 35 | 1. Segment the context into chunks, and for each chunk: 36 | 1. Add the chunk (segment) into the KV-Cache 37 | 1. Add an extractive summary prompt to the KV-Cache (`templates/extractive_summary.txt`) 38 | 1. Use the partially-prefilled context and the extractive summary prompt to generate a margin. 39 | 1. Classify the margin using the same model or an auxiliary model. The classification of a margin can be overlapped with the prefilling of the context into the KV-Cache as described in the Appendix A of the paper. We do not provide an implementation of it. The prompt used to classify a margin is in `templates/classification.txt` 40 | 1. Add all the margins that are classified as relevant to the KV-Cache and ask the question (`templates/final_answer.txt`) 41 | 1. Generate the answer using the context, the relevant margins and the question. 42 | 43 | Depending on the language model used, it may be necessary to format the input using the chat tags supported by the model. For that reason, in each script, we define the headers used by each language model which are then replaced in the prompt templates before being sent to the model. 44 | 45 | All the steps are done sequentially, so the progress can be displayed to the user, along with the generated margins, to provide a visual feedback that allows early-exit (early stop of the inference). 46 | 47 | ### Code structure 48 | 49 | The logic for prefilling and shrinking the KV-Cache is in the `wim.py` file, while the WiM algorithm as shown in the paper is implemented in `run.py`. 50 | 51 | ## Citing 52 | 53 | If you use WiM in your research, please cite with the following BibText 54 | 55 | ```bibtext 56 | @misc{russak2024writingmarginsbetterinference, 57 | title={Writing in the Margins: Better Inference Pattern for Long Context Retrieval}, 58 | author={Melisa Russak and Umar Jamil and Christopher Bryant and Kiran Kamble and Axel Magnuson and Mateusz Russak and Waseem AlShikh}, 59 | year={2024}, 60 | eprint={2408.14906}, 61 | archivePrefix={arXiv}, 62 | primaryClass={cs.CL}, 63 | url={https://arxiv.org/abs/2408.14906}, 64 | } 65 | ``` 66 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # poetry 98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 99 | # This is especially recommended for binary packages to ensure reproducibility, and is more 100 | # commonly ignored for libraries. 101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 102 | #poetry.lock 103 | 104 | # pdm 105 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 106 | #pdm.lock 107 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 108 | # in version control. 109 | # https://pdm.fming.dev/latest/usage/project/#working-with-version-control 110 | .pdm.toml 111 | .pdm-python 112 | .pdm-build/ 113 | 114 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 115 | __pypackages__/ 116 | 117 | # Celery stuff 118 | celerybeat-schedule 119 | celerybeat.pid 120 | 121 | # SageMath parsed files 122 | *.sage.py 123 | 124 | # Environments 125 | .env 126 | .venv 127 | env/ 128 | venv/ 129 | ENV/ 130 | env.bak/ 131 | venv.bak/ 132 | 133 | # Spyder project settings 134 | .spyderproject 135 | .spyproject 136 | 137 | # Rope project settings 138 | .ropeproject 139 | 140 | # mkdocs documentation 141 | /site 142 | 143 | # mypy 144 | .mypy_cache/ 145 | .dmypy.json 146 | dmypy.json 147 | 148 | # Pyre type checker 149 | .pyre/ 150 | 151 | # pytype static type analyzer 152 | .pytype/ 153 | 154 | # Cython debug symbols 155 | cython_debug/ 156 | 157 | # PyCharm 158 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 159 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 160 | # and can be added to the global gitignore or merged into this file. For a more nuclear 161 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 162 | #.idea/ 163 | 164 | .vscode/ 165 | -------------------------------------------------------------------------------- /wim.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from transformers import AutoModel, AutoTokenizer, DynamicCache, Cache 3 | from dataclasses import dataclass 4 | from typing import List, Dict, Any, Callable 5 | 6 | 7 | def _sample_top_p(probs: torch.Tensor, p: float): 8 | # (B, vocab_size) 9 | probs_sort, probs_idx = torch.sort(probs, dim=-1, descending=True) 10 | # (B, vocab_size) 11 | probs_sum = torch.cumsum(probs_sort, dim=-1) 12 | # (B, vocab_size) 13 | # (Substracting "probs_sort" shifts the cumulative sum by 1 position to the right before masking) 14 | mask = probs_sum - probs_sort > p 15 | # Zero out all the probabilities of tokens that are not selected by the Top P 16 | probs_sort[mask] = 0.0 17 | # Redistribute the probabilities so that they sum up to 1. 18 | probs_sort.div_(probs_sort.sum(dim=-1, keepdim=True)) 19 | # Sample a token (its index) from the top p distribution 20 | next_token = torch.multinomial(probs_sort, num_samples=1) 21 | # Get the token position in the vocabulary corresponding to the sampled index 22 | next_token = torch.gather(probs_idx, -1, next_token) 23 | return next_token 24 | 25 | class WIMInference: 26 | 27 | def __init__( 28 | self, model, tokenizer 29 | ) -> None: 30 | self.model = model 31 | self.tokenizer = tokenizer 32 | self.wim_kv_cache = DynamicCache() 33 | self.classifier_kv_cache = DynamicCache() 34 | 35 | def _prefill_tokens( 36 | self, 37 | input_ids: torch.Tensor, 38 | attention_mask: torch.Tensor, 39 | cache_positions: torch.Tensor, 40 | kv_cache: Cache, 41 | ): 42 | with torch.no_grad(): 43 | outputs = self.model( 44 | input_ids=input_ids, 45 | attention_mask=attention_mask, 46 | cache_position=cache_positions, 47 | use_cache=True, 48 | past_key_values=kv_cache, 49 | ) 50 | return outputs 51 | 52 | def shrink_kv_cache_from_end(self, new_size: int, kv_cache: Cache): 53 | 54 | def resize_tensor_list(token_list): 55 | for layer_idx in range(len(token_list)): 56 | token_list[layer_idx] = token_list[layer_idx][:, :, :new_size, :] 57 | 58 | resize_tensor_list(kv_cache.key_cache) 59 | resize_tensor_list(kv_cache.value_cache) 60 | kv_cache._seen_tokens = new_size 61 | 62 | def generate_text_with_kv_cache( 63 | self, 64 | max_new_tokens: int, 65 | previous_logits: torch.Tensor, 66 | do_sample: bool, 67 | top_p: float, 68 | temperature: float, 69 | early_stopping: bool, 70 | kv_cache: Cache, 71 | ) -> str: 72 | generated_tokens = [] 73 | 74 | # This is needed to create the cache_position tensor 75 | next_token_pos = kv_cache.get_seq_length() 76 | 77 | # Use the logits from the prefilling to generate the first token 78 | logits = previous_logits 79 | 80 | for _ in range(max_new_tokens): 81 | # Select the last token from the logits 82 | next_token_logits = logits[:, -1, :] 83 | if do_sample: 84 | # Divide the logits by the temperature 85 | next_token_logits = next_token_logits / temperature 86 | # Apply the softmax 87 | next_token_probs = torch.nn.functional.softmax( 88 | next_token_logits, dim=-1 89 | ) 90 | next_token = _sample_top_p(next_token_probs, top_p) 91 | else: 92 | # Select the token with the highest probability 93 | next_token = torch.argmax(next_token_logits, dim=-1, keepdim=True) 94 | assert next_token.size() == (1, 1) 95 | # Remove the batch dimension 96 | next_token = next_token.squeeze(0) 97 | generated_tokens.append(next_token) 98 | # Stop if we reached the EOS token 99 | if next_token.item() == self.tokenizer.eos_token_id and early_stopping: 100 | break 101 | # Use the generated token as input for the next step 102 | generation_input_ids = next_token.unsqueeze(-1) 103 | kv_cache_seq_len = kv_cache.get_seq_length() 104 | generation_attention_mask = torch.ones( 105 | (1, kv_cache_seq_len + 1), device=next_token.device, dtype=torch.long 106 | ) 107 | generation_cache_position = torch.tensor( 108 | [next_token_pos], device=next_token.device 109 | ) 110 | 111 | with torch.no_grad(): 112 | # Get the model outputs 113 | outputs = self.model( 114 | input_ids=generation_input_ids, 115 | attention_mask=generation_attention_mask, 116 | cache_position=generation_cache_position, 117 | use_cache=True, 118 | past_key_values=kv_cache, 119 | ) 120 | logits = outputs.logits 121 | next_token_pos += 1 122 | 123 | generated_tokens = torch.cat(generated_tokens, dim=-1) 124 | # Decode the generated tokens 125 | decoded = self.tokenizer.decode(generated_tokens, skip_special_tokens=True) 126 | return decoded 127 | 128 | def prefill_text_with_kv_cache(self, text: str, kv_cache: Cache): 129 | # Tokenize the text 130 | inputs = self.tokenizer(text, return_tensors="pt") 131 | input_ids = inputs["input_ids"].to(self.model.device) 132 | seq_len = input_ids.size(1) 133 | attention_mask = inputs["attention_mask"].to(self.model.device) 134 | 135 | # If we have a KV-Cache, we need to extend the attention mask to account for tokens already in the KV-Cache 136 | if kv_cache.get_seq_length() > 0: 137 | kv_cache_seq_len = kv_cache.get_seq_length() 138 | attention_mask = torch.cat( 139 | [ 140 | torch.ones( 141 | attention_mask.shape[0], 142 | kv_cache_seq_len, 143 | dtype=attention_mask.dtype, 144 | device=attention_mask.device, 145 | ), 146 | attention_mask, 147 | ], 148 | dim=1, 149 | ) 150 | 151 | # Generate the cache positions for the tokens to be prefilled 152 | cache_positions = torch.arange( 153 | kv_cache.get_seq_length(), kv_cache.get_seq_length() + seq_len 154 | ).to(self.model.device) 155 | outputs = self._prefill_tokens(input_ids, attention_mask, cache_positions, kv_cache) 156 | return kv_cache.get_seq_length(), seq_len, outputs 157 | -------------------------------------------------------------------------------- /run.py: -------------------------------------------------------------------------------- 1 | from transformers import AutoTokenizer, AutoModelForCausalLM 2 | import torch 3 | import fire 4 | import os 5 | from nltk import sent_tokenize 6 | import tiktoken 7 | from wim import WIMInference 8 | from rich import print 9 | import json 10 | 11 | TEMPLATES_FOLDER = "templates" 12 | EXAMPLES_FOLDER = "examples" 13 | 14 | 15 | def parse_classifier_output(output: str) -> bool: 16 | output = output.replace("```", "").strip() 17 | output = output.split("#")[0] 18 | if output.endswith("YES"): 19 | return True 20 | else: 21 | return False 22 | 23 | 24 | def apply_special_tokens(text: str, special_tokens: dict) -> str: 25 | for token, replacement in special_tokens.items(): 26 | text = text.replace(token, replacement) 27 | return text 28 | 29 | 30 | def read_from_file(base_folder, file_path): 31 | with open(os.path.join(base_folder, file_path), "r") as file: 32 | return file.read() 33 | 34 | 35 | def num_tokens_from_string(tokenizer, string: str) -> int: 36 | num_tokens = len(tokenizer.encode(string)) 37 | return num_tokens 38 | 39 | 40 | def chunk_text_to_segments(text, min_tokens_segment=4096): 41 | tokenizer = tiktoken.encoding_for_model("gpt-4-tubo") 42 | segments = [] 43 | current_segment = "" 44 | sentences = sent_tokenize(text) 45 | curr_tokens = 0 46 | for line in sentences: 47 | tokens = num_tokens_from_string(tokenizer, line) 48 | if curr_tokens + tokens > min_tokens_segment: 49 | segments.append(current_segment) 50 | current_segment = "" 51 | curr_tokens = 0 52 | else: 53 | current_segment += line + " " 54 | curr_tokens += tokens 55 | if current_segment: 56 | segments.append(current_segment) 57 | return segments 58 | 59 | 60 | def load_model(model_id: str, attn_impl: str, dtype: str): 61 | if attn_impl is None or len(attn_impl) == 0: 62 | attn_impl = "sdpa" 63 | 64 | model_dtype = torch.float32 65 | if dtype == "float16": 66 | model_dtype = torch.float16 67 | elif dtype == "float32": 68 | model_dtype = torch.float32 69 | elif dtype == "bfloat16": 70 | model_dtype = torch.bfloat16 71 | 72 | model = AutoModelForCausalLM.from_pretrained( 73 | model_id, 74 | device_map="auto", 75 | attn_implementation=attn_impl, 76 | torch_dtype=model_dtype, 77 | ).eval() 78 | return model 79 | 80 | 81 | def main( 82 | model_id: str = None, 83 | attn_implementation: str = None, 84 | input_file: str = None, 85 | user_header: str = None, 86 | generation_header: str = None, 87 | dtype: str = "bfloat16", 88 | min_tokens_segment: int = 4096, 89 | max_new_tokens_extractive_summary: int = 100, 90 | max_new_tokens_final_answer: int = 100, 91 | max_new_tokens_classification: int = 10, 92 | do_sample: bool = False, 93 | top_p: float = 0.9, 94 | temperature: float = 1.0, 95 | early_stopping: bool = True, 96 | print_step_summary: bool = False, 97 | ): 98 | run_params = locals() 99 | # Remove all variables that start with _ 100 | run_params = {k: v for k, v in run_params.items() if not k.startswith("_")} 101 | print(f"Parameters: {run_params}") 102 | 103 | # Load tokenizer and model 104 | tokenizer = AutoTokenizer.from_pretrained(model_id) 105 | model = load_model(model_id, attn_implementation, dtype) 106 | 107 | # Load the prompt templates 108 | template_extractive_summary = read_from_file( 109 | TEMPLATES_FOLDER, "extractive_summary.txt" 110 | ) 111 | template_classification = read_from_file(TEMPLATES_FOLDER, "classification.txt") 112 | template_system_message = read_from_file(TEMPLATES_FOLDER, "system_message.txt") 113 | template_final_answer = read_from_file(TEMPLATES_FOLDER, "final_answer.txt") 114 | 115 | # Load the example 116 | example = json.loads(read_from_file(EXAMPLES_FOLDER, input_file)) 117 | 118 | special_tokens = { 119 | "{user_header}": user_header, 120 | "{generation_header}": generation_header, 121 | "{query}": example["query"], 122 | } 123 | 124 | # Apply special tokens specific to the chosen model 125 | prompt_extractive_summary = apply_special_tokens( 126 | template_extractive_summary, special_tokens 127 | ) 128 | prompt_classification = apply_special_tokens( 129 | template_classification, special_tokens 130 | ) 131 | prompt_final_answer = apply_special_tokens(template_final_answer, special_tokens) 132 | prompt_system_message = apply_special_tokens( 133 | template_system_message, special_tokens 134 | ) 135 | 136 | segments = chunk_text_to_segments( 137 | example["context"], min_tokens_segment=min_tokens_segment 138 | ) 139 | print(f"Number of segments in the context: {len(segments)}") 140 | 141 | # Create the WIM instance 142 | wim = WIMInference(model, tokenizer) 143 | 144 | # Prefill the system message (it can also be concatenated with the first segment) 145 | # At this point the KV-Cache contains the following: 146 | # - The system message 147 | _, _, _ = wim.prefill_text_with_kv_cache( 148 | prompt_system_message, wim.wim_kv_cache 149 | ) 150 | 151 | positive_margins = [] 152 | 153 | with torch.no_grad(): 154 | for segment_index in range(len(segments)): 155 | # Prefill the next segment 156 | # Save how many tokens have been prefilled so far, without considering the tokens added by the question and the generated answer 157 | # At this point the KV-Cache contains the following: 158 | # - The system message 159 | # - Segment 0 160 | # - Segment 1 161 | # - ... 162 | segment = segments[segment_index] 163 | ( 164 | prefilled_tokens_before_extractive_summary, 165 | _, 166 | _, 167 | ) = wim.prefill_text_with_kv_cache(segment, wim.wim_kv_cache) 168 | 169 | # Prefill the extractive summary prompt 170 | # At this point the KV-Cache contains the following: 171 | # - The system message 172 | # - Segment 0 173 | # - Segment 1 174 | # - ... 175 | # - The extractive summary prompt 176 | _, _, extractive_summary_outputs = wim.prefill_text_with_kv_cache( 177 | prompt_extractive_summary, wim.wim_kv_cache 178 | ) 179 | 180 | # Generate the margin 181 | # At this point the KV-Cache contains the following: 182 | # - The system message 183 | # - Segment 0 184 | # - Segment 1 185 | # - ... 186 | # - The extractive summary prompt 187 | # - The generated margin 188 | margin = wim.generate_text_with_kv_cache( 189 | max_new_tokens=max_new_tokens_extractive_summary, 190 | previous_logits=extractive_summary_outputs["logits"], 191 | do_sample=do_sample, 192 | top_p=top_p, 193 | temperature=temperature, 194 | early_stopping=early_stopping, 195 | kv_cache=wim.wim_kv_cache, 196 | ) 197 | 198 | # We need to remove all the tokens added by the extractive summary and the generated margin 199 | # After this operation the KV-Cache will contain the following: 200 | # - The system message 201 | # - Segment 0 202 | # - Segment 1 203 | # - ... 204 | wim.shrink_kv_cache_from_end( 205 | new_size=prefilled_tokens_before_extractive_summary, 206 | kv_cache=wim.wim_kv_cache, 207 | ) 208 | 209 | # Now we can classify the margin using the model. 210 | # We use a separate KV-Cache for this operation, which is cleared after each classification 211 | classification_input = prompt_classification.format(answer=margin) 212 | _, _, classification_prompt_logits = wim.prefill_text_with_kv_cache( 213 | classification_input, wim.classifier_kv_cache 214 | ) 215 | classification_output = wim.generate_text_with_kv_cache( 216 | max_new_tokens=max_new_tokens_classification, 217 | previous_logits=classification_prompt_logits["logits"], 218 | do_sample=do_sample, 219 | top_p=top_p, 220 | temperature=temperature, 221 | early_stopping=early_stopping, 222 | kv_cache=wim.classifier_kv_cache, 223 | ) 224 | classification_result = parse_classifier_output(classification_output) 225 | 226 | # We can remove everything from the classifier KV-Cache as we don't need it anymore 227 | wim.shrink_kv_cache_from_end( 228 | new_size=0, kv_cache=wim.classifier_kv_cache 229 | ) 230 | 231 | if classification_result: 232 | positive_margins.append(margin) 233 | 234 | if print_step_summary: 235 | print( 236 | { 237 | "step": segment_index, 238 | "prefilled_tokens_so_far": wim.wim_kv_cache.get_seq_length(), 239 | "margin": margin.strip(), 240 | "classification_output": classification_output.strip(), 241 | "classification_result": classification_result, 242 | } 243 | ) 244 | 245 | # Prefill the concatenated margins and the prompt to ask the final answer 246 | concatenated_margins = "".join(positive_margins) 247 | prompt_final_answer = prompt_final_answer.format(margins=concatenated_margins) 248 | 249 | # Prefill the prompt for the final answer 250 | # At this point the KV-Cache contains the following: 251 | # - The system message 252 | # - Segment 0 253 | # - Segment 1 254 | # - ... 255 | # - The concatenated margins + the prompt for the final answer 256 | _, _, final_answer_prefill_outputs = wim.prefill_text_with_kv_cache( 257 | prompt_final_answer, wim.wim_kv_cache 258 | ) 259 | 260 | # Generate the final answer 261 | final_answer = wim.generate_text_with_kv_cache( 262 | max_new_tokens=max_new_tokens_final_answer, 263 | previous_logits=final_answer_prefill_outputs["logits"], 264 | do_sample=do_sample, 265 | top_p=top_p, 266 | temperature=temperature, 267 | early_stopping=early_stopping, 268 | kv_cache=wim.wim_kv_cache, 269 | ) 270 | 271 | print( 272 | { 273 | "final_answer": final_answer.strip(), 274 | "target": example["target"], 275 | } 276 | ) 277 | 278 | 279 | if __name__ == "__main__": 280 | with torch.no_grad(): 281 | fire.Fire(main) 282 | -------------------------------------------------------------------------------- /examples/babilong_8k.json: -------------------------------------------------------------------------------- 1 | { 2 | "context": "The\nLycosa has lost the last semblance of an animal, has become a nameless\nbristling thing that walks about. Falls are frequent and are followed\nby continual climbings. I perceive that I have reached the limits, not of the bearer's\ngood-will, but of equilibrium. The Spider would adopt an indefinite\nfurther number of foundlings, if the dimensions of her back afforded\nthem a firm hold. Let us restore each\nfamily to its mother, drawing at random from the lot. There must\nnecessarily be interchanges, but that is of no importance: real\nchildren and adopted children are the same thing in the Lycosa's eyes. One would like to know if, apart from my artifices, in circumstances\nwhere I do not interfere, the good-natured dry-nurse sometimes burdens\nherself with a supplementary family; it would also be interesting to\nlearn what comes of this association of lawful offspring and strangers. I have ample materials wherewith to obtain an answer to both questions. I have housed in the same cage two elderly matrons laden with\nyoungsters. Each has her home as far removed from the other's as the\nsize of the common pan permits. Proximity soon kindles fierce jealousies between those\nintolerant creatures, who are obliged to live far apart so as to secure\nadequate hunting-grounds. One morning I catch the two harridans fighting out their quarrel on the\nfloor. The loser is laid flat upon her back; the victress, belly to\nbelly with her adversary, clutches her with her legs and prevents her\nfrom moving a limb. Both have their poison-fangs wide open, ready to\nbite without yet daring, so mutually formidable are they. After a\ncertain period of waiting, during which the pair merely exchange\nthreats, the stronger of the two, the one on top, closes her lethal\nengine and grinds the head of the prostrate foe. Then she calmly\ndevours the deceased by small mouthfuls. Now what do the youngsters do, while their mother is being eaten? Easily consoled, heedless of the atrocious scene, they climb on the\nconqueror's back and quietly take their places among the lawful family. The ogress raises no objection, accepts them as her own. She makes a\nmeal off the mother and adopts the orphans. Let us add that, for many months yet, until the final emancipation\ncomes, she will carry them without drawing any distinction between them\nand her own young. Henceforth the two families, united in so tragic a\nfashion, will form but one. We see how greatly out of place it would be\nto speak, in this connection, of mother-love and its fond\nmanifestations. Does the Lycosa at least feed the younglings who, for seven months,\nswarm upon her back? Does she invite them to the banquet when she has\nsecured a prize? I thought so at first; and, anxious to assist at the\nfamily repast, I devoted special attention to watching the mothers eat. As a rule, the prey is consumed out of sight, in the burrow; but\nsometimes also a meal is taken on the threshold, in the open air. Besides, it is easy to rear the Lycosa and her family in a wire-gauze\ncage, with a layer of earth wherein the captive will never dream of\nsinking a well, such work being out of season. Well, while the mother munches, chews, expresses the juices and\nswallows, the youngsters do not budge from their camping-ground on her\nback. Not one quits its place nor gives a sign of wishing to slip down\nand join in the meal. Nor does the mother extend an invitation to them\nto come and recruit themselves, nor put any broken victuals aside for\nthem. She feeds and the others look on, or rather remain indifferent to\nwhat is happening. Their perfect quiet during the Lycosa's feast points\nto the possession of a stomach that knows no cravings. Then with what are they sustained, during their seven months'\nupbringing on the mother's back? One conceives a notion of exudations\nsupplied by the bearer's body, in which case the young would feed on\ntheir mother, after the manner of parasitic vermin, and gradually drain\nher strength. Never are they seen to put their mouths to\nthe skin that should be a sort of teat to them. On the other hand, the\nLycosa, far from being exhausted and shrivelling, keeps perfectly well\nand plump. She has the same pot-belly when she finishes rearing her\nyoung as when she began. She has not lost weight: far from it; on the\ncontrary, she has put on flesh: she has gained the wherewithal to beget\na new family next summer, one as numerous as to-day's. Once more, with what do the little ones keep up their strength? We do\nnot like to suggest reserves supplied by the egg as rectifying the\nanimal's expenditure of vital force, especially when we consider that\nthose reserves, themselves so close to nothing, must be economized in\nview of the silk, a material of the highest importance, of which a\nplentiful use will be made presently. There must be other powers at\nplay in the tiny animal's machinery. Total abstinence from food could be understood, if it were accompanied\nby inertia: immobility is not life. But the young Lycosae, though\nusually quiet on their mother's back, are at all times ready for\nexercise and for agile swarming. When they fall from the maternal\nperambulator, they briskly pick themselves up, briskly scramble up a\nleg and make their way to the top. It is a splendidly nimble and\nspirited performance. Besides, once seated, they have to keep a firm\nbalance in the mass; they have to stretch and stiffen their little\nlimbs in order to hang on to their neighbours. As a matter of fact,\nthere is no absolute rest for them. Now physiology teaches us that not\na fibre works without some expenditure of energy. The animal, which can\nbe likened, in no small measure, to our industrial machines, demands,\non the one hand, the renovation of its organism, which wears out with\nmovement, and, on the other, the maintenance of the heat transformed\ninto action. We can compare it with the locomotive-engine. As the iron\nhorse performs its work, it gradually wears out its pistons, its rods,\nits wheels, its boiler-tubes, all of which have to be made good from\ntime to time. The founder and the smith repair it, supply it, so to\nspeak, with 'plastic food,' the food that becomes embodied with the\nwhole and forms part of it. But, though it have just come from the\nengine-shop, it is still inert. To acquire the power of movement it\nmust receive from the stoker a supply of 'energy-producing food'; in\nother words, he lights a few shovelfuls of coal in its inside. As nothing is made from nothing, the egg\nsupplies first the materials of the new-born animal; then the plastic\nfood, the smith of living creatures, increases the body, up to a\ncertain limit, and renews it as it wears away. The stoker works at the\nsame time, without stopping. Fuel, the source of energy, makes but a\nshort stay in the system, where it is consumed and furnishes heat,\nwhence movement is derived. Warmed by its food, the\nanimal machine moves, walks, runs, jumps, swims, flies, sets its\nlocomotory apparatus going in a thousand manners. To return to the young Lycosae, they grow no larger until the period of\ntheir emancipation. I find them at the age of seven months the same as\nwhen I saw them at their birth. The egg supplied the materials\nnecessary for their tiny frames; and, as the loss of waste substance\nis, for the moment, excessively small, or even nil, additional plastic\nfood is not needed so long as the wee creature does not grow. In this\nrespect, the prolonged abstinence presents no difficulty. But there\nremains the question of energy-producing food, which is indispensable,\nfor the little Lycosa moves, when necessary, and very actively at that. To what shall we attribute the heat expended upon action, when the\nanimal takes absolutely no nourishment? We say to ourselves that, without being life,\na machine is something more than matter, for man has added a little of\nhis mind to it. Now the iron beast, consuming its ration of coal, is\nreally browsing the ancient foliage of arborescent ferns in which solar\nenergy has accumulated. Whether they mutually\ndevour one another or levy tribute on the plant, they invariably\nquicken themselves with the stimulant of the sun's heat, a heat stored\nin grass, fruit, seed and those which feed on such. The sun, the soul\nof the universe, is the supreme dispenser of energy. Instead of being served up through the intermediary of food and passing\nthrough the ignominious circuit of gastric chemistry, could not this\nsolar energy penetrate the animal directly and charge it with activity,\neven as the battery charges an accumulator with power? Why not live on\nsun, seeing that, after all, we find naught but sun in the fruits which\nwe consume? Chemical science, that bold revolutionary, promises to provide us with\nsynthetic foodstuffs. The laboratory and the factory will take the\nplace of the farm. Why should not physical science step in as well? It\nwould leave the preparation of plastic food to the chemist's retorts;\nit would reserve for itself that of energy-producing food which,\nreduced to its exact terms, ceases to be matter. With the aid of some\ningenious apparatus, it would pump into us our daily ration of solar\nenergy, to be later expended in movement, whereby the machine would be\nkept going without the often painful assistance of the stomach and its\nadjuncts. What a delightful world, where one could lunch off a ray of\nsunshine! Is it a dream, or the anticipation of a remote reality? The problem is\none of the most important that science can set us. Let us first hear\nthe evidence of the young Lycosae regarding its possibilities. For seven months, without any material nourishment, they expend\nstrength in moving. To wind up the mechanism of their muscles, they\nrecruit themselves direct with heat and light. During the time when she\nwas dragging the bag of eggs behind her, the mother, at the best\nmoments of the day, came and held up her pill to the sun. With her two\nhind-legs she lifted it out of the ground into the full light; slowly\nshe turned it and turned it, so that every side might receive its share\nof the vivifying rays. Well, this bath of life, which awakened the\ngerms, is now prolonged to keep the tender babes active. Daily, if the sky be clear, the Lycosa, carrying her young, comes up\nfrom the burrow, leans on the kerb and spends long hours basking in the\nsun. Here, on their mother's back, the youngsters stretch their limbs\ndelightedly, saturate themselves with heat, take in reserves of\nmotor-power, absorb energy. They are motionless; but, if I only blow upon them, they stampede as\nnimbly as though a hurricane were passing. Hurriedly, they disperse;\nhurriedly, they reassemble: a proof that, without material nourishment,\nthe little animal machine is always at full pressure, ready to work. When the shade comes, mother and sons go down again, surfeited with\nsolar emanations. The feast of energy at the Sun Tavern is finished for\nthe day. The fowling-snare is one of man's ingenious villainies. With lines,\npegs and poles, two large, earth- nets are stretched upon the\nground, one to the right, the other to the left of a bare surface. A\nlong cord, pulled at the right moment by the fowler, who hides in a\nbrushwood hut, works them and brings them together suddenly, like a\npair of shutters. Divided between the two nets are the cages of the decoy-birds--Linnets\nand Chaffinches, Greenfinches and Yellowhammers, Buntings and\nOrtolans--sharp-eared creatures which, on perceiving the distant\npassage of a flock of their own kind, forthwith utter a short calling\nnote. One of them, the Sambe, an irresistible tempter, hops about and\nflaps his wings in apparent freedom. A bit of twine fastens him to his\nconvict's stake. When, worn with fatigue and driven desperate by his\nvain attempts to get away, the sufferer lies down flat and refuses to\ndo his duty, the fowler is able to stimulate him without stirring from\nhis hut. A long string sets in motion a little lever working on a\npivot. Raised from the ground by this diabolical contrivance, the bird\nflies, falls down and flies up again at each jerk of the cord. The fowler waits, in the mild sunlight of the autumn morning. The Chaffinches chirp their rallying\ncry:\n\n\"Pinck! They are\ncoming, the simpletons; they swoop down upon the treacherous floor. With a rapid movement, the man in ambush pulls his string. The nets\nclose and the whole flock is caught. Man has wild beast's blood in his veins. The fowler hastens to the\nslaughter. With his thumb he stifles the beating of the captives'\nhearts, staves in their skulls. The little birds, so many piteous heads\nof game, will go to market, strung in dozens on a wire passed through\ntheir nostrils. For scoundrelly ingenuity, the Epeira's net can bear comparison with\nthe fowler's; it even surpasses it when, on patient study, the main\nfeatures of its supreme perfection stand revealed. What refinement of\nart for a mess of Flies! Nowhere, in the whole animal kingdom, has the\nneed to eat inspired a more cunning industry. If the reader will\nmeditate upon the description that follows, he will certainly share my\nadmiration. In bearing and colouring, Epeira fasciata is the handsomest of the\nSpiders of the South. On her fat belly, a mighty silk-warehouse nearly\nas large as a hazel-nut, are alternate yellow, black and silver sashes,\nto which she owes her epithet of Banded. Around that portly abdomen the\neight long legs, with their dark- and pale-brown rings, radiate like\nspokes. Any small prey suits her; and, as long as she can find supports for her\nweb, she settles wherever the Locust hops, wherever the Fly hovers,\nwherever the Dragon-fly dances or the Butterfly flits. As a rule,\nbecause of the greater abundance of game, she spreads her toils across\nsome brooklet, from bank to bank among the rushes. She also stretches\nthem, but not so assiduously, in the thickets of evergreen oak, on the\ns with the scrubby greenswards, dear to the Grasshoppers. Her hunting-weapon is a large upright web, whose outer boundary, which\nvaries according to the disposition of the ground, is fastened to the\nneighbouring branches by a number of moorings. Let us see, first of\nall, how the ropes which form the framework of the building are\nobtained. All day invisible, crouching amid the cypress-leaves, the Spider, at\nabout eight o'clock in the evening, solemnly emerges from her retreat\nand makes for the top of a branch. In this exalted position she sits\nfor sometime laying her plans with due regard to the locality; she\nconsults the weather, ascertains if the night will be fine. Then,\nsuddenly, with her eight legs widespread, she lets herself drop\nstraight down, hanging to the line that issues from her spinnerets. Just as the rope-maker obtains the even output of his hemp by walking\nbackwards, so does the Epeira obtain the discharge of hers by falling. It is extracted by the weight of her body. The descent, however, has not the brute speed which the force of\ngravity would give it, if uncontrolled. It is governed by the action of\nthe spinnerets, which contract or expand their pores, or close them\nentirely, at the faller's pleasure. And so, with gentle moderation, she\npays out this living plumb-line, of which my lantern clearly shows me\nthe plumb, but not always the line. The great squab seems at such times\nto be sprawling in space, without the least support. She comes to an abrupt stop two inches from the ground; the silk-reel\nceases working. The Spider turns round, clutches the line which she has\njust obtained and climbs up by this road, still spinning. But, this\ntime, as she is no longer assisted by the force of gravity, the thread\nis extracted in another manner. The two hind-legs, with a quick\nalternate action, draw it from the wallet and let it go. On returning to her starting-point, at a height of six feet or more,\nthe Spider is now in possession of a double line, bent into a loop and\nfloating loosely in a current of air. She fixes her end where it suits\nher and waits until the other end, wafted by the wind, has fastened its\nloop to the adjacent twigs. Feeling her thread fixed, the Epeira runs along it repeatedly, from end\nto end, adding a fibre to it on each journey. Whether I help or not,\nthis forms the \"suspension cable,\" the main piece of the framework. I\ncall it a cable, in spite of its extreme thinness, because of its\nstructure. It looks as though it were single, but, at the two ends, it\nis seen to divide and spread, tuft-wise, into numerous constituent\nparts, which are the product of as many crossings. These diverging\nfibres, with their several contact-points, increase the steadiness of\nthe two extremities. The suspension-cable is incomparably stronger than the rest of the work\nand lasts for an indefinite time. The web is generally shattered after\nthe night's hunting and is nearly always rewoven on the following\nevening. After the removal of the wreckage, it is made all over again,\non the same site, cleared of everything except the cable from which the\nnew network is to hang. Once the cable is laid, in this way or in that, the Spider is in\npossession of a base that allows her to approach or withdraw from the\nleafy piers at will. From the height of the cable she lets herself slip\nto a slight depth, varying the points of her fall. In this way she\nobtains, to right and left, a few slanting cross-bars, connecting the\ncable with the branches. These cross-bars, in their turn, support others in ever changing\ndirections. When there are enough of them, the Epeira need no longer\nresort to falls in order to extract her threads; she goes from one cord\nto the next, always wire-drawing with her hind-legs. This results in a\ncombination of straight lines owning no order, save that they are kept\nin one nearly perpendicular plane. Thus is marked out a very irregular\npolygonal area, wherein the web, itself a work of magnificent\nregularity, shall presently be woven. In the lower part of the web, starting from the centre, a wide opaque\nribbon descends zigzag-wise across the radii. This is the Epeira's\ntrade-mark, the flourish of an artist initialling his creation. \"Fecit\nSo-and-so,\" she seems to say, when giving the last throw of the shuttle\nto her handiwork. That the Spider feels satisfied when, after passing and repassing from\nspoke to spoke, she finishes her spiral, is beyond a doubt: the work\nachieved ensures her food for a few days to come. But, in this\nparticular case, the vanity of the spinstress has naught to say to the\nmatter: the strong silk zigzag is added to impart greater firmness to\nthe web. The spiral network of the Epeirae possesses contrivances of fearsome\ncunning. The thread that forms it is seen with the naked eye to differ\nfrom that of the framework and the spokes. It glitters in the sun,\nlooks as though it were knotted and gives the impression of a chaplet\nof atoms. To examine it through the lens on the web itself is scarcely\nfeasible, because of the shaking of the fabric, which trembles at the\nleast breath. By passing a sheet of glass under the web and lifting it,\nI take away a few pieces of thread to study, pieces that remain fixed\nto the glass in parallel lines. Lens and microscope can now play their\npart. Those threads, on the borderland\nbetween the visible and the invisible, are very closely twisted twine,\nsimilar to the gold cord of our officers' sword-knots. The infinitely slender is a tube, a channel full of a\nviscous moisture resembling a strong solution of gum arabic. I can see\na diaphanous trail of this moisture trickling through the broken ends. Under the pressure of the thin glass slide that covers them on the\nstage of the microscope, the twists lengthen out, become crinkled\nribbons, traversed from end to end, through the middle, by a dark\nstreak, which is the empty container. The fluid contents must ooze slowly through the side of those tubular\nthreads, rolled into twisted strings, and thus render the network\nsticky. It is sticky, in fact, and in such a way as to provoke\nsurprise. I bring a fine straw flat down upon three or four rungs of a\nsector. However gentle the contact, adhesion is at once established. When I lift the straw, the threads come with it and stretch to twice or\nthree times their length, like a thread of india-rubber. At last, when\nover-taut, they loosen without breaking and resume their original form. They lengthen by unrolling their twist, they shorten by rolling it\nagain; lastly, they become adhesive by taking the glaze of the gummy\nmoisture wherewith they are filled. In short, the spiral thread is a capillary tube finer than any that our\nphysics will ever know. It is rolled into a twist so as to possess an\nelasticity that allows it, without breaking, to yield to the tugs of\nthe captured prey; it holds a supply of sticky matter in reserve in its\ntube, so as to renew the adhesive properties of the surface by\nincessant exudation, as they become impaired by exposure to the air. The Epeira hunts not with springs, but with lime-snares. Everything is caught in them, down to the dandelion-plume\nthat barely brushes against them. Nevertheless, the Epeira, who is in\nconstant touch with her web, is not caught in them. Because the\nSpider has contrived for herself, in the middle of her trap, a floor in\nwhose construction the sticky spiral thread plays no part. There is\nhere, covering a space which, in the larger webs, is about equal to the\npalm of one's hand, a neutral fabric in which the exploring straw finds\nno adhesiveness anywhere. Here, on this central resting-floor, and here only, the Epeira takes\nher stand, waiting whole days for the arrival of the game. However\nclose, however prolonged her contact with this portion of the web, she\nruns no risk of sticking to it, because the gummy coating is lacking,\nas is the twisted and tubular structure, throughout the length of the\nspokes and throughout the extent of the auxiliary spiral. These pieces,\ntogether with the rest of the framework, are made of plain, straight,\nsolid thread. But when a victim is caught, sometimes right at the edge of the web,\nthe Spider has to rush up quickly, to bind it and overcome its attempts\nto free itself. She is walking then upon her network; and I do not find\nthat she suffers the least inconvenience. The lime-threads are not even\nlifted by the movements of her legs. In my boyhood, when a troop of us would go, on Thursdays (The weekly\nhalf-day in French schools.--Translator's Note. ), to try and catch a\nGoldfinch in the hemp-fields, we used, before covering the twigs with\nglue, to grease our fingers with a few drops of oil, lest we should get\nthem caught in the sticky matter. Does the Epeira know the secret of\nfatty substances? I rub my exploring straw with slightly oiled paper. When applied to the\nspiral thread of the web, it now no longer sticks to it. I pull out the leg of a live Epeira. Brought just as it\nis into contact with the lime-threads, it does not stick to them any\nmore than to the neutral cords, whether spokes or part of the\nframework. We were entitled to expect this, judging by the Spider's\ngeneral immunity. But here is something that wholly alters the result. I put the leg to\nsoak for a quarter of an hour in disulphide of carbon, the best solvent\nof fatty matters. I wash it carefully with a brush dipped in the same\nfluid. When this washing is finished, the leg sticks to the\nsnaring-thread quite easily and adheres to it just as well as anything\nelse would, the unoiled straw, for instance. Did I guess aright when I judged that it was a fatty substance that\npreserved the Epeira from the snares of her sticky Catherine-wheel? The\naction of the carbon-disulphide seems to say yes. Besides, there is no\nreason why a substance of this kind, which plays so frequent a part in\nanimal economy, should not coat the Spider very slightly by the mere\nact of perspiration. We used to rub our fingers with a little oil\nbefore handling the twigs in which the Goldfinch was to be caught; even\nso the Epeira varnishes herself with a special sweat, to operate on any\npart of her web without fear of the lime-threads. However, an unduly protracted stay on the sticky threads would have its\ndrawbacks. In the long run, continual contact with those threads might\nproduce a certain adhesion and inconvenience to the Spider, who must\npreserve all her agility in order to rush upon the prey before it can\nrelease itself. For this reason, gummy threads are never used in\nbuilding the post of interminable waiting. It is only on her resting-floor that the Epeira sits, motionless and\nwith her eight legs outspread, ready to mark the least quiver in the\nnet. It is here, again, that she takes her meals, often long-drawn out,\nwhen the joint is a substantial one; it is hither that, after trussing\nand nibbling it, she drags her prey at the end of a thread, to consume\nit at her ease on a non-viscous mat. As a hunting-post and refectory,\nthe Epeira has contrived a central space, free from glue. As for the glue itself, it is hardly possible to study its chemical\nproperties, because the quantity is so slight. The microscope shows it\ntrickling from the broken threads in the form of a transparent and more\nor less granular streak. The following experiment will tell us more\nabout it. With a sheet of glass passed across the web, I gather a series of\nlime-threads which remain fixed in parallel lines. I cover this sheet\nwith a bell-jar standing in a depth of water. Soon, in this atmosphere\nsaturated with humidity, the threads become enveloped in a watery\nsheath, which gradually increases and begins to flow. The twisted shape\nhas by this time disappeared; and the channel of the thread reveals a\nchaplet of translucent orbs, that is to say, a series of extremely fine\ndrops. In twenty-four hours the threads have lost their contents and are\nreduced to almost invisible streaks. If I then lay a drop of water on\nthe glass, I get a sticky solution similar to that which a particle of\ngum arabic might yield. The conclusion is evident: the Epeira's glue is\na substance that absorbs moisture freely. In an atmosphere with a high\ndegree of humidity, it becomes saturated and percolates by sweating\nthrough the side of the tubular threads. Mary went to the bathroom. These data explain certain facts relating to the work of the net. The\nEpeirae weave at very early hours, long before dawn. Should the air\nturn misty, they sometimes leave that part of the task unfinished: they\nbuild the general framework, they lay the spokes, they even draw the\nauxiliary spiral, for all these parts are unaffected by excess of\nmoisture; but they are very careful not to work at the lime-threads,\nwhich, if soaked by the fog, would dissolve into sticky shreds and lose\ntheir efficacy by being wetted. The net that was started will be\nfinished to-morrow, if the atmosphere be favourable. While the highly-absorbent character of the snaring-thread has its\ndrawbacks, it also has compensating advantages. The Epeirae, when\nhunting by day, affect those hot places, exposed to the fierce rays of\nthe sun, wherein the Crickets delight. In the torrid heats of the\ndog-days, therefore, the lime-threads, but for special provisions,\nwould be liable to dry up, to shrivel into stiff and lifeless\nfilaments. At the most scorching times\nof the day they continue supple, elastic and more and more adhesive. The\nmoisture of which the air is never deprived penetrates them slowly; it\ndilutes the thick contents of their tubes to the requisite degree and\ncauses it to ooze through, as and when the earlier stickiness\ndecreases. What bird-catcher could vie with the Garden Spider in the\nart of laying lime-snares? And all this industry and cunning for the\ncapture of a Moth! Sandra went back to the bathroom. I should like an anatomist endowed with better implements than mine and\nwith less tired eyesight to explain to us the work of the marvellous\nrope-yard. How is the silken matter moulded into a capillary tube? How\nis this tube filled with glue and tightly twisted? And how does this\nsame mill also turn out plain threads, wrought first into a framework\nand then into muslin and satin? What a number of products to come from\nthat curious factory, a Spider's belly! I behold the results, but fail\nto understand the working of the machine. I leave the problem to the\nmasters of the microtome and the scalpel. The Epeirae are monuments of patience in their lime-snare. With her\nhead down and her eight legs widespread, the Spider occupies the centre\nof the web, the receiving-point of the information sent along the\nspokes. If anywhere, behind or before, a vibration occur, the sign of a\ncapture, the Epeira knows about it, even without the aid of sight. Until then, not a movement: one would think that the animal was\nhypnotized by her watching. At most, on the appearance of anything\nsuspicious, she begins shaking her nest. This is her way of inspiring\nthe intruder with awe. If I myself wish to provoke the singular alarm,\nI have but to tease the Epeira with a bit of straw. You cannot have a\nswing without an impulse of some sort. The terror-stricken Spider, who\nwishes to strike terror into others, has hit upon something much\nbetter. With nothing to push her, she swings with the floor of ropes. There is no effort, no visible exertion. Not a single part of the\nanimal moves; and yet everything trembles. When calm is restored, she resumes her attitude, ceaselessly pondering\nthe harsh problem of life:\n\n\"Shall I dine to-day, or not?\" Certain privileged beings, exempt from those anxieties, have food in\nabundance and need not struggle to obtain it. Such is the Gentle, who\nswims blissfully in the broth of the putrefying Adder. Others--and, by\na strange irony of fate, these are generally the most gifted--only\nmanage to eat by dint of craft and patience. You are of their company, O my industrious Epeirae! So that you may\ndine, you spend your treasures of patience nightly; and often without\nresult. I sympathize with your woes, for I, who am as concerned as you\nabout my daily bread, I also doggedly spread my net, the net for\ncatching ideas, a more elusive and less substantial prize than the\nMoth. The best part of life is not in the\npresent, still less in the past; it lies in the future, the domain of\nhope. All day long, the sky, of a uniform grey, has appeared to be brewing a\nstorm. In spite of the threatened downpour, my neighbour, who is a\nshrewd weather-prophet, has come out of the cypress-tree and begun to\nrenew her web at the regular hour. Her forecast is correct: it will be\na fine night. See, the steaming-pan of the clouds splits open; and,\nthrough the apertures, the moon peeps, inquisitively. I too, lantern in\nhand, am peeping. A gust of wind from the north clears the realms on\nhigh; the sky becomes magnificent; perfect calm reigns below. The\nSpider will dine to-day. What happens next, in an uncertain light, does not lend itself to\naccurate observation. It is better to turn to those Garden Spiders who\nnever leave their web and who hunt mainly in the daytime. The Banded\nand the Silky Epeira, both of whom live on the rosemaries in the\nenclosure, shall show us in broad daylight the innermost details of the\ntragedy. I myself place on the lime-snare a victim of my selecting. Its six legs\nare caught without more ado. If the insect raises one of its tarsi and\npulls towards itself, the treacherous thread follows, unwinds slightly\nand, without letting go or breaking, yields to the captive's desperate\njerks. Any limb released only tangles the others still more and is\nspeedily recaptured by the sticky matter. There is no means of escape,\nexcept by smashing the trap with a sudden effort whereof even powerful\ninsects are not always capable. Warned by the shaking of the net, the E", 3 | "query": "Where is Sandra? ", 4 | "target": "bathroom" 5 | } -------------------------------------------------------------------------------- /examples/babilong_16k.json: -------------------------------------------------------------------------------- 1 | { 2 | "context": "\"No positive proof, General, but an intuition which I cannot explain. But this impression is also based on more solid ground than intuition. Yesterday, just before I met your advance, I met a man in our uniform. When he saw me he jumped his horse over a fence and disappeared in a\nwood. To-day I caught a glimpse of\nthat same man in the woods yonder on our right.\" Thomas mused a moment, and then said: \"If the Confederate general fully\nknows our situation and strength, he is foolish if he does not attack\nme. But if he does, I shall try and be ready for him.\" The general then once more carefully examined his maps of the country,\ngave orders that a very strong picket should be posted, and that well in\nadvance of the infantry pickets cavalry videttes should be placed, and\nthat the utmost vigilance should be exercised. Then turning to Fred, he said: \"If your expectations are realized in the\nmorning, you may act as one of my aids. And now, gentlemen,\" said he,\nturning to his staff, \"for some sleep; we must be astir early in the\nmorning.\" In the gray light of the early morning, from away out in front, there\ncame the faint report of rifles. Early as it was, General Thomas and staff had had their breakfast, and\nevery soldier was prepared. General Manson, in command of the advance regiments, came galloping back\nto headquarters. \"General,\" he said, \"we are attacked in force.\" \"Go back,\" replied General Thomas, without betraying any more excitement\nthan if he were ordering his men out on review, \"form your men in the\nmost advantageous position, and hold the enemy until I can bring up the\nrest of the troops.\" In a trice aids were galloping in every direction. The fitful reports of guns in front had become a steady roll of\nmusketry. The loud mouth of the cannon joined in, and the heavy\nreverberations rolled over field and through forest. In an incredibly\nshort time every regiment was in motion towards where the heavy smoke of\nbattle was already hanging over the field. Of all the thousands, the general commanding seemed the most\nunconcerned. He leisurely mounted his horse and trotted toward the\nconflict. His eye swept the field, and as the regiments came up they\nwere placed just where they were needed. His manner inspired every one\nwho saw him with confidence. To Fred the scene was inexpressibly grand. The\nwild cheering of men, the steady roll of musketry, the deep bass of\ncannon, thrilled him with an excitement never felt before. The singing\nof the balls made strange music in his ears. Now and then a shell or\nsolid shot would crash through the forest and shatter the trees as with\na thunderbolt. Soon a thin line of men came staggering back, some\nholding up an arm streaming with blood, others hobbling along using\ntheir guns as crutches. A few, wild with fear, had thrown away their\nguns, and were rushing back, lost to shame, lost to honor, lost to\neverything but an insane desire to get out of that hell of fire. At first there was a lump in the throat, as if\nthe heart was trying to get away, a slight trembling of the limbs, a\nmomentary desire to get out of danger, and then he was as cool and\ncollected as if on parade. Through the storm of balls he rode,\ndelivering his orders with a smiling face, and a word of cheer. General\nThomas noticed the coolness of his aid, and congratulated him on his\nsoldierly qualities. On the left, in front of the Fourth Kentucky Regiment, the battle was\nbeing waged with obstinate fury. Colonel Fry, seeing Fred, rode up to\nhim, and said: \"Tell General Thomas I must have reinforcements at once;\nthe enemy is flanking me.\" \"Say to Colonel Fry,\" said Thomas, \"that I will at once forward the aid\nrequired. Until the reinforcements come, tell him to hold his position\nat all hazards.\" Fry compressed his lips, glanced along his\nline, saw the point of greatest danger, and quickly ordered two of his\nleft companies to the right, leading them in person, Fred going with\nhim. An officer enveloped in a large gray coat suddenly rode out of the wood,\nand galloping up to them shouted: \"For God's sake, stop firing! You are\nfiring on your own men.\" Just then two other officers rode up to the one in a gray cloak. Seeing\nColonel Fry and Fred, they at once fired on them. Colonel Fry was\nslightly wounded, but Fred was untouched. As quick as thought both\nreturned the fire. The officer at whom Fred fired reeled in his saddle,\nthen straightened up and galloped to the rear. Colonel Fry fired at the\nofficer in the gray cloak. He threw up his arms, and then plunged\nheadlong to the ground. The bullet from Colonel Fry's pistol had pierced the heart of General\nZollicoffer. The battle now raged along the entire line with great fury. The lowering\nclouds grew darker, and the pitiless rain, cold and icy, fell on the\nupturned faces of the dead. The cruel storm beat upon the wounded, and\nthey shivered and moaned as their life's blood ebbed away. The smoke\nsettled down over the field and hid the combatants from view, but\nthrough the gloom the flashes of the guns shone like fitful tongues of\nflame. Then the Federal line began to press forward, and soon the whole\nConfederate army was in full retreat. [Illustration: The Battle now raged along the entire line with great\nfury.] It was at this time that Fred's attention was attracted to a young\nConfederate officer, who was trying to rally his men. Bravely did he\nstrive to stay the panic, but suddenly Fred saw him falter, sway to and\nfro, and then fall. Once more did the Confederates try to rally under\nthe leadership of a young mounted officer, but they were swept aside,\nand the battle was over. Fred's first thought was for the young Confederate officer whom he saw\nfall while trying to rally his men. There was something about him that\nseemed familiar. Fred's heart stood still at the\nthought. He was lying on his\nside, his head resting on his left arm, his right hand still grasping\nhis sword, a smile on his face. As Fred looked on the placid face of the\ndead, a groan burst from him, and the tears gushed from his eyes. With\nhis handkerchief he wiped away the grime of battle, and there, in all\nhis manly beauty, Bailie Peyton lay before him. Fred's thoughts flew\nback to that day at Gallatin. No more would those eloquent lips hold\nentranced a spellbound audience. No more would his fiery words stir the\nhearts of his countrymen, even as the wind stirs the leaves of the\nforest. Tenderly did Fred have him carried back and laid by the side of his\nfallen chieftain. As soon as\npossible the remains of both were forwarded through the lines to\nNashville. It was not the city that Fred saw in August. Then it was wild and\nhilarious with joy, carried away with the pomp and glory of war. Zollicoffer was the idol of the people of Tennessee; Bailie Peyton of\nits young men. That both should fall in the same battle plunged\nNashville in deepest mourning. When the bodies arrived, it was a city of tears. Flags floated at\nhalf-mast; women walked the streets wringing their hands and weeping\nbitter tears. She was to drink\nstill deeper of the bitter cup of war. Back over the ten miles that they had marched through the darkness and\nrain, the Confederate army fled in the wildest confusion. Swift in\npursuit came the victorious army of Thomas. Before night his cannon were\nshelling the entrenchments at Beech Grove. There was no rest for the\nhungry, weary, despondent Confederates. In the darkness of the night\nthey stole across the river, and then fled, a demoralized mob, leaving\neverything but themselves in the hands of the victors. The next morning an officer came to Fred and said one of the prisoners\nwould like to see him. \"One of the prisoners would like to see me,\" asked Fred, in surprise. \"I don't know,\" answered the officer. \"But he is a plucky chap; it's the\nyoung lieutenant who headed the last rally of the Rebs. He fought until\nhe was entirely deserted by his men and surrounded by us; he then tried\nto cut his way out, but his horse was shot and he captured.\" \"It must be Calhoun,\" and he rushed to\nwhere the prisoners were confined. And the boys were in each other's arms. \"Cal, you don't know how glad I am to see you,\" exclaimed Fred. answered Calhoun, with a dash of his old spirits. \"No,\" said Fred; \"like St. Paul, I will say 'except these bonds.' But\nCalhoun, I must have a good long talk with you in private.\" \"Not much privacy here, Fred,\" said Calhoun, looking around at the crowd\nthat was staring at them. Fred went to General Thomas and told him that his cousin was among the\nprisoners, and asked permission to take him to his quarters. The\npermission was readily given, and the boys had the day and night to\nthemselves. How they did talk, and how much they had to tell each other! First Fred\nhad to tell Calhoun all about himself. When he had finished Calhoun grasped his hand and exclaimed: \"Fred, I am\nproud of you, if you are fighting with the Yanks. How I would like to\nride by your side! But of all your adventures, the one with poor Robert\nFerror touches me deepest. He must\nhave had a great deal of pure gold about him, notwithstanding his\ncowardly crime.\" \"He did,\" sighed Fred, \"he did; and yet I can never think of the\nassassination of Captain Bascom without a shudder. On the other hand, I\ncan never think of Ferror's death without tears. As I think of him now,\nI am of the opinion that the indignities heaped upon him had, in a\nmeasure, unbalanced his mind, and that the killing of Bascom was the act\nof an insane person. But, Cal, I hate to talk about it; that night of\nhorrors always gives me the shivers. \"There is not much to tell,\" answered Calhoun. \"You know I left Danville\nwith your father for Bowling Green. Owing to the influence of my father,\nI was commissioned a second lieutenant and given a place on the staff of\nGovernor Johnson. You know a provisional State government was organized\nat Bowling Green, and G. M. Johnson appointed Governor. When General\nBuckner tried to capture Louisville by surprise, and you objected by\nthrowing the train off the track, I was one of the victims of the\noutrage. I recognized you, just as your father ordered the volley\nfired.\" did he order that volley fired at\nme?\" \"Yes; but he did not know it was you when he gave the order. When I\ncalled out it was you, he nearly fainted, and would have fallen if one\nof his officers had not caught him. He wanted to resign then and there,\nbut General Buckner would not hear of it. Really, Fred, I think he would\nhave ordered that volley even if he had known you; but if you had been\nkilled, he would have killed himself afterward.\" \"He loves me even if he has disowned me.\" \"Well,\" continued Calhoun, \"to make a long story short, I became\nprodigiously jealous of you. You were covering yourself with glory while\nI was sitting around doing nothing. As Zollicoffer appeared to be the only one of the Confederate generals\nwho was at all active, I asked and received permission to join him,\nwhere I was given a roving commission as a scout. If I do say it, I made\nit rather lively for you fellows. At length I hit upon a nice little\nplan of capturing your pickets, and was quite successful until you found\nit out and put an end to my fun.\" \"Calhoun,\" exclaimed Fred, in surprise, \"was it you with whom I had that\nnight fight?\" \"It was, and you came near making an end of your hopeful cousin, I can\ntell you. Out of seven men, I had two killed and four wounded. Only one\nman and myself escaped unhurt, and I had three bullet holes through my\nclothes. That put an end to my raids upon your pickets, and I confined\nmyself to scouting once more. Then came that unlucky fight with you in\nthe woods. Fred, I must congratulate you on the way you managed that. Your retreat showed me your exact strength, and I thought I could wipe\nyou off the face of the earth. Your sudden wheel and charge took us\ncompletely by surprise, and disconcerted my men. That shot which cut my\nbridle rein took me out of the fight, and perhaps it was just as well\nfor me that it did. When I came to and found out what had been done, I\nat once knew you must have been in command of the squad, and if I could\nI would have hugged you for your generosity.\" \"Cal,\" replied Fred, his voice trembling with emotion, \"you can hardly\nrealize my feelings when I saw you lying pale and senseless there before\nme; it took all the fight out of me.\" \"I know, I know,\" answered Calhoun, laying his hand caressingly on\nFred's shoulder. \"I was badly shaken up by that fall, but not seriously\nhurt. Now, comes the most dangerous of my adventures. When I met you in\nthe road, I----\"\n\n\"Stop!\" Of course you were on one of\nyour scouting expeditions.\" A curious look came over Calhoun's face, and then he said, in a low\nvoice: \"You are right, Fred; I was on one of my scouting expeditions,\"\nand he shuddered slightly. \"Fred,\" suddenly asked Calhoun, \"is there any possible way for me to\nkeep from going to prison?\" \"Sometimes prisoners give their parole,\" answered Fred. \"I will see what\ncan be done.\" The next morning General Thomas sent for Fred, and said that he was\nabout to send some dispatches to General Buell at Louisville. \"And,\"\ncontinued he, \"owing to your splendid conduct and the value of the\nservices you have rendered, I have selected you as the messenger. Then,\nin all probability, it will be very quiet in my front for some time,\nand General Nelson may have more active work for you. You know,\" he\nconcluded with a smile, \"I only have the loan of you.\" Fred heartily thanked the general for the honor bestowed, and then said:\n\"General, I have a great boon to ask.\" \"You know my cousin is here a prisoner. He is more like a brother than a\ncousin--the only brother I ever knew. The boon I ask is that you grant\nhim a parole.\" Calhoun was sent for, and soon stood in the presence of the general. \"An officer, I see,\" said the general, as he glanced Calhoun over. \"Yes, sir; Lieutenant Calhoun Pennington of Governor Johnson's staff,\"\nanswered Calhoun, with dignity. \"What were you doing up here if you are one of Johnson's staff?\" \"Lieutenant, your cousin has asked as a special favor that you be\ngranted a parole. He says that you reside in Danville, and as he is\ngoing to Louisville, he would like to have you accompany him as far as\nyour home.\" \"General,\" answered Calhoun, \"you would place me under a thousand\nobligations if you would grant me a parole; but only on one condition,\nand that is that you effect my exchange as quickly as possible.\" \"I see,\" said he, \"that you and Shackelford are\nalike; never satisfied unless you are in the thickest of the fray. The parole was made out, and Fred and Calhoun made preparations to start\nfor Danville. Never did two boys enjoy a ride more than they did. In spite of bad roads and bad weather, the exuberance of their spirits\nknew no bounds. They were playmates again, without a word of difference\nbetween them. As far as they were concerned, the clouds of war had\nlifted, and they basked in the sunlight of peace. \"I say, Fred,\" remarked Calhoun, \"this is something like it; seems like\nold times. Why did this war have to come and separate us?\" \"The war, Calhoun,\" he answered, \"has laid a heavier hand\non me than on you, for it has made me an outcast from home.\" \"Don't worry, Fred; it will come out all right,\" answered Calhoun,\ncheerily. On the morning of the second day the boys met with an adventure for\nwhich they were not looking. Even as early in the war as this, those\nroving bands of guerrillas which afterward proved such a curse to the\nborder States began to appear. It was somewhat of a surprise to the boys\nwhen four men suddenly rode out of the woods by the side of the road,\nand roughly demanded that they give an account of themselves. \"By my authority,\" answered the leader, with a fearful oath. \"And your authority I refuse to acknowledge,\" was the hot answer. \"See here, young man, you had better keep a civil tongue in your head,\"\nand as the leader said this he significantly tapped the butt of his\nrevolver. \"I wish to know who you are, and where you are going, and that ----\nquick.\" \"That is easily answered,\" replied Calhoun. \"As you see by my uniform, I\nam a Confederate officer. I am on parole, and am on my way to my home in\nDanville, there to wait until I am regularly exchanged.\" \"And I suppose your companion is also\nin the Confederate service.\" \"Not at all,\" replied Fred, quietly. \"I am in the service of the United\nStates.\" \"I think both of you are\nLincolnites. We will have to search you, and I think in the end shoot\nyou both.\" \"Here is my parole,\" said Calhoun, his face growing red with anger. The man took it, glanced it over, and then coolly tore it in two, and\nflung it down. \"Any one can carry such a paper as that. We\nwant them horses, and we want you. Boys, it will be fun to try our\nmarksmanship on these youngsters, won't it?\" and he turned to his\ncompanions with a brutal laugh. But the guerrillas made a great mistake; they thought they were only\ndealing with two boys, and were consequently careless and off their\nguard. With a sharp, quick look at Calhoun which meant volumes, Fred quickly\ndrew his revolver. There was a flash, a report, and the leader of the\nguerrillas dropped from his horse. With a startled oath, the others drew\ntheir revolvers, but before they could raise them there were two reports\nso close together as almost to sound as one, and two more of the gang\nrolled from their horses. The remaining one threw up his hands and began\nto beg for mercy. [Illustration: Fred drew his Revolver, and the Guerrilla dropped from\nhis horse.] \"You miscreant you,\" exclaimed Calhoun, covering him with his revolver. \"I ought to send a ball through your cowardly carcass, to be even with\nmy cousin here; for he got two of you, while I only got one.\" \"You have; then so much the worse for the wife and children.\" \"I am not fit to die,\" he blubbered. \"That is plain to be seen,\" answered Calhoun. \"Now hand me your weapons--butts first, remember.\" \"Now pick up that parole your leader tore and threw down, and hand it to\nme.\" Calhoun sat eyeing him a moment, and then continued: \"I ought to shoot\nyou without mercy, but I believe in giving a dog a chance for his life,\nand so I will give you a chance. You mount your horse, and when I say\n'Go,' you go. After I say 'Go' I shall count five, and then shoot. If I\nmiss you, which I don't think I shall, I shall continue shooting as long\nas you are in range; so the faster you go, the better for you. The man looked appealingly at Calhoun, but seeing no mercy, mounted his\nhorse as quick as his trembling limbs would let him. His face was white\nwith fear, and his teeth fairly rattled they chattered so. Calhoun reined his horse around so he was by the fellow's side. The man gave a yell of terror, bent low over his horse's neck and was\noff like a shot. Calhoun with a chuckle fired over him, and the fellow\nseemed to fairly flatten out. Four times did Calhoun fire, and at each\nreport the flying horseman appeared to go the faster. As for Fred, he was convulsed with merriment, notwithstanding the\ngrewsome surroundings. \"Leave these carrion where they are,\" said Calhoun in response to a\nquestion from Fred as to what disposition they should make of the dead. \"That live companion of theirs will be back when we are gone.\" They rode along in silence for a while, and then Calhoun suddenly said:\n\"Fred, how I wish I could always fight by your side. It's a pity we have\nto fight on different sides.\" \"Just what I was thinking of, Cal,\" answered Fred; \"but we have the\nsatisfaction of knowing we have fought one battle together.\" \"And won it, too,\" shouted Calhoun. They reached Danville in due time and without further adventure. To say\nthat Judge Pennington was surprised to see them riding up together would\nbe to express it mildly; he was astounded. Then he had his arms around\nhis boy, and was sobbing, \"My son! John went back to the kitchen. \"And Fred, too,\" said the judge, at last turning from welcoming his son. \"I am truly glad to see you, my boy. But how in the world did you two\nhappen to come together?\" And so the whole story had to be told, and the judge listened and\nwondered and mourned over the defeat of the Confederates at Mill\nSprings. \"My boy,\" said the judge, with tears glistening in his eyes, \"at least I\nam glad to know that you did your duty.\" \"If all the Confederates had\nbeen like Calhoun, we might not have won the victory.\" \"Unless all the Federals had been like you,\" responded Calhoun\ngallantly. The judge would have both boys tell him the full particulars of their\nadventures, and listened to their recital with all the pleasure of a\nschoolboy. But when they were through, he shook his head sadly, and\nsaid: \"Boys, you can't keep that pace up. But I\nam proud of you, proud of you both, if Fred is fighting for that\nhorrible Lincoln.\" It was a happy day Fred spent at his uncle's. If bitterness was felt towards him it was not shown. When it was noised about that both Calhoun and Fred had returned, they\nwere besieged with callers. The story of the battle of Mill Springs had\nto be told again and again. Colonel Fry was one of the influential\ncitizens of the city, and especially were they eager to hear the\nparticulars of his killing General Zollicoffer. Fred concluded to ride his horse to Louisville, instead of riding to\nNicholasville or Lebanon and taking the cars from one of those places. \"I must have Prince wherever I go after this,\" he said. asked General Nelson, as Fred rode up to\nhis headquarters after a very prosaic journey of three days. \"It is no one else, General,\" laughed Fred, as he dismounted. \"Here I\nam, here is my good horse, Prince, and here is a letter to you from\nGeneral Thomas.\" Nelson took the letter, read it, and looking up smiling, said: \"I see\nyou still keep up your habit of doing something unusual. Thomas speaks\nin the highest terms of your work. the first real victory we have\ngained. \"Yes, General; I have voluminous dispatches for General Buell. I was so\neager to see you I stopped before delivering them.\" \"Ah, my boy, I believe you do think something of bluff old Nelson after\nall, even if he has a devil of a temper,\" and the general kindly patted\nthe boy on the head. \"You know, General,\" he said, brokenly,\n\"that you took me in, when my father cast me out.\" \"For the good of the country, my boy, for the good of the country,\" said\nthe general brusquely. \"But, come, Fred, I will ride over to General\nBuell's headquarters with you. I would like to see General Thomas' full\nreport of the battle.\" They found General Buell in the highest of spirits, and Fred was given a\nwarm welcome. He looked over General Thomas' report, and his whole face\nbeamed with satisfaction. He asked Fred a multitude of questions, and\nwas surprised at the knowledge of military affairs which he showed in\nhis answers. \"I think, General,\" said General Buell, turning to Nelson, after he had\ndismissed Fred, \"that you have not overestimated the abilities of your\nprot\u00e9g\u00e9. In a private note General Thomas speaks in the highest terms of\nhim. \"Somehow I have taken wonderfully to\nthe boy.\" What it was General Buell was to do for Fred, that individual was in\nignorance. While in Louisville many of Fred's leisure moments were spent at the\nhospitable home of the Vaughns. Mabel's betrothed was now at the front,\nand it was astonishing how much note paper that young lady used in\nwriting to him. \"You don't write that often to your brother,\" said Fred, smiling. \"Yes, your humble servant; didn't you adopt me as a brother?\" she replied, \"one doesn't have to write\nso often to a brother. Lovers are like babies; they have to be petted. But to change the subject, where does my knight-errant expect to go for\nhis next adventure?\" \"Things appear to be rather quiet just\nnow.\" But events were even then transpiring that were to take Fred to a\ndifferent theater of action. Commodore Foote and General U. S. Grant sat conversing in the\nheadquarters of the latter at Cairo, Illinois. The general was puffing a\ncigar, and answered in monosyllables between puffs. \"You have heard nothing yet, have you, General,\" the commodore was\nasking, \"of that request we united in sending to General Halleck?\" _Exit Silvina._\n\nJEANNE\n\nGo and have your breakfast, Maurice. MAURICE\n\n_Without turning around._\n\nI don't want any breakfast. Mamma, I'll take off my bandage\ntomorrow. JEANNE\n\n_Laughing._\n\nSoldier, is it possible that you are capricious? Jeanne helps Emil Grelieu with his coffee._\n\nJEANNE\n\nThat's the way. Is it convenient for you this way, or do you\nwant to drink it with a spoon? EMIL GRELIEU\n\nOh, my poor head, it is so weak--\n\nMAURICE\n\n_Going over to him._\n\nForgive me, father, I'll not do it any more. I was foolishly\nexcited, but do you know I could not endure it. May I have a\ncup, mamma? JEANNE\n\nYes, this is yours. MAURICE\n\nYes, I do. EMIL GRELIEU\n\nI am feeling perfectly well today, Jeanne. When is the bandage\nto be changed? Count Clairmont will bring his surgeon along with him. MAURICE\n\nWho is that, mamma? JEANNE\n\nYou'll see him. But, please, Maurice, when you see him, don't\nopen your mouth so wide. You have a habit--you open your mouth\nand then you forget about it. MAURICE\n\n_Blushing._\n\nYou are both looking at me and smiling. _The sound of automobiles is heard._\n\nJEANNE\n\n_Rising quickly._\n\nI think they are here. Maurice, this is only Count Clairmont,\ndon't forget. They will speak with you\nabout a very, very important matter, Emil, but you must not be\nagitated. EMIL GRELIEU\n\nYes, I know. JEANNE\n\n_Kissing him quickly._\n\nI am going. _Exit, almost colliding with Silvina, who is excited._\n\nMAURICE\n\n_Whispering._\n\nWho is it, Silvina? _Silvina makes some answer in mingled delight and awe. Maurice's\nface assumes the same expression as Silvina's. Maurice walks quickly to the window and raises his left hand to\nhis forehead, straightening himself in military fashion. Thus he\nstands until the others notice him._\n\n_Enter Jeanne, Count Clairmont, followed by Secretary Lagard and\nthe Count's adjudant, an elderly General of stem appearance,\nwith numerous decorations upon his chest. The Count himself\nis tall, well built and young, in a modest officer's uniform,\nwithout any medals to signify his high station. He carries\nhimself very modestly, almost bashfully, but overcoming his\nfirst uneasiness, he speaks warmly and powerfully and freely. All treat him with profound respect._\n\n_Lagard is a strong old man with a leonine gray head. He speaks\nsimply, his gestures are calm and resolute. It is evident that\nhe is in the habit of speaking from a platform._\n\n_Jeanne holds a large bouquet of flowers in her hands. Count\nClairmont walks directly toward Grelieu's bedside._\n\nCOUNT CLAIRMONT\n\n_Confused._\n\nI have come to shake hands with you, my dear master. Oh, but\ndo not make a single unnecessary movement, not a single one,\notherwise I shall be very unhappy! EMIL GRELIEU\n\nI am deeply moved, I am happy. COUNT CLAIRMONT\n\nNo, no, don't speak that way. Here stands before you only a man\nwho has learned to think from your books. But see what they have\ndone to you--look, Lagard! LAGARD\n\nHow are you, Grelieu? I, too, want to shake your hand. Today I\nam a Secretary by the will of Fate, but yesterday I was only a\nphysician, and I may congratulate you--you have a kind hand. GENERAL\n\n_Coming forward modestly._\n\nAllow me, too, in the name of this entire army of ours to\nexpress to you our admiration, Monsieur Grelieu! EMIL GRELIEU\n\nI thank you. COUNT CLAIRMONT\n\nBut perhaps it is necessary to have a surgeon? JEANNE\n\nHe can listen and talk, Count. COUNT CLAIRMONT\n\n_Noticing Maurice, confused._\n\nOh! Please put down your hand--you are wounded. MAURICE\n\nI am so happy, Count. JEANNE\n\nThis is our second son. Our first son, Pierre, was killed at\nLi\u00e8ge--\n\nCOUNT CLAIRMONT\n\nI dare not console you, Madame Grelieu. Give me your hand,\nMaurice. I dare not--\n\nCOUNT CLAIRMONT\n\nMy dear young man, I, too, am nothing but a soldier now. My children and my wife\nhave sent you flowers--but where are they? JEANNE\n\nHere they are, Count. COUNT CLAIRMONT\n\nThank you. But I did not know that your flowers were better than\nmine, for my flowers smell of smoke. _To Count Clairmont._\n\nHis pulse is good. Grelieu, we have come to you not only to\nexpress our sympathy. Through me all the working people of\nBelgium are shaking your hand. EMIL GRELIEU\n\nI am proud of it, Lagard. LAGARD\n\nBut we are just as proud. Yes; there is something we must\ndiscuss with you. Count Clairmont did not wish to disturb you,\nbut I said: \"Let him die, but before that we must speak to him.\" EMIL GRELIEU\n\nI am not dying. Maurice, I think you had better go out. COUNT CLAIRMONT\n\n_Quickly._\n\nOh, no, no. He is your son, Grelieu, and he should be present to\nhear what his father will say. Oh, I should have been proud to\nhave such a father. LAGARD\n\nOur Count is a very fine young man--Pardon me, Count, I have\nagain upset our--\n\nCOUNT CLAIRMONT\n\nThat's nothing, I have already grown accustomed to it. Master,\nit is necessary for you and your family to leave for Antwerp\ntoday. EMIL GRELIEU\n\nAre our affairs in such a critical condition? LAGARD\n\nWhat is there to tell? That\nhorde of Huns is coming upon us like the tide of the sea. Today\nthey are still there, but tomorrow they will flood your house,\nGrelieu. To what can we resort\nin our defence? On this side are they, and there is the sea. Only very little is left of Belgium, Grelieu. Very soon there\nwill be no room even for my beard here. Dull sounds of cannonading are heard in the distance. All turn their eyes to the window._\n\nEMIL GRELIEU\n\nIs that a battle? COUNT CLAIRMONT\n\n_Listening, calmly._\n\nNo, that is only the beginning. But tomorrow they will carry\ntheir devilish weapons past your house. Do you know they are\nreal iron monsters, under whose weight our earth is quaking\nand groaning. They are moving slowly, like amphibia that have\ncrawled out at night from the abyss--but they are moving! Another few days will pass, and they will crawl over to Antwerp,\nthey will turn their jaws to the city, to the churches--Woe to\nBelgium, master! LAGARD\n\nYes, it is very bad. We are an honest and peaceful people\ndespising bloodshed, for war is such a stupid affair! And we\nshould not have had a single soldier long ago were it not for\nthis accursed neighbor, this den of murderers. GENERAL\n\nAnd what would we have done without any soldiers, Monsieur\nLagard? LAGARD\n\nAnd what can we do with soldiers, Monsieur General? COUNT CLAIRMONT\n\nYou are wrong, Lagard. With our little army there is still one\npossibility--to die as freemen die. But without an army we would\nhave been bootblacks, Lagard! LAGARD\n\n_Grumbling._\n\nWell, I would not clean anybody's boots. Things are in bad\nshape, Grelieu, in very bad shape. And there is but one remedy\nleft for us--. EMIL GRELIEU\n\nI know. EMIL GRELIEU\n\nThe dam. _Jeanne and Emil shudder and look at each other with terror in\ntheir eyes._\n\nCOUNT CLAIRMONT\n\nYou shuddered, you are shuddering, madame. But what am I to do,\nwhat are we to do, we who dare not shudder? JEANNE\n\nOh, I simply thought of a girl who was trying to find her way to\nLonua. She will never find her way to Lonua. COUNT CLAIRMONT\n\nBut what is to be done? The Count steps away to the window\nand looks out, nervously twitching his mustaches. Maurice has\nmoved aside and, as before, stands at attention. Jeanne stands\na little distance away from him, with her shoulder leaning\nagainst the wall, her beautiful pale head thrown back. Lagard is\nsitting at the bedside as before, stroking his gray, disheveled\nbeard. The General is absorbed in gloomy thoughts._\n\nCOUNT CLAIRMONT\n\n_Turning around resolutely._\n\nI am a peaceful man, but I can understand why people take up\narms. That means a sword, a gun, explosive contrivances. Fire is killing people, but at the same time it\nalso gives light. There is something of the\nancient sacrifice in it. cold, dark, silent, covering\nwith mire, causing bodies to swell--water, which was the\nbeginning of chaos; water, which is guarding the earth by day\nand night in order to rush upon it. My friend, believe me, I am\nquite a daring man, but I am afraid of water! Lagard, what would\nyou say to that? LAGARD\n\nWe Belgians have too long been struggling against the water not\nto have learned to fear it. JEANNE\n\nBut what is more terrible, the Prussians or water? GENERAL\n\n_Bowing._\n\nMadame is right. The Prussians are not more terrible, but they\nare worse. It is terrible to release water\nfrom captivity, the beast from its den, nevertheless it is a\nbetter friend to us than the Prussians. I would prefer to see\nthe whole of Belgium covered with water rather than extend a\nhand of reconciliation to a scoundrel! Neither they nor we shall\nlive to see that, even if the entire Atlantic Ocean rush over\nour heads. _Brief pause._\n\nGENERAL\n\nBut I hope that we shall not come to that. Meanwhile it is\nnecessary for us to flood only part of our territory. JEANNE\n\n_Her eyes closed, her head hanging down._\n\nAnd what is to be done with those who could not abandon their\nhomes, who are deaf, who are sick and alone? _Silence._\n\nJEANNE\n\nThere in the fields and in the ditches are the wounded. There\nthe shadows of people are wandering about, but in their veins\nthere is still warm blood. Oh, don't\nlook at me like that, Emil; you had better not listen to what I\nam saying. I have spoken so only because my heart is wrung with\npain--it isn't necessary to listen to me at all, Count. _Count Clairmont walks over to Grelieu's bed quickly and firmly. At first he speaks confusedly, seeking the right word; then he\nspeaks ever more boldly and firmly._\n\nCOUNT CLAIRMONT\n\nMy dear and honored master! We would not have dared to take\nfrom you even a drop of your health, if--if it were not for the\nassurance that serving your people may give new strength to your\nheroic soul! Yesterday, it was resolved at our council to break\nthe dams and flood part of our kingdom, but I could not, I dared\nnot, give my full consent before I knew what you had to say to\nthis plan. I did not sleep all night long, thinking--oh, how\nterrible, how inexpressibly sad my thoughts were! We are the\nbody, we are the hands, we are the head--while you, Grelieu, you\nare the conscience of our people. Blinded by the war, we may\nunwillingly, unwittingly, altogether against our will, violate\nman-made laws. We are driven to despair, we have no Belgium any longer,\nit is trampled by our enemies, but in your breast, Emil Grelieu,\nthe heart of all Belgium is beating--and your answer will be the\nanswer of our tormented, blood-stained, unfortunate land! Maurice is crying, looking at his\nfather._\n\nLAGARD\n\n_Softly._\n\nBravo, Belgium! The sound of cannonading is heard._\n\nJEANNE\n\n_Softly, to Maurice._\n\nSit down, Maurice, it is hard for you to stand. MAURICE\n\nOh, mamma! I am so happy to stand here now--\n\nLAGARD\n\nNow I shall add a few words. As you know, Grelieu, I am a man of\nthe people. I know the price the people pay for their hard work. I know the cost of all these gardens, orchards and factories\nwhich we shall bury under the water. They have cost us sweat\nand health and tears, Grelieu. These are our sufferings which\nwill be transformed into joy for our children. But as a nation\nthat loves and respects liberty above its sweat and blood and\ntears--as a nation, I say, I would prefer that sea waves should\nseethe here over our heads rather than that we should have to\nblack the boots of the Prussians. And if nothing but islands\nremain of Belgium they will be known as \"honest islands,\" and\nthe islanders will be Belgians as before. _All are agitated._\n\nEMIL GRELIEU\n\nAnd what do the engineers say? GENERAL\n\n_Respectfully waiting for the Count's answer._\n\nMonsieur Grelieu, they say this can be done in two hours. LAGARD\n\n_Grumbles._\n\nIn two hours! How many years have we been building\nit! GENERAL\n\nThe engineers were crying when they said it, Monsieur. LAGARD\n\nThe engineers were crying? _Suddenly he bursts into sobs, and slowly takes a handkerchief\nfrom his pocket._\n\nCOUNT CLAIRMONT\n\nWe are awaiting your answer impatiently, Grelieu. You are\ncharged with a grave responsibility to your fatherland--to lift\nyour hand against your own fatherland. EMIL GRELIEU Have we no other defence? Lagard dries\nhis eyes and slowly answers with a sigh_. JEANNE\n\n_Shaking her head._\n\nNo. COUNT CLAIRMONT\n\n_Rapidly._\n\nWe must gain time, Grelieu. By the power of all our lives,\nthrown in the fields, we cannot stop them. _Stamping his foot._\n\nTime, time! We must steal from fate a small part of eternity--a\nfew days, a week! The Russians are\ncoming to us from the East. The German steel has already\npenetrated to the heart of the French land--and infuriated with\npain, the French eagle is rising over the Germans' bayonets\nand is coming toward us! The noble knights of the sea--the\nBritish--are already rushing toward us, and to Belgium are their\npowerful arms stretched out over the abyss. Belgium is praying for a few days, for\na few hours! You have already given to Belgium your blood,\nGrelieu, and you have the right to lift your hand against your\nblood-stained fatherland! _Brief pause._\n\nEMIL GRELIEU\n\nWe must break the dams. _Curtain_\n\n\n\nSCENE V\n\n\n_Night. A sentinel\non guard at the door leading to the rooms occupied by the\nCommander of the army. Two officers on duty are\ntalking lazily, suffering apparently from the heat. Only from time to time the measured footsteps of\npickets are heard, and muffled voices and angry exclamations._\n\nVON RITZAU\n\nDo you feel sleepy, von Stein? VON STEIN\n\nI don't feel sleepy, but I feel like smoking. RITZAU\n\nA bad habit! STEIN\n\nBut what if _he_ should come in? Not a breath of pure air enters the lungs. The air is poisoned with the smell of smoke. We must invent\nsomething against this obnoxious odor. RITZAU\n\nI am not an inventor. First of all it is necessary to wring out\nthe air as they wring the clothes they wash, and dry it in the\nsun. It is so moist, I feel as though I were diving in it. Do\nyou know whether _he_ is in a good mood today? STEIN\n\nWhy, is he subject to moods, good or bad? RITZAU\n\nGreat self-restraint! STEIN\n\nHave you ever seen him undressed--or half-dressed? Or have you\never seen his hair in disorder? RITZAU\n\nHe speaks so devilishly little, Stein. STEIN\n\nHe prefers to have his cannon speak. It is quite a powerful\nvoice, isn't it, Ritzau? A tall, handsome officer enters quickly and\ngoes toward the door leading to the room of the Commander._\n\nBlumenfeld! _The tall officer waves his hand and opens the door cautiously,\nready to make his bow._\n\nHe is malting his career! RITZAU\n\nHe is a good fellow. STEIN\n\nWould you rather be in Paris? RITZAU\n\nI would prefer any less unbearable country to this. How dull it\nmust be here in the winter time. STEIN\n\nBut we have saved them from dullness for a long time to come. Were you ever in the Montmartre caf\u00e9s, Ritzau? STEIN\n\nDoesn't one find there a wonderful refinement, culture and\ninnate elegance? Unfortunately, our Berlin people are far\ndifferent. RITZAU\n\nOh, of course. _The tall officer comes out of the door, stepping backward. He\nheaves a sigh of relief and sits down near the two officers. Takes out a cigar._\n\nVON BLUMENFELD How are things? STEIN\n\nThen I am going to smoke too. BLUMENFELD\n\nYou may smoke. He is not coming out Do you want to hear\nimportant news? BLUMENFELD He laughed just now I\n\nSTEIN\n\nReally! BLUMENFELD\n\nUpon my word of honor! And he touched my shoulder with two\nfingers--do you understand? STEIN\n\n_With envy._\n\nOf course! I suppose you brought him good news, Blumenfeld? _The military telegraphist, standing at attention, hands\nBlumenfeld a folded paper._\n\nTELEGRAPHIST\n\nA radiogram, Lieutenant! BLUMENFELD\n\nLet me have it. _Slowly he puts his cigar on the window sill and enters the\nCommander's room cautiously._\n\nSTEIN\n\nHe's a lucky fellow. You may say what you please about luck,\nbut it exists. Von?--Did you know his\nfather? RITZAU\n\nI have reason to believe that he had no grandfather at all. _Blumenfeld comes out and rejoins the two officers, taking up\nhis cigar._\n\nSTEIN\n\nAnother military secret? BLUMENFELD\n\nOf course. Everything that is said and done here is a military\nsecret. The information we have\nreceived concerns our new siege guns--they are advancing\nsuccessfully. BLUMENFELD\n\nYes, successfully. They have just passed the most difficult part\nof the road--you know where the swamps are--\n\nSTEIN\n\nOh, yes. BLUMENFELD\n\nThe road could not support the heavy weight and caved in. He ordered a report about the\nmovement at each and every kilometer. STEIN\n\nNow he will sleep in peace. BLUMENFELD\n\nHe never sleeps, von Stein. BLUMENFELD\n\nHe never sleeps, von Stein! When he is not listening to\nreports or issuing commands, he is thinking. As the personal\ncorrespondent of his Highness I have the honor to know many\nthings which others are not allowed to know--Oh, gentlemen, he\nhas a wonderful mind! _Another very young officer enters, stands at attention before\nBlumenfeld._\n\nBLUMENFELD\n\nSit down, von Schauss. BLUMENFELD\n\nHe has a German philosophical mind which manages guns as\nLeibnitz managed ideas. Everything is preconceived, everything\nis prearranged, the movement of our millions of people has been\nelaborated into such a remarkable system that Kant himself\nwould have been proud of it. Gentlemen, we are led forward by\nindomitable logic and by an iron will. _The officers express their approval by subdued exclamations of\n\"bravo. \"_\n\nBLUMENFELD\n\nHow can he sleep, if the movement of our armies is but the\nmovement of parts of his brains! And what is the use of sleep\nin general? I sleep very little myself, and I advise you,\ngentlemen, not to indulge in foolish sleep. RITZAU\n\nBut our human organism requires sleep. BLUMENFELD\n\nNonsense! Organism--that is something invented by the doctors\nwho are looking for practice among the fools. I know only my desires and my will, which says:\n\"Gerhardt, do this! SCHAUSS\n\nWill you permit me to take down your words in my notebook? BLUMENFELD\n\nPlease, Schauss. _The telegraphist has entered._\n\nZIGLER\n\nI really don't know, but something strange has happened. It\nseems that we are being interfered with, I can't understand\nanything. BLUMENFELD\n\nWhat is it? ZIGLER\n\nWe can make out one word, \"Water\"--but after that all is\nincomprehensible. And then again, \"Water\"--\n\nBLUMENFELD\n\nWhat water? ZIGLER\n\nHe is also surprised and cannot understand. BLUMENFELD\n\nYou are a donkey, Zigler! We'll have to call out--\n\n_The Commander comes out. His voice is dry and unimpassioned._\n\nCOMMANDER\n\nBlumenfeld! _All jump up, straighten themselves, as if petrified._\n\nWhat is this? BLUMENFELD\n\nI have not yet investigated it, your Highness. Zigler is\nreporting--\n\nCOMMANDER\n\nWhat is it, Zigler? ZIGLER\n\nYour Highness, we are being interfered with. I don't know what\nit is, but I can't understand anything. We have been able to\nmake out only one word--\"Water.\" COMMANDER\n\n_Turning around._\n\nSee what it is, Blumenfeld, and report to me--\n\n_Engineer runs in._\n\nENGINEER\n\nWhere is Blumenfeld? COMMANDER\n\n_Pausing._\n\nWhat has happened there, Kloetz? ENGINEER\n\nThey don't respond to our calls, your Highness. COMMANDER\n\nYou think something serious has happened? ENGINEER\n\nI dare not think so, your Highness, but I am alarmed. Silence is\nthe only answer to our most energetic calls. _The second telegraphist has entered quietly._\n\nGREITZER\n\nThey are silent, your Highness. _Brief pause._\n\nCOMMANDER\n\n_Again turning to the door._\n\nPlease investigate this, Lieutenant. _He advances a step to the door, then stops. There is a\ncommotion behind the windows--a noise and the sound of voices. The noise keeps\ngrowing, turning at times into a loud roar._\n\nWhat is that? An officer, bareheaded, rushes in\nexcitedly, his hair disheveled, his face pale._\n\nOFFICER\n\nI want to see his Highness. BLUMENFELD\n\n_Hissing._\n\nYou are insane! COMMANDER\n\nCalm yourself, officer. I have the honor to report to you that the\nBelgians have burst the dams, and our armies are flooded. _With horror._\n\nWe must hurry, your Highness! OFFICER\n\nThey are flooded, your Highness. COMMANDER\n\nCompose yourself, you are not behaving properly! I am asking you\nabout our field guns--\n\nOFFICER\n\nThey are flooded, your Highness. We must hurry, your Highness, we are in a valley. They have broken the dams; and the water is\nrushing this way violently. It is only five kilometers away from\nhere--and we can hardly--. The beginning of a terrible panic is felt,\nembracing the entire camp. All watch impatiently the reddening\nface of the Commander._\n\nCOMMANDER\n\nBut this is--\n\n_He strikes the table with his fist forcibly._\n\nAbsurd! _He looks at them with cold fury, but all lower their eyes. The\nfrightened officer is trembling and gazing at the window. The\nlights grow brighter outside--it is evident that a building has\nbeen set on fire. A\ndull noise, then the crash of shots is heard. The discipline is\ndisappearing gradually._\n\nBLUMENFELD\n\nThey have gone mad! STEIN\n\nBut that can't be the Belgians! RITZAU\n\nThey may have availed themselves--\n\nBLUMENFELD\n\nAren't you ashamed, Stein? I beg of you--\n\n_Suddenly a piercing, wild sound of a horn is heard ordering to\nretreat. The roaring sound is growing rapidly._\n\nCOMMANDER\n\n_Shots._\n\nWho has commanded to retreat? _Blumenfeld lowers his head._\n\nCOMMANDER\n\nThis is not the German Army! You are unworthy of being called\nsoldiers! BLUMENFELD\n\n_Stepping forward, with dignity._\n\nYour Highness! We are not fishes to swim in the water! _Runs out, followed by two or three others. The panic is\ngrowing._\n\nBLUMENFELD\n\nYour Highness! Your life is in danger--your\nHighness. Only the\nsentinel remains in the position of one petrified._\n\nBLUMENFELD\n\nYour Highness! Your life--I am afraid that\nanother minute, and it will be too late! COMMANDER\n\nBut this is--\n\n_Again strikes the table with his fist._\n\nBut this is absurd, Blumenfeld! _Curtain_\n\n\n\nSCENE VI\n\n\n_The same hour of night. In the darkness it is difficult to\ndiscern the silhouettes of the ruined buildings and of the\ntrees. At the right, a half-destroyed bridge. From time to time the German flashlights are\nseen across the dark sky. Near the bridge, an automobile in\nwhich the wounded Emil Grelieu and his son are being carried to\nAntwerp. John journeyed to the bedroom. Something\nhas broken down in the automobile and a soldier-chauffeur is\nbustling about with a lantern trying to repair it. Langloi\nstands near him._\n\n\nDOCTOR\n\n_Uneasily._\n\nWell? CHAUFFEUR\n\n_Examining._\n\nI don't know yet. DOCTOR\n\nIs it a serious break? CHAUFFEUR\n\nNo--I don't know. MAURICE\n\n_From the automobile._\n\nWhat is it, Doctor? CHAUFFEUR\n\n_Angrily._\n\nWe'll start! DOCTOR\n\nI don't know. MAURICE\n\nShall we stay here long? DOCTOR\n\n_To the chauffeur._\n\nShall we stay here long? CHAUFFEUR\n\n_Angrily._\n\nHow do I know? _Hands the lantern to the doctor._\n\nMAURICE\n\nThen I will come out. JEANNE\n\nYou had better stay here, Maurice. MAURICE\n\nNo, mother, I am careful. _Jumps off and watches the chauffeur at work._\n\nMAURICE\n\nHow unfortunate that we are stuck here! CHAUFFEUR\n\n_Grumbling._\n\nA bridge! DOCTOR\n\nYes, it is unfortunate. MAURICE\n\n_Shrugging his shoulders._\n\nFather did not want to leave. Mamina, do\nyou think our people are already in Antwerp? JEANNE\n\nYes, I think so. EMIL GRELIEU\n\nNo. It is very pleasant to breathe the fresh air. DOCTOR\n\n_To Maurice._\n\nI think we are still in the region which--\n\nMAURICE\n\nYes. DOCTOR\n\n_Looking at his watch._\n\nTwenty--a quarter of ten. MAURICE\n\nThen it is a quarter of an hour since the bursting of the dams. Mamma, do you hear, it is a quarter of ten now! JEANNE\n\nYes, I hear. MAURICE\n\nBut it is strange that we haven't heard any explosions. DOCTOR\n\nHow can you say that, Monsieur Maurice? MAURICE\n\nI thought that such explosions would be heard a hundred\nkilometers away. Our house and our\ngarden will soon be flooded! I wonder how high the water will\nrise. Do you think it will reach up to the second story? CHAUFFEUR\n\n_Grumbling._\n\nI am working. Mamma, see how the searchlights are working. EMIL GRELIEU\n\nJeanne, lift me a little. JEANNE\n\nMy dear, I don't know whether I am allowed to do it. DOCTOR\n\nYou may lift him a little, if it isn't very painful. JEANNE\n\nDo you feel any pain? EMIL GRELIEU\n\nNo. MAURICE\n\nFather, they are flashing the searchlights across the sky like\nmadmen. _A bluish light is flashed over them, faintly illuminating the\nwhole group._\n\nMAURICE\n\nRight into my eyes! EMIL GRELIEU\n\nI suppose so. Either they have been warned, or the water is\nreaching them by this time. JEANNE\n\nDo you think so, Emil? EMIL GRELIEU\n\nYes. It seems to me that I hear the sound of the water from that\nside. _All listen and look in the direction from which the noise came._\n\nDOCTOR\n\n_Uneasily._\n\nHow unpleasant this is! MAURICE\n\nFather, it seems to me I hear voices. Listen--it sounds as\nthough they are crying there. Father, the\nPrussians are crying. _A distant, dull roaring of a crowd is heard. The searchlights are\nswaying from side to side._\n\nEMIL GRELIEU\n\nIt is they. DOCTOR\n\nIf we don't start in a quarter of an hour--\n\nEMIL GRELIEU\n\nIn half an hour, Doctor. MAURICE\n\nFather, how beautiful and how terrible it is! JEANNE\n\nWhat is it? MAURICE\n\nI want to kiss it. JEANNE\n\nWhat a foolish little boy you are, Maurice. MAURICE\n\nMonsieur Langloi said that in three days from now I may remove\nmy bandage. Just think of it, in three days I shall be able to\ntake up my gun again!... The\nchauffeur and the doctor draw their revolvers. A figure appears\nfrom the field, approaching from one of the ditches. A peasant,\nwounded in the leg, comes up slowly, leaning upon a cane._\n\nMAURICE\n\nWho is there? PEASANT\n\nOur own, our own. MAURICE\n\nYes, we're going to the city. Our car has broken down, we're\nrepairing it. PEASANT\n\nWhat am I doing here? They also look at him\nattentively, by the light of the lantern._\n\nCHAUFFEUR\n\nGive me the light! PEASANT\n\nAre you carrying a wounded man? I\ncannot walk, it is very hard. I lay there in the ditch and when I heard you\nspeak French I crawled out. DOCTOR\n\nHow were you wounded? PEASANT\n\nI was walking in the field and they shot me. They must have\nthought I was a rabbit. _Laughs hoarsely._\n\nThey must have thought I was a rabbit. What is the news,\ngentlemen? MAURICE\n\nDon't you know? PEASANT\n\nWhat can I know? I lay there and looked at the sky--that's all I\nknow. Just look at it, I have been watching\nit all the time. What is that I see in the sky, eh? EMIL GRELIEU\n\nSit down near us. MAURICE\n\nListen, sit down here. They are\ncrying there--the Prussians! They must have learned of\nit by this time. Listen, it is so far, and yet we can hear! _The peasant laughs hoarsely._\n\nMAURICE\n\nSit down, right here, the automobile is large. CHAUFFEUR\n\n_Muttering._\n\nSit down, sit down! DOCTOR\n\n_Uneasily._\n\nWhat is it? MAURICE\n\nWhat an unfortunate mishap! JEANNE\n\n_Agitated._\n\nThey shot you like a rabbit? Do you hear, Emil--they thought a\nrabbit was running! _She laughs loudly, the peasant also laughs._\n\nPEASANT\n\nI look like a rabbit! JEANNE\n\nDo you hear, Emil? _Laughs._\n\nEMIL GRELIEU\n\nJeanne! JEANNE\n\nIt makes me laugh--it seems so comical to me that they mistake\nus for rabbits. And now, what are we now--water rats? Emil, just\npicture to yourself, water rats in an automobile! JEANNE\n\nNo, no, I am not laughing any more, Maurice! _Laughs._\n\nAnd what else are we? PEASANT\n\n_Laughs._\n\nAnd now we must hide in the ground--\n\nJEANNE\n\n_In the same tone._\n\nAnd they will remain on the ground? EMIL GRELIEU\n\nMy dear! MAURICE\n\n_To the doctor._\n\nListen, you must do something. Mamma, we are starting directly, my dear! JEANNE\n\nNo, never mind, I am not laughing any more. I\nwas forever silent, but just now I felt like chattering. Emil,\nI am not disturbing you with my talk, am I? Why is the water so\nquiet, Emil? It was the King who said, \"The water is silent,\"\nwas it not? But I should like to see it roar, crash like\nthunder.... No, I cannot, I cannot bear this silence! Ah, why is\nit so quiet--I cannot bear it! MAURICE\n\n_To the chauffeur._\n\nMy dear fellow, please hurry up! CHAUFFEUR\n\nYes, yes! JEANNE\n\n_Suddenly cries, threatening._\n\nBut I cannot bear it! _Covers her mouth with her hands; sobs._\n\nI cannot! EMIL GRELIEU\n\nAll will end well, Jeanne. JEANNE\n\n_Sobbing, but calming herself somewhat._\n\nI cannot bear it! EMIL GRELIEU\n\nAll will end well, Jeanne! I am suffering, but I know this, Jeanne! CHAUFFEUR\n\nIn a moment, in a moment. EMIL GRELIEU\n\n_Faintly._\n\nJeanne! JEANNE\n\nYes, yes, I know.... Forgive me, forgive me, I will soon--\n\n_A loud, somewhat hoarse voice of a girl comes from the dark._\n\nGIRL\n\nTell me how I can find my way to Lonua! _Exclamations of surprise._\n\nMAURICE\n\nWho is that? JEANNE\n\nEmil, it is that girl! _Laughs._\n\nShe is also like a rabbit! DOCTOR\n\n_Grumbles._\n\nWhat is it, what is it--Who? Her dress is torn, her eyes look\nwild. The peasant is laughing._\n\nPEASANT\n\nShe is here again? CHAUFFEUR\n\nLet me have the light! GIRL\n\n_Loudly._\n\nHow can I find my way to Lonua? EMIL GRELIEU\n\nMaurice, you must stop her! Doctor, you--\n\nCHAUFFEUR\n\nPut down the lantern! GIRL\n\n_Shouts._\n\nHands off! No, no, you will not dare--\n\nMAURICE\n\nYou can't catch her--\n\n_The girl runs away._\n\nEMIL GRELIEU\n\nDoctor, you must catch her! She will perish here, quick--\n\n_She runs away. The doctor follows her in the dark._\n\nPEASANT\n\nShe asked me, too, how to go to Lonua. _The girl's voice resounds in the dark and then there is\nsilence._\n\nEMIL GRELIEU\n\nYou must catch her! MAURICE\n\nBut how, father? Jeanne\nbreaks into muffled laughter._\n\nMAURICE\n\n_Mutters._\n\nNow he is gone! CHAUFFEUR\n\n_Triumphantly._\n\nTake your seats! MAURICE\n\nBut the doctor isn't here. CHAUFFEUR\n\nLet us call him. _Maurice and the chauffeur call: \"Doctor! \"_\n\nCHAUFFEUR\n\n_Angrily._\n\nI must deliver Monsieur Grelieu, and I will deliver him. MAURICE\n\n_Shouts._\n\nLangloi! _A faint echo in the distance._\n\nCome! _The response is nearer._\n\nPEASANT\n\nHe did not catch her. She asked me, too,\nabout the road to Lonua. _Laughs._\n\nThere are many like her now. EMIL GRELIEU\n\n_Imploringly._\n\nJeanne! JEANNE\n\nBut I cannot, Emil. I used\nto understand, I used to understand, but now--Where is Pierre? _Firmly._\n\nWhere is Pierre? MAURICE\n\nOh, will he be here soon? Mother dear, we'll start in a moment! JEANNE\n\nYes, yes, we'll start in a moment! Why such a dream, why such a dream? _A mice from the darkness, quite near._\n\nJEANNE\n\n_Frightened._\n\nWho is shouting? What a strange dream, what a terrible,\nterrible, terrible dream. _Lowering her voice._\n\nI cannot--why are you torturing me? EMIL GRELIEU\n\nHe is dead, Jeanne! EMIL GRELIEU\n\nHe is dead, Jeanne. But I swear to you by God, Jeanne!--Belgium\nwill live. Weep, sob, you are a mother. I too am crying with\nyou--But I swear by God: Belgium will live! God has given me the\nlight to see, and I can see. A new Spring will come here, the trees will be covered with\nblossoms--I swear to you, Jeanne, they will be covered with\nblossoms! And mothers will caress their children, and the sun\nwill shine upon their heads, upon their golden-haired little\nheads! I see my nation: Here it is advancing with palm\nleaves to meet God who has come to earth again. Weep, Jeanne,\nyou are a mother! Weep, unfortunate mother--God weeps with you. But there will be happy mothers here again--I see a new world,\nJeanne, I see a new life! The song was\nin the Provencal dialect, well understood as the language of poetry\nin all the courts of Europe, and particularly in Scotland. It was more\nsimply turned, however, than was the general cast of the sirventes,\nand rather resembled the lai of a Norman minstrel. It may be translated\nthus:\n\n The Lay of Poor Louise. The livelong day\n She roams from cot to castle gay;\n And still her voice and viol say,\n Ah, maids, beware the woodland way;\n Think on Louise. The sun was high;\n It smirch'd her cheek, it dimm'd her eye. The woodland walk was cool and nigh,\n Where birds with chiming streamlets vie\n To cheer Louise. The savage bear\n Made ne'er that lovely grove his lair;\n The wolves molest not paths so fair. But better far had such been there\n For poor Louise. In woody wold\n She met a huntsman fair and bold;\n His baldrick was of silk and gold,\n And many a witching tale he told\n To poor Louise. Small cause to pine\n Hadst thou for treasures of the mine;\n For peace of mind, that gift divine,\n And spotless innocence, were thine. I know not if by force or theft,\n Or part by violence, part by gift;\n But misery is all that's left\n To poor Louise,\n\n Let poor Louise some succour have! She will not long your bounty crave,\n Or tire the gay with warning stave;\n For Heaven has grace, and earth a grave\n For poor Louise. The song was no sooner finished than, anxious lest the dispute should be\nrevived betwixt his brother and the Earl of March, King Robert called to\nthe latter, \"What think you of the minstrelsy, my lord? Methinks, as I\nheard it even at this distance, it was a wild and pleasing lay.\" \"My judgment is not deep my lord; but the singer may dispense with\nmy approbation, since she seems to have received that of his Grace of\nRothsay, the best judge in Scotland.\" said the King in alarm; \"is my son below?\" \"He is sitting on horseback by the glee maiden,\" said March, with a\nmalicious smile on his cheek, \"apparently as much interested", 3 | "query": "Where is John? ", 4 | "target": "bedroom" 5 | } --------------------------------------------------------------------------------