Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| from openai import OpenAI | |
| import os | |
| import json | |
| import pypdf | |
| import subprocess | |
| TOKEN=os.getenv('HF_TOKEN') | |
| subprocess.run(["huggingface-cli", "login", "--token", TOKEN, "--add-to-git-credential"]) | |
| OPENAI_API_KEY = os.getenv("OPENAI_API") | |
| from langchain_openai import ChatOpenAI | |
| import os | |
| from langchain.prompts import PromptTemplate | |
| from langchain.prompts.few_shot import FewShotPromptTemplate | |
| from langchain.prompts.prompt import PromptTemplate | |
| import re | |
| client = OpenAI(api_key=OPENAI_API_KEY) #INSERT KEY INSODE HE QUOTES IN THE BRACKET | |
| from docx import Document | |
| from langchain.schema.runnable import RunnableSequence | |
| from langchain.schema.output_parser import StrOutputParser | |
| from langchain.prompts import ChatPromptTemplate | |
| import torch | |
| from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline | |
| from langchain.llms import HuggingFacePipeline | |
| import os | |
| import pandas as pd | |
| def barem_score(file_path, json_name): | |
| # 1. Đọc file | |
| df = pd.read_excel(file_path, sheet_name="Trang tính1") | |
| df_data = df.iloc[2:, [1, 2, 3]].copy() | |
| # 2. Lấy từ dòng thứ 3 trở đi (index = 2 trong pandas) | |
| df_data.columns = ['Tiêu_chí_chính', 'Tiêu_chí_con', 'Nhan_xet'] | |
| # 4. Điền các tiêu chí chính nếu bị merge (NaN) | |
| df_data['Tiêu_chí_chính'] = df_data['Tiêu_chí_chính'].fillna(method='ffill') | |
| # 5. Loại bỏ các dòng trống (không có tiêu chí con) | |
| df_metadata = df_data.dropna(subset=['Tiêu_chí_con'], how='all') | |
| df_metadata['Nhan_xet'] = df_metadata['Nhan_xet'].fillna(method='ffill') | |
| # 6. Đưa cột index ra đầu bảng | |
| df_metadata = df_metadata[['Tiêu_chí_chính', 'Tiêu_chí_con', 'Nhan_xet']] | |
| # 7. Xuất ra xem thử | |
| df_metadata.to_json(f"{json_name}.json") | |
| capy_barem = barem_score("data/[ MARWUY - SƯ TỔ MKT] - Feedback kết quả team CAPYRUBY.xlsx", "capy") | |
| mqm_barem = barem_score("data/[MARWUY - SƯ TỔ MKT] - Feedback kết quả Mèo Quy Mả.xlsx", "mqm") | |
| ta_barem = barem_score("data/_[MARWUY - SƯ TỔ MKT] - Feedback kết quả T&A.xlsx", "ta") | |
| import json | |
| from pypdf import PdfReader | |
| with open('capy.json', 'r', encoding='utf-8') as f: | |
| capy_barem = str(json.load(f)) | |
| capy_barem = capy_barem.replace("{", '') | |
| capy_barem = capy_barem.replace("}", '') | |
| with open('mqm.json', 'r', encoding='utf-8') as f: | |
| mqm_barem = str(json.load(f)) | |
| mqm_barem = mqm_barem.replace("{", '') | |
| mqm_barem = mqm_barem.replace("}", '') | |
| with open('ta.json', 'r', encoding='utf-8') as f: | |
| ta_barem = str(json.load(f)) | |
| ta_barem = ta_barem.replace("{", '') | |
| ta_barem = ta_barem.replace("}", '') | |
| def read_pdf(pdf_doc): | |
| pdf = PdfReader(pdf_doc) | |
| raw_text = '' | |
| for index,page in enumerate(pdf.pages): | |
| raw_text += page.extract_text() | |
| return raw_text | |
| file_path = "data/Mèo Quy Mã + Bong Bóng đẹp trai quá đê_official - Hân Trịnh.pdf" | |
| mqm_proposal = read_pdf(file_path) | |
| file_path = "data/T&A + Bong Bóng đẹp trai quá đê (1) - Thinh Quach.pdf" | |
| ta_proposal = read_pdf(file_path) | |
| file_path = "data/CAPYRUBY + Bong Bóng đẹp trai quá đê - Lê Ngọc.pdf" | |
| capy_proposal = read_pdf(file_path) | |
| # file_path = "data/Mầm Non Bong Bóng đẹp trai quá đê - Trâm Đỗ.pdf" | |
| # input = read_pdf(file_path) | |
| # Function to grade the essay using GPT-4 | |
| def grade_essay(input): | |
| # Sample prompt for grading using GPT-4 | |
| template = f""" | |
| Bạn là một giám khảo chấm và đánh giá proposal marketing và kinh doanh dự trên barem điểm. Hãy đưa ra những phán xét gay gắt và dài. | |
| Chấm bài theo thang điểm: | |
| 1. Research: 25 | |
| 2. Xác định rõ vấn đề, mục tiêu và vai trò nhãn hàng trong chiến dịch: 20 | |
| 3. Phân tích đối tượng truyền thông: 30 | |
| 4. Đề xuất chiến lược tiếp cận: 10 | |
| 5. Ý tưởng lớn: 10 | |
| Tổng: 110 | |
| Trả kết quả theo đúng format JSON bằng tiếng Việt, không thêm giải thích ngoài JSON: | |
| "Research": "score": <0-25>, "comment": "1. Market: <nhận xét chi tiết>, 2. brand and competitors: <nhận xét chi tiết>", | |
| "Xác định rõ vấn đề, mục tiêu và vai trò nhãn hàng trong chiến dịch": "score": <0-20>, "comment": "1. Xác định vấn đề truyền thông: <nhận xét chi tiết>, 2. Xác định rõ mục tiêu của chiến dịch: <nhận xét chi tiết>, 3.Nhìn nhận đúng vai trò của Brand trong chiến dịch: <nhận xét chi tiết>", | |
| "Phân tích đối tượng truyền thông": "score": <0-30>, "comment": "1. Phân tích đối tượng mục tiêu cụ thể, đầy đủ và phù hợp với mục đích truyền thông: <nhận xét chi tiết>, 2.Insight liên quan chặt chẽ và có tính khả thi cao với thương hiệu: <nhận xét chi tiết>, 3. Insight có tính độc đáo, mới mẻ, có khả năng truyền tải tới đối tượng mục tiêu: <nhận xét chi tiết>", | |
| "Đề xuất chiến lược tiếp cận": "score": <0-10>, "comment": "1. Mức độ liên kết chặt chẽ giữa chiến lược mới với các phân tích trước đó: <nhận xét chi tiết>, 2. Mức độ phù hợp của chiến lược đối với Brand và đối tượng mục tiêu: <nhận xét chi tiết>, 3. Mức độ đan xen yếu tố Brand role vào chiến lược tiếp cận: <nhận xét chi tiết>", | |
| "Ý tưởng lớn": "score": <0-10>, "comment": "<tóm tắt điểm mạnh và điểm yếu>" | |
| "Tổng điểm": <0-110> | |
| """ | |
| examples = [ | |
| { | |
| "bài làm": f"{capy_proposal}", | |
| "nhận xét": f"{capy_barem}" | |
| }, | |
| { | |
| "bài làm": f"{mqm_proposal}", | |
| "nhận xét": f"{mqm_barem}" | |
| }, | |
| { | |
| "bài làm": f"{ta_proposal}", | |
| "nhận xét": f"{ta_barem}" | |
| } | |
| ] | |
| example_prompt = PromptTemplate(input_variables=["bài làm", "nhận xét"], template="{bài làm}\n{nhận xét}") | |
| model = 'gpt' | |
| if model == 'gpt': | |
| template = template + f"""Hãy đánh giá bài sau: | |
| {input}</s> | |
| <|assistant|>""" | |
| elif model == 'vilm': | |
| template = """<|im_start|>system | |
| """ + template + f"""<|im_end|> | |
| <|im_start|>user | |
| Hãy đánh giá bài sau: {input} | |
| <|im_end|> | |
| <|im_start|>assistant""" | |
| prompt = FewShotPromptTemplate( | |
| examples=examples, | |
| example_prompt=example_prompt, | |
| suffix=template, | |
| input_variables=["input"] | |
| ) | |
| llm = ChatOpenAI( | |
| model="gpt-4o-mini", | |
| api_key=os.getenv("OPENAI_API_KEY"), | |
| temperature=0.6 | |
| ) | |
| prompt = PromptTemplate(input_variables =['input'], template = template) | |
| # prompt = prompt.format(input=input) | |
| chain = RunnableSequence(prompt| llm) | |
| ans = chain.invoke({'input': input}) | |
| feedback = re.findall("```\w{4}(.*)```", str(ans))[0] | |
| return feedback | |
| def main(): | |
| st.title("Marwuy Proposal feedback") | |
| # State to store results | |
| if 'results' not in st.session_state: | |
| st.session_state.results = [] | |
| # File uploader for new essays to be graded (DOCX) | |
| pdf_file = st.file_uploader("Upload proposal to be graded", type=["pdf"], accept_multiple_files=False) | |
| new_file = read_pdf(pdf_file) | |
| # Grading button | |
| if st.button("Grade Proposal"): | |
| if new_file: | |
| result = grade_essay(input = new_file) | |
| # Store results in session state | |
| st.session_state.results.append({ | |
| 'Essay File': new_file.name, | |
| 'Feedback': result, | |
| }) | |
| # Display the grading feedback | |
| st.write("Feedback:") | |
| st.write(result) | |
| st.success("Grading completed for uploaded proposal.") | |
| else: | |
| st.error("Please upload a proposal in pdf") | |
| if __name__ == "__main__": | |
| main() |