Huggingpedia / app.py
Tralalabs's picture
Update app.py
fa33323 verified
Raw
History Blame Contribute Delete
2.43 kB
import os
import gradio as gr
WIKI_DIR = "wiki"
def list_articles():
if not os.path.exists(WIKI_DIR):
return []
return sorted([
f[:-3]
for f in os.listdir(WIKI_DIR)
if f.endswith(".md")
])
def load_article(article_name):
if not article_name:
return "# Huggingpedia\n\nSelect an article."
path = os.path.join(WIKI_DIR, f"{article_name}.md")
if not os.path.exists(path):
return "# Article Not Found"
with open(path, "r", encoding="utf-8") as f:
return f.read()
def search_articles(query):
articles = list_articles()
if not query.strip():
return articles
query = query.lower()
results = []
for article in articles:
score = 0
if query in article.lower():
score += 100
path = os.path.join(WIKI_DIR, f"{article}.md")
try:
with open(path, "r", encoding="utf-8") as f:
content = f.read().lower()
if query in content:
score += 10
except Exception:
pass
if score > 0:
results.append((score, article))
results.sort(reverse=True)
return [article for _, article in results]
def select_first_article(results):
if not results:
return None, "# No results found"
article = results[0]
return article, load_article(article)
with gr.Blocks(title="Huggingpedia") as demo:
gr.Markdown("# ๐Ÿ“š Huggingpedia")
gr.Markdown("Search and browse encyclopedia articles")
search_box = gr.Textbox(
label="Search",
placeholder="Search articles..."
)
article_list = gr.Dropdown(
choices=list_articles(),
label="Articles"
)
article_content = gr.Markdown()
search_box.change(
fn=search_articles,
inputs=search_box,
outputs=article_list
)
article_list.change(
fn=load_article,
inputs=article_list,
outputs=article_content
)
search_box.submit(
fn=lambda q: select_first_article(search_articles(q)),
inputs=search_box,
outputs=[article_list, article_content]
)
if list_articles():
first = list_articles()[0]
demo.load(
fn=lambda: (first, load_article(first)),
outputs=[article_list, article_content]
)
if __name__ == "__main__":
demo.launch()