MSTR-Robotics-magerdaniel 0.3.9__tar.gz → 0.3.11__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11/MSTR_Robotics_magerdaniel.egg-info}/PKG-INFO +1 -1
  2. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/MSTR_Robotics_magerdaniel.egg-info/SOURCES.txt +3 -2
  3. {mstr_robotics_magerdaniel-0.3.9/MSTR_Robotics_magerdaniel.egg-info → mstr_robotics_magerdaniel-0.3.11}/PKG-INFO +1 -1
  4. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/_connectors.py +10 -0
  5. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/_helper.py +6 -0
  6. mstr_robotics_magerdaniel-0.3.11/mstr_robotics/navigation.py +201 -0
  7. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/prepare_AI_data.py +8 -111
  8. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/report.py +39 -1
  9. mstr_robotics_magerdaniel-0.3.11/mstr_robotics/user_RAG.py +149 -0
  10. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/setup.py +1 -1
  11. mstr_robotics_magerdaniel-0.3.9/mstr_robotics/ai_openAi_faisst.py +0 -250
  12. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/LICENSE +0 -0
  13. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/MANIFEST.in +0 -0
  14. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/MSTR_Robotics_magerdaniel.egg-info/dependency_links.txt +0 -0
  15. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/MSTR_Robotics_magerdaniel.egg-info/requires.txt +0 -0
  16. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/MSTR_Robotics_magerdaniel.egg-info/top_level.txt +0 -0
  17. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/README.md +0 -0
  18. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/__init__.py +0 -0
  19. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/_lu_data.py +0 -0
  20. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/_mod_prj_obj.py +0 -0
  21. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/dossier.py +0 -0
  22. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/mstr_classes.py +0 -0
  23. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/mstr_pandas.py +0 -0
  24. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/mstr_robotics/read_out_prj_obj.py +0 -0
  25. {mstr_robotics_magerdaniel-0.3.9 → mstr_robotics_magerdaniel-0.3.11}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: MSTR_Robotics_magerdaniel
3
- Version: 0.3.9
3
+ Version: 0.3.11
4
4
  Summary: MicroStrateg(P)ython
5
5
  Home-page: https://github.com/magerdaniel
6
6
  Author: Daniel Mager
@@ -12,10 +12,11 @@ mstr_robotics/_connectors.py
12
12
  mstr_robotics/_helper.py
13
13
  mstr_robotics/_lu_data.py
14
14
  mstr_robotics/_mod_prj_obj.py
15
- mstr_robotics/ai_openAi_faisst.py
16
15
  mstr_robotics/dossier.py
17
16
  mstr_robotics/mstr_classes.py
18
17
  mstr_robotics/mstr_pandas.py
18
+ mstr_robotics/navigation.py
19
19
  mstr_robotics/prepare_AI_data.py
20
20
  mstr_robotics/read_out_prj_obj.py
21
- mstr_robotics/report.py
21
+ mstr_robotics/report.py
22
+ mstr_robotics/user_RAG.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: MSTR_Robotics_magerdaniel
3
- Version: 0.3.9
3
+ Version: 0.3.11
4
4
  Summary: MicroStrateg(P)ython
5
5
  Home-page: https://github.com/magerdaniel
6
6
  Author: Daniel Mager
@@ -193,6 +193,16 @@ class mstr_api():
193
193
  url = f'{conn.base_url}/api/v2/cubes/{cube_id}/instances?offset={offset_val}&limit={limit_val}'
194
194
  return conn.post(url)
195
195
 
196
+ def get_open_prp_stat(self,conn,report_id,instance_id):
197
+ url = f'{conn.base_url}/api/reports/{report_id}/instances/{instance_id}/status'
198
+ stat = conn.get(url)
199
+
200
+ try:
201
+ status=stat.json()["status"]
202
+ except:
203
+ print(stat)
204
+ status=1
205
+ return status
196
206
 
197
207
 
198
208
  def zzz_fetch_cube_elements(self,conn, cube_id, attribute_id, limit_val=100):
@@ -128,6 +128,12 @@ class msic():
128
128
  dict_l.append(dict_d.copy())
129
129
  return dict_l
130
130
 
131
+ def get_vals_from_dict_l(self,dict_l, key="id"):
132
+ val_l = []
133
+ for d in dict_l:
134
+ val_l.append(d[key])
135
+ return val_l
136
+
131
137
  def add_prefix_to_dict_keys(self,dict, dpn_prefix, dict_cols= []):
132
138
  #adds a prefix to the keys of a dict
133
139
  # use case here is to distinct i.e. between the object_id and the depn_object_id
