Skip to content

afnio.models.model

afnio.models.model.BaseModel

Bases: ABC

An abstraction for a model.

Source code in afnio/models/model.py
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
class BaseModel(ABC):
    """
    An abstraction for a model.
    """

    def __init__(
        self,
        provider: str = None,
        config: Optional[dict] = None,
        usage: Optional[dict] = None,
    ):
        """Initializes the `BaseModel` instance.

        Args:
            provider: The name of the model provider (e.g., `"openai"`, `"anthropic"`).
            config: A dictionary containing provider-specific configuration parameters,
                such as model name, temperature, max tokens, etc. This is an internal
                implementation detail used by `afnio` to create a `BaseModel` instance
                on the backend, and is not intended to be set directly by users.
                Subclasses can define their own expected configuration parameters and
                should ensure that they are included in this dictionary when
                initializing the base class.
            usage: A dictionary to track token usage and cost information. It is
                typically initialized by subclasses with provider-specific usage metrics
                and cost structure.
        """
        self.provider = provider
        self._config = config or {}
        self._usage = usage or {}
        self._usage.update(copy.deepcopy(INITIAL_COST))
        self.model_id = None

        # Request user consent before sending sensitive info to the server
        check_consent()

        try:
            # Get the singleton websocket client
            _, ws_client = get_default_clients()

            payload = {
                "class_type": self.__class__.__name__,
                "provider": self.provider,
                "config": self.get_config(),
                "usage": self.get_usage(),
            }
            response = run_in_background_loop(ws_client.call("create_model", payload))
            if "error" in response:
                raise RuntimeError(
                    response["error"]["data"].get("exception", response["error"])
                )

            logger.debug(f"LM model created and shared with the server: {self!r}")

            model_id = response["result"].get("model_id")
            if not model_id:
                raise RuntimeError(
                    f"Server did not return a model_id "
                    f"for payload: {payload!r}, response: {response!r}"
                )
            self.model_id = model_id
            register_model(self)
        except Exception as e:
            logger.error(f"Failed to share LM model with the server: {e}")
            raise

    def get_provider(self) -> Optional[str]:
        """Returns the model provider name.

        Returns:
            provider: The name of the model provider (e.g., `"openai"`, `"anthropic"`),
                or None if not set.
        """
        return self.provider

    def get_config(self) -> Dict[str, Union[str, float, int]]:
        """Returns the model configuration.

        This includes the model name, temperature, max tokens, and other
        parameters that are used to configure the model's behavior.

        Returns:
            A dictionary containing the model's configuration parameters.
        """
        return self._config

    def update_usage(self, usage: Dict[str, int], model_name: str = None) -> None:
        """Updates the internal token usage statistics and cost.

        Each model provider (e.g., OpenAI, Anthropic) may have a different usage format.
        This method should be implemented by subclasses to ensure correct parsing
        and aggregation of token usage.

        Behavior:
            - If `model_name` is provided, the method dynamically calculates and updates
              the cost based on the usage metrics and the pricing for the specified
              model.
            - If `model_name` is None, the method copies the cost value directly from
              the `usage` dictionary (if present), which is typically used when
              restoring state from a checkpoint.

        Args:
            usage (Dict[str, int]): A dictionary containing token usage metrics,
                such as `prompt_tokens`, `completion_tokens`, and `total_tokens`.
            model_name (str, optional): The name of the model for which the usage
                is being updated. If None, cost is copied from usage if available.

        Raises:
            NotImplementedError: If called on the base class without an implementation.
        """
        raise NotImplementedError

    def get_usage(self) -> Dict[str, int]:
        """Retrieves the current token usage statistics and cost (in USD).

        Returns:
            A dictionary containing cumulative token usage statistics since the model \
            instance was initialized.

        Examples:
            >>> model.get_usage()
            {
                'prompt_tokens': 1500,
                'completion_tokens': 1200,
                'total_tokens': 2700,
                'cost': {'amount': 12.00, 'currency': 'USD'}
            }
        """
        return self._usage.copy()

    def clear_usage(self) -> None:
        """Clears the token usage statistics.

        This resets all numerical values in the usage dictionary to zero (including
        nested values), while preserving the dictionary structure.
        """

        try:
            # Get the singleton websocket client
            _, ws_client = get_default_clients()

            payload = {
                "model_id": self.model_id,
            }
            response = run_in_background_loop(
                ws_client.call("clear_model_usage", payload)
            )
            if "error" in response:
                raise RuntimeError(
                    response["error"]["data"].get("exception", response["error"])
                )

            model_id = response["result"].get("model_id")
            if not model_id:
                raise RuntimeError(
                    f"Server did not return a model_id "
                    f"for payload: {payload!r}, response: {response!r}"
                )

            logger.debug(f"LM model usage cleared on the server: {self!r}")
        except Exception as e:
            logger.error(f"Failed to clear LM model usage on the server: {e}")
            raise

    def __deepcopy__(self, memo):
        if id(self) in memo:
            return memo[id(self)]
        # Save only the class type and any necessary metadata (e.g., usage details)
        cls_copy = {
            "class_type": self.__class__.__name__,
            "provider": self.provider,
            "usage": self.get_usage(),
        }

        # Store the copied object in memo before returning it
        memo[id(self)] = cls_copy
        return cls_copy

