Spaces:
Sleeping
Sleeping
import streamlit as st | |
import os | |
import frontmatter | |
import json | |
# import pyperclip | |
def load_prompts(): | |
prompts = [] | |
prompt_dir = "prompts" | |
for filename in os.listdir(prompt_dir): | |
if filename.endswith(".md"): | |
with open(os.path.join(prompt_dir, filename), "r") as file: | |
prompt = frontmatter.load(file) | |
prompts.append({ | |
"id": prompt.get("id"), | |
"title": prompt.get("title"), | |
"author": prompt.get("author"), | |
"paper": prompt.get("paperlink"), | |
"date": prompt.get("date"), | |
"language": prompt.get("language"), | |
"task": prompt.get("task"), | |
"version": prompt.get("version"), | |
"addedby": prompt.get("addedby"), | |
"keywords": prompt.get("keywords"), | |
"content": prompt.content | |
}) | |
return prompts | |
def render_prompt_details(prompt): | |
st.markdown(f"# Card: {prompt['title']}") | |
st.write("---") | |
st.write(f"**Author:** {prompt['author']}") | |
st.write(f"**Paper:** {prompt['paper']}") | |
st.write(f"**Date:** {prompt['date']}") | |
st.write(f"**Language:** {prompt['language']}") | |
st.write(f"**Task:** {prompt['task']}") | |
st.write(f"**Keywords:** {prompt['keywords']}") | |
st.write(f"**Version:** {prompt['version']}") | |
st.write(f"_Added By: {prompt['addedby']}_") | |
st.write("---") | |
st.write(prompt["content"]) | |
def render_prompt_card(prompt): | |
card_style = """ | |
<style> | |
.card { | |
background-color: #f8f9fa; | |
border: 1px solid #d9d9d9; | |
border-radius: 5px; | |
padding: 15px; | |
margin-bottom: 10px; | |
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
} | |
.card-content { | |
display: flex; | |
flex-direction: column; | |
} | |
.button-style { | |
background-color: #FFD700; | |
border: none; | |
color: white; | |
text-align: center; | |
text-decoration: none; | |
display: inline-block; | |
font-size: 16px; | |
margin: 4px 2px; | |
cursor: pointer; | |
border-radius: 4px; | |
} | |
</style> | |
""" | |
st.markdown(card_style, unsafe_allow_html=True) | |
card_container = st.container() | |
with card_container: | |
with st.container(): | |
col1, col2 = st.columns([4, 1]) | |
with col1: | |
st.write(f"### **Card:** {prompt['title']}") | |
st.write(f"**Author:** {prompt['author']}") | |
st.write(f"**Paper:** {prompt['paper']}") | |
st.write(f"**Date:** {prompt['date']}") | |
st.write(f"**Prompt Language:** {prompt['language']}") | |
st.write(f"**Annotation Task:** {prompt['task']}") | |
st.write(f"**Keywords:** {prompt['keywords']}") | |
st.write(f"_Added by: {prompt['addedby']}_") | |
with col2: | |
if st.button("View details", key=f"view-details-{prompt['id']}"): | |
st.session_state.selected_prompt_id = prompt["id"] | |
st.experimental_rerun() | |
st.markdown("<style>.button-style {background-color: #FFD700;}</style>", unsafe_allow_html=True) | |
card_container.container().write("---") | |
def main(): | |
if "selected_prompt_id" not in st.session_state: | |
st.session_state.selected_prompt_id = None | |
st.title("Annotation PromptCards π·οΈ π π€") | |
st.write("Welcome to the Prompt Archive! Click on the 'View details' button on each prompt card to see more information about the annotation prompt. Check out our [website](https://flask-prompt-annotations.vercel.app). Happy searching π§π½βπ!") | |
st.write("---") | |
prompts = load_prompts() | |
language_list = list(set([prompt['language'] for prompt in prompts])) | |
task_list = list(set([prompt['task'] for prompt in prompts])) | |
st.sidebar.header("**Annotation PromptCards**") | |
st.sidebar.write("A collection of prompts for annotation tasks in NLP. This is a work in progress. Please contribute your prompts via GitHub [[Upload]](https://github.com/chkla/PromptCards) ππ½.") | |
# add a link to the GitHub repository | |
st.sidebar.write("---") | |
st.sidebar.write(f"**Total number of prompts:** {len(prompts)}") | |
st.sidebar.write("---") | |
st.sidebar.header("π§π½βπ Explore:") | |
search = st.sidebar.text_input("Search by title") | |
language_filter = st.sidebar.selectbox("Filter by Language", ["All"] + language_list) | |
task_filter = st.sidebar.selectbox("Filter by Task", ["All"] + task_list) | |
if st.sidebar.button("Back to list"): | |
st.session_state.selected_prompt_id = None | |
st.experimental_rerun() | |
if st.session_state.selected_prompt_id is None: | |
filtered_prompts = [ | |
prompt for prompt in prompts | |
if (search.lower() in prompt['title'].lower() or not search) | |
and (prompt['language'] == language_filter or language_filter == "All") | |
and (prompt['task'] == task_filter or task_filter == "All") | |
] | |
for prompt in filtered_prompts: | |
render_prompt_card(prompt) | |
else: | |
prompt = next((p for p in prompts if p["id"] == st.session_state.selected_prompt_id), None) | |
if prompt: | |
render_prompt_details(prompt) | |
st.sidebar.write("---") | |
st.sidebar.write("Made with β€οΈ and π€ by [chkla](klamm.ai).") | |
if __name__ == "__main__": | |
main() | |