@@ -0,0 +1,201 @@
1
+ import pandas as pd
2
+ from mstr_robotics.report import prompts,cube,rep
3
+ from mstr_robotics.mstr_pandas import df_helper
4
+ from mstr_robotics._helper import msic
5
+ from mstr_robotics.prepare_AI_data import map_objects
6
+
7
+ i_rep=rep()
8
+ i_prompts=prompts()
9
+ i_df_helper=df_helper()
10
+ i_cube=cube()
11
+ i_map_objects=map_objects()
12
+ i_msic=msic()
13
+
14
+ class answer_prompts():
15
+
16
+ def __init__(self,cube_obj_prp_rel_id
17
+ ,cube_RAG_form_val_ans_id
18
+ ,cube_att_form_def_id
19
+ ,rep_dos_id):
20
+
21
+ self.cube_obj_prp_rel_id=cube_obj_prp_rel_id
22
+ self.cube_RAG_form_val_ans_id=cube_RAG_form_val_ans_id
23
+ self.rep_dos_id=rep_dos_id
24
+ self.cube_att_form_def_id=cube_att_form_def_id
25
+
26
+ def bld_exp_prp_met_ans(self,obj,operator,filter_val_l):
27
+ metric_exp_prp = {}
28
+ metric_exp_prp["met_id"] = obj["object_id"]
29
+ metric_exp_prp["data_type"] = "Real"
30
+ metric_exp_prp["operator"] = operator
31
+ metric_exp_prp["filter_val_l"] = filter_val_l
32
+ metric_exp_prp["level"] = "default"
33
+ prp_ans_d= i_prompts.bld_metric_exp_prp(metric_exp_prp=metric_exp_prp.copy())
34
+ return prp_ans_d
35
+
36
+ def bld_exp_prp_att_ans(self,conn,d_prp_ans_d,prp_ans_d_l, filt_obj_rag_df,operator,filter_val_l):
37
+
38
+ if operator in ("In", "notIn"):
39
+
40
+ filter_val_df = i_map_objects.bld_ai_prp_ans(conn, cube_id=self.cube_RAG_form_val_ans_id,
41
+ rep_dos_id=self.rep_dos_id,
42
+ key_word_l=filter_val_l)
43
+ filt_df = pd.merge(filt_obj_rag_df[["prompt_id", "prp_subType", "object_id", "obj_type"]],
44
+ filter_val_df[
45
+ ["prompt_id", "prp_subType", "attribute_id", "attribute_name", "form_id",
46
+ "form_name", "form_dataType", "key"]],
47
+ left_on=['object_id'], right_on=['attribute_id'], how='inner')
48
+ filt_df = i_df_helper.clean_double_col(df=filt_df)
49
+ # print(filt_df)
50
+ filter_val_l = []
51
+ for index, f_form_ele in filt_df.iterrows():
52
+ form_id = f_form_ele["form_id"]
53
+ form_dataType = f_form_ele["form_dataType"]
54
+ filter_val_l.append(f_form_ele["key"])
55
+
56
+ att_exp_ans_d = {"att_id": d_prp_ans_d["object_id"], "att_form_id": form_id,
57
+ "form_data_type": form_dataType, "operator": operator,
58
+ "filter_val_l": filter_val_l}
59
+
60
+ att_exp_ans_d = i_prompts.bld_att_exp_prp_l(prp_job_ans_d=att_exp_ans_d)
61
+ d_prp_ans_d["prp_ans_d"] = att_exp_ans_d
62
+ prp_ans_d_l.append(d_prp_ans_d.copy())
63
+ # print(d_prp_ans_d)
64
+
65
+ else:
66
+ col_id = i_cube.get_RAG_cube_col_mstr_id(conn=conn, cube_id=self.cube_att_form_def_id,
67
+ col_name="attribute_id")
68
+ attr_elements = col_id + ":" + d_prp_ans_d["object_id"]
69
+ df = i_cube.quick_query_cube(conn, cube_id=self.cube_att_form_def_id, attribute_l=None,
70
+ metric_l=None,
71
+ attr_elements=attr_elements)
72
+
73
+ for index, form in df.iterrows():
74
+ if int(form["display_form_nr"]) > 0:
75
+ att_exp_ans_d = {"att_id": form["attribute_id"], "att_form_id": form["form_id"],
76
+ "form_data_type": form["REST_form_type"], "operator": operator,
77
+ "filter_val_l": filter_val_l}
78
+
79
+ att_exp_ans_d = i_prompts.bld_att_exp_prp(prp_job_ans_d=att_exp_ans_d)
80
+ d_prp_ans_d["prp_ans_d"] = att_exp_ans_d
81
+ prp_ans_d_l.append(d_prp_ans_d.copy())
82
+
83
+ return prp_ans_d_l
84
+
85
+ def bld_exp_prp_ans(self,conn,prp_ans_d_l,filt_obj_rag_df,operator,filter_val_l):
86
+ d_prp_ans_d = {}
87
+
88
+ for index, obj in filt_obj_rag_df.iterrows():
89
+ d_prp_ans_d["prompt_id"] = obj["prompt_id"]
90
+ d_prp_ans_d["prp_subType"] = obj["prp_subType"]
91
+ d_prp_ans_d["object_id"] = obj["object_id"]
92
+ d_prp_ans_d["obj_type"] = obj["obj_type"]
93
+ d_prp_ans_d["operator"] = operator
94
+
95
+ if obj["obj_type"] == "attribute":
96
+ prp_ans_d_l=self.bld_exp_prp_att_ans(conn,d_prp_ans_d,prp_ans_d_l, filt_obj_rag_df,operator,filter_val_l)
97
+
98
+ # print(d_prp_ans_d)
99
+
100
+ if obj["obj_type"] == "metric":
101
+ d_prp_ans_d["prp_ans_d"] = self.bld_exp_prp_met_ans(obj,operator,filter_val_l )
102
+ prp_ans_d_l.append(d_prp_ans_d.copy())
103
+
104
+ return prp_ans_d_l
105
+
106
+ def bld_AI_filt_prp_ans(self,conn,vector_store,filter_d,*args,**kwargs):
107
+ prp_ans_d_l = []
108
+
109
+ for f in list(filter_d.keys()):
110
+ print(f)
111
+ filter_obj_name=vector_store.check_keyword( filt_obj_str=f)
112
+
113
+ filt_obj_rag_df = i_map_objects.bld_ai_prp_ans(conn, cube_id=self.cube_obj_prp_rel_id,
114
+ rep_dos_id=self.rep_dos_id, key_word_l=[filter_obj_name])
115
+
116
+ filt_obj_rag_df = filt_obj_rag_df[filt_obj_rag_df['prp_subType'].isin(['prompt_expression'])]
117
+
118
+ operator = next(iter(filter_d[f]))
119
+ filter_val_l = filter_d[f][operator]
120
+
121
+ prp_ans_d_l=self.bld_exp_prp_ans(conn=conn, prp_ans_d_l=prp_ans_d_l
122
+ , filt_obj_rag_df=filt_obj_rag_df
123
+ , operator=operator, filter_val_l=filter_val_l)
124
+
125
+ return prp_ans_d_l
126
+
127
+ def bld_ai_obj_ans_prp(self,conn,json_t_d):
128
+ key_l = []
129
+ obj_l = []
130
+
131
+ for obj_type in json_t_d["template"].keys():
132
+ for obj in json_t_d["template"][obj_type]:
133
+ template_obj_d = {"obj_type": obj_type, "obj": obj}
134
+ obj_l.append(template_obj_d.copy())
135
+
136
+ for obj in obj_l:
137
+ key_l.append(obj["obj"])
138
+
139
+ template_obj_rag_df = i_map_objects.bld_ai_prp_ans(conn, cube_id=self.cube_obj_prp_rel_id,
140
+ rep_dos_id=self.rep_dos_id, key_word_l=key_l)
141
+ template_obj_rag_df = template_obj_rag_df[template_obj_rag_df['prp_subType'].isin(['prompt_objects'])]
142
+ template_obj_rag_df = template_obj_rag_df[['prompt_id', 'prp_subType', "object_id", "obj_type"]]
143
+
144
+ template_obj_rag_df.rename(columns={'object_id': 'id', 'obj_type': 'type'}, inplace=True)
145
+ prp_ans_d_l = template_obj_rag_df.groupby(['prompt_id']).apply(
146
+ lambda x: x[['id', 'type']].to_dict(orient='records')).to_dict()
147
+ obj_prp_ans_l = []
148
+ for prp in prp_ans_d_l:
149
+ obj_prp_ans_d = {}
150
+ obj_prp_ans_d["id"] = prp
151
+ obj_prp_ans_d["type"] = "OBJECTS"
152
+ obj_prp_ans_d["answers"] = prp_ans_d_l[prp]
153
+ obj_prp_ans_l.append(obj_prp_ans_d)
154
+
155
+ return obj_prp_ans_l
156
+
157
+ def merge_exp_prp_ans_l(self,ai_prp_filt_ans_d):
158
+ prp_ans_l = []
159
+ prp_id_l = i_msic.get_key_form_dict_l(dict_l=ai_prp_filt_ans_d, key="prompt_id")
160
+ prp_ans_d_all = {}
161
+ operand_X = "AND"
162
+ for prp_id in prp_id_l:
163
+ prp_ans_d_all[prp_id] = []
164
+
165
+ for prp_ans in ai_prp_filt_ans_d:
166
+ for prp_id in prp_ans_d_all.keys():
167
+ if prp_ans["prompt_id"] == prp_id:
168
+ prp_ans_d_all[prp_id].append(prp_ans["prp_ans_d"])
169
+
170
+ for prp_id in prp_ans_d_all:
171
+ # print(prp_ans_d_all[prp_id])
172
+ prp_ans_d_all[prp_id] = i_prompts.bld_exp_operands_d(p_ans_d_d_l=prp_ans_d_all[prp_id], operator="AND")
173
+
174
+ for prp_ans_id in prp_ans_d_all:
175
+ for prp in ai_prp_filt_ans_d:
176
+ if prp_ans_id == prp["prompt_id"]:
177
+ if prp["prp_subType"] == "prompt_expression" and prp["obj_type"] == "attribute":
178
+ prp_ans_l.append(i_prompts.bld_prp_exp_d(prompt_id=prp_ans_id,
179
+ p_ans_d_j=prp_ans_d_all[prp_ans_id], operator="And"))
180
+
181
+ if prp["prp_subType"] == "prompt_expression" and prp["obj_type"] == "metric":
182
+ prp_ans_l.append(i_prompts.frame_metric_exp_prp(prompt_id=prp_ans_id, p_ans_d_j=prp_ans_d_all[prp_ans_id]))
183
+ break
184
+ return prp_ans_l
185
+
186
+ def save_AI_rep(self, conn, report_id, prompt_answ, ai_rep_name, ai_rep_folder_id):
187
+ instance_id = i_rep.open_Instance(conn=conn, report_id=report_id)
188
+ first_draft = i_rep.set_inst_prompt_ans(conn=conn, report_id=report_id, instance_id=instance_id,
189
+ prompt_answ=prompt_answ)
190
+
191
+ rep_stat = i_rep.get_open_prp_stat(conn=conn, report_id=report_id, instance_id=instance_id)
192
+
193
+ if rep_stat == 2:
194
+ prompt_answ = i_rep.close_open_prp(conn=conn, report_id=report_id, instance_id=instance_id,
195
+ prompt_answ=prompt_answ)
196
+ rep_id = i_rep.save_rep_inst(conn=conn, instance_id=instance_id, rep_name=ai_rep_name
197
+ , save_mode="OVERWRITE"
198
+ , promptOption="static"
199
+ , setCurrentAsDefaultAnswer=True)
200
+
201
+ return rep_id
@@ -1,25 +1,17 @@
1
- import os
2
- import pandas as pd
3
-
4
1
  from mstr_robotics.read_out_prj_obj import i_prompts