__init__(provider=None, config=None, usage=None)

Initializes the BaseModel instance.

Parameters:

Name Type Description Default
provider str

The name of the model provider (e.g., "openai", "anthropic").

None
config dict | None

A dictionary containing provider-specific configuration parameters, such as model name, temperature, max tokens, etc. This is an internal implementation detail used by afnio to create a BaseModel instance on the backend, and is not intended to be set directly by users. Subclasses can define their own expected configuration parameters and should ensure that they are included in this dictionary when initializing the base class.

None
usage dict | None

A dictionary to track token usage and cost information. It is typically initialized by subclasses with provider-specific usage metrics and cost structure.

None
Source code in afnio/models/model.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
def __init__(
    self,
    provider: str = None,
    config: Optional[dict] = None,
    usage: Optional[dict] = None,
):
    """Initializes the `BaseModel` instance.

    Args:
        provider: The name of the model provider (e.g., `"openai"`, `"anthropic"`).
        config: A dictionary containing provider-specific configuration parameters,
            such as model name, temperature, max tokens, etc. This is an internal
            implementation detail used by `afnio` to create a `BaseModel` instance
            on the backend, and is not intended to be set directly by users.
            Subclasses can define their own expected configuration parameters and
            should ensure that they are included in this dictionary when
            initializing the base class.
        usage: A dictionary to track token usage and cost information. It is
            typically initialized by subclasses with provider-specific usage metrics
            and cost structure.
    """
    self.provider = provider
    self._config = config or {}
    self._usage = usage or {}
    self._usage.update(copy.deepcopy(INITIAL_COST))
    self.model_id = None

    # Request user consent before sending sensitive info to the server
    check_consent()

    try:
        # Get the singleton websocket client
        _, ws_client = get_default_clients()

        payload = {
            "class_type": self.__class__.__name__,
            "provider": self.provider,
            "config": self.get_config(),
            "usage": self.get_usage(),
        }
        response = run_in_background_loop(ws_client.call("create_model", payload))
        if "error" in response:
            raise RuntimeError(
                response["error"]["data"].get("exception", response["error"])
            )

        logger.debug(f"LM model created and shared with the server: {self!r}")

        model_id = response["result"].get("model_id")
        if not model_id:
            raise RuntimeError(
                f"Server did not return a model_id "
                f"for payload: {payload!r}, response: {response!r}"
            )
        self.model_id = model_id
        register_model(self)
    except Exception as e:
        logger.error(f"Failed to share LM model with the server: {e}")
        raise

get_provider()

Returns the model provider name.

Returns:

Name Type Description
provider str | None

The name of the model provider (e.g., "openai", "anthropic"), or None if not set.

Source code in afnio/models/model.py
85
86
87
88
89
90
91
92
def get_provider(self) -> Optional[str]:
    """Returns the model provider name.

    Returns:
        provider: The name of the model provider (e.g., `"openai"`, `"anthropic"`),
            or None if not set.
    """
    return self.provider

get_config()

Returns the model configuration.

This includes the model name, temperature, max tokens, and other parameters that are used to configure the model's behavior.

Returns:

Type Description
dict[str, str | float | int]

A dictionary containing the model's configuration parameters.

Source code in afnio/models/model.py
 94
 95
 96
 97
 98
 99
100
101
102
103
def get_config(self) -> Dict[str, Union[str, float, int]]:
    """Returns the model configuration.

    This includes the model name, temperature, max tokens, and other
    parameters that are used to configure the model's behavior.

    Returns:
        A dictionary containing the model's configuration parameters.
    """
    return self._config

