Spaces:
Paused
Paused
Dobin Yim
commited on
Commit
·
a39c45e
1
Parent(s):
d9f3f82
final AIE3
Browse files- .DS_Store +0 -0
- .chainlit/config.toml +118 -0
- .chainlit/translations/en-US.json +229 -0
- .env +2 -0
- README.md +9 -5
- Solution.md +62 -0
- final.py +1 -28
- process_docs.py +31 -0
- rubric.md +55 -0
.DS_Store
ADDED
Binary file (6.15 kB). View file
|
|
.chainlit/config.toml
ADDED
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[project]
|
2 |
+
# Whether to enable telemetry (default: true). No personal data is collected.
|
3 |
+
enable_telemetry = true
|
4 |
+
|
5 |
+
|
6 |
+
# List of environment variables to be provided by each user to use the app.
|
7 |
+
user_env = []
|
8 |
+
|
9 |
+
# Duration (in seconds) during which the session is saved when the connection is lost
|
10 |
+
session_timeout = 3600
|
11 |
+
|
12 |
+
# Enable third parties caching (e.g LangChain cache)
|
13 |
+
cache = false
|
14 |
+
|
15 |
+
# Authorized origins
|
16 |
+
allow_origins = ["*"]
|
17 |
+
|
18 |
+
# Follow symlink for asset mount (see https://github.com/Chainlit/chainlit/issues/317)
|
19 |
+
# follow_symlink = false
|
20 |
+
|
21 |
+
[features]
|
22 |
+
# Process and display HTML in messages. This can be a security risk (see https://stackoverflow.com/questions/19603097/why-is-it-dangerous-to-render-user-generated-html-or-javascript)
|
23 |
+
unsafe_allow_html = false
|
24 |
+
|
25 |
+
# Process and display mathematical expressions. This can clash with "$" characters in messages.
|
26 |
+
latex = false
|
27 |
+
|
28 |
+
# Automatically tag threads with the current chat profile (if a chat profile is used)
|
29 |
+
auto_tag_thread = true
|
30 |
+
|
31 |
+
# Authorize users to spontaneously upload files with messages
|
32 |
+
[features.spontaneous_file_upload]
|
33 |
+
enabled = true
|
34 |
+
accept = ["*/*"]
|
35 |
+
max_files = 20
|
36 |
+
max_size_mb = 500
|
37 |
+
|
38 |
+
[features.audio]
|
39 |
+
# Threshold for audio recording
|
40 |
+
min_decibels = -45
|
41 |
+
# Delay for the user to start speaking in MS
|
42 |
+
initial_silence_timeout = 3000
|
43 |
+
# Delay for the user to continue speaking in MS. If the user stops speaking for this duration, the recording will stop.
|
44 |
+
silence_timeout = 1500
|
45 |
+
# Above this duration (MS), the recording will forcefully stop.
|
46 |
+
max_duration = 15000
|
47 |
+
# Duration of the audio chunks in MS
|
48 |
+
chunk_duration = 1000
|
49 |
+
# Sample rate of the audio
|
50 |
+
sample_rate = 44100
|
51 |
+
|
52 |
+
[UI]
|
53 |
+
# Name of the assistant.
|
54 |
+
name = "Assistant"
|
55 |
+
|
56 |
+
# Description of the assistant. This is used for HTML tags.
|
57 |
+
# description = ""
|
58 |
+
|
59 |
+
# Large size content are by default collapsed for a cleaner ui
|
60 |
+
default_collapse_content = true
|
61 |
+
|
62 |
+
# Hide the chain of thought details from the user in the UI.
|
63 |
+
hide_cot = false
|
64 |
+
|
65 |
+
# Link to your github repo. This will add a github button in the UI's header.
|
66 |
+
# github = ""
|
67 |
+
|
68 |
+
# Specify a CSS file that can be used to customize the user interface.
|
69 |
+
# The CSS file can be served from the public directory or via an external link.
|
70 |
+
# custom_css = "/public/test.css"
|
71 |
+
|
72 |
+
# Specify a Javascript file that can be used to customize the user interface.
|
73 |
+
# The Javascript file can be served from the public directory.
|
74 |
+
# custom_js = "/public/test.js"
|
75 |
+
|
76 |
+
# Specify a custom font url.
|
77 |
+
# custom_font = "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap"
|
78 |
+
|
79 |
+
# Specify a custom meta image url.
|
80 |
+
# custom_meta_image_url = "https://chainlit-cloud.s3.eu-west-3.amazonaws.com/logo/chainlit_banner.png"
|
81 |
+
|
82 |
+
# Specify a custom build directory for the frontend.
|
83 |
+
# This can be used to customize the frontend code.
|
84 |
+
# Be careful: If this is a relative path, it should not start with a slash.
|
85 |
+
# custom_build = "./public/build"
|
86 |
+
|
87 |
+
[UI.theme]
|
88 |
+
default = "dark"
|
89 |
+
#layout = "wide"
|
90 |
+
#font_family = "Inter, sans-serif"
|
91 |
+
# Override default MUI light theme. (Check theme.ts)
|
92 |
+
[UI.theme.light]
|
93 |
+
#background = "#FAFAFA"
|
94 |
+
#paper = "#FFFFFF"
|
95 |
+
|
96 |
+
[UI.theme.light.primary]
|
97 |
+
#main = "#F80061"
|
98 |
+
#dark = "#980039"
|
99 |
+
#light = "#FFE7EB"
|
100 |
+
[UI.theme.light.text]
|
101 |
+
#primary = "#212121"
|
102 |
+
#secondary = "#616161"
|
103 |
+
|
104 |
+
# Override default MUI dark theme. (Check theme.ts)
|
105 |
+
[UI.theme.dark]
|
106 |
+
#background = "#FAFAFA"
|
107 |
+
#paper = "#FFFFFF"
|
108 |
+
|
109 |
+
[UI.theme.dark.primary]
|
110 |
+
#main = "#F80061"
|
111 |
+
#dark = "#980039"
|
112 |
+
#light = "#FFE7EB"
|
113 |
+
[UI.theme.dark.text]
|
114 |
+
#primary = "#EEEEEE"
|
115 |
+
#secondary = "#BDBDBD"
|
116 |
+
|
117 |
+
[meta]
|
118 |
+
generated_by = "1.1.302"
|
.chainlit/translations/en-US.json
ADDED
@@ -0,0 +1,229 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"components": {
|
3 |
+
"atoms": {
|
4 |
+
"buttons": {
|
5 |
+
"userButton": {
|
6 |
+
"menu": {
|
7 |
+
"settings": "Settings",
|
8 |
+
"settingsKey": "S",
|
9 |
+
"APIKeys": "API Keys",
|
10 |
+
"logout": "Logout"
|
11 |
+
}
|
12 |
+
}
|
13 |
+
}
|
14 |
+
},
|
15 |
+
"molecules": {
|
16 |
+
"newChatButton": {
|
17 |
+
"newChat": "New Chat"
|
18 |
+
},
|
19 |
+
"tasklist": {
|
20 |
+
"TaskList": {
|
21 |
+
"title": "\ud83d\uddd2\ufe0f Task List",
|
22 |
+
"loading": "Loading...",
|
23 |
+
"error": "An error occurred"
|
24 |
+
}
|
25 |
+
},
|
26 |
+
"attachments": {
|
27 |
+
"cancelUpload": "Cancel upload",
|
28 |
+
"removeAttachment": "Remove attachment"
|
29 |
+
},
|
30 |
+
"newChatDialog": {
|
31 |
+
"createNewChat": "Create new chat?",
|
32 |
+
"clearChat": "This will clear the current messages and start a new chat.",
|
33 |
+
"cancel": "Cancel",
|
34 |
+
"confirm": "Confirm"
|
35 |
+
},
|
36 |
+
"settingsModal": {
|
37 |
+
"settings": "Settings",
|
38 |
+
"expandMessages": "Expand Messages",
|
39 |
+
"hideChainOfThought": "Hide Chain of Thought",
|
40 |
+
"darkMode": "Dark Mode"
|
41 |
+
},
|
42 |
+
"detailsButton": {
|
43 |
+
"using": "Using",
|
44 |
+
"used": "Used"
|
45 |
+
},
|
46 |
+
"auth": {
|
47 |
+
"authLogin": {
|
48 |
+
"title": "Login to access the app.",
|
49 |
+
"form": {
|
50 |
+
"email": "Email address",
|
51 |
+
"password": "Password",
|
52 |
+
"noAccount": "Don't have an account?",
|
53 |
+
"alreadyHaveAccount": "Already have an account?",
|
54 |
+
"signup": "Sign Up",
|
55 |
+
"signin": "Sign In",
|
56 |
+
"or": "OR",
|
57 |
+
"continue": "Continue",
|
58 |
+
"forgotPassword": "Forgot password?",
|
59 |
+
"passwordMustContain": "Your password must contain:",
|
60 |
+
"emailRequired": "email is a required field",
|
61 |
+
"passwordRequired": "password is a required field"
|
62 |
+
},
|
63 |
+
"error": {
|
64 |
+
"default": "Unable to sign in.",
|
65 |
+
"signin": "Try signing in with a different account.",
|
66 |
+
"oauthsignin": "Try signing in with a different account.",
|
67 |
+
"redirect_uri_mismatch": "The redirect URI is not matching the oauth app configuration.",
|
68 |
+
"oauthcallbackerror": "Try signing in with a different account.",
|
69 |
+
"oauthcreateaccount": "Try signing in with a different account.",
|
70 |
+
"emailcreateaccount": "Try signing in with a different account.",
|
71 |
+
"callback": "Try signing in with a different account.",
|
72 |
+
"oauthaccountnotlinked": "To confirm your identity, sign in with the same account you used originally.",
|
73 |
+
"emailsignin": "The e-mail could not be sent.",
|
74 |
+
"emailverify": "Please verify your email, a new email has been sent.",
|
75 |
+
"credentialssignin": "Sign in failed. Check the details you provided are correct.",
|
76 |
+
"sessionrequired": "Please sign in to access this page."
|
77 |
+
}
|
78 |
+
},
|
79 |
+
"authVerifyEmail": {
|
80 |
+
"almostThere": "You're almost there! We've sent an email to ",
|
81 |
+
"verifyEmailLink": "Please click on the link in that email to complete your signup.",
|
82 |
+
"didNotReceive": "Can't find the email?",
|
83 |
+
"resendEmail": "Resend email",
|
84 |
+
"goBack": "Go Back",
|
85 |
+
"emailSent": "Email sent successfully.",
|
86 |
+
"verifyEmail": "Verify your email address"
|
87 |
+
},
|
88 |
+
"providerButton": {
|
89 |
+
"continue": "Continue with {{provider}}",
|
90 |
+
"signup": "Sign up with {{provider}}"
|
91 |
+
},
|
92 |
+
"authResetPassword": {
|
93 |
+
"newPasswordRequired": "New password is a required field",
|
94 |
+
"passwordsMustMatch": "Passwords must match",
|
95 |
+
"confirmPasswordRequired": "Confirm password is a required field",
|
96 |
+
"newPassword": "New password",
|
97 |
+
"confirmPassword": "Confirm password",
|
98 |
+
"resetPassword": "Reset Password"
|
99 |
+
},
|
100 |
+
"authForgotPassword": {
|
101 |
+
"email": "Email address",
|
102 |
+
"emailRequired": "email is a required field",
|
103 |
+
"emailSent": "Please check the email address {{email}} for instructions to reset your password.",
|
104 |
+
"enterEmail": "Enter your email address and we will send you instructions to reset your password.",
|
105 |
+
"resendEmail": "Resend email",
|
106 |
+
"continue": "Continue",
|
107 |
+
"goBack": "Go Back"
|
108 |
+
}
|
109 |
+
}
|
110 |
+
},
|
111 |
+
"organisms": {
|
112 |
+
"chat": {
|
113 |
+
"history": {
|
114 |
+
"index": {
|
115 |
+
"showHistory": "Show history",
|
116 |
+
"lastInputs": "Last Inputs",
|
117 |
+
"noInputs": "Such empty...",
|
118 |
+
"loading": "Loading..."
|
119 |
+
}
|
120 |
+
},
|
121 |
+
"inputBox": {
|
122 |
+
"input": {
|
123 |
+
"placeholder": "Type your message here..."
|
124 |
+
},
|
125 |
+
"speechButton": {
|
126 |
+
"start": "Start recording",
|
127 |
+
"stop": "Stop recording"
|
128 |
+
},
|
129 |
+
"SubmitButton": {
|
130 |
+
"sendMessage": "Send message",
|
131 |
+
"stopTask": "Stop Task"
|
132 |
+
},
|
133 |
+
"UploadButton": {
|
134 |
+
"attachFiles": "Attach files"
|
135 |
+
},
|
136 |
+
"waterMark": {
|
137 |
+
"text": "Built with"
|
138 |
+
}
|
139 |
+
},
|
140 |
+
"Messages": {
|
141 |
+
"index": {
|
142 |
+
"running": "Running",
|
143 |
+
"executedSuccessfully": "executed successfully",
|
144 |
+
"failed": "failed",
|
145 |
+
"feedbackUpdated": "Feedback updated",
|
146 |
+
"updating": "Updating"
|
147 |
+
}
|
148 |
+
},
|
149 |
+
"dropScreen": {
|
150 |
+
"dropYourFilesHere": "Drop your files here"
|
151 |
+
},
|
152 |
+
"index": {
|
153 |
+
"failedToUpload": "Failed to upload",
|
154 |
+
"cancelledUploadOf": "Cancelled upload of",
|
155 |
+
"couldNotReachServer": "Could not reach the server",
|
156 |
+
"continuingChat": "Continuing previous chat"
|
157 |
+
},
|
158 |
+
"settings": {
|
159 |
+
"settingsPanel": "Settings panel",
|
160 |
+
"reset": "Reset",
|
161 |
+
"cancel": "Cancel",
|
162 |
+
"confirm": "Confirm"
|
163 |
+
}
|
164 |
+
},
|
165 |
+
"threadHistory": {
|
166 |
+
"sidebar": {
|
167 |
+
"filters": {
|
168 |
+
"FeedbackSelect": {
|
169 |
+
"feedbackAll": "Feedback: All",
|
170 |
+
"feedbackPositive": "Feedback: Positive",
|
171 |
+
"feedbackNegative": "Feedback: Negative"
|
172 |
+
},
|
173 |
+
"SearchBar": {
|
174 |
+
"search": "Search"
|
175 |
+
}
|
176 |
+
},
|
177 |
+
"DeleteThreadButton": {
|
178 |
+
"confirmMessage": "This will delete the thread as well as it's messages and elements.",
|
179 |
+
"cancel": "Cancel",
|
180 |
+
"confirm": "Confirm",
|
181 |
+
"deletingChat": "Deleting chat",
|
182 |
+
"chatDeleted": "Chat deleted"
|
183 |
+
},
|
184 |
+
"index": {
|
185 |
+
"pastChats": "Past Chats"
|
186 |
+
},
|
187 |
+
"ThreadList": {
|
188 |
+
"empty": "Empty...",
|
189 |
+
"today": "Today",
|
190 |
+
"yesterday": "Yesterday",
|
191 |
+
"previous7days": "Previous 7 days",
|
192 |
+
"previous30days": "Previous 30 days"
|
193 |
+
},
|
194 |
+
"TriggerButton": {
|
195 |
+
"closeSidebar": "Close sidebar",
|
196 |
+
"openSidebar": "Open sidebar"
|
197 |
+
}
|
198 |
+
},
|
199 |
+
"Thread": {
|
200 |
+
"backToChat": "Go back to chat",
|
201 |
+
"chatCreatedOn": "This chat was created on"
|
202 |
+
}
|
203 |
+
},
|
204 |
+
"header": {
|
205 |
+
"chat": "Chat",
|
206 |
+
"readme": "Readme"
|
207 |
+
}
|
208 |
+
}
|
209 |
+
},
|
210 |
+
"hooks": {
|
211 |
+
"useLLMProviders": {
|
212 |
+
"failedToFetchProviders": "Failed to fetch providers:"
|
213 |
+
}
|
214 |
+
},
|
215 |
+
"pages": {
|
216 |
+
"Design": {},
|
217 |
+
"Env": {
|
218 |
+
"savedSuccessfully": "Saved successfully",
|
219 |
+
"requiredApiKeys": "Required API Keys",
|
220 |
+
"requiredApiKeysInfo": "To use this app, the following API keys are required. The keys are stored on your device's local storage."
|
221 |
+
},
|
222 |
+
"Page": {
|
223 |
+
"notPartOfProject": "You are not part of this project."
|
224 |
+
},
|
225 |
+
"ResumeButton": {
|
226 |
+
"resumeChat": "Resume Chat"
|
227 |
+
}
|
228 |
+
}
|
229 |
+
}
|
.env
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
OPENAI_API_KEY=
|
2 |
+
PYTHONPATH=.
|
README.md
CHANGED
@@ -1,11 +1,15 @@
|
|
1 |
---
|
2 |
-
title:
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
-
colorTo:
|
6 |
sdk: docker
|
7 |
pinned: false
|
8 |
license: mit
|
9 |
---
|
10 |
|
11 |
-
|
|
|
|
|
|
|
|
|
|
1 |
---
|
2 |
+
title: Aie3 Midterm
|
3 |
+
emoji: 🏆
|
4 |
+
colorFrom: indigo
|
5 |
+
colorTo: purple
|
6 |
sdk: docker
|
7 |
pinned: false
|
8 |
license: mit
|
9 |
---
|
10 |
|
11 |
+
# Final - GradeAssistant: Automating Assessment of Learning (AoL
|
12 |
+
- Simple RAG app using Chainlit, LangChain, and Openai
|
13 |
+
- There are some sample files, including rubric and sample homework Solution, also as PDF (Excel Review.pdf).
|
14 |
+
- For privacy reason, a zip file of student submissions are not included. Each student has a directory of submission files.
|
15 |
+
- The app handles Word or PDF as text document.
|
Solution.md
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### Questions and Answers
|
2 |
+
|
3 |
+
**Snapshot**
|
4 |
+
|
5 |
+
**Assignment**: 50 points
|
6 |
+
**Due**: Sunday, 11:59 PM ET
|
7 |
+
|
8 |
+
**Scenario**:
|
9 |
+
You have been hired as a Data Analyst for Abercrombie and Fitch's marketing department. You are tasked with evaluating sales changes over time for the fall, spring, and summer advertising campaigns using data from 2011-2017. You will use Excel features such as formulas, functions, graphs, and Pivot Tables.
|
10 |
+
|
11 |
+
**Instructions**:
|
12 |
+
1. Download the Excel file from the Assignment page and rename it as “AF-Sales-Your Name.xlsx”.
|
13 |
+
2. Complete the table by calculating Total Units Sold, Largest # of Units Sold, and Smallest # of Units Sold for Women’s Clothing, Women’s Shoes, Men’s Clothing, and Men’s Shoes. Use the example provided for Women’s Clothing sales metrics.
|
14 |
+
3. Calculate average sales for Men and Women product categories for each season and determine the trend. Fill in the cell ranges as specified.
|
15 |
+
4. Create a graph to compare sales revenue over time by creating a line graph for Spring sales revenues for the four product categories.
|
16 |
+
5. Use the VLOOKUP function to determine sales rank for Men’s and Women’s Average Sales.
|
17 |
+
6. Create a Pivot Table to determine seasonal sales performance.
|
18 |
+
|
19 |
+
**Questions and Answers:**
|
20 |
+
|
21 |
+
**Question #1**: Which product category performed best in terms of (a) total units sold, (b) largest # of units sold, and (c) smallest # of units sold?
|
22 |
+
|
23 |
+
**Answer**:
|
24 |
+
(a) Women's Clothing
|
25 |
+
(b) Men's Shoes
|
26 |
+
(c) Men's Clothing
|
27 |
+
|
28 |
+
**Question #2**: Which product category performed best in terms of gross profit?
|
29 |
+
|
30 |
+
**Answer**:
|
31 |
+
Women's Clothing
|
32 |
+
|
33 |
+
**Question #3**: Will the sales be better in 2018 than 2011?
|
34 |
+
|
35 |
+
**Answer**:
|
36 |
+
Based on the trends observed from 2011 to 2017, we predict that sales in 2018 will be worse than in 2011 due to the consistent decrease in sales performance over the years for all and each product category.
|
37 |
+
|
38 |
+
**Question #4**: Which product category is likely to perform best in 2018?
|
39 |
+
|
40 |
+
**Answer**:
|
41 |
+
According to time trend graph, the Women's Clothing is likely to perform best in 2018, given its sales trend over the previous years is at the top of the graph or highest line.
|
42 |
+
|
43 |
+
**Question #5**: Compare Men vs. Women’s Average Sales Rank. Which performed better?
|
44 |
+
|
45 |
+
**Answer**:
|
46 |
+
Using COUNTIF function, there were 20 seasons of Exceptional average sales rank for Women's products compared to 7 seasons of Exceptional average rank for Men's products. Therefore, Women's Average Sales Rank performed better than Men's.
|
47 |
+
|
48 |
+
**Question #6**: How many seasons did Men’s Average Sales Rank achieve “Exceptional”? Use the COUNTIF function to calculate this number.
|
49 |
+
|
50 |
+
**Answer**:
|
51 |
+
Men’s Average Sales Rank achieved “Exceptional” in 7 seasons.
|
52 |
+
|
53 |
+
**Question #7**: Which season had the highest sales in terms of (a) overall sales and (b) average sales?
|
54 |
+
|
55 |
+
**Answer**:
|
56 |
+
(a) Spring had the highest overall or total sales.
|
57 |
+
(b) Spring had the highest average sales.
|
58 |
+
|
59 |
+
**Question #8**: Which year had the highest seasonal variation in total sales? (Hint: you will need to remove Quarter from Columns and change the field value)
|
60 |
+
|
61 |
+
**Answer**:
|
62 |
+
Using Standard Deviation or Variance of Season Total per year, 2011 had the highest seasonal variation in total sales.
|
final.py
CHANGED
@@ -33,6 +33,7 @@ from promptsplitembed import create_prompt, split_documents, generate_embeddings
|
|
33 |
from extractjson import extract_json
|
34 |
from calcscore import compute_cosine_similarity, llm_similarity
|
35 |
from prompt_templates import ref_prompt, student_prompt, llm_score_prompt_template
|
|
|
36 |
|
37 |
# Load environment variables
|
38 |
load_dotenv()
|
@@ -42,34 +43,6 @@ openai.api_key = OPENAI_API_KEY
|
|
42 |
# Set up logging
|
43 |
logging.basicConfig(level=logging.INFO)
|
44 |
logger = logging.getLogger(__name__)
|
45 |
-
|
46 |
-
qa_chat_model = create_qamodel(model="gpt-4o-mini", temperature=0
|
47 |
-
)
|
48 |
-
def process_reference(reference_document, ref_prompt):
|
49 |
-
ref_prompt_template = create_prompt(ref_prompt)
|
50 |
-
ref_generation_chain = ref_prompt_template | qa_chat_model
|
51 |
-
result = ref_generation_chain.invoke({"source": reference_document})
|
52 |
-
ref_gen_tokens = result.usage_metadata["total_tokens"]
|
53 |
-
reference = dict(extract_json(result)[0])
|
54 |
-
|
55 |
-
answers = {}
|
56 |
-
for key in reference:
|
57 |
-
if key.startswith('Question'):
|
58 |
-
question_number = key.split('#')[1]
|
59 |
-
answer_key = f'Answer #{question_number}'
|
60 |
-
answers[key] = reference[answer_key]
|
61 |
-
print("Processed reference document")
|
62 |
-
return reference, answers, ref_gen_tokens
|
63 |
-
|
64 |
-
def process_student(documents, reference, student_prompt):
|
65 |
-
test_doc = documents[0]
|
66 |
-
student_prompt_template = create_prompt(student_prompt)
|
67 |
-
student_response_chain = student_prompt_template | qa_chat_model
|
68 |
-
student_result = student_response_chain.invoke({"source": reference.keys(),"student": test_doc })
|
69 |
-
student_gen_tokens = student_result.usage_metadata["total_tokens"]
|
70 |
-
student_result = dict(extract_json(student_result)[0])
|
71 |
-
print("Processed student document")
|
72 |
-
return student_result, student_gen_tokens
|
73 |
|
74 |
def compare_docs(answers, student_result):
|
75 |
split_reference_docs, ref_tokens = {}, 0
|
|
|
33 |
from extractjson import extract_json
|
34 |
from calcscore import compute_cosine_similarity, llm_similarity
|
35 |
from prompt_templates import ref_prompt, student_prompt, llm_score_prompt_template
|
36 |
+
from process_docs import process_reference, process_student
|
37 |
|
38 |
# Load environment variables
|
39 |
load_dotenv()
|
|
|
43 |
# Set up logging
|
44 |
logging.basicConfig(level=logging.INFO)
|
45 |
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
|
47 |
def compare_docs(answers, student_result):
|
48 |
split_reference_docs, ref_tokens = {}, 0
|
process_docs.py
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from promptsplitembed import create_qamodel, create_prompt
|
2 |
+
from extractjson import extract_json
|
3 |
+
from langchain_openai import ChatOpenAI
|
4 |
+
|
5 |
+
qa_chat_model = create_qamodel(model="gpt-4o-mini", temperature=0)
|
6 |
+
|
7 |
+
def process_reference(reference_document, ref_prompt):
|
8 |
+
ref_prompt_template = create_prompt(ref_prompt)
|
9 |
+
ref_generation_chain = ref_prompt_template | qa_chat_model
|
10 |
+
result = ref_generation_chain.invoke({"source": reference_document})
|
11 |
+
ref_gen_tokens = result.usage_metadata["total_tokens"]
|
12 |
+
reference = dict(extract_json(result)[0])
|
13 |
+
|
14 |
+
answers = {}
|
15 |
+
for key in reference:
|
16 |
+
if key.startswith('Question'):
|
17 |
+
question_number = key.split('#')[1]
|
18 |
+
answer_key = f'Answer #{question_number}'
|
19 |
+
answers[key] = reference[answer_key]
|
20 |
+
print("Processed reference document")
|
21 |
+
return reference, answers, ref_gen_tokens
|
22 |
+
|
23 |
+
def process_student(documents, reference, student_prompt):
|
24 |
+
test_doc = documents[0]
|
25 |
+
student_prompt_template = create_prompt(student_prompt)
|
26 |
+
student_response_chain = student_prompt_template | qa_chat_model
|
27 |
+
student_result = student_response_chain.invoke({"source": reference.keys(),"student": test_doc })
|
28 |
+
student_gen_tokens = student_result.usage_metadata["total_tokens"]
|
29 |
+
student_result = dict(extract_json(student_result)[0])
|
30 |
+
print("Processed student document")
|
31 |
+
return student_result, student_gen_tokens
|
rubric.md
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
### Rubric for Excel Review – Sales Data Analysis (General Evaluation Criteria)
|
3 |
+
|
4 |
+
|
5 |
+
|
6 |
+
#### Evaluation Criteria
|
7 |
+
|
8 |
+
Each criterion is rated on a scale from 1 (lowest) to 4 (highest).
|
9 |
+
|
10 |
+
|
11 |
+
1. **Data Analysis and Interpretation:**
|
12 |
+
|
13 |
+
- **1:** Minimal or incorrect answers, including numerical and qualitative answers, interpretation of data, failure to identify key trends or insights.
|
14 |
+
|
15 |
+
- **2:** Basic interpretation with some correct insights, but with notable errors or omissions.
|
16 |
+
|
17 |
+
- **3:** Good interpretation and analysis with accurate identification of most trends and patterns.
|
18 |
+
|
19 |
+
- **4:** Excellent and thorough analysis, with insightful and comprehensive identification of trends and key insights.
|
20 |
+
|
21 |
+
|
22 |
+
|
23 |
+
2. **Problem Solving:**
|
24 |
+
|
25 |
+
- **1:** Lacks a clear strategy, minimal or ineffective problem-solving approach.
|
26 |
+
|
27 |
+
- **2:** Basic problem-solving skills, some effective strategies but lacking in creativity or thoroughness.
|
28 |
+
|
29 |
+
- **3:** Good problem-solving ability, demonstrates effective and strategic approach.
|
30 |
+
|
31 |
+
- **4:** Excellent problem-solving skills, highly creative and strategic, achieving outstanding analytical goals.
|
32 |
+
|
33 |
+
|
34 |
+
|
35 |
+
3. **Critical Thinking:**
|
36 |
+
|
37 |
+
- **1:** Minimal critical engagement, accepting data without questioning or exploration.
|
38 |
+
|
39 |
+
- **2:** Some evidence of critical thinking, but surface-level exploration and incomplete reasoning.
|
40 |
+
|
41 |
+
- **3:** Good critical thinking, with comprehensive exploration and well-reasoned conclusions.
|
42 |
+
|
43 |
+
- **4:** Excellent critical thinking skills, deeply questioning and rigorously evaluating data before forming conclusions.
|
44 |
+
|
45 |
+
|
46 |
+
|
47 |
+
4. **Written Communication:**
|
48 |
+
|
49 |
+
- **1:** Poorly structured, unclear, and ineffective communication of ideas.
|
50 |
+
|
51 |
+
- **2:** Basic communication, some clarity and structure but with errors or lack of coherence.
|
52 |
+
|
53 |
+
- **3:** Good communication, clear and well-structured expression of ideas, minor imperfections.
|
54 |
+
|
55 |
+
- **4:** Excellent written communication, clear, coherent, and compelling expression of ideas, integrating various writing styles and media effectively.
|