5
2
  from mstr_robotics.report import cube,rep
6
3
  from mstr_robotics._helper import msic
7
4
  from mstr_robotics._connectors import mstr_api
8
5
  from mstr_robotics.mstr_classes import mstr_global
9
- from mstrio.project_objects import OlapCube
10
6
  from mstr_robotics.read_out_prj_obj import io_attributes
11
7
 
12
- io_att=io_attributes()
13
- from flashtext import KeywordProcessor
14
- from itertools import chain
15
- import json
8
+ from mstrio.project_objects import OlapCube
16
9
 
10
+ io_att=io_attributes()
17
11
  i_cube=cube()
18
12
  i_msic=msic()
19
13
  i_mstr_global=mstr_global()
20
14
  i_rep=rep()
21
- i_KeywordProcessor = KeywordProcessor()
22
- i_chain=chain()
23
15
  i_mstr_api=mstr_api()
24
16
 
25
17
  class read_out_cube_att():
@@ -32,7 +24,7 @@ class read_out_cube_att():
32
24
  return el_ans_d
33
25
 
34
26
 
35
- def read_cube_att_elements(self,conn,cube_list_l ):
27
+ def zzz_read_cube_att_elements(self,conn,cube_list_l ):
36
28
  key_val_l=[]
37
29
 
38
30
  for cube_id in cube_list_l:
@@ -73,9 +65,6 @@ class read_out_cube_att():
73
65
 
74
66
  return rag_att_form_id_d
75
67
 
76
- #def read_cube_att_form_exp_val_l(conn, cube_id,*args,**kwargs):
77
-
78
-
79
68
  def fetch_cube_elements(self, conn, cube_id,limit_val=10000,*args,**kwargs):
80
69
  rag_att_form_l = []
81
70
  offset_val = 0
@@ -111,40 +100,6 @@ class read_out_cube_att():
111
100
  all_cube_element_l.extend(cube_element_l)
