cbrkit.cli
cbrkit
Usage:
$ cbrkit [OPTIONS] COMMAND [ARGS]...
Options:
--install-completion
: Install completion for the current shell.--show-completion
: Show completion for the current shell, to copy it or customize the installation.--help
: Show this message and exit.
Commands:
retrieve
reuse
cycle
synthesis
serve
openapi
cbrkit retrieve
Usage:
$ cbrkit retrieve [OPTIONS] CASEBASE_PATH QUERIES_PATH RETRIEVER
Arguments:
CASEBASE_PATH
: [required]QUERIES_PATH
: [required]RETRIEVER
: [required]
Options:
--search-path PATH
: [default: <class 'list'>]--print-ranking / --no-print-ranking
: [default: print-ranking]--print-similarities / --no-print-similarities
: [default: no-print-similarities]--output-path PATH
--help
: Show this message and exit.
cbrkit reuse
Usage:
$ cbrkit reuse [OPTIONS] CASEBASE_PATH QUERIES_PATH REUSER
Arguments:
CASEBASE_PATH
: [required]QUERIES_PATH
: [required]REUSER
: [required]
Options:
--search-path PATH
: [default: <class 'list'>]--output-path PATH
--help
: Show this message and exit.
cbrkit cycle
Usage:
$ cbrkit cycle [OPTIONS] CASEBASE_PATH QUERIES_PATH RETRIEVER REUSER
Arguments:
CASEBASE_PATH
: [required]QUERIES_PATH
: [required]RETRIEVER
: [required]REUSER
: [required]
Options:
--search-path PATH
: [default: <class 'list'>]--output-path PATH
--help
: Show this message and exit.
cbrkit synthesis
Usage:
$ cbrkit synthesis [OPTIONS] CASEBASE_PATH QUERIES_PATH RETRIEVER REUSER SYNTHESIZER
Arguments:
CASEBASE_PATH
: [required]QUERIES_PATH
: [required]RETRIEVER
: [required]REUSER
: [required]SYNTHESIZER
: [required]
Options:
--search-path PATH
: [default: <class 'list'>]--output-path PATH
--help
: Show this message and exit.
cbrkit serve
Usage:
$ cbrkit serve [OPTIONS]
Options:
--retriever TEXT
: [default: <class 'list'>]--reuser TEXT
: [default: <class 'list'>]--synthesizer TEXT
: [default: <class 'list'>]--search-path PATH
: [default: <class 'list'>]--host TEXT
: [default: 0.0.0.0]--port INTEGER
: [default: 8080]--reload / --no-reload
: [default: no-reload]--root-path TEXT
--help
: Show this message and exit.
cbrkit openapi
Usage:
$ cbrkit openapi [OPTIONS]
Options:
--file PATH
--help
: Show this message and exit.
1""" 2.. include:: ../../cli.md 3""" 4 5import os 6import sys 7from pathlib import Path 8from typing import Annotated 9 10import orjson 11 12import cbrkit 13 14with cbrkit.helpers.optional_dependencies("raise", "cli"): 15 import typer 16 from rich import print 17 18 19__all__ = ["app"] 20 21app = typer.Typer(pretty_exceptions_enable=False) 22 23 24@app.callback() 25def app_callback(): 26 pass 27 28 29@app.command() 30def retrieve( 31 casebase_path: Path, 32 queries_path: Path, 33 retriever: str, 34 search_path: Annotated[list[Path], typer.Option(default_factory=list)], 35 print_ranking: bool = True, 36 print_similarities: bool = False, 37 output_path: Path | None = None, 38) -> None: 39 sys.path.extend(str(x) for x in search_path) 40 casebase = cbrkit.loaders.path(casebase_path) 41 queries = cbrkit.loaders.path(queries_path) 42 retrievers: list[cbrkit.typing.MaybeFactory[cbrkit.typing.RetrieverFunc]] = ( 43 cbrkit.helpers.load_callables(retriever) 44 ) 45 46 result = cbrkit.retrieval.apply_queries(casebase, queries, retrievers) 47 48 if output_path: 49 cbrkit.dumpers.file(output_path, result) 50 51 if print_ranking or print_similarities: 52 for query_key, query_result in result.final_step.queries.items(): 53 print(f"Query: {query_key}") 54 55 if print_ranking: 56 print(f"Ranking: {', '.join(map(str, query_result.ranking))}") 57 58 if print_similarities: 59 print("Similarities:") 60 for case_name, similarity in query_result.similarities.items(): 61 print(f" {case_name}: {cbrkit.helpers.unpack_float(similarity)}") 62 63 print() 64 65 66@app.command() 67def reuse( 68 casebase_path: Path, 69 queries_path: Path, 70 reuser: str, 71 search_path: Annotated[list[Path], typer.Option(default_factory=list)], 72 output_path: Path | None = None, 73) -> None: 74 sys.path.extend(str(x) for x in search_path) 75 casebase = cbrkit.loaders.path(casebase_path) 76 queries = cbrkit.loaders.path(queries_path) 77 reusers: list[cbrkit.typing.MaybeFactory[cbrkit.typing.ReuserFunc]] = ( 78 cbrkit.helpers.load_callables(reuser) 79 ) 80 81 result = cbrkit.reuse.apply_queries(casebase, queries, reusers) 82 83 if output_path: 84 cbrkit.dumpers.file(output_path, result) 85 86 87@app.command() 88def cycle( 89 casebase_path: Path, 90 queries_path: Path, 91 retriever: str, 92 reuser: str, 93 search_path: Annotated[list[Path], typer.Option(default_factory=list)], 94 output_path: Path | None = None, 95) -> None: 96 sys.path.extend(str(x) for x in search_path) 97 casebase = cbrkit.loaders.path(casebase_path) 98 queries = cbrkit.loaders.path(queries_path) 99 retrievers: list[cbrkit.typing.MaybeFactory[cbrkit.typing.RetrieverFunc]] = ( 100 cbrkit.helpers.load_callables(retriever) 101 ) 102 reusers: list[cbrkit.typing.MaybeFactory[cbrkit.typing.ReuserFunc]] = ( 103 cbrkit.helpers.load_callables(reuser) 104 ) 105 106 result = cbrkit.cycle.apply_queries(casebase, queries, retrievers, reusers) 107 108 if output_path: 109 cbrkit.dumpers.file(output_path, result) 110 111 112@app.command() 113def synthesis( 114 casebase_path: Path, 115 queries_path: Path, 116 retriever: str, 117 reuser: str, 118 synthesizer: str, 119 search_path: Annotated[list[Path], typer.Option(default_factory=list)], 120 output_path: Path | None = None, 121) -> None: 122 sys.path.extend(str(x) for x in search_path) 123 casebase = cbrkit.loaders.path(casebase_path) 124 queries = cbrkit.loaders.path(queries_path) 125 retrievers: list[cbrkit.typing.MaybeFactory[cbrkit.typing.RetrieverFunc]] = ( 126 cbrkit.helpers.load_callables(retriever) 127 ) 128 reusers: list[cbrkit.typing.MaybeFactory[cbrkit.typing.ReuserFunc]] = ( 129 cbrkit.helpers.load_callables(reuser) 130 ) 131 synthesis_func: cbrkit.typing.MaybeFactory[cbrkit.typing.SynthesizerFunc] = ( 132 cbrkit.helpers.load_callable(synthesizer) 133 ) 134 135 cycle_result = cbrkit.cycle.apply_queries(casebase, queries, retrievers, reusers) 136 synthesis_result = cbrkit.synthesis.apply_result( 137 cycle_result.final_step, synthesis_func 138 ) 139 140 if output_path: 141 cbrkit.dumpers.file(output_path, synthesis_result) 142 143 144@app.command() 145def serve( 146 retriever: Annotated[list[str], typer.Option(default_factory=list)], 147 reuser: Annotated[list[str], typer.Option(default_factory=list)], 148 synthesizer: Annotated[list[str], typer.Option(default_factory=list)], 149 search_path: Annotated[list[Path], typer.Option(default_factory=list)], 150 host: str = "0.0.0.0", 151 port: int = 8080, 152 reload: bool = False, 153 root_path: str = "", 154) -> None: 155 import uvicorn 156 157 sys.path.extend(str(x) for x in search_path) 158 159 os.environ["CBRKIT_RETRIEVER"] = ",".join(retriever) 160 os.environ["CBRKIT_REUSER"] = ",".join(reuser) 161 os.environ["CBRKIT_SYNTHESIZER"] = ",".join(synthesizer) 162 163 uvicorn.run( 164 "cbrkit.api:app", 165 host=host, 166 port=port, 167 reload=reload, 168 root_path=root_path, 169 ) 170 171 172@app.command() 173def openapi(file: Path | None = None): 174 from cbrkit.api import app 175 176 schema = orjson.dumps( 177 app.openapi(), 178 option=orjson.OPT_INDENT_2, 179 ) 180 181 if file is None: 182 print(schema.decode()) 183 184 else: 185 print(f"Writing OpenAPI schema to {file}") 186 187 with file.open("wb") as fp: 188 fp.write(schema) 189 190 191if __name__ == "__main__": 192 app()
app =
<typer.main.Typer object>