Spaces:
Sleeping
Sleeping
Add initial application files including Gradio interface, random number generator, and Brave Search API integration. Also, create .gitignore and requirements.txt for environment management.
Browse files- .gitignore +3 -0
- README.md +4 -4
- app.py +83 -0
- requirements.txt +2 -0
.gitignore
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
.venv/
|
2 |
+
*.un~
|
3 |
+
.env
|
README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
---
|
2 |
-
title:
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
-
colorTo:
|
6 |
sdk: gradio
|
7 |
sdk_version: 5.38.0
|
8 |
app_file: app.py
|
|
|
1 |
---
|
2 |
+
title: Kurita Api Test
|
3 |
+
emoji: 🚀
|
4 |
+
colorFrom: pink
|
5 |
+
colorTo: purple
|
6 |
sdk: gradio
|
7 |
sdk_version: 5.38.0
|
8 |
app_file: app.py
|
app.py
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import requests
|
3 |
+
import os
|
4 |
+
from dotenv import load_dotenv
|
5 |
+
import numpy as np
|
6 |
+
|
7 |
+
load_dotenv()
|
8 |
+
|
9 |
+
def get_random_number(min=1, max=100):
|
10 |
+
"""
|
11 |
+
指定した範囲(min以上max未満)でランダムな整数を返します。
|
12 |
+
|
13 |
+
Args:
|
14 |
+
min (int): 乱数の最小値(デフォルトは1)
|
15 |
+
max (int): 乱数の最大値(デフォルトは100、maxは含まれません)
|
16 |
+
|
17 |
+
Returns:
|
18 |
+
int: 生成されたランダムな整数
|
19 |
+
"""
|
20 |
+
return np.random.randint(min, max)
|
21 |
+
|
22 |
+
def brave_search(query):
|
23 |
+
"""
|
24 |
+
Brave Search APIを使ってウェブ検索を行うMCPツール関数です。
|
25 |
+
|
26 |
+
Args:
|
27 |
+
query (str): 検索クエリ
|
28 |
+
|
29 |
+
Returns:
|
30 |
+
str: 検索結果のタイトル、URL、説明文をまとめた文字列。
|
31 |
+
エラー時はエラーメッセージを返します。
|
32 |
+
|
33 |
+
MCP Tool:
|
34 |
+
name: brave_search
|
35 |
+
description: Brave Search APIを利用してウェブ検索を行い、上位5件の結果を返します。
|
36 |
+
parameters:
|
37 |
+
- name: query
|
38 |
+
type: string
|
39 |
+
description: 検索したいキーワードやフレーズ
|
40 |
+
returns: 検索結果のリストまたはエラーメッセージ
|
41 |
+
"""
|
42 |
+
api_key = os.getenv("BRAVE_API_KEY")
|
43 |
+
if not api_key:
|
44 |
+
return "Brave APIキーが環境変数に設定されていません。"
|
45 |
+
url = "https://api.search.brave.com/res/v1/web/search"
|
46 |
+
headers = {
|
47 |
+
"Accept": "application/json",
|
48 |
+
"X-Subscription-Token": api_key
|
49 |
+
}
|
50 |
+
params = {
|
51 |
+
"q": query,
|
52 |
+
"count": 5
|
53 |
+
}
|
54 |
+
response = requests.get(url, headers=headers, params=params)
|
55 |
+
if response.status_code == 200:
|
56 |
+
results = response.json().get("web", {}).get("results", [])
|
57 |
+
if not results:
|
58 |
+
return "検索結果が見つかりませんでした。"
|
59 |
+
output = ""
|
60 |
+
for r in results:
|
61 |
+
output += f"【{r.get('title','No Title')}】\n{r.get('url','')}\n{r.get('description','')}\n\n"
|
62 |
+
return output
|
63 |
+
else:
|
64 |
+
return f"エラーが発生しました: {response.status_code}"
|
65 |
+
|
66 |
+
with gr.Blocks() as demo:
|
67 |
+
gr.Markdown("# My APIs")
|
68 |
+
#gr.Markdown("# マイアプリ")
|
69 |
+
with gr.Accordion("Brave検索", open=True):
|
70 |
+
query = gr.Textbox(label="検索クエリ")
|
71 |
+
output = gr.Textbox(label="検索結果", lines=10)
|
72 |
+
search_btn = gr.Button("検索", variant="primary")
|
73 |
+
search_btn.click(fn=brave_search, inputs=[query], outputs=output)
|
74 |
+
|
75 |
+
with gr.Accordion("ランダム数生成", open=True):
|
76 |
+
min_value = gr.Number(label="最小値", value=1)
|
77 |
+
max_value = gr.Number(label="最大値", value=100)
|
78 |
+
random_number = gr.Number(label="ランダム数")
|
79 |
+
generate_btn = gr.Button("生成", variant="primary")
|
80 |
+
generate_btn.click(fn=get_random_number, inputs=[min_value, max_value], outputs=random_number)
|
81 |
+
|
82 |
+
if __name__ == "__main__":
|
83 |
+
demo.launch(mcp_server=True)
|
requirements.txt
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
gradio[mcp]
|
2 |
+
numpy
|