112
101
  return all_cube_element_l
113
102
 
114
- def zzz_read_cube_att_form_exp_val_l(self,conn,cube_list_l):
115
- element_d_l = []
116
- for cube_id in cube_list_l:
117
- cube = OlapCube(connection=conn, id=cube_id["id"])
118
- cube_df = cube.to_dataframe()
119
- cube_def = i_cube.get_cube_def(conn=conn, cube_id=cube_id["id"])
120
-
121
- for col in cube_df.columns:
122
- #print(cube_id["id"])
123
- #print(col)
124
- col_att_form_l = col.split("@")
125
- if len(col_att_form_l) > 1:
126
- #print("col added")
127
- att_name = col_att_form_l[0]
128
- form_name = col_att_form_l[1]
129
- att_form_d = self.read_cube_att_forms(conn=conn,cube_def=cube_def,att_name=att_name,form_name=form_name)
130
- distinct_val = cube_df[col].unique()
131
- for val in distinct_val:
132
- att_form_d["key"] = val
133
- #att_form_d["prp_ans"] = val
134
- element_d_l.append(att_form_d.copy())
135
- else:
136
- #print("col not added")
137
- print("att_name :" +str(col))
138
- att_name = col
139
- att_form_d = self.read_cube_att_forms(conn=conn,cube_def=cube_def,att_name=att_name)
140
- distinct_val = cube_df[col].unique()
141
- for val in distinct_val:
142
- att_form_d["key"] = val
143
- element_d_l.append(att_form_d.copy())
144
-
145
-
146
- return element_d_l
147
-
148
103
  class map_objects():
149
104
 
150
105
  def get_doss_rep_prp(self,conn, object_l):
@@ -183,85 +138,27 @@ class map_objects():
183
138
  cube_att_l.append(cube_att_d.copy())
184
139
  return cube_att_l
185
140
 
186
- def get_rag_rep_prp_df(self,conn,cube_id,rep_dos_id,key_word_l,mstr_rag_col_d):
187
- rag_rep_prp_df=self.bld_ai_prp_ans(conn=conn,cube_id=cube_id,mstr_rag_col_d=mstr_rag_col_d, rep_dos_id=rep_dos_id, key_word_l=key_word_l)
188
- return rag_rep_prp_df
141
+ def bld_ai_prp_ans(self,conn, cube_id, rep_dos_id, key_word_l):
189
142
 
190
- def bld_ai_prp_ans(self,conn, cube_id, mstr_rag_col_d, rep_dos_id, key_word_l):
191
- obj_prp_ans_l = []
192
- rag_files = []
193
- cube_disp_col_l = ["prompt_id", "prp_subType", "rep_dos_id", "object_id", "attribute_id", "obj_type",
194
- "obj_prp_ans", "obj_prp_rel_dummy", "rep_prp_rel_dummy", "obj_prp_rel_dummy"]
195
- cube_disp_col_l = ["attribute_id"]
196
- key_val_l = []
197
143
  disp_col_ids_l = []
198
144
  attr_elements_l = []
199
145
  key_val_l = ["key"] #
200
146
  # print(mstr_rag_col_d)
147
+ mstr_rag_col_d=i_cube.get_mtdi_cube_col_id(conn, cube_l=[cube_id])
201
148
  for col_name in mstr_rag_col_d[cube_id].keys():
202
- cube_disp_col_l = mstr_rag_col_d[cube_id].keys()
149
+ #cube_disp_col_l = mstr_rag_col_d[cube_id].keys()
203
150
  # print(col_name)
204
151
  if col_name == 'rep_dos_id':
205
152
  rep_dos_id_filt = mstr_rag_col_d[cube_id][col_name] + ":" + rep_dos_id
206
153
  attr_elements_l.append(rep_dos_id_filt)
207
154
 
208
- if col_name in cube_disp_col_l:
209
- disp_col_ids_l.append(mstr_rag_col_d[cube_id][col_name])
210
-
211
155
  if col_name in key_val_l:
212
156
  for key in key_word_l:
213
157
  prp_ans_j = mstr_rag_col_d[cube_id][col_name] + ":" + str(key)
214
158
  attr_elements_l.append(prp_ans_j)
215
159
 
160
+ disp_col_ids_l.append(mstr_rag_col_d[cube_id][col_name])
161
+
216
162
  df = i_cube.quick_query_cube(conn=conn, cube_id=cube_id, attribute_l=disp_col_ids_l, metric_l=None,
217
163
  attr_elements=attr_elements_l)
218
164
  return df
219
-
220
-
221
- class zzz_bld_obj_ans():
222
-
223
- def zzz_trans_att_exp_prp(self,attributes_l):
224
- att_form_d_l = []
225
- for att_form in attributes_l:
226
- att_form_d = {}
227
- att_form_d["attribute_id"] = att_form["attribute_id"]
228
- att_form_d["attribute_name"] = att_form["attribute_name"]
229
- att_form_d["form_id"] = att_form["form_id"]
230
- att_form_d["form_dataType"] = att_form["form_dataType"]
231
- att_form_d["key"] = att_form["form_name"]
232
- att_form_d["display_form_nr"] = att_form["display_form_nr"]
233
- att_form_d["browse_form_nr"] = att_form["browse_form_nr"]
234
- att_form_d_l.append(att_form_d.copy())
235
- att_form_d_l=i_msic.rem_dbl_dict_in_l(dict_l=att_form_d_l)
236
- return att_form_d_l
237
-
238
- def bld_att_obj_ans(self,attributes_l):
239
- # Now 'data' contains the parsed JSON as a Python dictionary or list
240
- att_d_l = []
241
- att_l = []
242
- key_word_l = []
243
- # documents_l=[]
244
- for m in attributes_l:
245
- if m["attribute_id"] not in att_l:
246
- att_l.append(m["attribute_id"])
247
- att_d = {}
248
- att_d["object_id"] = m["attribute_id"]
249
- att_d["type"] = "attribute"
250
- att_d["key"] = m["attribute_name"]
251
- att_d["ans"]=json.dumps({"id":m["attribute_id"] , "type":"attribute"})
252
-
253
- att_d_l.append(att_d.copy())
254
- #att_d_l = i_msic.rem_dbl_dict_in_l(dict_l=att_d_l)
255
- return att_d_l
256
-
257
- def bld_met_obj_ans(self,metrics_l):
258
- all_met_d_l = []
259
- for m in metrics_l:
260
- if "E0CCB9CF22104A489CBE78D974AFD19E" in m["metric_path_ids"]:
261
- row_d = {}
262
- row_d["object_id"] = m["metric_id"]
263
- row_d["type"] = "metric"
264
- row_d["key"] = m["metric_name"]
265
- row_d["ans"] = json.dumps({"id": m["metric_id"], "type": "metric"})
266
- all_met_d_l.append(row_d.copy())
267
- return list(all_met_d_l)
@@ -8,9 +8,11 @@ from mstrio.project_objects.report import Report
8
8
  from mstrio.api.cubes import cube_definition
