kurita-api-test / app.py
matsuap's picture
Add random number generation feature in app.py and update UI with accordions for better organization. Remove unnecessary dependencies from requirements.txt.
cee7335
import gradio as gr
import requests
import os
from dotenv import load_dotenv
import numpy as np
load_dotenv()
def get_random_number(min=1, max=100):
"""
指定した範囲(min以上max未満)でランダムな整数を返します。
Args:
min (int): 乱数の最小値(デフォルトは1)
max (int): 乱数の最大値(デフォルトは100、maxは含まれません)
Returns:
int: 生成されたランダムな整数
"""
return np.random.randint(min, max)
def brave_search(query):
"""
Brave Search APIを使ってウェブ検索を行うMCPツール関数です。
Args:
query (str): 検索クエリ
Returns:
str: 検索結果のタイトル、URL、説明文をまとめた文字列。
エラー時はエラーメッセージを返します。
MCP Tool:
name: brave_search
description: Brave Search APIを利用してウェブ検索を行い、上位5件の結果を返します。
parameters:
- name: query
type: string
description: 検索したいキーワードやフレーズ
returns: 検索結果のリストまたはエラーメッセージ
"""
api_key = os.getenv("BRAVE_API_KEY")
if not api_key:
return "Brave APIキーが環境変数に設定されていません。"
url = "https://api.search.brave.com/res/v1/web/search"
headers = {
"Accept": "application/json",
"X-Subscription-Token": api_key
}
params = {
"q": query,
"count": 5
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
results = response.json().get("web", {}).get("results", [])
if not results:
return "検索結果が見つかりませんでした。"
output = ""
for r in results:
output += f"【{r.get('title','No Title')}】\n{r.get('url','')}\n{r.get('description','')}\n\n"
return output
else:
return f"エラーが発生しました: {response.status_code}"
with gr.Blocks() as demo:
gr.Markdown("# My APIs")
with gr.Accordion("Brave検索", open=True):
query = gr.Textbox(label="検索クエリ")
output = gr.Textbox(label="検索結果", lines=10)
search_btn = gr.Button("検索", variant="primary")
search_btn.click(fn=brave_search, inputs=[query], outputs=output)
with gr.Accordion("ランダム数生成", open=True):
min_value = gr.Number(label="最小値", value=1)
max_value = gr.Number(label="最大値", value=100)
random_number = gr.Number(label="ランダム数")
generate_btn = gr.Button("生成", variant="primary")
generate_btn.click(fn=get_random_number, inputs=[min_value, max_value], outputs=random_number)
if __name__ == "__main__":
demo.launch(mcp_server=True)