Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import cohere | |
| import numpy as np | |
| import os | |
| # Initialize Cohere client using API key from environment variable | |
| co = cohere.Client(os.getenv('COHERE_API_KEY')) | |
| def calculate_relevancy(meta_title, h1_heading, first_paragraph, body, keywords, model_type): | |
| # Select the appropriate model based on the radio button selection | |
| model = 'embed-english-v3.0' if model_type == 'English' else 'embed-multilingual-v3.0' | |
| # Generate embeddings for each part | |
| response_meta_title = co.embed(texts=[meta_title], model=model, input_type="search_document") | |
| meta_title_embedding = response_meta_title.embeddings[0] | |
| response_h1_heading = co.embed(texts=[h1_heading], model=model, input_type="search_document") | |
| h1_heading_embedding = response_h1_heading.embeddings[0] | |
| response_first_paragraph = co.embed(texts=[first_paragraph], model=model, input_type="search_document") | |
| first_paragraph_embedding = response_first_paragraph.embeddings[0] | |
| response_body = co.embed(texts=[body], model=model, input_type="search_document") | |
| body_embedding = response_body.embeddings[0] | |
| # Generate embeddings for each keyword | |
| keyword_list = [kw.strip() for kw in keywords.split(",")] | |
| response_keywords = co.embed(texts=keyword_list, model=model, input_type="search_query") | |
| keyword_embeddings = response_keywords.embeddings | |
| # Calculate relevancy score (cosine similarity) for each part | |
| relevancy_scores = [] | |
| for kw, kw_embedding in zip(keyword_list, keyword_embeddings): | |
| scores = [ | |
| kw, | |
| np.dot(meta_title_embedding, kw_embedding) / (np.linalg.norm(meta_title_embedding) * np.linalg.norm(kw_embedding)), | |
| np.dot(h1_heading_embedding, kw_embedding) / (np.linalg.norm(h1_heading_embedding) * np.linalg.norm(kw_embedding)), | |
| np.dot(first_paragraph_embedding, kw_embedding) / (np.linalg.norm(first_paragraph_embedding) * np.linalg.norm(kw_embedding)), | |
| np.dot(body_embedding, kw_embedding) / (np.linalg.norm(body_embedding) * np.linalg.norm(kw_embedding)) | |
| ] | |
| relevancy_scores.append(scores) | |
| return relevancy_scores | |
| js_func = """ | |
| function refresh() { | |
| const url = new URL(window.location); | |
| if (url.searchParams.get('__theme') !== 'light') { | |
| url.searchParams.set('__theme', 'light'); | |
| window.location.href = url.href; | |
| } | |
| } | |
| """ | |
| # Create Gradio interface | |
| def gradio_interface(): | |
| with gr.Blocks(js=js_func) as demo: | |
| with gr.Row(): | |
| meta_title_input = gr.Textbox(label="Meta Title", placeholder="Enter Meta Title here") | |
| h1_heading_input = gr.Textbox(label="H1 Heading", placeholder="Enter H1 Heading here") | |
| first_paragraph_input = gr.Textbox(label="First Paragraph", placeholder="Enter First Paragraph here") | |
| body_input = gr.Textbox(label="Body", placeholder="Enter Body here", lines=5) | |
| keywords_input = gr.Textbox(label="Keywords", placeholder="Enter keywords separated by commas") | |
| model_type = gr.Radio(["English", "Multilingual"], label="Language Model", value="English") | |
| relevancy_button = gr.Button("Calculate Relevancy", variant="primary") | |
| relevancy_output = gr.Dataframe(headers=["Keyword", "Meta Title", "H1 Heading", "First Paragraph", "Body"]) | |
| relevancy_button.click(calculate_relevancy, | |
| inputs=[meta_title_input, h1_heading_input, first_paragraph_input, body_input, keywords_input, model_type], | |
| outputs=relevancy_output) | |
| return demo | |
| # Launch Gradio app | |
| if __name__ == "__main__": | |
| demo = gradio_interface() | |
| demo.launch() |