9
9
  import pandas as pd
10
10
  from mstr_robotics.mstr_pandas import df_helper
11
+ from mstr_robotics._helper import msic
11
12
  import json
12
13
 
13
14
  i_mstr_api=mstr_api()
15
+ i_msic=msic()
14
16
 
15
17
  class rep:
16
18
 
@@ -28,6 +30,10 @@ class rep:
28
30
  ,instance_id=instance_id, closed = False)
29
31
  return open_prompts.json()
30
32
 
33
+ def get_open_prp_stat(self,conn, report_id, instance_id):
34
+ return i_mstr_api.get_open_prp_stat(conn=conn, report_id=report_id,
35
+ instance_id=instance_id)
36
+
31
37
  def set_inst_prompt_ans(self, conn, report_id, instance_id, prompt_answ):
32
38
  prompt_answ_url = f'{conn.base_url}/api/reports/{report_id}/instances/{instance_id}/prompts/answers'
33
39
  ret_prompt_ans = conn.put(prompt_answ_url, data=prompt_answ)
@@ -163,6 +169,7 @@ class cube():
163
169
  def get_cube_def(self,conn,cube_id):
164
170
  return cube_definition(connection=conn, id=cube_id).json()
165
171
 
172
+
166
173
  def get_mtdi_cube_col_id(self,conn, cube_l):
167
174
 
168
175
  mstr_rag_col_d = {}
@@ -177,7 +184,8 @@ class cube():
177
184
  mstr_rag_col_d[cube_id] = att_col_keys_d.copy()
178
185
  return mstr_rag_col_d
179
186
 
180
- def get_RAG_cube_col_mstr_id(self,cube_id,mstr_rag_col_d, col_name):
187
+ def get_RAG_cube_col_mstr_id(self,conn,cube_id,col_name):
188
+ mstr_rag_col_d=self.get_mtdi_cube_col_id(conn, cube_l=[cube_id])
181
189
  col_id = mstr_rag_col_d[cube_id][col_name]
182
190
  return col_id
183
191
 
@@ -364,6 +372,35 @@ class prompts():
364
372
  def bld_obj_prp_json(self,object_id,object_type):
365
373
  return json.dumps({"id": object_id, "type": object_type})
366
374
 
375
+ def close_open_prp(self,conn, report_id, instance_id, prompt_answ):
376
+ # checks the answered prp
377
+ prompt_answ_d = json.loads(prompt_answ)
378
+ prp_ans_d_l = prompt_answ_d["prompts"]
379
+ prp_ans_id_l = i_msic.keep_cols_from_dict_l(list_l=prp_ans_d_l, keep_cols=["id"])
380
+
381
+ # checks the all prp in report / dashboard
382
+ rep_open_prp_d_l = rep().get_open_prompts(conn=conn, report_id=report_id, instance_id=instance_id)
383
+ rep_open_prp_id_l = i_msic.keep_cols_from_dict_l(list_l=rep_open_prp_d_l, keep_cols=["id"])
384
+
385
+ # checks the prp not answered jet
386
+ open_prp_l = [x for x in rep_open_prp_id_l if x not in prp_ans_id_l]
387
+ open_prp_l = i_msic.get_vals_from_dict_l(dict_l=open_prp_l)
388
+
389
+ for prp in rep_open_prp_d_l:
390
+ print(prp["id"])
391
+ if prp["id"] in open_prp_l:
392
+ print(prp)
393
+ open_prp_d = {}
394
+ open_prp_d["id"] = prp["id"]
395
+ open_prp_d["type"] = prp["type"]
396
+ if prp["type"] in ["OBJECTS", "ELEMENTS"]:
397
+ open_prp_d["answers"] = []
398
+ else:
399
+ open_prp_d["answers"] = {}
400
+ rep_open_prp_d_l.append(open_prp_d.copy())
401
+ prompt_answ = self.frame_prp(prp_ans=rep_open_prp_d_l)
402
+ return prompt_answ
403
+
367
404
  def zzz_loop_att_exp_prp(self,prp_job_ans_l):
368
405
  expr_JSON_l = []
369
406
  for att_exp_prp in prp_job_ans_l:
@@ -382,6 +419,7 @@ class prompts():
382
419
  expr_JSON_l.append(att_form_exp_j)
383
420
 
384
421
  return expr_JSON_l
422
+
385
423
  def zzz_get_form_type(self,baseFormType):
386
424
  form_type_d={"number":"Numeric",
387
425
  "big_decimal":"BigDecimal"}
