cnhkmcp 2.1.2__py3-none-any.whl → 2.1.3__py3-none-any.whl

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 (113) hide show
  1. {cnhkmcp-2.1.2.dist-info → cnhkmcp-2.1.3.dist-info}/METADATA +1 -1
  2. cnhkmcp-2.1.3.dist-info/RECORD +6 -0
  3. cnhkmcp-2.1.3.dist-info/top_level.txt +1 -0
  4. cnhkmcp/__init__.py +0 -125
  5. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/README.md +0 -38
  6. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/ace.log +0 -0
  7. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/config.json +0 -6
  8. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/get_knowledgeBase_tool/ace_lib.py +0 -1510
  9. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/get_knowledgeBase_tool/fetch_all_datasets.py +0 -157
  10. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/get_knowledgeBase_tool/fetch_all_documentation.py +0 -132
  11. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/get_knowledgeBase_tool/fetch_all_operators.py +0 -99
  12. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/get_knowledgeBase_tool/helpful_functions.py +0 -180
  13. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/icon.ico +0 -0
  14. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/icon.png +0 -0
  15. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/knowledge/test.txt +0 -1
  16. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/main.py +0 -576
  17. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/process_knowledge_base.py +0 -281
  18. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/rag_engine.py +0 -408
  19. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/requirements.txt +0 -7
  20. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/run.bat +0 -3
  21. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242//321/211/320/266/320/246/321/206/320/274/320/261/321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/231/320/243/321/205/342/225/235/320/220/321/206/320/230/320/241.py +0 -265
  22. cnhkmcp/untracked/APP/.gitignore +0 -32
  23. cnhkmcp/untracked/APP/MODULAR_STRUCTURE.md +0 -112
  24. cnhkmcp/untracked/APP/README.md +0 -309
  25. cnhkmcp/untracked/APP/Tranformer/Transformer.py +0 -4985
  26. cnhkmcp/untracked/APP/Tranformer/ace.log +0 -0
  27. cnhkmcp/untracked/APP/Tranformer/ace_lib.py +0 -1510
  28. cnhkmcp/untracked/APP/Tranformer/helpful_functions.py +0 -180
  29. cnhkmcp/untracked/APP/Tranformer/output/Alpha_candidates.json +0 -2421
  30. cnhkmcp/untracked/APP/Tranformer/output/Alpha_candidates_/321/207/320/264/342/225/221/321/204/342/225/233/320/233.json +0 -654
  31. cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_error.json +0 -1034
  32. cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_success.json +0 -444
  33. cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_/321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/320/237/320/277/321/207/320/253/342/224/244/321/206/320/236/320/265/321/210/342/225/234/342/225/234/321/205/320/225/320/265Machine_lib.json +0 -22
  34. cnhkmcp/untracked/APP/Tranformer/parsetab.py +0 -60
  35. cnhkmcp/untracked/APP/Tranformer/template_summary.txt +0 -3182
  36. cnhkmcp/untracked/APP/Tranformer/transformer_config.json +0 -7
  37. cnhkmcp/untracked/APP/Tranformer/validator.py +0 -889
  38. cnhkmcp/untracked/APP/ace.log +0 -69
  39. cnhkmcp/untracked/APP/ace_lib.py +0 -1510
  40. cnhkmcp/untracked/APP/blueprints/__init__.py +0 -6
  41. cnhkmcp/untracked/APP/blueprints/feature_engineering.py +0 -347
  42. cnhkmcp/untracked/APP/blueprints/idea_house.py +0 -221
  43. cnhkmcp/untracked/APP/blueprints/inspiration_house.py +0 -432
  44. cnhkmcp/untracked/APP/blueprints/paper_analysis.py +0 -570
  45. cnhkmcp/untracked/APP/custom_templates/templates.json +0 -1257
  46. cnhkmcp/untracked/APP/give_me_idea/BRAIN_Alpha_Template_Expert_SystemPrompt.md +0 -400
  47. cnhkmcp/untracked/APP/give_me_idea/ace_lib.py +0 -1510
  48. cnhkmcp/untracked/APP/give_me_idea/alpha_data_specific_template_master.py +0 -252
  49. cnhkmcp/untracked/APP/give_me_idea/fetch_all_datasets.py +0 -157
  50. cnhkmcp/untracked/APP/give_me_idea/fetch_all_operators.py +0 -99
  51. cnhkmcp/untracked/APP/give_me_idea/helpful_functions.py +0 -180
  52. cnhkmcp/untracked/APP/give_me_idea/what_is_Alpha_template.md +0 -11
  53. cnhkmcp/untracked/APP/helpful_functions.py +0 -180
  54. cnhkmcp/untracked/APP/hkSimulator/ace_lib.py +0 -1497
  55. cnhkmcp/untracked/APP/hkSimulator/autosimulator.py +0 -447
  56. cnhkmcp/untracked/APP/hkSimulator/helpful_functions.py +0 -180
  57. cnhkmcp/untracked/APP/mirror_config.txt +0 -20
  58. cnhkmcp/untracked/APP/operaters.csv +0 -129
  59. cnhkmcp/untracked/APP/requirements.txt +0 -53
  60. cnhkmcp/untracked/APP/run_app.bat +0 -28
  61. cnhkmcp/untracked/APP/run_app.sh +0 -34
  62. cnhkmcp/untracked/APP/setup_tsinghua.bat +0 -39
  63. cnhkmcp/untracked/APP/setup_tsinghua.sh +0 -43
  64. cnhkmcp/untracked/APP/simulator/alpha_submitter.py +0 -404
  65. cnhkmcp/untracked/APP/simulator/simulator_wqb.py +0 -618
  66. cnhkmcp/untracked/APP/ssrn-3332513.pdf +6 -109201
  67. cnhkmcp/untracked/APP/static/brain.js +0 -589
  68. cnhkmcp/untracked/APP/static/decoder.js +0 -1540
  69. cnhkmcp/untracked/APP/static/feature_engineering.js +0 -1729
  70. cnhkmcp/untracked/APP/static/idea_house.js +0 -937
  71. cnhkmcp/untracked/APP/static/inspiration.js +0 -465
  72. cnhkmcp/untracked/APP/static/inspiration_house.js +0 -868
  73. cnhkmcp/untracked/APP/static/paper_analysis.js +0 -390
  74. cnhkmcp/untracked/APP/static/script.js +0 -3082
  75. cnhkmcp/untracked/APP/static/simulator.js +0 -597
  76. cnhkmcp/untracked/APP/static/styles.css +0 -3127
  77. cnhkmcp/untracked/APP/static/usage_widget.js +0 -508
  78. cnhkmcp/untracked/APP/templates/alpha_inspector.html +0 -511
  79. cnhkmcp/untracked/APP/templates/feature_engineering.html +0 -960
  80. cnhkmcp/untracked/APP/templates/idea_house.html +0 -564
  81. cnhkmcp/untracked/APP/templates/index.html +0 -932
  82. cnhkmcp/untracked/APP/templates/inspiration_house.html +0 -861
  83. cnhkmcp/untracked/APP/templates/paper_analysis.html +0 -91
  84. cnhkmcp/untracked/APP/templates/simulator.html +0 -343
  85. cnhkmcp/untracked/APP/templates/transformer_web.html +0 -580
  86. cnhkmcp/untracked/APP/usage.md +0 -351
  87. cnhkmcp/untracked/APP//321/207/342/225/235/320/250/321/205/320/230/320/226/321/204/342/225/225/320/220/321/211/320/221/320/243/321/206/320/261/320/265/ace_lib.py +0 -1510
  88. cnhkmcp/untracked/APP//321/207/342/225/235/320/250/321/205/320/230/320/226/321/204/342/225/225/320/220/321/211/320/221/320/243/321/206/320/261/320/265/brain_alpha_inspector.py +0 -712
  89. cnhkmcp/untracked/APP//321/207/342/225/235/320/250/321/205/320/230/320/226/321/204/342/225/225/320/220/321/211/320/221/320/243/321/206/320/261/320/265/helpful_functions.py +0 -180
  90. cnhkmcp/untracked/APP//321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/231/320/243/321/205/342/225/235/320/220/321/206/320/230/320/241.py +0 -2456
  91. cnhkmcp/untracked/arXiv_API_Tool_Manual.md +0 -490
  92. cnhkmcp/untracked/arxiv_api.py +0 -229
  93. cnhkmcp/untracked/forum_functions.py +0 -998
  94. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272/forum_functions.py +0 -407
  95. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272/platform_functions.py +0 -2415
  96. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272/user_config.json +0 -31
  97. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272//321/210/320/276/320/271AI/321/210/320/277/342/225/227/321/210/342/224/220/320/251/321/204/342/225/225/320/272/321/206/320/246/320/227/321/206/320/261/320/263/321/206/320/255/320/265/321/205/320/275/320/266/321/204/342/225/235/320/252/321/204/342/225/225/320/233/321/210/342/225/234/342/225/234/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270.md +0 -101
  98. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272//321/211/320/225/320/235/321/207/342/225/234/320/276/321/205/320/231/320/235/321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/230/320/241_/321/205/320/276/320/231/321/210/320/263/320/225/321/205/342/224/220/320/225/321/210/320/266/320/221/321/204/342/225/233/320/255/321/210/342/225/241/320/246/321/205/320/234/320/225.py +0 -190
  99. cnhkmcp/untracked/platform_functions.py +0 -2886
  100. cnhkmcp/untracked/sample_mcp_config.json +0 -11
  101. cnhkmcp/untracked/user_config.json +0 -31
  102. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/320/237/320/222/321/210/320/220/320/223/321/206/320/246/320/227/321/206/320/261/320/263_BRAIN_Alpha_Test_Requirements_and_Tips.md +0 -202
  103. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_Alpha_explaination_workflow.md +0 -56
  104. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_BRAIN_6_Tips_Datafield_Exploration_Guide.md +0 -194
  105. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_BRAIN_Alpha_Improvement_Workflow.md +0 -101
  106. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_Dataset_Exploration_Expert_Manual.md +0 -436
  107. cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_daily_report_workflow.md +0 -128
  108. cnhkmcp/untracked//321/211/320/225/320/235/321/207/342/225/234/320/276/321/205/320/231/320/235/321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/230/320/241_/321/205/320/276/320/231/321/210/320/263/320/225/321/205/342/224/220/320/225/321/210/320/266/320/221/321/204/342/225/233/320/255/321/210/342/225/241/320/246/321/205/320/234/320/225.py +0 -190
  109. cnhkmcp-2.1.2.dist-info/RECORD +0 -111
  110. cnhkmcp-2.1.2.dist-info/top_level.txt +0 -1
  111. {cnhkmcp-2.1.2.dist-info → cnhkmcp-2.1.3.dist-info}/WHEEL +0 -0
  112. {cnhkmcp-2.1.2.dist-info → cnhkmcp-2.1.3.dist-info}/entry_points.txt +0 -0
  113. {cnhkmcp-2.1.2.dist-info → cnhkmcp-2.1.3.dist-info}/licenses/LICENSE +0 -0
