MSTR-Robotics-magerdaniel 0.3.8__tar.gz → 0.3.10__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.
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10/MSTR_Robotics_magerdaniel.egg-info}/PKG-INFO +2 -2
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/MSTR_Robotics_magerdaniel.egg-info/SOURCES.txt +3 -2
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/MSTR_Robotics_magerdaniel.egg-info/requires.txt +1 -1
- {mstr_robotics_magerdaniel-0.3.8/MSTR_Robotics_magerdaniel.egg-info → mstr_robotics_magerdaniel-0.3.10}/PKG-INFO +2 -2
- mstr_robotics_magerdaniel-0.3.10/mstr_robotics/navigation.py +195 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/prepare_AI_data.py +8 -111
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/report.py +3 -1
- mstr_robotics_magerdaniel-0.3.10/mstr_robotics/user_RAG.py +149 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/setup.py +2 -2
- mstr_robotics_magerdaniel-0.3.8/mstr_robotics/ai_openAi_faisst.py +0 -250
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/LICENSE +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/MANIFEST.in +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/MSTR_Robotics_magerdaniel.egg-info/dependency_links.txt +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/MSTR_Robotics_magerdaniel.egg-info/top_level.txt +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/README.md +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/__init__.py +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/_connectors.py +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/_helper.py +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/_lu_data.py +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/_mod_prj_obj.py +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/dossier.py +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/mstr_classes.py +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/mstr_pandas.py +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/read_out_prj_obj.py +0 -0
- {mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: MSTR_Robotics_magerdaniel
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.10
|
|
4
4
|
Summary: MicroStrateg(P)ython
|
|
5
5
|
Home-page: https://github.com/magerdaniel
|
|
6
6
|
Author: Daniel Mager
|
|
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: >=3.8
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: mstrio-py==11.4.
|
|
14
|
+
Requires-Dist: mstrio-py==11.4.9.101
|
|
15
15
|
Requires-Dist: langchain
|
|
16
16
|
Requires-Dist: openai
|
|
17
17
|
Requires-Dist: tiktoken
|
|
@@ -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.
|
|
3
|
+
Version: 0.3.10
|
|
4
4
|
Summary: MicroStrateg(P)ython
|
|
5
5
|
Home-page: https://github.com/magerdaniel
|
|
6
6
|
Author: Daniel Mager
|
|
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: >=3.8
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: mstrio-py==11.4.
|
|
14
|
+
Requires-Dist: mstrio-py==11.4.9.101
|
|
15
15
|
Requires-Dist: langchain
|
|
16
16
|
Requires-Dist: openai
|
|
17
17
|
Requires-Dist: tiktoken
|
|
@@ -0,0 +1,195 @@
|
|
|
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, rep_wizzard_id, prompt_answ, ai_rep_name, ai_rep_folder_id):
|
|
187
|
+
instance_id = i_rep.open_Instance(conn=conn, report_id=rep_wizzard_id)
|
|
188
|
+
first_draft = i_rep.set_inst_prompt_ans(conn=conn, report_id=rep_wizzard_id, instance_id=instance_id,
|
|
189
|
+
prompt_answ=prompt_answ)
|
|
190
|
+
rep_id = i_rep.save_rep_inst(conn=conn, instance_id=instance_id, rep_name=ai_rep_name
|
|
191
|
+
, save_mode="OVERWRITE"
|
|
192
|
+
, promptOption="static"
|
|
193
|
+
, setCurrentAsDefaultAnswer=True)
|
|
194
|
+
|
|
195
|
+
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
|
-
|
|
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
|
|
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
|
|
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)
|
{mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/report.py
RENAMED
|
@@ -163,6 +163,7 @@ class cube():
|
|
|
163
163
|
def get_cube_def(self,conn,cube_id):
|
|
164
164
|
return cube_definition(connection=conn, id=cube_id).json()
|
|
165
165
|
|
|
166
|
+
|
|
166
167
|
def get_mtdi_cube_col_id(self,conn, cube_l):
|
|
167
168
|
|
|
168
169
|
mstr_rag_col_d = {}
|
|
@@ -177,7 +178,8 @@ class cube():
|
|
|
177
178
|
mstr_rag_col_d[cube_id] = att_col_keys_d.copy()
|
|
178
179
|
return mstr_rag_col_d
|
|
179
180
|
|
|
180
|
-
def get_RAG_cube_col_mstr_id(self,cube_id,
|
|
181
|
+
def get_RAG_cube_col_mstr_id(self,conn,cube_id,col_name):
|
|
182
|
+
mstr_rag_col_d=self.get_mtdi_cube_col_id(conn, cube_l=[cube_id])
|
|
181
183
|
col_id = mstr_rag_col_d[cube_id][col_name]
|
|
182
184
|
return col_id
|
|
183
185
|
|
|
@@ -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.
|
|
10
|
+
version="0.3.10",
|
|
11
11
|
description="MicroStrateg(P)ython",
|
|
12
12
|
author="Daniel Mager",
|
|
13
13
|
author_email="danielmager@gmx.de",
|
|
@@ -16,7 +16,7 @@ setup(
|
|
|
16
16
|
long_description_content_type="text/markdown",
|
|
17
17
|
packages=find_packages(), # Automatically find all packages
|
|
18
18
|
install_requires=[
|
|
19
|
-
"mstrio-py==11.4.
|
|
19
|
+
"mstrio-py==11.4.9.101", # Specify the exact or compatible version
|
|
20
20
|
"langchain",
|
|
21
21
|
"openai",
|
|
22
22
|
"tiktoken",
|
|
@@ -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
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/__init__.py
RENAMED
|
File without changes
|
{mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/_connectors.py
RENAMED
|
File without changes
|
{mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/_helper.py
RENAMED
|
File without changes
|
{mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/_lu_data.py
RENAMED
|
File without changes
|
{mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/_mod_prj_obj.py
RENAMED
|
File without changes
|
{mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/dossier.py
RENAMED
|
File without changes
|
{mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/mstr_classes.py
RENAMED
|
File without changes
|
{mstr_robotics_magerdaniel-0.3.8 → mstr_robotics_magerdaniel-0.3.10}/mstr_robotics/mstr_pandas.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|