update_usage(usage, model_name=None)

Updates the internal token usage statistics and cost.

Each model provider (e.g., OpenAI, Anthropic) may have a different usage format. This method should be implemented by subclasses to ensure correct parsing and aggregation of token usage.

Behavior
  • If model_name is provided, the method dynamically calculates and updates the cost based on the usage metrics and the pricing for the specified model.
  • If model_name is None, the method copies the cost value directly from the usage dictionary (if present), which is typically used when restoring state from a checkpoint.

Parameters:

Name Type Description Default
usage dict[str, int]

A dictionary containing token usage metrics, such as prompt_tokens, completion_tokens, and total_tokens.

required
model_name str

The name of the model for which the usage is being updated. If None, cost is copied from usage if available.

None

Raises:

Type Description
NotImplementedError

If called on the base class without an implementation.

Source code in afnio/models/model.py
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
def update_usage(self, usage: Dict[str, int], model_name: str = None) -> None:
    """Updates the internal token usage statistics and cost.

    Each model provider (e.g., OpenAI, Anthropic) may have a different usage format.
    This method should be implemented by subclasses to ensure correct parsing
    and aggregation of token usage.

    Behavior:
        - If `model_name` is provided, the method dynamically calculates and updates
          the cost based on the usage metrics and the pricing for the specified
          model.
        - If `model_name` is None, the method copies the cost value directly from
          the `usage` dictionary (if present), which is typically used when
          restoring state from a checkpoint.

    Args:
        usage (Dict[str, int]): A dictionary containing token usage metrics,
            such as `prompt_tokens`, `completion_tokens`, and `total_tokens`.
        model_name (str, optional): The name of the model for which the usage
            is being updated. If None, cost is copied from usage if available.

    Raises:
        NotImplementedError: If called on the base class without an implementation.
    """
    raise NotImplementedError

get_usage()

Retrieves the current token usage statistics and cost (in USD).

Returns:

Type Description
dict[str, int]

A dictionary containing cumulative token usage statistics since the model instance was initialized.

Examples:

>>> model.get_usage()
{
    'prompt_tokens': 1500,
    'completion_tokens': 1200,
    'total_tokens': 2700,
    'cost': {'amount': 12.00, 'currency': 'USD'}
}
Source code in afnio/models/model.py
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
def get_usage(self) -> Dict[str, int]:
    """Retrieves the current token usage statistics and cost (in USD).

    Returns:
        A dictionary containing cumulative token usage statistics since the model \
        instance was initialized.

    Examples:
        >>> model.get_usage()
        {
            'prompt_tokens': 1500,
            'completion_tokens': 1200,
            'total_tokens': 2700,
            'cost': {'amount': 12.00, 'currency': 'USD'}
        }
    """
    return self._usage.copy()

clear_usage()

Clears the token usage statistics.

This resets all numerical values in the usage dictionary to zero (including nested values), while preserving the dictionary structure.

Source code in afnio/models/model.py
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
def clear_usage(self) -> None:
    """Clears the token usage statistics.

    This resets all numerical values in the usage dictionary to zero (including
    nested values), while preserving the dictionary structure.
    """

    try:
        # Get the singleton websocket client
        _, ws_client = get_default_clients()

        payload = {
            "model_id": self.model_id,
        }
        response = run_in_background_loop(
            ws_client.call("clear_model_usage", payload)
        )
        if "error" in response:
            raise RuntimeError(
                response["error"]["data"].get("exception", response["error"])
            )

        model_id = response["result"].get("model_id")
        if not model_id:
            raise RuntimeError(
                f"Server did not return a model_id "
                f"for payload: {payload!r}, response: {response!r}"
            )

        logger.debug(f"LM model usage cleared on the server: {self!r}")
    except Exception as e:
        logger.error(f"Failed to clear LM model usage on the server: {e}")
        raise

afnio.models.model.TextCompletionModel

Bases: BaseModel

An abstraction for a language model that accepts a prompt composed of a single text input and generates a textual completion.