@@ -1,960 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Feature Engineering Assistant - BRAIN</title>
7
- <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
8
- <style>
9
- .feature-engineering-container {
10
- max-width: 1200px;
11
- margin: 0 auto;
12
- padding: 20px;
13
- }
14
-
15
- .header-section {
16
- text-align: center;
17
- margin-bottom: 30px;
18
- }
19
-
20
- .header-section h1 {
21
- color: #2c3e50;
22
- margin-bottom: 10px;
23
- }
24
-
25
- .header-section p {
26
- color: #7f8c8d;
27
- font-size: 16px;
28
- }
29
-
30
- .back-button {
31
- position: absolute;
32
- top: 20px;
33
- left: 20px;
34
- background: #3498db;
35
- color: white;
36
- padding: 10px 20px;
37
- border: none;
38
- border-radius: 5px;
39
- text-decoration: none;
40
- display: inline-block;
41
- transition: background-color 0.3s;
42
- }
43
-
44
- .back-button:hover {
45
- background: #2980b9;
46
- }
47
-
48
- .config-section {
49
- background: #f8f9fa;
50
- padding: 20px;
51
- border-radius: 8px;
52
- margin-bottom: 20px;
53
- }
54
-
55
- .config-section h3 {
56
- margin-top: 0;
57
- color: #2c3e50;
58
- }
59
-
60
- .form-group {
61
- margin-bottom: 15px;
62
- }
63
-
64
- .form-group label {
65
- display: block;
66
- margin-bottom: 5px;
67
- font-weight: bold;
68
- color: #2c3e50;
69
- }
70
-
71
- .form-input {
72
- width: 100%;
73
- padding: 10px;
74
- border: 1px solid #ddd;
75
- border-radius: 4px;
76
- font-size: 14px;
77
- }
78
-
79
- .form-input:focus {
80
- outline: none;
81
- border-color: #3498db;
82
- box-shadow: 0 0 5px rgba(52, 152, 219, 0.3);
83
- }
84
-
85
- .btn {
86
- background: #3498db;
87
- color: white;
88
- padding: 10px 20px;
89
- border: none;
90
- border-radius: 4px;
91
- cursor: pointer;
92
- font-size: 14px;
93
- transition: background-color 0.3s;
94
- }
95
-
96
- .btn:hover {
97
- background: #2980b9;
98
- }
99
-
100
- .btn-success {
101
- background: #27ae60;
102
- }
103
-
104
- .btn-success:hover {
105
- background: #229954;
106
- }
107
-
108
- .btn-secondary {
109
- background: #95a5a6;
110
- }
111
-
112
- .btn-secondary:hover {
113
- background: #7f8c8d;
114
- }
115
-
116
- .options-section {
117
- background: white;
118
- border-radius: 8px;
119
- box-shadow: 0 2px 10px rgba(0,0,0,0.1);
120
- margin-bottom: 20px;
121
- }
122
-
123
- .options-header {
124
- background: #3498db;
125
- color: white;
126
- padding: 15px 20px;
127
- border-radius: 8px 8px 0 0;
128
- display: flex;
129
- justify-content: space-between;
130
- align-items: center;
131
- }
132
-
133
- .options-container {
134
- padding: 20px;
135
- display: grid;
136
- grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
137
- gap: 20px;
138
- }
139
-
140
- .option-card {
141
- background: #f8f9fa;
142
- border: 2px solid #e9ecef;
143
- border-radius: 8px;
144
- padding: 20px;
145
- transition: all 0.3s ease;
146
- cursor: pointer;
147
- position: relative;
148
- }
149
-
150
- .option-card:hover {
151
- border-color: #3498db;
152
- box-shadow: 0 4px 12px rgba(52, 152, 219, 0.15);
153
- }
154
-
155
- .option-card.selected {
156
- border-color: #27ae60;
157
- background: #f1f8e9;
158
- }
159
-
160
- .option-card.editing {
161
- position: fixed;
162
- top: 50%;
163
- left: 50%;
164
- transform: translate(-50%, -50%);
165
- z-index: 1000;
166
- width: 80%;
167
- max-width: 800px;
168
- max-height: 80vh;
169
- overflow-y: auto;
170
- border-color: #f39c12;
171
- background: #fef9e7;
172
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
173
- }
174
-
175
- .modal-overlay {
176
- position: fixed;
177
- top: 0;
178
- left: 0;
179
- width: 100%;
180
- height: 100%;
181
- background: rgba(0, 0, 0, 0.5);
182
- z-index: 999;
183
- display: none;
184
- }
185
-
186
- .modal-overlay.active {
187
- display: block;
188
- }
189
-
190
- .option-header {
191
- display: flex;
192
- justify-content: space-between;
193
- align-items: center;
194
- margin-bottom: 15px;
195
- }
196
-
197
- .option-number {
198
- background: #3498db;
199
- color: white;
200
- padding: 5px 10px;
201
- border-radius: 20px;
202
- font-size: 12px;
203
- font-weight: bold;
204
- }
205
-
206
- .option-actions {
207
- display: flex;
208
- gap: 10px;
209
- }
210
-
211
- .option-actions button {
212
- padding: 5px 10px;
213
- font-size: 12px;
214
- border: none;
215
- border-radius: 4px;
216
- cursor: pointer;
217
- }
218
-
219
- .edit-btn {
220
- background: #f39c12;
221
- color: white;
222
- }
223
-
224
- .save-btn {
225
- background: #27ae60;
226
- color: white;
227
- }
228
-
229
- .cancel-btn {
230
- background: #95a5a6;
231
- color: white;
232
- }
233
-
234
- .select-btn {
235
- background: #3498db;
236
- color: white;
237
- }
238
-
239
- .send-continue-btn {
240
- background: #27ae60;
241
- color: white;
242
- margin-left: 10px;
243
- }
244
-
245
- .option-content {
246
- line-height: 1.6;
247
- }
248
-
249
- .option-field {
250
- margin-bottom: 10px;
251
- }
252
-
253
- .option-field label {
254
- font-weight: bold;
255
- color: #2c3e50;
256
- display: block;
257
- margin-bottom: 5px;
258
- }
259
-
260
- .option-field input,
261
- .option-field textarea {
262
- width: 100%;
263
- padding: 8px;
264
- border: 1px solid #ddd;
265
- border-radius: 4px;
266
- font-size: 14px;
267
- }
268
-
269
- .option-field textarea {
270
- resize: vertical;
271
- min-height: 80px;
272
- overflow: hidden;
273
- }
274
-
275
- .option-card.editing .option-field textarea {
276
- min-height: 120px;
277
- overflow-y: auto;
278
- }
279
-
280
- .auto-resize-textarea {
281
- overflow: hidden;
282
- resize: none;
283
- }
284
-
285
- .option-field.readonly input,
286
- .option-field.readonly textarea {
287
- background: #f8f9fa;
288
- border-color: #e9ecef;
289
- }
290
-
291
- .template-actions {
292
- display: flex;
293
- gap: 10px;
294
- margin-bottom: 20px;
295
- }
296
-
297
- .pipeline-status {
298
- background: #fff3cd;
299
- border: 1px solid #ffeaa7;
300
- border-radius: 4px;
301
- padding: 15px;
302
- margin-bottom: 20px;
303
- }
304
-
305
- .pipeline-status h4 {
306
- margin-top: 0;
307
- color: #856404;
308
- }
309
-
310
- .pipeline-step {
311
- background: #f8f9fa;
312
- border-left: 4px solid #3498db;
313
- padding: 10px 15px;
314
- margin-bottom: 10px;
315
- border-radius: 0 4px 4px 0;
316
- }
317
-
318
- .pipeline-step strong {
319
- color: #2c3e50;
320
- }
321
-
322
- .notification {
323
- position: fixed;
324
- top: 20px;
325
- right: 20px;
326
- padding: 15px 20px;
327
- border-radius: 4px;
328
- color: white;
329
- font-weight: bold;
330
- z-index: 1000;
331
- animation: slideIn 0.3s ease-out;
332
- }
333
-
334
- .notification.success {
335
- background: #27ae60;
336
- }
337
-
338
- .notification.error {
339
- background: #e74c3c;
340
- }
341
-
342
- @keyframes slideIn {
343
- from {
344
- transform: translateX(100%);
345
- opacity: 0;
346
- }
347
- to {
348
- transform: translateX(0);
349
- opacity: 1;
350
- }
351
- }
352
-
353
- .loading-overlay {
354
- position: fixed;
355
- top: 0;
356
- left: 0;
357
- width: 100%;
358
- height: 100%;
359
- background: rgba(0, 0, 0, 0.5);
360
- display: flex;
361
- flex-direction: column;
362
- justify-content: center;
363
- align-items: center;
364
- z-index: 1000;
365
- }
366
-
367
- .loading-spinner {
368
- width: 50px;
369
- height: 50px;
370
- border: 5px solid #f3f3f3;
371
- border-top: 5px solid #3498db;
372
- border-radius: 50%;
373
- animation: spin 1s linear infinite;
374
- }
375
-
376
- .loading-message {
377
- color: white;
378
- margin-top: 20px;
379
- font-size: 16px;
380
- }
381
-
382
- @keyframes spin {
383
- 0% { transform: rotate(0deg); }
384
- 100% { transform: rotate(360deg); }
385
- }
386
-
387
- .export-section {
388
- background: #f8f9fa;
389
- padding: 20px;
390
- border-radius: 8px;
391
- margin-top: 20px;
392
- }
393
-
394
- .export-section h3 {
395
- margin-top: 0;
396
- color: #2c3e50;
397
- }
398
-
399
- .category-list {
400
- display: grid;
401
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
402
- gap: 10px;
403
- margin-top: 15px;
404
- }
405
-
406
- .category-item {
407
- background: #ecf0f1;
408
- padding: 8px 12px;
409
- border-radius: 4px;
410
- font-size: 14px;
411
- border-left: 4px solid #3498db;
412
- }
413
-
414
- .quick-actions {
415
- display: flex;
416
- gap: 10px;
417
- margin-bottom: 20px;
418
- }
419
-
420
- .quick-actions button {
421
- padding: 8px 16px;
422
- font-size: 14px;
423
- }
424
-
425
- .empty-conversation {
426
- text-align: center;
427
- color: #7f8c8d;
428
- padding: 40px;
429
- font-style: italic;
430
- }
431
-
432
- /* Operators Reference Modal Styles */
433
- .operator-category {
434
- background: #f8f9fa;
435
- border-radius: 8px;
436
- margin-bottom: 20px;
437
- border: 1px solid #e9ecef;
438
- overflow: hidden;
439
- }
440
-
441
- .operator-category.hidden {
442
- display: none;
443
- }
444
-
445
- .operator-category-header {
446
- background: #3498db;
447
- color: white;
448
- padding: 15px 20px;
449
- cursor: pointer;
450
- display: flex;
451
- justify-content: space-between;
452
- align-items: center;
453
- transition: background-color 0.3s;
454
- }
455
-
456
- .operator-category-header:hover {
457
- background: #2980b9;
458
- }
459
-
460
- .operator-category-header h4 {
461
- margin: 0;
462
- font-size: 16px;
463
- }
464
-
465
- .operator-category-number {
466
- background: rgba(255, 255, 255, 0.2);
467
- padding: 4px 8px;
468
- border-radius: 12px;
469
- font-size: 12px;
470
- font-weight: bold;
471
- margin-right: 10px;
472
- }
473
-
474
- .operator-category-toggle {
475
- font-size: 18px;
476
- transition: transform 0.3s;
477
- }
478
-
479
- .operator-category-toggle.expanded {
480
- transform: rotate(180deg);
481
- }
482
-
483
- .operator-category-content {
484
- padding: 0;
485
- max-height: 0;
486
- overflow: hidden;
487
- transition: max-height 0.3s ease-out;
488
- }
489
-
490
- .operator-category-content.expanded {
491
- max-height: 500px;
492
- padding: 20px;
493
- }
494
-
495
- .operator-description {
496
- color: #2c3e50;
497
- margin-bottom: 15px;
498
- font-style: italic;
499
- line-height: 1.5;
500
- }
501
-
502
- .operator-definition {
503
- color: #6c757d;
504
- margin-bottom: 10px;
505
- font-size: 13px;
506
- line-height: 1.4;
507
- font-style: italic;
508
- }
509
-
510
- .operator-list {
511
- background: white;
512
- border-radius: 4px;
513
- padding: 15px;
514
- border: 1px solid #e9ecef;
515
- }
516
-
517
- .operator-list h5 {
518
- margin: 0 0 10px 0;
519
- color: #2c3e50;
520
- font-size: 14px;
521
- font-weight: bold;
522
- }
523
-
524
- .operators-grid {
525
- display: flex;
526
- flex-wrap: wrap;
527
- gap: 8px;
528
- }
529
-
530
- .operator-tag {
531
- background: #ecf0f1;
532
- color: #2c3e50;
533
- padding: 4px 8px;
534
- border-radius: 4px;
535
- font-size: 12px;
536
- font-family: monospace;
537
- border: 1px solid #bdc3c7;
538
- }
539
-
540
- .operator-tag.highlight {
541
- background: #fff3cd;
542
- border-color: #ffeaa7;
543
- color: #856404;
544
- }
545
-
546
- .no-results {
547
- text-align: center;
548
- color: #7f8c8d;
549
- padding: 40px;
550
- font-style: italic;
551
- }
552
-
553
- /* Clickable category styles */
554
- .clickable-category {
555
- color: #3498db;
556
- cursor: pointer;
557
- text-decoration: underline;
558
- font-weight: bold;
559
- }
560
-
561
- .clickable-category:hover {
562
- color: #2980b9;
563
- background-color: #f8f9fa;
564
- padding: 2px 4px;
565
- border-radius: 3px;
566
- }
567
-
568
- /* Category popup tooltip */
569
- .category-popup {
570
- position: absolute;
571
- background: white;
572
- border: 2px solid #3498db;
573
- border-radius: 8px;
574
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
575
- z-index: 1000;
576
- max-width: 500px;
577
- min-width: 300px;
578
- padding: 0;
579
- display: none;
580
- }
581
-
582
- .category-popup-header {
583
- background: #3498db;
584
- color: white;
585
- padding: 10px 15px;
586
- border-radius: 6px 6px 0 0;
587
- font-weight: bold;
588
- display: flex;
589
- justify-content: space-between;
590
- align-items: center;
591
- }
592
-
593
- .category-popup-close {
594
- cursor: pointer;
595
- font-size: 18px;
596
- font-weight: bold;
597
- }
598
-
599
- .category-popup-content {
600
- padding: 15px;
601
- }
602
-
603
- .category-popup-description {
604
- color: #2c3e50;
605
- margin-bottom: 15px;
606
- font-style: italic;
607
- line-height: 1.4;
608
- }
609
-
610
- .category-popup-operators {
611
- background: #f8f9fa;
612
- border-radius: 4px;
613
- padding: 10px;
614
- border: 1px solid #e9ecef;
615
- }
616
-
617
- .category-popup-operators h5 {
618
- margin: 0 0 8px 0;
619
- color: #2c3e50;
620
- font-size: 13px;
621
- }
622
-
623
- .popup-operators-grid {
624
- display: flex;
625
- flex-wrap: wrap;
626
- gap: 4px;
627
- }
628
-
629
- .popup-operator-tag {
630
- background: #ecf0f1;
631
- color: #2c3e50;
632
- padding: 2px 6px;
633
- border-radius: 3px;
634
- font-size: 11px;
635
- font-family: monospace;
636
- border: 1px solid #bdc3c7;
637
- }
638
-
639
- .readonly-display {
640
- padding: 10px;
641
- border: 1px solid #ddd;
642
- border-radius: 4px;
643
- background: #f8f9fa;
644
- font-size: 14px;
645
- min-height: 35px;
646
- display: flex;
647
- align-items: center;
648
- }
649
- </style>
650
- </head>
651
- <body>
652
- <div class="feature-engineering-container">
653
- <a href="{{ url_for('index') }}" class="back-button">← Back to Main</a>
654
-
655
- <div class="header-section">
656
- <h1>DataField Guide</h1>
657
- <p>Get AI-powered recommendations for multi-step DataField Exploration</p>
658
- </div>
659
-
660
- <!-- API Configuration Section -->
661
- <div class="config-section" id="apiConfigSection">
662
- <h3>API Configuration</h3>
663
- <div class="form-group">
664
- <label for="modelProvider">AI Model Provider:</label>
665
- <select id="modelProvider" class="form-input">
666
- <option value="deepseek">Deepseek</option>
667
- <option value="kimi">Kimi</option>
668
- </select>
669
- </div>
670
- <div class="form-group">
671
- <label for="apiKey">API Key:</label>
672
- <input type="password" id="apiKey" class="form-input" placeholder="Enter your API key">
673
- </div>
674
- <div class="form-group">
675
- <label for="modelName">Model Name:</label>
676
- <input type="text" id="modelName" class="form-input" placeholder="e.g., deepseek-chat, kimi-k2-0711-preview">
677
- <small style="color: #7f8c8d; font-size: 12px;">Enter the specific model name for your chosen provider</small>
678
- </div>
679
- <button id="saveApiKey" class="btn">Test & Save Configuration</button>
680
- </div>
681
-
682
- <!-- Show API Config Button (hidden by default) -->
683
- <div class="config-section" id="showApiConfigSection" style="display: none;">
684
- <h3>API Configuration</h3>
685
- <p style="color: #27ae60; margin-bottom: 15px;">✅ API configuration saved successfully</p>
686
- <button id="showApiConfig" class="btn btn-secondary">Show API Configuration</button>
687
- </div>
688
-
689
- <!-- Pipeline Status Section -->
690
- <div class="pipeline-status" id="pipelineStatus" style="display: none;">
691
- <h4>Current Pipeline Status</h4>
692
- <div id="pipelineSteps">
693
- <!-- Pipeline steps will be displayed here -->
694
- </div>
695
- </div>
696
-
697
- <!-- Initial Setup Section -->
698
- <div class="config-section" id="initialSetup">
699
- <h3>Start New Feature Engineering Pipeline</h3>
700
- <div class="template-actions">
701
- <button id="loadQuestionTemplate" class="btn btn-secondary">Load Question Template</button>
702
- <button id="editSystemPrompt" class="btn btn-secondary">Edit System Prompt</button>
703
- <button id="startPipeline" class="btn btn-success">Get AI Recommendations</button>
704
- </div>
705
- <div class="form-group">
706
- <label for="questionTemplate">Question Template:</label>
707
- <textarea id="questionTemplate" class="form-input" rows="6" placeholder="Click 'Load Question Template' to load the template"></textarea>
708
- </div>
709
- </div>
710
-
711
- <!-- Options Cards Section -->
712
- <div class="options-section" id="optionsSection" style="display: none;">
713
- <div class="options-header">
714
- <h3>AI Recommendations</h3>
715
- <div class="quick-actions">
716
- <button id="clearOptions" class="btn btn-secondary">Clear & Start Over</button>
717
- <button id="exportPipeline" class="btn">Export Pipeline</button>
718
- </div>
719
- </div>
720
- <div class="options-container" id="optionsContainer">
721
- <!-- Option cards will be dynamically inserted here -->
722
- </div>
723
- </div>
724
-
725
- <!-- Modal Overlay for Editing -->
726
- <div class="modal-overlay" id="modalOverlay"></div>
727
-
728
- <!-- Category Popup -->
729
- <div class="category-popup" id="categoryPopup">
730
- <div class="category-popup-header">
731
- <span id="categoryPopupTitle"></span>
732
- <span class="category-popup-close" onclick="hideCategoryPopup()">&times;</span>
733
- </div>
734
- <div class="category-popup-content">
735
- <div class="category-popup-description" id="categoryPopupDescription"></div>
736
- <div class="category-popup-operators">
737
- <h5 id="categoryPopupOperatorsTitle"></h5>
738
- <div class="popup-operators-grid" id="categoryPopupOperators"></div>
739
- </div>
740
- </div>
741
- </div>
742
-
743
- <!-- System Prompt Edit Modal -->
744
- <div class="modal-overlay" id="systemPromptModal" style="display: none;">
745
- <div class="modal-content" style="position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80%; max-width: 900px; max-height: 80vh; background: white; border-radius: 8px; box-shadow: 0 10px 30px rgba(0,0,0,0.3); z-index: 1001;">
746
- <div class="modal-header" style="background: #3498db; color: white; padding: 15px 20px; border-radius: 8px 8px 0 0; display: flex; justify-content: space-between; align-items: center;">
747
- <h3>Edit System Prompt</h3>
748
- <span class="close" onclick="closeSystemPromptModal()" style="cursor: pointer; font-size: 24px;">&times;</span>
749
- </div>
750
- <div class="modal-body" style="padding: 20px; max-height: 60vh; overflow-y: auto;">
751
- <div class="form-group">
752
- <label for="systemPromptTextarea">System Prompt:</label>
753
- <textarea id="systemPromptTextarea" class="form-input" rows="20" placeholder="Enter your custom system prompt here..."></textarea>
754
- </div>
755
- <div class="prompt-actions" style="margin-top: 15px; display: flex; gap: 10px;">
756
- <button id="loadDefaultPrompt" class="btn btn-outline">Load Default Prompt</button>
757
- </div>
758
- </div>
759
- <div class="modal-footer" style="padding: 15px 20px; border-top: 1px solid #eee; display: flex; justify-content: flex-end; gap: 10px;">
760
- <button onclick="closeSystemPromptModal()" class="btn btn-outline">Cancel</button>
761
- <button onclick="saveSystemPrompt()" class="btn btn-primary">Save & Apply</button>
762
- </div>
763
- </div>
764
- </div>
765
-
766
- <!-- Operator Suggestions Modal -->
767
- <div class="modal-overlay" id="operatorSuggestionsModal" style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 1001;">
768
- <div class="modal-content" style="position: absolute; top: 30%; left: 50%; transform: translate(-50%, -50%); width: 98%; max-width: 1600px; max-height: 95vh; background: white; border-radius: 8px; box-shadow: 0 10px 30px rgba(0,0,0,0.3); display: flex; flex-direction: column;">
769
- <div class="modal-header" style="background: #9b59b6; color: white; padding: 15px 20px; border-radius: 8px 8px 0 0; display: flex; justify-content: space-between; align-items: center;">
770
- <h3>🎯 Operator Suggestions for Current Step</h3>
771
- <span class="close" onclick="closeOperatorSuggestionsModal()" style="cursor: pointer; font-size: 24px;">&times;</span>
772
- </div>
773
- <div class="modal-body" style="padding: 20px; flex: 1; overflow-y: auto; min-height: 0;">
774
- <!-- Target Section -->
775
- <div class="target-section" style="background: #f8f9fa; padding: 8px; border-radius: 8px; margin-bottom: 8px;">
776
- <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 5px;">
777
- <h4 style="margin: 0; color: #2c3e50; font-size: 14px;">Research Target:</h4>
778
- <button id="modalEditTarget" class="btn btn-secondary" style="padding: 3px 8px; font-size: 11px;">Edit Target</button>
779
- </div>
780
-
781
- <!-- Target Display (read-only) -->
782
- <div class="target-display" id="modalTargetDisplay" style="background: white; border: 1px solid #e9ecef; border-radius: 4px; padding: 6px; min-height: 30px; max-height: 40px; overflow-y: auto;">
783
- <div class="target-text" id="modalTargetText" style="line-height: 1.3; word-wrap: break-word; font-size: 12px;">No target set</div>
784
- </div>
785
-
786
- <!-- Target Input (editable) -->
787
- <div id="modalTargetInputGroup" style="display: none;">
788
- <textarea id="modalTargetInput" class="form-input" rows="2" placeholder="Describe your research target..." style="min-height: 40px; max-height: 60px; resize: vertical; font-size: 12px;"></textarea>
789
- <div style="margin-top: 5px;">
790
- <button id="modalSaveTarget" class="btn btn-success" style="padding: 3px 8px; font-size: 11px;">Save Target</button>
791
- <button id="modalCancelTarget" class="btn btn-secondary" style="padding: 3px 8px; font-size: 11px; margin-left: 5px;">Cancel</button>
792
- </div>
793
- </div>
794
- </div>
795
-
796
- <!-- BRAIN Connection Notice -->
797
- <div id="modalBrainNotice" style="margin-bottom: 8px; padding: 6px; background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px; display: none;">
798
- <div style="color: #856404; font-size: 12px;">
799
- <strong>💡 Tip:</strong> Connect to WorldQuant BRAIN to get access to the full operator library (400+ operators).
800
- <button onclick="openBrainLoginModal()" style="background: #3498db; color: white; border: none; padding: 3px 8px; border-radius: 3px; margin-left: 8px; cursor: pointer; font-size: 11px;">Connect to BRAIN</button>
801
- </div>
802
- </div>
803
-
804
- <!-- Expression Section -->
805
- <div class="expression-section" style="background: #f8f9fa; padding: 8px; border-radius: 8px; margin-bottom: 8px;">
806
- <h4 style="margin: 0 0 5px 0; color: #2c3e50; font-size: 14px;">Current Expression for Seeking Advice:</h4>
807
- <textarea id="modalCurrentExpression" class="form-input" rows="2" placeholder="Enter your current expression for this step... (e.g., ts_mean(close, 20) or rank(volume))" style="min-height: 30px; max-height: 40px; resize: vertical; font-size: 12px;"></textarea>
808
- <div style="margin-top: 5px;">
809
- <button id="modalStartEvaluation" class="btn btn-warning" style="padding: 5px 10px; font-size: 12px;">Get Operator Suggestions</button>
810
- <button id="modalClearExpression" class="btn btn-secondary" style="padding: 5px 10px; font-size: 12px;">Clear Expression</button>
811
- </div>
812
- </div>
813
-
814
- <!-- Evaluation Results Section -->
815
- <div class="evaluation-section" id="modalEvaluationSection" style="display: none;">
816
- <h4 style="margin: 0 0 10px 0; color: #2c3e50;">Operator Suggestions:</h4>
817
-
818
- <!-- Filter Controls -->
819
- <div class="filter-controls" style="display: flex; gap: 10px; margin-bottom: 8px; align-items: center; flex-wrap: wrap; padding: 6px; background: white; border-radius: 4px; border: 1px solid #e9ecef;">
820
- <label style="display: flex; align-items: center; gap: 5px; font-weight: normal; min-width: 120px; font-size: 12px;">
821
- <strong>Min Score:</strong>
822
- <input type="range" id="modalMinScoreFilter" min="0" max="10" value="7" style="width: 80px;">
823
- <span id="modalMinScoreValue" style="font-weight: bold; color: #3498db;">7</span>
824
- </label>
825
- <label style="display: flex; align-items: center; gap: 5px; font-weight: normal; min-width: 100px; font-size: 12px;">
826
- <input type="checkbox" id="modalShowHighScores" checked> <strong>High (8-10)</strong>
827
- </label>
828
- <label style="display: flex; align-items: center; gap: 5px; font-weight: normal; min-width: 100px; font-size: 12px;">
829
- <input type="checkbox" id="modalShowMediumScores" checked> <strong>Medium (4-7)</strong>
830
- </label>
831
- <label style="display: flex; align-items: center; gap: 5px; font-weight: normal; min-width: 100px; font-size: 12px;">
832
- <input type="checkbox" id="modalShowLowScores"> <strong>Low (0-3)</strong>
833
- </label>
834
- </div>
835
-
836
- <!-- Summary Stats -->
837
- <div class="summary-stats" id="modalSummaryStats" style="display: none; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 8px; margin-bottom: 8px;">
838
- <div class="stat-card stat-high" style="background: white; padding: 6px; border-radius: 4px; text-align: center;">
839
- <div class="stat-number" id="modalHighScoreCount" style="font-size: 14px; font-weight: bold; color: #27ae60;">0</div>
840
- <div class="stat-label" style="font-size: 11px; color: #7f8c8d;">High (8-10)</div>
841
- </div>
842
- <div class="stat-card stat-medium" style="background: white; padding: 6px; border-radius: 4px; text-align: center;">
843
- <div class="stat-number" id="modalMediumScoreCount" style="font-size: 14px; font-weight: bold; color: #f39c12;">0</div>
844
- <div class="stat-label" style="font-size: 11px; color: #7f8c8d;">Medium (4-7)</div>
845
- </div>
846
- <div class="stat-card stat-low" style="background: white; padding: 6px; border-radius: 4px; text-align: center;">
847
- <div class="stat-number" id="modalLowScoreCount" style="font-size: 14px; font-weight: bold; color: #e74c3c;">0</div>
848
- <div class="stat-label" style="font-size: 11px; color: #7f8c8d;">Low (0-3)</div>
849
- </div>
850
- </div>
851
-
852
- <!-- Results Table -->
853
- <div class="evaluation-table-container" style="overflow-x: auto; max-height: 600px; overflow-y: auto;">
854
- <table class="evaluation-table" id="modalEvaluationTable" style="width: 100%; border-collapse: collapse; font-size: 13px; border: 1px solid #dee2e6;">
855
- <thead>
856
- <tr>
857
- <th style="background: #f8f9fa; padding: 8px; text-align: left; border: 1px solid #dee2e6; border-bottom: 2px solid #dee2e6; position: sticky; top: 0; z-index: 10; width: 370px;">Operator</th>
858
- <th style="background: #f8f9fa; padding: 8px; text-align: left; border: 1px solid #dee2e6; border-bottom: 2px solid #dee2e6; position: sticky; top: 0; z-index: 10; min-width: 400px;">Reason</th>
859
- <th style="background: #f8f9fa; padding: 8px; text-align: center; border: 1px solid #dee2e6; border-bottom: 2px solid #dee2e6; position: sticky; top: 0; z-index: 10; width: 60px;">Score</th>
860
- </tr>
861
- </thead>
862
- <tbody id="modalEvaluationTableBody">
863
- <tr>
864
- <td colspan="5" style="text-align: center; color: #7f8c8d; font-style: italic; padding: 20px;">
865
- No suggestions yet. Enter your expression and click "Get Operator Suggestions".
866
- </td>
867
- </tr>
868
- </tbody>
869
- </table>
870
- </div>
871
- </div>
872
-
873
- <!-- Progress Section -->
874
- <div class="progress-section" id="modalProgressSection" style="display: none; background: white; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); margin-top: 20px;">
875
- <div class="progress-header" style="background: #27ae60; color: white; padding: 10px 15px; border-radius: 8px 8px 0 0;">
876
- <h4 style="margin: 0; font-size: 14px;">🔄 Evaluating Operators...</h4>
877
- </div>
878
- <div class="progress-content" style="padding: 15px;">
879
- <div class="progress-bar" style="width: 100%; height: 15px; background-color: #e9ecef; border-radius: 8px; overflow: hidden; margin-bottom: 8px;">
880
- <div class="progress-fill" id="modalProgressFill" style="height: 100%; background: linear-gradient(90deg, #27ae60, #2ecc71); transition: width 0.3s ease; display: flex; align-items: center; justify-content: center; color: white; font-size: 10px; font-weight: bold; width: 0%;">0%</div>
881
- </div>
882
- <div class="progress-stats" style="display: flex; justify-content: space-between; font-size: 12px; color: #6c757d;">
883
- <span id="modalProgressText">Evaluating operators...</span>
884
- <span id="modalProgressCount">0 / 0</span>
885
- </div>
886
- </div>
887
- </div>
888
- </div>
889
- <div class="modal-footer" style="padding: 15px 20px; border-top: 1px solid #eee; display: flex; justify-content: space-between; align-items: center; flex-shrink: 0;">
890
- <div>
891
- <button id="modalExportResults" class="btn btn-secondary" style="display: none;">Export Results</button>
892
- </div>
893
- <div>
894
- <button onclick="closeOperatorSuggestionsModal()" class="btn btn-outline">Close</button>
895
- </div>
896
- </div>
897
- </div>
898
- </div>
899
-
900
-
901
-
902
- <!-- Export Section -->
903
- <div class="export-section">
904
- <h3>Available Feature Engineering Categories</h3>
905
- <p>The AI assistant can recommend from these 15 categories:</p>
906
- <div class="category-list">
907
- <div class="category-item">Basic Arithmetic & Mathematical Operations</div>
908
- <div class="category-item">Logical & Conditional Operations</div>
909
- <div class="category-item">Time Series: Change Detection & Value Comparison</div>
910
- <div class="category-item">Time Series: Statistical Feature Engineering</div>
911
- <div class="category-item">Time Series: Ranking, Scaling, and Normalization</div>
912
- <div class="category-item">Time Series: Decay, Smoothing, and Turnover Control</div>
913
- <div class="category-item">Time Series: Extremes & Position Identification</div>
914
- <div class="category-item">Cross-Sectional: Ranking, Scaling, and Normalization</div>
915
- <div class="category-item">Cross-Sectional: Regression & Neutralization</div>
916
- <div class="category-item">Cross-Sectional: Distributional Transformation & Truncation</div>
917
- <div class="category-item">Transformational & Filtering Operations</div>
918
- <div class="category-item">Group Aggregation & Statistical Summary</div>
919
- <div class="category-item">Group Ranking, Scaling, and Normalization</div>
920
- <div class="category-item">Group Regression & Neutralization</div>
921
- <div class="category-item">Group Imputation & Backfilling</div>
922
- </div>
923
- </div>
924
- </div>
925
-
926
- <!-- BRAIN Login Modal -->
927
- <div id="brainLoginModal" class="modal" style="display: none; position: fixed; z-index: 2000; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5);">
928
- <div class="modal-content" style="background-color: white; margin: 5% auto; padding: 0; border-radius: 8px; width: 90%; max-width: 500px; box-shadow: 0 4px 20px rgba(0,0,0,0.3);">
929
- <div class="modal-header" style="background: #3498db; color: white; padding: 15px 20px; border-radius: 8px 8px 0 0; display: flex; justify-content: space-between; align-items: center;">
930
- <h3>Connect to WorldQuant BRAIN</h3>
931
- <span class="close" onclick="closeBrainLoginModal()" style="cursor: pointer; font-size: 24px;">&times;</span>
932
- </div>
933
- <div class="modal-body" style="padding: 20px;">
934
- <form id="brainLoginForm" onsubmit="event.preventDefault(); authenticateBrain();">
935
- <div class="form-group">
936
- <label for="brainUsername">Username:</label>
937
- <input type="email" id="brainUsername" class="form-input" placeholder="your.email@domain.com" required>
938
- </div>
939
- <div class="form-group">
940
- <label for="brainPassword">Password:</label>
941
- <input type="password" id="brainPassword" class="form-input" placeholder="Your password" required>
942
- </div>
943
- <div id="brainLoginStatus" class="login-status"></div>
944
- <div id="loginSpinner" class="login-spinner" style="display: none;">
945
- <div class="spinner" style="width: 20px; height: 20px; border: 2px solid #f3f3f3; border-top: 2px solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; display: inline-block;"></div>
946
- </div>
947
- </form>
948
- </div>
949
- <div class="modal-footer" style="padding: 15px 20px; border-top: 1px solid #eee; display: flex; justify-content: flex-end; gap: 10px;">
950
- <button onclick="closeBrainLoginModal()" class="btn btn-outline" id="cancelBtn">Cancel</button>
951
- <button onclick="authenticateBrain()" class="btn btn-primary" id="loginBtn">Connect</button>
952
- </div>
953
- </div>
954
- </div>
955
-
956
- <script src="{{ url_for('static', filename='brain.js') }}"></script>
957
- <script src="{{ url_for('static', filename='feature_engineering.js') }}"></script>
958
- <script src="{{ url_for('static', filename='usage_widget.js') }}"></script>
959
- </body>
960
- </html>