@@ -0,0 +1,149 @@
1
+ import json
2
+ from openai import OpenAI
3
+ from flashtext import KeywordProcessor
4
+ from langchain.vectorstores import FAISS
5
+ from langchain.embeddings import OpenAIEmbeddings
6
+
7
+ class keyword_processor():
8
+
9
+ def __init__(self):
10
+ self.KeywordProcessor = KeywordProcessor()
11
+
12
+ def load_keyword_processor(self,key_l):
13
+ for val in key_l:
14
+ self.KeywordProcessor.add_keyword(val)
15
+ return self.KeywordProcessor
16
+
17
+ def extract_keywords(self,msg_t):
18
+ keywords_l = self.KeywordProcessor.extract_keywords(msg_t)
19
+ return keywords_l
20
+
21
+ def check_keyword(self,filt_obj_str):
22
+ keywords_l = self.KeywordProcessor.extract_keywords(filt_obj_str)
23
+ return keywords_l[0]
24
+
25
+ class vectorDB_faisst():
26
+
27
+ def __init__(self,sKey):
28
+ self.i_embeddings = OpenAIEmbeddings(openai_api_key=sKey)
29
+
30
+ def load_vector_store(self,key_l):
31
+ # Flatten and ensure all items are strings
32
+ # Create FAISS vector store
33
+ self.vector_store = FAISS.from_texts(key_l, self.i_embeddings)
34
+
35
+ return self.vector_store
36
+
37
+ def check_keyword(self, filt_obj_str):
38
+ results = self.vector_store.similarity_search_with_score(query=filt_obj_str, top_k=1)
39
+ filter_obj_name = results[0][0].page_content
40
+ return filter_obj_name
41
+
42
+ class mstr_openAI():
43
+
44
+ def __init__(self,sKey):
45
+ #self.sKey=sKey
46
+ self.i_embeddings = OpenAIEmbeddings(openai_api_key=sKey)
47
+
48
+
49
+ def check_trans_chatGPT(self,sKey,messages,*args,**kwargs):
50
+ chat_completion = self.call_open_AI(sKey=sKey,messages=messages,*args,**kwargs)
51
+ js = json.loads(chat_completion.json())
52
+ return js
53
+
54
+ def call_open_AI(self, sKey, messages, max_tokens=1000, temperature=0.3, model="gpt-4o-mini"):
55
+ # This is the default and can be omitted
56
+ client = OpenAI(api_key=sKey)
57
+
58
+ chat_completion = client.chat.completions.create(
59
+ messages=messages,
60
+ # model="gpt-3.5-turbo",
61
+ model=model,
62
+ max_tokens=max_tokens,
63
+ temperature=temperature
64
+ )
65
+ js = json.loads(chat_completion.json())
66
+ return js
67
+
68
+ class chat_bot_RAG():
69
+
70
+ def filter_RAG_l(self,msg_t, key_word_l, msg_filter_t):
71
+ messages = [
72
+ {
73
+ "role": "system",
74
+ "content": f"You will be provided unstructured filter definition of the BI report request. the full message is {msg_t}"
75
+ },
76
+ {
77
+ "role": "system",
78
+ "content": "Always use as Filteroperator expressions like In, GreaterEqual,Equals,IsNull,IsNotNull,Greater,Between,BeginsWith,Like"
79
+ },
80
+ {
81
+ "role": "system",
82
+ "content": "When filtering a list, please ensure, that you use In od NotIn as operator"
83
+ },
84
+ {
85
+ "role": "system",
86
+ "content": "Ensure, that the out pu is a dictionary consiting of keywords"
87
+ },
88
+ {"role": "system",
89
+ "content": "top_n or bottom_n is part of the filter statement"
90
+ },
91
+ {
92
+ "role": "system",
93
+ "content": f"keywrods are: {key_word_l} "
94
+ },
95
+ {
96
+ "role": "system",
97
+ "content": " Please provide the filters as a valid Python dictionary without any code block formatting or syntax highlighting, where the kefilter objects"
98
+ },
99
+ {
100
+ "role": "system",
101
+ "content": "Set brackets to split multiple filter criteria"
102
+ },
103
+ {
104
+ "role": "system",
105
+ "content": "Ignore keywords, if they are not relevant for filtering"
106
+ },
107
+ {
108
+ "role": "system",
109
+ "content": f"keywrods are: {key_word_l} "
110
+ },
111
+ {
112
+ "role": "user",
113
+ "content": f"{msg_filter_t}"
114
+ }
115
+ ]
116
+ return messages
117
+
118
+ def split_AI_msg(self,msg_t, key_word_l):
119
+ messages = [
120
+ {
121
+ "role": "system",
122
+ "content": "You will be provided unstructured BI report request."
123
+ },
124
+ {
125
+ "role": "system",
126
+ "content": " Please provide the content as a valid Python dictionary without any code block formatting or syntax highlighting, where the keywords are splited in template and filter objects"
127
+ },
128
+ {
129
+ "role": "system",
130
+ "content": "Please use the key template and filter split"
131
+ },
132
+ {
133
+ "role": "system",
134
+ "content": "Set brackets to split multiple filter criteria"
135
+ },
136
+ {
137
+ "role": "system",
138
+ "content": "Please include in the JSON file, the filter critria as string"
139
+ },
140
+ {
141
+ "role": "system",
142
+ "content": f"keywrods are: {key_word_l} "
143
+ },
144
+ {
145
+ "role": "user",
146
+ "content": f"{msg_t}"
147
+ }
148
+ ]
149
+ return messages
@@ -7,7 +7,7 @@ long_description = (this_directory / "README.md").read_text()
7
7
 
