File size: 8,084 Bytes
3d87c18
 
 
e448d98
3d87c18
e448d98
3d87c18
e448d98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3d87c18
 
e448d98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3d87c18
e448d98
 
3d87c18
 
 
e448d98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0614630
e448d98
0614630
c76addc
 
e448d98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c76addc
 
 
e448d98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c76addc
 
 
e448d98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c76addc
0614630
 
e448d98
 
 
 
0614630
e448d98
 
0614630
e448d98
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
from .stats_tools import stats_tools
from .chart_tools import chart_tools

def tools_call(session_hash, data_source, titles):

    titles_string = (titles[:625] + '..') if len(titles) > 625 else titles

    tools_calls = {
            'file_upload' : [
                {
                    "type": "function",
                    "function": {
                        "name": "sqlite_query_func",
                        "description": f"""This is a tool useful to query a SQLite table called 'data_source' with the following Columns: {titles_string}.

                        There may also be more columns in the table if the number of columns is too large to process. 

                        This function also saves the results of the query to csv file called query.csv.""",
                        "parameters": {
                            "type": "object",
                            "properties": {
                                "queries": {
                                    "type": "array",
                                    "description": "The query to use in the search. Infer this from the user's message. It should be a question or a statement",
                                    "items": {
                                        "type": "string",
                                    }
                                }
                            },
                            "required": ["queries"],
                        },
                    },
                },
            ],
            'sql' : [
            {
                "type": "function",
                "function": {
                    "name": "sql_query_func",
                    "description": f"""This is a tool useful to query a PostgreSQL database with the following tables, {titles_string}.

                    There may also be more tables in the database if the number of tables is too large to process.

                    This function also saves the results of the query to csv file called query.csv.""",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "queries": {
                                "type": "array",
                                "description": "The PostgreSQL query to use in the search. Infer this from the user's message. It should be a question or a statement",
                                "items": {
                                    "type": "string",
                                }
                            }
                        },
                        "required": ["queries"],
                    },
                },
            },
        ],
        'doc_db' : [
            {
                "type": "function",
                "function": {
                    "name": "doc_db_query_func",
                    "description": f"""This is a tool useful to build an aggregation pipeline to query a MongoDB NoSQL document database with the following collections, {titles_string}.

                    There may also be more collections in the database if the number of tables is too large to process.

                    This function also saves the results of the query to a csv file called query.csv.""",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "aggregation_pipeline": {
                                "type": "string",
                                "description": "The MongoDB aggregation pipeline to use in the search. Infer this from the user's message. It should be a question or a statement."
                            },
                            "db_collection": {
                                "type": "string",
                                "description": "The MongoDB collection to use in the search. Infer this from the user's message. It should be a question or a statement.",
                            }
                        },
                        "required": ["aggregation_pipeline","db_collection"],
                    },
                },
            },
        ],
        'graphql' : [
            {
                "type": "function",
                "function": {
                    "name": "graphql_query_func",
                    "description": f"""This is a tool useful to build a GraphQL query for a GraphQL API endpoint with the following types, {titles_string}.

                    There may also be more types in the GraphQL endpoint if the number of types is too large to process. 

                    This function also saves the results of the query to a csv file called query.csv.""",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "graphql_query": {
                                "type": "string",
                                "description": "The GraphQL query to use in the search. Infer this from the user's message. It should be a question or a statement."
                            }
                        },
                        "required": ["graphql_query"],
                    },
                },
            },
            {
                "type": "function",
                "function": {
                    "name": "graphql_schema_query",
                    "description": f"""This is a tool useful to query a GraphQL type and receive back information about its schema. This is useful because

                    the GraphQL introspection query is too large to be ingested all at once and this allows us to query the schema one type at a time to 

                    view it in manageable bites. You may realize after viewing the schema, that the type you selected was not appropriate for the question

                    you are attempting answer. You may then query additional types to find the appropriate types to use for your GraphQL API query.""",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "graphql_type": {
                                "type": "string",
                                "description": "The GraphQL type that we want to view the schema of in order to make the proper query with our graphql_query_func. Infer this from the user's message. It should be a question or a statement."
                            }
                        },
                        "required": ["graphql_type"],
                    },
                },
            },
            {
                "type": "function",
                "function": {
                    "name": "graphql_csv_query",
                    "description": f"""This is a tool useful to SQL query our query.csv file that is generated from our GraphQL query. This is useful in a situation

                    where the results of the GraphQL query need additional querying to answer the user question.  The query.csv file is converted to a Pandas dataframe

                    and we query that dataframe with SQL on a table called 'query' before converting it back to a csv file.""",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "csv_query": {
                                "type": "string",
                                "description": "The pandas dataframe SQL query to use in the search. The table that we query is named 'query'. Infer this from the user's message. It should be a question or a statement"
                            }
                        },
                        "required": ["csv_query"],
                    },
                },
            },
        ]
    }

    tools = tools_calls[data_source]

    tools.extend(chart_tools)
    tools.extend(stats_tools)

    return tools