Yoon-gu Hwang
commited on
Commit
·
1314c33
1
Parent(s):
da2de7a
Copy from https://huggingface.co/learn/mcp-course/en/unit2/gradio-server
Browse files- app.py +24 -15
- pyproject.toml +1 -0
- uv.lock +64 -1
app.py
CHANGED
@@ -1,28 +1,37 @@
|
|
|
|
1 |
import gradio as gr
|
|
|
2 |
|
3 |
-
def
|
4 |
"""
|
5 |
-
|
6 |
|
7 |
Args:
|
8 |
-
|
9 |
-
letter (str): The letter to search for
|
10 |
|
11 |
Returns:
|
12 |
-
str: A
|
13 |
"""
|
14 |
-
|
15 |
-
|
16 |
-
count = word.count(letter)
|
17 |
-
return count
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
demo = gr.Interface(
|
20 |
-
fn=
|
21 |
-
inputs=
|
22 |
-
outputs=
|
23 |
-
title="
|
24 |
-
description="
|
25 |
)
|
26 |
|
|
|
27 |
if __name__ == "__main__":
|
28 |
-
demo.launch(mcp_server=True)
|
|
|
1 |
+
import json
|
2 |
import gradio as gr
|
3 |
+
from textblob import TextBlob
|
4 |
|
5 |
+
def sentiment_analysis(text: str) -> str:
|
6 |
"""
|
7 |
+
Analyze the sentiment of the given text.
|
8 |
|
9 |
Args:
|
10 |
+
text (str): The text to analyze
|
|
|
11 |
|
12 |
Returns:
|
13 |
+
str: A JSON string containing polarity, subjectivity, and assessment
|
14 |
"""
|
15 |
+
blob = TextBlob(text)
|
16 |
+
sentiment = blob.sentiment
|
|
|
|
|
17 |
|
18 |
+
result = {
|
19 |
+
"polarity": round(sentiment.polarity, 2), # -1 (negative) to 1 (positive)
|
20 |
+
"subjectivity": round(sentiment.subjectivity, 2), # 0 (objective) to 1 (subjective)
|
21 |
+
"assessment": "positive" if sentiment.polarity > 0 else "negative" if sentiment.polarity < 0 else "neutral"
|
22 |
+
}
|
23 |
+
|
24 |
+
return json.dumps(result)
|
25 |
+
|
26 |
+
# Create the Gradio interface
|
27 |
demo = gr.Interface(
|
28 |
+
fn=sentiment_analysis,
|
29 |
+
inputs=gr.Textbox(placeholder="Enter text to analyze..."),
|
30 |
+
outputs=gr.Textbox(), # Changed from gr.JSON() to gr.Textbox()
|
31 |
+
title="Text Sentiment Analysis",
|
32 |
+
description="Analyze the sentiment of text using TextBlob"
|
33 |
)
|
34 |
|
35 |
+
# Launch the interface and MCP server
|
36 |
if __name__ == "__main__":
|
37 |
+
demo.launch(mcp_server=True, share=True)
|
pyproject.toml
CHANGED
@@ -6,4 +6,5 @@ readme = "README.md"
|
|
6 |
requires-python = ">=3.13"
|
7 |
dependencies = [
|
8 |
"gradio[mcp]==5.37",
|
|
|
9 |
]
|
|
|
6 |
requires-python = ">=3.13"
|
7 |
dependencies = [
|
8 |
"gradio[mcp]==5.37",
|
9 |
+
"textblob>=0.19.0",
|
10 |
]
|
uv.lock
CHANGED
@@ -369,6 +369,15 @@ wheels = [
|
|
369 |
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
|
370 |
]
|
371 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
372 |
[[package]]
|
373 |
name = "jsonschema"
|
374 |
version = "4.25.0"
|
@@ -463,10 +472,14 @@ version = "0.1.0"
|
|
463 |
source = { virtual = "." }
|
464 |
dependencies = [
|
465 |
{ name = "gradio", extra = ["mcp"] },
|
|
|
466 |
]
|
467 |
|
468 |
[package.metadata]
|
469 |
-
requires-dist = [
|
|
|
|
|
|
|
470 |
|
471 |
[[package]]
|
472 |
name = "mdurl"
|
@@ -477,6 +490,21 @@ wheels = [
|
|
477 |
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
478 |
]
|
479 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
480 |
[[package]]
|
481 |
name = "numpy"
|
482 |
version = "2.3.1"
|
@@ -765,6 +793,29 @@ wheels = [
|
|
765 |
{ url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" },
|
766 |
]
|
767 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
768 |
[[package]]
|
769 |
name = "requests"
|
770 |
version = "2.32.4"
|
@@ -952,6 +1003,18 @@ wheels = [
|
|
952 |
{ url = "https://files.pythonhosted.org/packages/f7/1f/b876b1f83aef204198a42dc101613fefccb32258e5428b5f9259677864b4/starlette-0.47.2-py3-none-any.whl", hash = "sha256:c5847e96134e5c5371ee9fac6fdf1a67336d5815e09eb2a01fdb57a351ef915b", size = 72984, upload-time = "2025-07-20T17:31:56.738Z" },
|
953 |
]
|
954 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
955 |
[[package]]
|
956 |
name = "tomlkit"
|
957 |
version = "0.13.3"
|
|
|
369 |
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
|
370 |
]
|
371 |
|
372 |
+
[[package]]
|
373 |
+
name = "joblib"
|
374 |
+
version = "1.5.1"
|
375 |
+
source = { registry = "https://pypi.org/simple" }
|
376 |
+
sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475, upload-time = "2025-05-23T12:04:37.097Z" }
|
377 |
+
wheels = [
|
378 |
+
{ url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746, upload-time = "2025-05-23T12:04:35.124Z" },
|
379 |
+
]
|
380 |
+
|
381 |
[[package]]
|
382 |
name = "jsonschema"
|
383 |
version = "4.25.0"
|
|
|
472 |
source = { virtual = "." }
|
473 |
dependencies = [
|
474 |
{ name = "gradio", extra = ["mcp"] },
|
475 |
+
{ name = "textblob" },
|
476 |
]
|
477 |
|
478 |
[package.metadata]
|
479 |
+
requires-dist = [
|
480 |
+
{ name = "gradio", extras = ["mcp"], specifier = "==5.37" },
|
481 |
+
{ name = "textblob", specifier = ">=0.19.0" },
|
482 |
+
]
|
483 |
|
484 |
[[package]]
|
485 |
name = "mdurl"
|
|
|
490 |
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
491 |
]
|
492 |
|
493 |
+
[[package]]
|
494 |
+
name = "nltk"
|
495 |
+
version = "3.9.1"
|
496 |
+
source = { registry = "https://pypi.org/simple" }
|
497 |
+
dependencies = [
|
498 |
+
{ name = "click" },
|
499 |
+
{ name = "joblib" },
|
500 |
+
{ name = "regex" },
|
501 |
+
{ name = "tqdm" },
|
502 |
+
]
|
503 |
+
sdist = { url = "https://files.pythonhosted.org/packages/3c/87/db8be88ad32c2d042420b6fd9ffd4a149f9a0d7f0e86b3f543be2eeeedd2/nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868", size = 2904691, upload-time = "2024-08-18T19:48:37.769Z" }
|
504 |
+
wheels = [
|
505 |
+
{ url = "https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1", size = 1505442, upload-time = "2024-08-18T19:48:21.909Z" },
|
506 |
+
]
|
507 |
+
|
508 |
[[package]]
|
509 |
name = "numpy"
|
510 |
version = "2.3.1"
|
|
|
793 |
{ url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" },
|
794 |
]
|
795 |
|
796 |
+
[[package]]
|
797 |
+
name = "regex"
|
798 |
+
version = "2024.11.6"
|
799 |
+
source = { registry = "https://pypi.org/simple" }
|
800 |
+
sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494, upload-time = "2024-11-06T20:12:31.635Z" }
|
801 |
+
wheels = [
|
802 |
+
{ url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525, upload-time = "2024-11-06T20:10:45.19Z" },
|
803 |
+
{ url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324, upload-time = "2024-11-06T20:10:47.177Z" },
|
804 |
+
{ url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617, upload-time = "2024-11-06T20:10:49.312Z" },
|
805 |
+
{ url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023, upload-time = "2024-11-06T20:10:51.102Z" },
|
806 |
+
{ url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072, upload-time = "2024-11-06T20:10:52.926Z" },
|
807 |
+
{ url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130, upload-time = "2024-11-06T20:10:54.828Z" },
|
808 |
+
{ url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857, upload-time = "2024-11-06T20:10:56.634Z" },
|
809 |
+
{ url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006, upload-time = "2024-11-06T20:10:59.369Z" },
|
810 |
+
{ url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650, upload-time = "2024-11-06T20:11:02.042Z" },
|
811 |
+
{ url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545, upload-time = "2024-11-06T20:11:03.933Z" },
|
812 |
+
{ url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045, upload-time = "2024-11-06T20:11:06.497Z" },
|
813 |
+
{ url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182, upload-time = "2024-11-06T20:11:09.06Z" },
|
814 |
+
{ url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733, upload-time = "2024-11-06T20:11:11.256Z" },
|
815 |
+
{ url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122, upload-time = "2024-11-06T20:11:13.161Z" },
|
816 |
+
{ url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545, upload-time = "2024-11-06T20:11:15Z" },
|
817 |
+
]
|
818 |
+
|
819 |
[[package]]
|
820 |
name = "requests"
|
821 |
version = "2.32.4"
|
|
|
1003 |
{ url = "https://files.pythonhosted.org/packages/f7/1f/b876b1f83aef204198a42dc101613fefccb32258e5428b5f9259677864b4/starlette-0.47.2-py3-none-any.whl", hash = "sha256:c5847e96134e5c5371ee9fac6fdf1a67336d5815e09eb2a01fdb57a351ef915b", size = 72984, upload-time = "2025-07-20T17:31:56.738Z" },
|
1004 |
]
|
1005 |
|
1006 |
+
[[package]]
|
1007 |
+
name = "textblob"
|
1008 |
+
version = "0.19.0"
|
1009 |
+
source = { registry = "https://pypi.org/simple" }
|
1010 |
+
dependencies = [
|
1011 |
+
{ name = "nltk" },
|
1012 |
+
]
|
1013 |
+
sdist = { url = "https://files.pythonhosted.org/packages/63/a1/31fc6a5e9e46f2d84f72f12048588feac5464486e526dbfcc4719569cd3e/textblob-0.19.0.tar.gz", hash = "sha256:0a3d06a47cf7759441da3418c4843aed3797a998beba2108c6245a2020f83b01", size = 637872, upload-time = "2025-01-13T23:03:07.352Z" }
|
1014 |
+
wheels = [
|
1015 |
+
{ url = "https://files.pythonhosted.org/packages/1e/d6/40aa5aead775582ea0cf35870e5a3f16fab4b967f1ad2debe675f673f923/textblob-0.19.0-py3-none-any.whl", hash = "sha256:af6b8827886f1ee839a625f4865e5abb1584eae8db2259627b33a6a0b02ef19d", size = 624280, upload-time = "2025-01-13T23:03:01.034Z" },
|
1016 |
+
]
|
1017 |
+
|
1018 |
[[package]]
|
1019 |
name = "tomlkit"
|
1020 |
version = "0.13.3"
|