Source code in afnio/models/model.py
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
class TextCompletionModel(BaseModel):
    """
    An abstraction for a language model that accepts a prompt composed of a single
    text input and generates a textual completion.
    """

    def __init__(self, provider: str = None, **kwargs):
        """Initializes the `TextCompletionModel` instance.

        Args:
            provider: The name of the model provider (e.g., `"openai"`, `"anthropic"`).
            **kwargs: Recognized/expected keys are `usage` (a dictionary to track token
                usage and cost information) and any provider-specific configuration
                parameters.
        """
        super().__init__(provider=provider, **kwargs)

    async def acomplete(self, prompt: str, **kwargs) -> str:
        """
        Asynchronous method to generate a completion for the given prompt.

        Args:
            prompt: The input text for which the model should generate a completion.
            **kwargs: Additional parameters to configure the model's behavior during
                chat completion. This may include options such as:

                - model (`str`): The model to use (e.g., `"gpt-4o"`).
                - temperature (`float`): Amount of randomness injected into
                    the response.
                - max_completion_tokens (`int`): Maximum number of tokens to generate.
                - etc.

                For a complete list of supported parameters for each model, refer to the
                respective API documentation.

        Returns:
            A string containing the generated completion.
        """
        raise NotImplementedError

    def complete(self, prompt: str, **kwargs) -> str:
        """
        Synchronous method to generate a completion for the given prompt.

        Args:
            prompt: The input text for which the model should generate a completion.
            **kwargs: Additional parameters to configure the model's behavior during
                chat completion. This may include options such as:

                - model (`str`): The model to use (e.g., `"gpt-4o"`).
                - temperature (`float`): Amount of randomness injected into
                    the response.
                - max_completion_tokens (`int`): Maximum number of tokens to generate.
                - etc.

                For a complete list of supported parameters for each model, refer to the
                respective API documentation.

        Returns:
            A string containing the generated completion.
        """
        raise NotImplementedError

__init__(provider=None, **kwargs)

Initializes the TextCompletionModel instance.

Parameters:

Name Type Description Default
provider str

The name of the model provider (e.g., "openai", "anthropic").

None
**kwargs

Recognized/expected keys are usage (a dictionary to track token usage and cost information) and any provider-specific configuration parameters.

{}
Source code in afnio/models/model.py
205
206
207
208
209
210
211
212
213
214
def __init__(self, provider: str = None, **kwargs):
    """Initializes the `TextCompletionModel` instance.

    Args:
        provider: The name of the model provider (e.g., `"openai"`, `"anthropic"`).
        **kwargs: Recognized/expected keys are `usage` (a dictionary to track token
            usage and cost information) and any provider-specific configuration
            parameters.
    """
    super().__init__(provider=provider, **kwargs)

acomplete(prompt, **kwargs) async

Asynchronous method to generate a completion for the given prompt.

Parameters:

Name Type Description Default
prompt str

The input text for which the model should generate a completion.

required
**kwargs

Additional parameters to configure the model's behavior during chat completion. This may include options such as:

  • model (str): The model to use (e.g., "gpt-4o").
  • temperature (float): Amount of randomness injected into the response.
  • max_completion_tokens (int): Maximum number of tokens to generate.
  • etc.

For a complete list of supported parameters for each model, refer to the respective API documentation.

{}

Returns:

Type Description
str

A string containing the generated completion.

Source code in afnio/models/model.py
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
async def acomplete(self, prompt: str, **kwargs) -> str:
    """
    Asynchronous method to generate a completion for the given prompt.

    Args:
        prompt: The input text for which the model should generate a completion.
        **kwargs: Additional parameters to configure the model's behavior during
            chat completion. This may include options such as:

            - model (`str`): The model to use (e.g., `"gpt-4o"`).
            - temperature (`float`): Amount of randomness injected into
                the response.
            - max_completion_tokens (`int`): Maximum number of tokens to generate.
            - etc.

            For a complete list of supported parameters for each model, refer to the
            respective API documentation.

    Returns:
        A string containing the generated completion.
    """
    raise NotImplementedError

complete(prompt, **kwargs)

Synchronous method to generate a completion for the given prompt.

Parameters:

Name Type Description Default
prompt str

The input text for which the model should generate a completion.

required
**kwargs

Additional parameters to configure the model's behavior during chat completion. This may include options such as:

  • model (str): The model to use (e.g., "gpt-4o").
  • temperature (float): Amount of randomness injected into the response.
  • max_completion_tokens (int): Maximum number of tokens to generate.
  • etc.

For a complete list of supported parameters for each model, refer to the respective API documentation.

{}

Returns:

Type Description
str

A string containing the generated completion.

