Coverage for mindsdb / integrations / handlers / minds_endpoint_handler / minds_endpoint_handler.py: 0%
56 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
1import os
2import pandas as pd
3import openai
4from openai import OpenAI, NotFoundError, AuthenticationError
5from typing import Dict, Optional
6from mindsdb.integrations.handlers.openai_handler import Handler as OpenAIHandler
7from mindsdb.integrations.utilities.handler_utils import get_api_key
8from mindsdb.integrations.handlers.minds_endpoint_handler.settings import minds_endpoint_handler_config
9from mindsdb.utilities import log
11logger = log.getLogger(__name__)
14class MindsEndpointHandler(OpenAIHandler):
15 """
16 This handler handles connection to the Minds Endpoint.
17 """
19 name = 'minds_endpoint'
21 def __init__(self, *args, **kwargs):
22 super().__init__(*args, **kwargs)
23 self.api_base = minds_endpoint_handler_config.BASE_URL
24 self.default_model = 'gpt-3.5-turbo'
25 self.default_mode = 'default'
27 @staticmethod
28 def _check_client_connection(client: OpenAI):
29 """
30 Check the Minds Endpoint engine client connection by listing models.
32 Args:
33 client (OpenAI): OpenAI client configured with the Minds Endpoint API credentials.
35 Raises:
36 Exception: If the client connection (API key) is invalid.
38 Returns:
39 None
40 """
41 try:
42 client.models.list()
43 except NotFoundError:
44 pass
45 except AuthenticationError as e:
46 if e.body['code'] == 401:
47 raise Exception('Invalid api key')
48 raise Exception(f'Something went wrong: {e}')
50 def create_engine(self, connection_args):
51 """
52 Validate the Minds Endpoint API credentials on engine creation.
54 Args:
55 connection_args (dict): Connection arguments.
57 Raises:
58 Exception: If the handler is not configured with valid API credentials.
60 Returns:
61 None
62 """
63 connection_args = {k.lower(): v for k, v in connection_args.items()}
64 api_key = connection_args.get('minds_endpoint_api_key')
65 if api_key is not None:
66 org = connection_args.get('api_organization')
67 api_base = connection_args.get('api_base') or os.environ.get('minds_endpoint_BASE', minds_endpoint_handler_config.BASE_URL)
68 client = self._get_client(api_key=api_key, base_url=api_base, org=org)
69 MindsEndpointHandler._check_client_connection(client)
71 @staticmethod
72 def create_validation(target, args=None, **kwargs):
73 """
74 Validate the Minds Endpoint API credentials on model creation.
76 Args:
77 target (str): Target column, not required for LLMs.
78 args (dict): Handler arguments.
79 kwargs (dict): Handler keyword arguments.
81 Raises:
82 Exception: If the handler is not configured with valid API credentials.
84 Returns:
85 None
86 """
87 if 'using' not in args:
88 raise Exception(
89 "Minds Endpoint engine requires a USING clause! Refer to its documentation for more details."
90 )
91 else:
92 args = args['using']
94 engine_storage = kwargs['handler_storage']
95 connection_args = engine_storage.get_connection_args()
96 api_key = get_api_key('minds_endpoint', args, engine_storage=engine_storage)
97 api_base = connection_args.get('api_base') or args.get('api_base') or os.environ.get('minds_endpoint_BASE', minds_endpoint_handler_config.BASE_URL)
98 org = args.get('api_organization')
99 client = OpenAIHandler._get_client(api_key=api_key, base_url=api_base, org=org)
100 MindsEndpointHandler._check_client_connection(client)
102 def predict(self, df: pd.DataFrame, args: Optional[Dict] = None) -> pd.DataFrame:
103 """
104 Call the Minds Endpoint engine to predict the next token.
106 Args:
107 df (pd.DataFrame): Input data.
108 args (dict): Handler arguments.
110 Returns:
111 pd.DataFrame: Predicted data
112 """
113 api_key = get_api_key('minds_endpoint', args, self.engine_storage)
114 supported_models = self._get_supported_models(api_key, self.api_base)
115 self.chat_completion_models = [model.id for model in supported_models]
116 return super().predict(df, args)
118 @staticmethod
119 def _get_supported_models(api_key, base_url, org=None):
120 """
121 Get the list of supported models for the Minds Endpoint engine.
123 Args:
124 api_key (str): API key.
125 base_url (str): Base URL.
126 org (str): Organization name.
128 Returns:
129 List: List of supported models.
130 """
131 client = openai.OpenAI(api_key=api_key, base_url=base_url, organization=org)
132 return client.models.list()