8
8
  setup(
9
9
  name="MSTR_Robotics_magerdaniel",
10
- version="0.3.9",
10
+ version="0.3.11",
11
11
  description="MicroStrateg(P)ython",
12
12
  author="Daniel Mager",
13
13
  author_email="danielmager@gmx.de",
@@ -1,250 +0,0 @@
1
- import os
2
- import pandas as pd
3
- from langchain.vectorstores import FAISS
4
- from langchain.embeddings import OpenAIEmbeddings
5
- from openai import OpenAI
6
- from flashtext import KeywordProcessor
7
- from itertools import chain
8
- from mstr_robotics.report import prompts,cube,rep
9
- from mstr_robotics.mstr_pandas import df_helper
10
- from mstr_robotics._helper import msic
11
- from mstr_robotics.prepare_AI_data import map_objects
12
- import json
13
-
14
- i_KeywordProcessor = KeywordProcessor()
15
- i_chain=chain()
16
- i_rep=rep()
17
- i_prompts=prompts()
18
- i_df_helper=df_helper()
19
- i_cube=cube()
20
- i_map_objects=map_objects()
21
- i_msic=msic()
22
-
23
- class vectorDB_faisst():
24
-
25
- def __init__(self,sKey):
26
- #self.sKey=sKey
27
- os.environ["OPENAI_API_KEY"] = sKey
28
- self.i_embeddings = OpenAIEmbeddings()
29
-
30
- def load_vector_store(self,key_l):
31
- # Flatten and ensure all items are strings
32
- # Create FAISS vector store
33
- vector_store = FAISS.from_texts(key_l, self.i_embeddings)
34
-
35
- return vector_store
36
-
37
- def load_keyword_processor(self,key_l):
38
- for val in key_l:
39
- i_KeywordProcessor.add_keyword(val)
40
- return i_KeywordProcessor
41
-
42
- def extract_keywords(self,msg_t):
43
- keywords_l = i_KeywordProcessor.extract_keywords(msg_t)
44
- return keywords_l
45
-
46
- class run_chat_request():
47
-
48
- def __init__(self,cube_obj_prp_rel_id
49
- ,cube_RAG_form_val_ans_id
50
- ,cube_att_form_def_id
51
- ,rep_dos_id
52
- ,mstr_rag_col_d):
53
-
54
- self.cube_obj_prp_rel_id=cube_obj_prp_rel_id
55
- self.cube_RAG_form_val_ans_id=cube_RAG_form_val_ans_id
56
- self.rep_dos_id=rep_dos_id
57
- self.mstr_rag_col_d=mstr_rag_col_d
58
- self.cube_att_form_def_id=cube_att_form_def_id
59
-
60
-
61
- def bld_AI_filt_prp_ans(self,conn,vector_store,filter_d):
62
- # print(json_f)
63
- # v_andOr_s="And"
64
- # att_filt_prp_id="1F21042E4FC08886A9D7E4920CA4EC59"
65
- # met_filt_prp_id="14B57F1F46127BC6E6F746888BC3C7CB"
66
- prp_ans_d_l = []
67
-
68
- # ={}
69
- last_p_ans_d_j = {}
70
-
71
- for f in list(filter_d.keys()):
72
- print(f)
73
- results = vector_store.similarity_search_with_score(query=f, top_k=1)
74
-
75
- filter_obj_name = results[0][0].page_content
76
- #print(filter_obj_name)
77
- #print(self.mstr_rag_col_d)
78
- filt_obj_rag_df = i_map_objects.get_rag_rep_prp_df(conn, cube_id=self.cube_obj_prp_rel_id, rep_dos_id=self.rep_dos_id,
79
- key_word_l=[filter_obj_name],mstr_rag_col_d=self.mstr_rag_col_d)
80
-
81
- filt_obj_rag_df = filt_obj_rag_df[filt_obj_rag_df['prp_subType'].isin(['prompt_expression'])]
82
-
83
- operator = next(iter(filter_d[f]))
84
- filter_val_l = filter_d[f][operator]
85
- #print("DDDDDDDDDDDDDDDDD")
86
- #print(filt_obj_rag_df)
87
- d_prp_ans_d = {}
88
- for index, obj in filt_obj_rag_df.iterrows():
89
- d_prp_ans_d["prompt_id"] = obj["prompt_id"]
90
- d_prp_ans_d["prp_subType"] = obj["prp_subType"]
91
- d_prp_ans_d["object_id"] = obj["object_id"]
92
- d_prp_ans_d["obj_type"] = obj["obj_type"]
93
- d_prp_ans_d["operator"] = operator
94
- if obj["obj_type"] == "attribute":
95
- if operator in ("In", "notIn"):
96
-
97
- filter_val_df = i_map_objects.get_rag_rep_prp_df(conn, cube_id=self.cube_RAG_form_val_ans_id,
98
- rep_dos_id=self.rep_dos_id, key_word_l=filter_val_l,mstr_rag_col_d=self.mstr_rag_col_d)
99
- filt_df = pd.merge(filt_obj_rag_df[["prompt_id", "prp_subType", "object_id", "obj_type"]],
100
- filter_val_df[
101
- ["prompt_id", "prp_subType", "attribute_id", "attribute_name", "form_id",
102
- "form_name", "form_dataType", "key"]],
103
- left_on=['object_id'], right_on=['attribute_id'], how='inner')
104
- filt_df = i_df_helper.clean_double_col(df=filt_df)
105
- #print(filt_df)
106
- filter_val_l = []
107
- for index, f_form_ele in filt_df.iterrows():
108
- form_id = f_form_ele["form_id"]
109
- form_dataType = f_form_ele["form_dataType"]
110
- filter_val_l.append(f_form_ele["key"])
111
-
112
- att_exp_ans_d = {"att_id": d_prp_ans_d["object_id"], "att_form_id": form_id,
113
- "form_data_type": form_dataType, "operator": operator,
114
- "filter_val_l": filter_val_l}
115
-
116
- att_exp_ans_d = i_prompts.bld_att_exp_prp_l(prp_job_ans_d=att_exp_ans_d)
117
- d_prp_ans_d["prp_ans_d"] = att_exp_ans_d
118
- prp_ans_d_l.append(d_prp_ans_d.copy())
119
- #print(d_prp_ans_d)
120
-
121
- else:
122
- col_id = i_cube.get_RAG_cube_col_mstr_id(cube_id=self.cube_att_form_def_id, col_name="attribute_id",mstr_rag_col_d=self.mstr_rag_col_d)
123
- attr_elements = col_id + ":" + obj["object_id"]
124
- df = i_cube.quick_query_cube(conn, cube_id=self.cube_att_form_def_id, attribute_l=None, metric_l=None,
125
- attr_elements=attr_elements)
126
-
127
- for index, form in df.iterrows():
128
- if int(form["display_form_nr"]) > 0:
129
- att_exp_ans_d = {"att_id": form["attribute_id"], "att_form_id": form["form_id"],
130
- "form_data_type": form["REST_form_type"], "operator": operator,
131
- "filter_val_l": filter_val_l}
132
-
133
- att_exp_ans_d = i_prompts.bld_att_exp_prp(prp_job_ans_d=att_exp_ans_d)
134
- d_prp_ans_d["prp_ans_d"] = att_exp_ans_d
135
- prp_ans_d_l.append(d_prp_ans_d.copy())
136
- #print(d_prp_ans_d)
137
-
138
- if obj["obj_type"] == "metric":
139
- metric_exp_prp = {}
140
- metric_exp_prp["met_id"] = obj["object_id"]
141
- metric_exp_prp["data_type"] = "Real"
142
- metric_exp_prp["operator"] = operator
143
- metric_exp_prp["filter_val_l"] = filter_val_l
144
- metric_exp_prp["level"] = "default"
145
- d_prp_ans_d["prp_ans_d"] = i_prompts.bld_metric_exp_prp(metric_exp_prp=metric_exp_prp.copy())
146
- prp_ans_d_l.append(d_prp_ans_d.copy())
147
- #print(print(d_prp_ans_d))
148
-
149
- # prp_ans_d_l.append(last_p_ans_d_j.copy())
150
- return prp_ans_d_l
151
-
152
- def bld_ai_obj_ans_prp(self,conn,json_t_d):
153
- key_l = []
154
- col_id = i_cube.get_RAG_cube_col_mstr_id(cube_id=self.cube_obj_prp_rel_id, col_name="object_id",mstr_rag_col_d=self.mstr_rag_col_d)
155
- obj_l = []
156
- template_obj_d = {}
157
-
158
- for obj_type in json_t_d["template"].keys():
159
- for obj in json_t_d["template"][obj_type]:
160
- template_obj_d = {"obj_type": obj_type, "obj": obj}
161
- obj_l.append(template_obj_d.copy())
162
-
163
- for obj in obj_l:
164
- key_l.append(obj["obj"])
165
-
166
- template_obj_rag_df = i_map_objects.get_rag_rep_prp_df(conn, cube_id=self.cube_obj_prp_rel_id, rep_dos_id=self.rep_dos_id,
167
- key_word_l=key_l,mstr_rag_col_d=self.mstr_rag_col_d)
168
- template_obj_rag_df = template_obj_rag_df[template_obj_rag_df['prp_subType'].isin(['prompt_objects'])]
169
- template_obj_rag_df = template_obj_rag_df[['prompt_id', 'prp_subType', "object_id", "obj_type"]]
170
-
171
- template_obj_rag_df.rename(columns={'object_id': 'id', 'obj_type': 'type'}, inplace=True)
172
- prp_ans_d_l = template_obj_rag_df.groupby(['prompt_id']).apply(
173
- lambda x: x[['id', 'type']].to_dict(orient='records')).to_dict()
174
- obj_prp_ans_l = []
175
- for prp in prp_ans_d_l:
176
- obj_prp_ans_d = {}
177
- obj_prp_ans_d["id"] = prp
178
- obj_prp_ans_d["type"] = "OBJECTS"
179
- obj_prp_ans_d["answers"] = prp_ans_d_l[prp]
180
- obj_prp_ans_l.append(obj_prp_ans_d)
181
-
182
- return obj_prp_ans_l
183
-
184
- def merge_exp_prp_ans_l(self,ai_prp_filt_ans_d):
185
- prp_ans_l = []
186
- prp_id_l = i_msic.get_key_form_dict_l(dict_l=ai_prp_filt_ans_d, key="prompt_id")
187
- prp_ans_d_all = {}
188
- operand_X = "AND"
189
- for prp_id in prp_id_l:
190
- prp_ans_d_all[prp_id] = []
191
-
192
- for prp_ans in ai_prp_filt_ans_d:
193
- for prp_id in prp_ans_d_all.keys():
194
- if prp_ans["prompt_id"] == prp_id:
195
- prp_ans_d_all[prp_id].append(prp_ans["prp_ans_d"])
196
-
197
- for prp_id in prp_ans_d_all:
198
- # print(prp_ans_d_all[prp_id])
199
- prp_ans_d_all[prp_id] = i_prompts.bld_exp_operands_d(p_ans_d_d_l=prp_ans_d_all[prp_id], operator="AND")
200
-
201
- for prp_ans_id in prp_ans_d_all:
202
- for prp in ai_prp_filt_ans_d:
203
- if prp_ans_id == prp["prompt_id"]:
204
- if prp["prp_subType"] == "prompt_expression" and prp["obj_type"] == "attribute":
205
- prp_ans_l.append(i_prompts.bld_prp_exp_d(prompt_id=prp_ans_id,
206
- p_ans_d_j=prp_ans_d_all[prp_ans_id], operator="And"))
207
-
208
- if prp["prp_subType"] == "prompt_expression" and prp["obj_type"] == "metric":
209
- prp_ans_l.append(i_prompts.frame_metric_exp_prp(prompt_id=prp_ans_id, p_ans_d_j=prp_ans_d_all[prp_ans_id]))
210
- break
211
- return prp_ans_l
212
-
213
- def save_AI_rep(self, conn, rep_wizzard_id, prompt_answ, ai_rep_name, ai_rep_folder_id):
214
- instance_id = i_rep.open_Instance(conn=conn, report_id=rep_wizzard_id)
215
- first_draft = i_rep.set_inst_prompt_ans(conn=conn, report_id=rep_wizzard_id, instance_id=instance_id,
216
- prompt_answ=prompt_answ)
217
- rep_id = i_rep.save_rep_inst(conn=conn, instance_id=instance_id, rep_name=ai_rep_name
218
- , save_mode="OVERWRITE"
219
- , promptOption="static"
220
- , setCurrentAsDefaultAnswer=True)
221
-
222
- return rep_id
223
-
224
-
225
- class openAI():
226
-
227
- def __init__(self,sKey):
228
- #self.sKey=sKey
229
- os.environ["OPENAI_API_KEY"] = sKey
230
- self.i_embeddings = OpenAIEmbeddings()
231
-
232
- def check_trans_chatGPT(self,sKey,messages,*args,**kwargs):
233
- chat_completion = self.call_open_AI(sKey=sKey,messages=messages,*args,**kwargs)
234
- js = json.loads(chat_completion.json())
235
- return js
236
-
237
- def call_open_AI(self, sKey, messages, max_tokens=1000, temperature=0.3, model="gpt-4o-mini"):
238
- # This is the default and can be omitted
239
- client = OpenAI(api_key=sKey)
240
-
241
- chat_completion = client.chat.completions.create(
242
- messages=messages,
243
- # model="gpt-3.5-turbo",
244
- model=model,
245
- max_tokens=max_tokens,
246
- temperature=temperature
247
- )
248
- js = json.loads(chat_completion.json())
249
- return js
250
-