Spaces:
Runtime error
Runtime error

Added tool to find title of article being refered to by query with vector search of content.
2e66273
verified
'''Main script to run gradio interface and MCP server.''' | |
import logging | |
from pathlib import Path | |
from logging.handlers import RotatingFileHandler | |
import gradio as gr | |
import assets.text as text | |
import functions.tools as tool_funcs | |
import functions.gradio_functions as gradio_funcs | |
# Call the modal container so it spins up before the rest of | |
# the app starts | |
gradio_funcs.call_modal() | |
# Set-up logging | |
# Make sure log directory exists | |
Path('logs').mkdir(parents=True, exist_ok=True) | |
# Clear old logs if present | |
gradio_funcs.delete_old_logs('logs', 'rss_server') | |
# Set up the root logger so we catch logs from everything | |
logging.basicConfig( | |
handlers=[RotatingFileHandler( | |
'logs/rss_server.log', | |
maxBytes=100000, | |
backupCount=10, | |
mode='w' | |
)], | |
level=logging.INFO, | |
format='%(levelname)s - %(name)s - %(message)s' | |
) | |
# Get a logger | |
logger = logging.getLogger(__name__) | |
with gr.Blocks() as demo: | |
# Page text | |
gr.HTML(text.TITLE) | |
gr.Markdown(text.DESCRIPTION) | |
# Log output | |
with gr.Row(): | |
dialog_output = gr.Textbox(label='Server logs', lines=7, max_lines=5) | |
timer = gr.Timer(0.5, active=True) | |
timer.tick( # pylint: disable=no-member | |
lambda: gradio_funcs.update_log(), # pylint: disable=unnecessary-lambda | |
outputs=dialog_output, | |
show_api=False | |
) | |
# Get feed tool | |
gr.Markdown('### 1. `get_feed()`') | |
website_url = gr.Textbox('hackernews.com', label='Website') | |
feed_output = gr.Textbox(label='RSS entries', lines=7, max_lines=7) | |
with gr.Row(): | |
website_submit_button = gr.Button('Submit website') | |
website_clear_button = gr.ClearButton(components=[website_url, feed_output]) | |
website_submit_button.click( # pylint: disable=no-member | |
fn=tool_funcs.get_feed, | |
inputs=website_url, | |
outputs=feed_output, | |
api_name='Get RSS feed content' | |
) | |
# Vector search tool | |
gr.Markdown('### 2. `context_search()`') | |
context_search_query = gr.Textbox( | |
'Does apple offer parental controls?', | |
label='Context search query' | |
) | |
context_search_output = gr.Textbox( | |
label='Context search results', | |
lines=7, | |
max_lines=7 | |
) | |
with gr.Row(): | |
context_search_submit_button = gr.Button('Submit query') | |
context_search_clear_button = gr.ClearButton( | |
components=[context_search_query, context_search_output] | |
) | |
context_search_submit_button.click( # pylint: disable=no-member | |
fn=tool_funcs.context_search, | |
inputs=context_search_query, | |
outputs=context_search_output, | |
api_name='Context vector search' | |
) | |
# Find article tool | |
gr.Markdown('### 3. `find_article()`') | |
article_search_query = gr.Textbox( | |
'Does apple offer parental controls?', | |
label='Article search query' | |
) | |
article_search_output = gr.Textbox( | |
label='Article search results', | |
lines=7, | |
max_lines=7 | |
) | |
with gr.Row(): | |
article_search_submit_button = gr.Button('Submit query') | |
article_search_clear_button = gr.ClearButton( | |
components=[article_search_query, article_search_output] | |
) | |
article_search_submit_button.click( # pylint: disable=no-member | |
fn=tool_funcs.find_article, | |
inputs=article_search_query, | |
outputs=article_search_output, | |
api_name='Article vector search' | |
) | |
if __name__ == '__main__': | |
demo.launch(mcp_server=True) | |