11import json
2+ from logging import getLogger
3+ from typing import List
4+
5+ import openai
6+ from openai .types .chat import ChatCompletionToolChoiceOptionParam
27
38from mindsdb_sdk .databases import Database
49from tenacity import retry , wait_random_exponential , stop_after_attempt
510
611
7- @retry (wait = wait_random_exponential (multiplier = 1 , max = 40 ), stop = stop_after_attempt (3 ))
8- def chat_completion_request (client , model , messages , tools = None , tool_choice = None ):
12+ DEFAULT_RETRY_MULTIPLIER = 1
13+ DEFAULT_MAX_WAIT = 40
14+ DEFAULT_STOP_AFTER_ATTEMPT = 3
15+
16+ logger = getLogger (__name__ )
17+
18+
19+ @retry (wait = wait_random_exponential (multiplier = DEFAULT_RETRY_MULTIPLIER , max = DEFAULT_MAX_WAIT ), stop = stop_after_attempt (
20+ DEFAULT_RETRY_MULTIPLIER
21+ ))
22+ def chat_completion_request (
23+ client : openai .OpenAI ,
24+ model : str ,
25+ messages : List [dict ],
26+ tools : List = None ,
27+ tool_choice : ChatCompletionToolChoiceOptionParam = None
28+ ):
929 try :
1030 response = client .chat .completions .create (
1131 model = model ,
@@ -15,8 +35,8 @@ def chat_completion_request(client, model, messages, tools=None, tool_choice=Non
1535 )
1636 return response
1737 except Exception as e :
18- print ("Unable to generate ChatCompletion response" )
19- print (f"Exception: { e } " )
38+ logger . warning ("Unable to generate ChatCompletion response" )
39+ logger . warning (f"Exception: { e } " )
2040 return e
2141
2242
@@ -29,7 +49,6 @@ def make_openai_tool(function: callable, description: str = None) -> dict:
2949
3050 :return: dictionary containing function metadata
3151 """
32- # You will need to pip install docstring-parser to use this function
3352
3453 import inspect
3554 import docstring_parser
@@ -77,7 +96,7 @@ def make_openai_tool(function: callable, description: str = None) -> dict:
7796 return function_dict
7897
7998
80- def make_mindsdb_tool (schema : dict ) -> dict :
99+ def make_query_tool (schema : dict ) -> dict :
81100 """
82101 Make an OpenAI tool for querying a database connection in MindsDB
83102
@@ -109,14 +128,14 @@ def make_mindsdb_tool(schema: dict) -> dict:
109128 }
110129
111130
112- def litellm_text2sql_callback_tool (
131+ def make_data_tool (
113132 model : str ,
114133 data_source : str ,
115134 description : str ,
116135 connection_args : dict
117136):
118137 """
119- tool passing connection details for datasource to litellm callback
138+ tool passing mindsdb database connection details for datasource to litellm callback
120139
121140 :param model: model name for text to sql completion
122141 :param data_source: data source name
@@ -153,7 +172,7 @@ def litellm_text2sql_callback_tool(
153172 "description" :"Data source name" ,
154173 },
155174 "connection_args" :{
156- "type" :"object " ,
175+ "type" :"string " ,
157176 "description" :"Connection arguments for the data source" ,
158177 },
159178 "description" :{
@@ -246,12 +265,12 @@ def pretty_print_conversation(messages):
246265
247266 for message in messages :
248267 if message ["role" ] == "system" :
249- print (colored (f"system: { message ['content' ]} \n " , role_to_color [message ["role" ]]))
268+ logger . info (colored (f"system: { message ['content' ]} \n " , role_to_color [message ["role" ]]))
250269 elif message ["role" ] == "user" :
251- print (colored (f"user: { message ['content' ]} \n " , role_to_color [message ["role" ]]))
270+ logger . info (colored (f"user: { message ['content' ]} \n " , role_to_color [message ["role" ]]))
252271 elif message ["role" ] == "assistant" and message .get ("function_call" ):
253- print (colored (f"assistant: { message ['function_call' ]} \n " , role_to_color [message ["role" ]]))
272+ logger . info (colored (f"assistant: { message ['function_call' ]} \n " , role_to_color [message ["role" ]]))
254273 elif message ["role" ] == "assistant" and not message .get ("function_call" ):
255- print (colored (f"assistant: { message ['content' ]} \n " , role_to_color [message ["role" ]]))
274+ logger . info (colored (f"assistant: { message ['content' ]} \n " , role_to_color [message ["role" ]]))
256275 elif message ["role" ] == "function" :
257- print (colored (f"function ({ message ['name' ]} ): { message ['content' ]} \n " , role_to_color [message ["role" ]]))
276+ logger . info (colored (f"function ({ message ['name' ]} ): { message ['content' ]} \n " , role_to_color [message ["role" ]]))
0 commit comments