Source code in afnio/models/model.py
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
def complete(self, prompt: str, **kwargs) -> str:
    """
    Synchronous method to generate a completion for the given prompt.

    Args:
        prompt: The input text for which the model should generate a completion.
        **kwargs: Additional parameters to configure the model's behavior during
            chat completion. This may include options such as:

            - model (`str`): The model to use (e.g., `"gpt-4o"`).
            - temperature (`float`): Amount of randomness injected into
                the response.
            - max_completion_tokens (`int`): Maximum number of tokens to generate.
            - etc.

            For a complete list of supported parameters for each model, refer to the
            respective API documentation.

    Returns:
        A string containing the generated completion.
    """
    raise NotImplementedError

afnio.models.model.ChatCompletionModel

Bases: BaseModel

An abstraction for a language model that accepts a prompt composed of an array of messages containing instructions for the model. Each message can have a different role, influencing how the model interprets the input.

Source code in afnio/models/model.py
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
class ChatCompletionModel(BaseModel):
    """
    An abstraction for a language model that accepts a prompt composed of an array
    of messages containing instructions for the model. Each message can have a
    different role, influencing how the model interprets the input.
    """

    def __init__(self, provider: str = None, **kwargs):
        """Initializes the `ChatCompletionModel` instance.

        Args:
            provider: The name of the model provider (e.g., `"openai"`, `"anthropic"`).
            **kwargs: Recognized/expected keys are `usage` (a dictionary to track token
                usage and cost information) and any provider-specific configuration
                parameters.
        """
        super().__init__(provider=provider, **kwargs)

    # TODO: Add link to `API documentation` for kwargs of each supported model
    async def achat(self, messages: List[Dict[str, str]], **kwargs) -> str:
        """
        Asynchronous method to handle chat-based interactions with the model.

        Args:
            messages: A list of messages, where each message is represented as a
                dictionary with `"role"` (e.g., `"user"`, `"system"`) and `"content"`
                (the text of the message).
            **kwargs: Additional parameters to configure the model's behavior during
                chat completion. This may include options such as:

                - model (`str`): The model to use (e.g., `"gpt-4o"`).
                - temperature (`float`): Amount of randomness injected into
                    the response.
                - max_completion_tokens (`int`): Maximum number of tokens to generate.
                - etc.

                For a complete list of supported parameters for each model, refer to the
                respective API documentation.

        Returns:
            A string containing the model's response to the chat messages.
        """
        raise NotImplementedError

    def chat(self, messages: List[Dict[str, str]], **kwargs) -> str:
        """
        Synchronous method to handle chat-based interactions with the model.

        Args:
            messages: A list of messages, where each message is represented as a
                dictionary with `"role"` (e.g., `"user"`, `"system"`) and `"content"`
                (the text of the message).
            **kwargs: Additional parameters to configure the model's behavior during
                chat completion. This may include options such as:

                - model (`str`): The model to use (e.g., `"gpt-4o"`).
                - temperature (`float`): Amount of randomness injected into
                    the response.
                - max_completion_tokens (`int`): Maximum number of tokens to generate.
                - etc.

                For a complete list of supported parameters for each model, refer to the
                respective API documentation.

        Returns:
            A string containing the model's response to the chat messages.
        """
        raise NotImplementedError

__init__(provider=None, **kwargs)

Initializes the ChatCompletionModel instance.

Parameters:

Name Type Description Default
provider str

The name of the model provider (e.g., "openai", "anthropic").

None
**kwargs

Recognized/expected keys are usage (a dictionary to track token usage and cost information) and any provider-specific configuration parameters.

{}
Source code in afnio/models/model.py
271
272
273
274
275
276
277
278
279
280
def __init__(self, provider: str = None, **kwargs):
    """Initializes the `ChatCompletionModel` instance.

    Args:
        provider: The name of the model provider (e.g., `"openai"`, `"anthropic"`).
        **kwargs: Recognized/expected keys are `usage` (a dictionary to track token
            usage and cost information) and any provider-specific configuration
            parameters.
    """
    super().__init__(provider=provider, **kwargs)

achat(messages, **kwargs) async

Asynchronous method to handle chat-based interactions with the model.

Parameters:

Name Type Description Default
messages list[dict[str, str]]

A list of messages, where each message is represented as a dictionary with "role" (e.g., "user", "system") and "content" (the text of the message).

required
**kwargs

Additional parameters to configure the model's behavior during chat completion. This may include options such as:

  • model (str): The model to use (e.g., "gpt-4o").
  • temperature (float): Amount of randomness injected into the response.
  • max_completion_tokens (int): Maximum number of tokens to generate.
  • etc.

For a complete list of supported parameters for each model, refer to the respective API documentation.

{}

Returns:

Type Description
str

A string containing the model's response to the chat messages.

Source code in afnio/models/model.py
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
async def achat(self, messages: List[Dict[str, str]], **kwargs) -> str:
    """
    Asynchronous method to handle chat-based interactions with the model.

    Args:
        messages: A list of messages, where each message is represented as a
            dictionary with `"role"` (e.g., `"user"`, `"system"`) and `"content"`
            (the text of the message).
        **kwargs: Additional parameters to configure the model's behavior during
            chat completion. This may include options such as:

            - model (`str`): The model to use (e.g., `"gpt-4o"`).
            - temperature (`float`): Amount of randomness injected into
                the response.
            - max_completion_tokens (`int`): Maximum number of tokens to generate.
            - etc.

            For a complete list of supported parameters for each model, refer to the
            respective API documentation.

    Returns:
        A string containing the model's response to the chat messages.
    """
    raise NotImplementedError

chat(messages, **kwargs)

Synchronous method to handle chat-based interactions with the model.

Parameters:

Name Type Description Default
messages list[dict[str, str]]

A list of messages, where each message is represented as a dictionary with "role" (e.g., "user", "system") and "content" (the text of the message).

required
**kwargs

Additional parameters to configure the model's behavior during chat completion. This may include options such as:

  • model (str): The model to use (e.g., "gpt-4o").
  • temperature (float): Amount of randomness injected into the response.
  • max_completion_tokens (int): Maximum number of tokens to generate.
  • etc.

For a complete list of supported parameters for each model, refer to the respective API documentation.

{}

Returns:

Type Description
str

A string containing the model's response to the chat messages.

Source code in afnio/models/model.py
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
def chat(self, messages: List[Dict[str, str]], **kwargs) -> str:
    """
    Synchronous method to handle chat-based interactions with the model.

    Args:
        messages: A list of messages, where each message is represented as a
            dictionary with `"role"` (e.g., `"user"`, `"system"`) and `"content"`
            (the text of the message).
        **kwargs: Additional parameters to configure the model's behavior during
            chat completion. This may include options such as:

            - model (`str`): The model to use (e.g., `"gpt-4o"`).
            - temperature (`float`): Amount of randomness injected into
                the response.
            - max_completion_tokens (`int`): Maximum number of tokens to generate.
            - etc.

            For a complete list of supported parameters for each model, refer to the
            respective API documentation.

    Returns:
        A string containing the model's response to the chat messages.
    """
    raise NotImplementedError

afnio.models.model.EmbeddingModel

Bases: BaseModel

An abstraction for a model that generates embeddings for input texts.

Source code in afnio/models/model.py
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
class EmbeddingModel(BaseModel):
    """
    An abstraction for a model that generates embeddings for input texts.
    """

    def __init__(self, provider: str = None, **kwargs):
        """Initializes the `EmbeddingModel` instance.

        Args:
            provider: The name of the model provider (e.g., `"openai"`, `"anthropic"`).
            **kwargs: Recognized/expected keys are `usage` (a dictionary to track token
                usage and cost information) and any provider-specific configuration
                parameters.
        """
        super().__init__(provider=provider, **kwargs)

    async def aembed(self, input: List[str], **kwargs) -> List[List[float]]:
        """
        Asynchronous method to generate embeddings for the given input texts.

        Args:
            input: A list of input strings for which embeddings should be generated.
            **kwargs: Additional parameters to configure the model's behavior during
                chat completion. This may include options such as:

                - model (`str`): The model to use (e.g., `"gpt-4o"`).
                - temperature (`float`): Amount of randomness injected into
                    the response.
                - max_completion_tokens (`int`): Maximum number of tokens to generate.
                - etc.

                For a complete list of supported parameters for each model, refer to the
                respective API documentation.

        Returns:
            A list of embeddings, where each embedding is represented \
            as a list of floats corresponding to the input strings.
        """
        raise NotImplementedError

    def embed(self, input: List[str], **kwargs) -> List[List[float]]:
        """
        Synchronous method to generate embeddings for the given input texts.

        Args:
            input: A list of input strings for which embeddings should be generated.
            **kwargs: Additional parameters to configure the model's behavior during
                chat completion. This may include options such as:

                - model (`str`): The model to use (e.g., `"gpt-4o"`).
                - temperature (`float`): Amount of randomness injected into
                    the response.
                - max_completion_tokens (`int`): Maximum number of tokens to generate.
                - etc.

                For a complete list of supported parameters for each model, refer to the
                respective API documentation.

        Returns:
            A list of embeddings, where each embedding is represented \
            as a list of floats corresponding to the input strings.
        """
        raise NotImplementedError

__init__(provider=None, **kwargs)

Initializes the EmbeddingModel instance.

Parameters:

Name Type Description Default
provider str

The name of the model provider (e.g., "openai", "anthropic").

None
**kwargs

Recognized/expected keys are usage (a dictionary to track token usage and cost information) and any provider-specific configuration parameters.

{}
Source code in afnio/models/model.py
340
341
342
343
344
345
346
347
348
349
def __init__(self, provider: str = None, **kwargs):
    """Initializes the `EmbeddingModel` instance.

    Args:
        provider: The name of the model provider (e.g., `"openai"`, `"anthropic"`).
        **kwargs: Recognized/expected keys are `usage` (a dictionary to track token
            usage and cost information) and any provider-specific configuration
            parameters.
    """
    super().__init__(provider=provider, **kwargs)

aembed(input, **kwargs) async

Asynchronous method to generate embeddings for the given input texts.

Parameters:

Name Type Description Default
input list[str]

A list of input strings for which embeddings should be generated.

required
**kwargs

Additional parameters to configure the model's behavior during chat completion. This may include options such as:

  • model (str): The model to use (e.g., "gpt-4o").
  • temperature (float): Amount of randomness injected into the response.
  • max_completion_tokens (int): Maximum number of tokens to generate.
  • etc.

For a complete list of supported parameters for each model, refer to the respective API documentation.

{}

Returns:

Type Description
list[list[float]]

A list of embeddings, where each embedding is represented as a list of floats corresponding to the input strings.

Source code in afnio/models/model.py
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
async def aembed(self, input: List[str], **kwargs) -> List[List[float]]:
    """
    Asynchronous method to generate embeddings for the given input texts.

    Args:
        input: A list of input strings for which embeddings should be generated.
        **kwargs: Additional parameters to configure the model's behavior during
            chat completion. This may include options such as:

            - model (`str`): The model to use (e.g., `"gpt-4o"`).
            - temperature (`float`): Amount of randomness injected into
                the response.
            - max_completion_tokens (`int`): Maximum number of tokens to generate.
            - etc.

            For a complete list of supported parameters for each model, refer to the
            respective API documentation.

    Returns:
        A list of embeddings, where each embedding is represented \
        as a list of floats corresponding to the input strings.
    """
    raise NotImplementedError

embed(input, **kwargs)

Synchronous method to generate embeddings for the given input texts.

Parameters:

Name Type Description Default
input list[str]

A list of input strings for which embeddings should be generated.

required
**kwargs

Additional parameters to configure the model's behavior during chat completion. This may include options such as:

  • model (str): The model to use (e.g., "gpt-4o").
  • temperature (float): Amount of randomness injected into the response.
  • max_completion_tokens (int): Maximum number of tokens to generate.
  • etc.

For a complete list of supported parameters for each model, refer to the respective API documentation.

{}

Returns:

Type Description
list[list[float]]

A list of embeddings, where each embedding is represented as a list of floats corresponding to the input strings.

Source code in afnio/models/model.py
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
def embed(self, input: List[str], **kwargs) -> List[List[float]]:
    """
    Synchronous method to generate embeddings for the given input texts.

    Args:
        input: A list of input strings for which embeddings should be generated.
        **kwargs: Additional parameters to configure the model's behavior during
            chat completion. This may include options such as:

            - model (`str`): The model to use (e.g., `"gpt-4o"`).
            - temperature (`float`): Amount of randomness injected into
                the response.
            - max_completion_tokens (`int`): Maximum number of tokens to generate.
            - etc.

            For a complete list of supported parameters for each model, refer to the
            respective API documentation.

    Returns:
        A list of embeddings, where each embedding is represented \
        as a list of floats corresponding to the input strings.
    """
    raise NotImplementedError