diff --git a/src/cai/repl/commands/completer.py b/src/cai/repl/commands/completer.py index cadf97a5..3f6d2468 100644 --- a/src/cai/repl/commands/completer.py +++ b/src/cai/repl/commands/completer.py @@ -120,6 +120,9 @@ class FuzzyCommandCompleter(Completer): # Standard models always available standard_models = [ + # Alias models + "alias0", + # Claude 3.7 models "claude-3-7-sonnet-20250219", diff --git a/src/cai/repl/commands/model.py b/src/cai/repl/commands/model.py index 07cb0480..337fd9e9 100644 --- a/src/cai/repl/commands/model.py +++ b/src/cai/repl/commands/model.py @@ -67,11 +67,19 @@ class ModelCommand(Command): # Define model categories and their models for easy reference # pylint: disable=invalid-name MODEL_CATEGORIES = { + "Alias": [ + { + "name": "alias0", + "description": ( + "Best model for Cybersecurity AI tasks" + ) + } + ], "Claude 3.7": [ { "name": "claude-3-7-sonnet-20250219", "description": ( - "Best model for complex reasoning and creative tasks" + "Excellent model for complex reasoning and creative tasks" ) } ], diff --git a/src/cai/sdk/agents/models/openai_chatcompletions.py b/src/cai/sdk/agents/models/openai_chatcompletions.py index 04de9fa8..9fb5b431 100644 --- a/src/cai/sdk/agents/models/openai_chatcompletions.py +++ b/src/cai/sdk/agents/models/openai_chatcompletions.py @@ -577,6 +577,10 @@ class OpenAIChatCompletionsModel(Model): response.usage.input_tokens = response.usage.prompt_tokens if hasattr(response.usage, 'completion_tokens') and not hasattr(response.usage, 'output_tokens'): response.usage.output_tokens = response.usage.completion_tokens + + # Ensure cost is properly initialized + if not hasattr(response, 'cost'): + response.cost = None return ModelResponse( output=items, diff --git a/src/cai/sdk/agents/run_to_jsonl.py b/src/cai/sdk/agents/run_to_jsonl.py index 9a2a0e93..a8197090 100644 --- a/src/cai/sdk/agents/run_to_jsonl.py +++ b/src/cai/sdk/agents/run_to_jsonl.py @@ -158,7 +158,7 @@ class DataRecorder: # pylint: disable=too-few-public-methods # Obtener el coste de la interacción interaction_cost = 0.0 if hasattr(msg, "cost"): - interaction_cost = float(msg.cost) + interaction_cost = float(msg.cost) if msg.cost is not None else 0.0 # Usar el total_cost proporcionado o actualizar el interno if total_cost is not None: