cleanup --model-metadata-file

This commit is contained in:
Paul Gauthier 2024-06-11 13:29:05 -07:00
parent 2f6e360188
commit fb3cc98da5
8 changed files with 60 additions and 49 deletions

View file

@ -142,21 +142,10 @@ def get_parser(default_config_files, git_root):
help="Specify the OpenAI organization ID",
)
group.add_argument(
"--model-file",
"--model-metadata-file",
metavar="MODEL_FILE",
default=None,
help={
"Specify a file with model definitions (info and cost) to be registered with litellm, json formated",
" {"
" \"gpt-4\": {",
" \"max_tokens\": 8192,",
" \"input_cost_per_token\": 0.00003,",
" \"output_cost_per_token\": 0.00006,",
" \"litellm_provider\": \"openai\",",
" \"mode\": \"chat\"",
" },",
" }"
}
help="Specify a file with context window and costs for unknown models",
)
group.add_argument(
"--edit-format",

View file

@ -341,17 +341,17 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
model_def_files.append(Path.home() / model_def_fname) # homedir
if git_root:
model_def_files.append(Path(git_root) / model_def_fname) # git root
if args.model_file:
model_def_files.append(args.model_file)
if args.model_metadata_file:
model_def_files.append(args.model_metadata_file)
model_def_files.append(model_def_fname.resolve())
model_def_files = list(map(str, model_def_files))
model_def_files = list(dict.fromkeys(model_def_files))
try:
model_files_loaded=models.register_models(model_def_files)
if len(model_files_loaded) > 0:
io.tool_output(f"Loaded {len(model_files_loaded)} model file(s)")
for model_file in model_files_loaded:
io.tool_output(f" - {model_file}")
model_metadata_files_loaded = models.register_models(model_def_files)
if len(model_metadata_files_loaded) > 0:
io.tool_output(f"Loaded {len(model_metadata_files_loaded)} model file(s)")
for model_metadata_file in model_metadata_files_loaded:
io.tool_output(f" - {model_metadata_file}")
except Exception as e:
io.tool_error(f"Error loading model info/cost: {e}")
return 1

View file

@ -426,12 +426,13 @@ class Model:
return res
def register_models(model_def_fnames):
model_files_loaded = []
model_metadata_files_loaded = []
for model_def_fname in model_def_fnames:
if not os.path.exists(model_def_fname):
continue
model_files_loaded.append(model_def_fname)
model_metadata_files_loaded.append(model_def_fname)
try:
with open(model_def_fname, "r") as model_def_file:
model_def = json.load(model_def_file)
@ -440,7 +441,8 @@ def register_models(model_def_fnames):
litellm.register_model(model_def)
return model_files_loaded
return model_metadata_files_loaded
def validate_variables(vars):
missing = []

View file

@ -63,6 +63,9 @@
## Specify the OpenAI organization ID
#openai-organization-id:
## Specify a file with context window and costs for unknown models
#model-metadata-file:
## Specify what edit format the LLM should use (default depends on model)
#edit-format:

View file

@ -89,6 +89,9 @@ cog.outl("```")
## Specify the OpenAI organization ID
#openai-organization-id:
## Specify a file with context window and costs for unknown models
#model-metadata-file:
## Specify what edit format the LLM should use (default depends on model)
#edit-format:

View file

@ -26,27 +26,6 @@ Put a line in it like this to specify your api key:
openai-api-key: sk-...
```
## Registering Models not in litellm
You can register model info and costs with litellm by adding one or more of the following files
* {HomeDir}/.aider.models.json
* {GitRoot}/.aider.models.json
* {CWD}/.aider.models.json
* or via the command line argument `model-file`
If the files above exists, they will be loaded in that order. Files loaded last will take priority.
The json file should be formated as follows
```
{
"gpt-4": {
"max_tokens": 8192,
"input_cost_per_token": 0.00003,
"output_cost_per_token": 0.00006,
"litellm_provider": "openai",
"mode": "chat",
},
}
```
see [litellm's model definitions](https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json) for examples
## Enable Playwright

View file

@ -6,3 +6,38 @@ nav_order: 900
# Model warnings
{% include model-warnings.md %}
## Specifying context window size and token costs
You can register context window limits and costs for models that aren't known
to aider. Create a `.aider.models.json` file in one of these locations:
- Your home directory.
- The root if your git repo.
- The current directory where you launch aider.
- Or specify a specific file with the `--model-metadata-file <filename>` switch.
If the files above exist, they will be loaded in that order.
Files loaded last will take priority.
The json file should be a dictionary with an entry for each model, as follows:
```
{
"gpt-4": {
"max_tokens": 4096,
"max_input_tokens": 8192,
"max_output_tokens": 4096,
"input_cost_per_token": 0.00003,
"output_cost_per_token": 0.00006,
"litellm_provider": "openai",
"mode": "chat",
"supports_function_calling": true
}
}
```
See
[litellm's model_prices_and_context_window.json file](https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json) for more examples.

View file

@ -19,7 +19,7 @@ usage: aider [-h] [--vim] [--openai-api-key] [--anthropic-api-key]
[--35turbo] [--models] [--openai-api-base]
[--openai-api-type] [--openai-api-version]
[--openai-api-deployment-id] [--openai-organization-id]
[--edit-format] [--weak-model]
[--model-metadata-file] [--edit-format] [--weak-model]
[--show-model-warnings | --no-show-model-warnings]
[--map-tokens] [--max-chat-history-tokens] [--env-file]
[--input-history-file] [--chat-history-file]
@ -108,10 +108,6 @@ Aliases:
List known models which match the (partial) MODEL name
Environment variable: `AIDER_MODELS`
### `--model-file FILE`
Specify a file with model definitions (info and cost) to be registered with litellm, json formated. See [Registering Models not in litellm](install/optional.md#registering_models_not_in_litellm) for the format
Environment variable: `AIDER_MODEL_FILE`
### `--openai-api-base OPENAI_API_BASE`
Specify the api base url
Environment variable: `OPENAI_API_BASE`
@ -132,6 +128,10 @@ Environment variable: `OPENAI_API_DEPLOYMENT_ID`
Specify the OpenAI organization ID
Environment variable: `OPENAI_ORGANIZATION_ID`
### `--model-metadata-file MODEL_FILE`
Specify a file with context window and costs for unknown models
Environment variable: `AIDER_MODEL_METADATA_FILE`
### `--edit-format EDIT_FORMAT`
Specify what edit format the LLM should use (default depends on model)
Environment variable: `AIDER_EDIT_FORMAT`