Spaces:
Sleeping
Sleeping
add flake8 and black
Browse files- .vscode/settings.json +2 -4
- app.py +81 -45
- main.py +48 -20
- poetry.lock +153 -1
- pyproject.toml +2 -0
.vscode/settings.json
CHANGED
@@ -1,8 +1,4 @@
|
|
1 |
{
|
2 |
-
"python.linting.pylint" : false,
|
3 |
-
"python.linting.flake8" : true,
|
4 |
-
"python.linting.enabled" : true,
|
5 |
-
"python.formatting.black" : true,
|
6 |
"editor.formatOnSave": true,
|
7 |
"python.linting.flake8Args":[
|
8 |
"--max-line-length=88"
|
@@ -13,4 +9,6 @@
|
|
13 |
"python.testing.pytestArgs": [
|
14 |
"tests"
|
15 |
],
|
|
|
|
|
16 |
}
|
|
|
1 |
{
|
|
|
|
|
|
|
|
|
2 |
"editor.formatOnSave": true,
|
3 |
"python.linting.flake8Args":[
|
4 |
"--max-line-length=88"
|
|
|
9 |
"python.testing.pytestArgs": [
|
10 |
"tests"
|
11 |
],
|
12 |
+
"black-formatter.importStrategy": "fromEnvironment",
|
13 |
+
"flake8.importStrategy": "fromEnvironment",
|
14 |
}
|
app.py
CHANGED
@@ -2,7 +2,7 @@ import re
|
|
2 |
|
3 |
import gradio as gr
|
4 |
from pydantic import BaseModel
|
5 |
-
from transformers import pipeline
|
6 |
from loguru import logger
|
7 |
|
8 |
# from pydantic import BaseModel
|
@@ -17,7 +17,7 @@ EN_SUMMARY_MODEL = "csebuetnlp/mT5_multilingual_XLSum"
|
|
17 |
EN_SENTIMENT_MODEL = "distilbert-base-uncased-finetuned-sst-2-english"
|
18 |
|
19 |
|
20 |
-
DEFAULT_EN_TEXT ="""Flags on official buildings are being flown at half-mast and a minute's silence will be observed at midday.
|
21 |
Fourteen people were shot dead at the Faculty of Arts building of Charles University in the capital by a student who then killed himself.
|
22 |
Police are working to uncover the motive behind the attack.
|
23 |
It is one of the deadliest assaults by a lone gunman in Europe this century.
|
@@ -45,6 +45,7 @@ DEFAULT_RU_TEXT = """В результате взрыва на заправке,
|
|
45 |
доноров для их пополнения на данный час тоже уже немало», — написало ведомство.
|
46 |
"""
|
47 |
|
|
|
48 |
class Request(BaseModel):
|
49 |
text: str
|
50 |
|
@@ -53,14 +54,16 @@ class Result(BaseModel):
|
|
53 |
sentiment_score: float
|
54 |
sentiment_label: str
|
55 |
summary: str
|
56 |
-
|
57 |
def to_str(self):
|
58 |
-
return f"Summary: {self.summary}\
|
|
|
59 |
|
60 |
# class Response(BaseModel):
|
61 |
# results: List[Result] # list of Result objects
|
62 |
|
63 |
-
|
|
|
64 |
ru_summary_pipe: pipeline
|
65 |
ru_sentiment_pipe: pipeline
|
66 |
en_summary_pipe: pipeline
|
@@ -68,65 +71,72 @@ class Summarizer():
|
|
68 |
# sum_model_name = "csebuetnlp/mT5_multilingual_XLSum"
|
69 |
# sum_tokenizer = AutoTokenizer.from_pretrained(sum_model_name)
|
70 |
# sum_model = AutoModelForSeq2SeqLM.from_pretrained(sum_model_name)
|
71 |
-
|
72 |
def __init__(self) -> None:
|
73 |
-
sum_pipe = pipeline(
|
|
|
|
|
74 |
self.ru_summary_pipe = sum_pipe
|
75 |
-
self.ru_sentiment_pipe = pipeline(
|
|
|
|
|
76 |
self.en_summary_pipe = sum_pipe
|
77 |
-
self.en_sentiment_pipe = pipeline(
|
|
|
|
|
78 |
|
79 |
def mT5_summarize(self, text: str) -> str:
|
80 |
-
|
81 |
-
|
82 |
-
|
|
|
83 |
|
84 |
input_ids = self.sum_tokenizer(
|
85 |
-
[
|
86 |
return_tensors="pt",
|
87 |
padding="max_length",
|
88 |
truncation=True,
|
89 |
-
max_length=512
|
90 |
)["input_ids"]
|
91 |
|
92 |
output_ids = self.sum_model.generate(
|
93 |
-
input_ids=input_ids,
|
94 |
-
max_length=84,
|
95 |
-
no_repeat_ngram_size=2,
|
96 |
-
num_beams=4
|
97 |
)[0]
|
98 |
|
99 |
summary = self.sum_tokenizer.decode(
|
100 |
-
output_ids,
|
101 |
-
skip_special_tokens=True,
|
102 |
-
clean_up_tokenization_spaces=False
|
103 |
)
|
104 |
|
105 |
return summary
|
106 |
|
107 |
def get_pipe(self, lang: str):
|
108 |
-
logger.info(f
|
109 |
-
summary = {
|
110 |
-
|
111 |
-
|
112 |
-
|
|
|
|
|
|
|
|
|
113 |
return summary[lang], sentiment[lang]
|
114 |
|
115 |
-
def summarize(self,
|
116 |
sum_pipe, sent_pipe = self.get_pipe(lang)
|
117 |
-
response_summary = sum_pipe(text)
|
118 |
logger.info(response_summary)
|
119 |
-
response_sentiment = sent_pipe(text)
|
120 |
logger.info(response_sentiment)
|
121 |
-
result =
|
122 |
summary=response_summary[0]["summary_text"],
|
123 |
sentiment_label=response_sentiment[0]["label"],
|
124 |
sentiment_score=response_sentiment[0]["score"],
|
125 |
)
|
126 |
return result
|
127 |
-
|
128 |
-
def summ(self,
|
129 |
-
return self.summarize(
|
|
|
130 |
|
131 |
if __name__ == "__main__":
|
132 |
pipe = Summarizer()
|
@@ -134,20 +144,46 @@ if __name__ == "__main__":
|
|
134 |
with gr.Blocks() as demo:
|
135 |
with gr.Row():
|
136 |
with gr.Column(scale=2, min_width=600):
|
137 |
-
en_sum_description=gr.Markdown(
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
en_inbtn = gr.Button("Proceed")
|
143 |
with gr.Column(scale=2, min_width=600):
|
144 |
-
ru_sum_description=gr.Markdown(
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
ru_inbtn = gr.Button("Запустить")
|
150 |
-
|
151 |
en_inbtn.click(
|
152 |
pipe.summ,
|
153 |
[en_inputs, en_lang],
|
@@ -158,4 +194,4 @@ if __name__ == "__main__":
|
|
158 |
[ru_inputs, ru_lang],
|
159 |
[ru_outputs],
|
160 |
)
|
161 |
-
demo.launch(show_api=False)
|
|
|
2 |
|
3 |
import gradio as gr
|
4 |
from pydantic import BaseModel
|
5 |
+
from transformers import pipeline
|
6 |
from loguru import logger
|
7 |
|
8 |
# from pydantic import BaseModel
|
|
|
17 |
EN_SENTIMENT_MODEL = "distilbert-base-uncased-finetuned-sst-2-english"
|
18 |
|
19 |
|
20 |
+
DEFAULT_EN_TEXT = """Flags on official buildings are being flown at half-mast and a minute's silence will be observed at midday.
|
21 |
Fourteen people were shot dead at the Faculty of Arts building of Charles University in the capital by a student who then killed himself.
|
22 |
Police are working to uncover the motive behind the attack.
|
23 |
It is one of the deadliest assaults by a lone gunman in Europe this century.
|
|
|
45 |
доноров для их пополнения на данный час тоже уже немало», — написало ведомство.
|
46 |
"""
|
47 |
|
48 |
+
|
49 |
class Request(BaseModel):
|
50 |
text: str
|
51 |
|
|
|
54 |
sentiment_score: float
|
55 |
sentiment_label: str
|
56 |
summary: str
|
57 |
+
|
58 |
def to_str(self):
|
59 |
+
return f"Summary: {self.summary}\nSentiment: {self.sentiment_label} ({self.sentiment_score:.3f})"
|
60 |
+
|
61 |
|
62 |
# class Response(BaseModel):
|
63 |
# results: List[Result] # list of Result objects
|
64 |
|
65 |
+
|
66 |
+
class Summarizer:
|
67 |
ru_summary_pipe: pipeline
|
68 |
ru_sentiment_pipe: pipeline
|
69 |
en_summary_pipe: pipeline
|
|
|
71 |
# sum_model_name = "csebuetnlp/mT5_multilingual_XLSum"
|
72 |
# sum_tokenizer = AutoTokenizer.from_pretrained(sum_model_name)
|
73 |
# sum_model = AutoModelForSeq2SeqLM.from_pretrained(sum_model_name)
|
74 |
+
|
75 |
def __init__(self) -> None:
|
76 |
+
sum_pipe = pipeline(
|
77 |
+
"summarization", model=RU_SUMMARY_MODEL, max_length=100, truncation=True
|
78 |
+
)
|
79 |
self.ru_summary_pipe = sum_pipe
|
80 |
+
self.ru_sentiment_pipe = pipeline(
|
81 |
+
"sentiment-analysis", model=RU_SENTIMENT_MODEL
|
82 |
+
)
|
83 |
self.en_summary_pipe = sum_pipe
|
84 |
+
self.en_sentiment_pipe = pipeline(
|
85 |
+
"sentiment-analysis", model=EN_SENTIMENT_MODEL
|
86 |
+
)
|
87 |
|
88 |
def mT5_summarize(self, text: str) -> str:
|
89 |
+
"""Handle text with mT5 model without pipeline"""
|
90 |
+
|
91 |
+
def whitespace_handler(text: str):
|
92 |
+
return re.sub("\s+", " ", re.sub("\n+", " ", text.strip()))
|
93 |
|
94 |
input_ids = self.sum_tokenizer(
|
95 |
+
[whitespace_handler(text)],
|
96 |
return_tensors="pt",
|
97 |
padding="max_length",
|
98 |
truncation=True,
|
99 |
+
max_length=512,
|
100 |
)["input_ids"]
|
101 |
|
102 |
output_ids = self.sum_model.generate(
|
103 |
+
input_ids=input_ids, max_length=84, no_repeat_ngram_size=2, num_beams=4
|
|
|
|
|
|
|
104 |
)[0]
|
105 |
|
106 |
summary = self.sum_tokenizer.decode(
|
107 |
+
output_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
|
|
|
|
|
108 |
)
|
109 |
|
110 |
return summary
|
111 |
|
112 |
def get_pipe(self, lang: str):
|
113 |
+
logger.info(f"Pipe language: {lang}")
|
114 |
+
summary = {
|
115 |
+
"en": self.en_summary_pipe,
|
116 |
+
"ru": self.ru_summary_pipe,
|
117 |
+
}
|
118 |
+
sentiment = {
|
119 |
+
"en": self.en_sentiment_pipe,
|
120 |
+
"ru": self.ru_sentiment_pipe,
|
121 |
+
}
|
122 |
return summary[lang], sentiment[lang]
|
123 |
|
124 |
+
def summarize(self, req: Request, lang: str = "en") -> Result:
|
125 |
sum_pipe, sent_pipe = self.get_pipe(lang)
|
126 |
+
response_summary = sum_pipe(req.text)
|
127 |
logger.info(response_summary)
|
128 |
+
response_sentiment = sent_pipe(req.text)
|
129 |
logger.info(response_sentiment)
|
130 |
+
result = Result(
|
131 |
summary=response_summary[0]["summary_text"],
|
132 |
sentiment_label=response_sentiment[0]["label"],
|
133 |
sentiment_score=response_sentiment[0]["score"],
|
134 |
)
|
135 |
return result
|
136 |
+
|
137 |
+
def summ(self, req: Request, lang: str = "en") -> str:
|
138 |
+
return self.summarize(req, lang).to_str()
|
139 |
+
|
140 |
|
141 |
if __name__ == "__main__":
|
142 |
pipe = Summarizer()
|
|
|
144 |
with gr.Blocks() as demo:
|
145 |
with gr.Row():
|
146 |
with gr.Column(scale=2, min_width=600):
|
147 |
+
en_sum_description = gr.Markdown(
|
148 |
+
value=f"Model for Summary: {EN_SUMMARY_MODEL}"
|
149 |
+
)
|
150 |
+
en_sent_description = gr.Markdown(
|
151 |
+
value=f"Model for Sentiment: {EN_SENTIMENT_MODEL}"
|
152 |
+
)
|
153 |
+
en_inputs = gr.Textbox(
|
154 |
+
label="en_input",
|
155 |
+
lines=5,
|
156 |
+
value=DEFAULT_EN_TEXT,
|
157 |
+
placeholder=DEFAULT_EN_TEXT,
|
158 |
+
)
|
159 |
+
en_lang = gr.Textbox(value="en", visible=False)
|
160 |
+
en_outputs = gr.Textbox(
|
161 |
+
label="en_output",
|
162 |
+
lines=5,
|
163 |
+
placeholder="Summary and Sentiment would be here...",
|
164 |
+
)
|
165 |
en_inbtn = gr.Button("Proceed")
|
166 |
with gr.Column(scale=2, min_width=600):
|
167 |
+
ru_sum_description = gr.Markdown(
|
168 |
+
value=f"Model for Summary: {RU_SUMMARY_MODEL}"
|
169 |
+
)
|
170 |
+
ru_sent_description = gr.Markdown(
|
171 |
+
value=f"Model for Sentiment: {RU_SENTIMENT_MODEL}"
|
172 |
+
)
|
173 |
+
ru_inputs = gr.Textbox(
|
174 |
+
label="ru_input",
|
175 |
+
lines=5,
|
176 |
+
value=DEFAULT_RU_TEXT,
|
177 |
+
placeholder=DEFAULT_RU_TEXT,
|
178 |
+
)
|
179 |
+
ru_lang = gr.Textbox(value="ru", visible=False)
|
180 |
+
ru_outputs = gr.Textbox(
|
181 |
+
label="ru_output",
|
182 |
+
lines=5,
|
183 |
+
placeholder="Здесь будет обобщение и эмоциональный окрас текста...",
|
184 |
+
)
|
185 |
ru_inbtn = gr.Button("Запустить")
|
186 |
+
|
187 |
en_inbtn.click(
|
188 |
pipe.summ,
|
189 |
[en_inputs, en_lang],
|
|
|
194 |
[ru_inputs, ru_lang],
|
195 |
[ru_outputs],
|
196 |
)
|
197 |
+
demo.launch(show_api=False)
|
main.py
CHANGED
@@ -1,43 +1,73 @@
|
|
1 |
import gradio as gr
|
2 |
from fastapi import FastAPI
|
3 |
-
from typing import List
|
4 |
from app import Summarizer, Request, Result
|
5 |
-
from app import
|
|
|
|
|
|
|
|
|
|
|
6 |
from app import DEFAULT_EN_TEXT, DEFAULT_RU_TEXT
|
7 |
|
8 |
app = FastAPI()
|
9 |
pipe = Summarizer()
|
10 |
|
|
|
11 |
@app.post("/summ_ru", response_model=Result)
|
12 |
async def ru_summ_api(request: Request):
|
13 |
-
results = pipe.summarize(request.text, lang=
|
14 |
return results
|
15 |
|
16 |
|
17 |
-
|
18 |
@app.post("/summ_en", response_model=Result)
|
19 |
-
async def
|
20 |
-
results = pipe.summarize(request.text, lang=
|
21 |
return results
|
22 |
|
23 |
|
24 |
with gr.Blocks() as demo:
|
25 |
with gr.Row():
|
26 |
with gr.Column(scale=2, min_width=600):
|
27 |
-
en_sum_description=gr.Markdown(
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
en_inbtn = gr.Button("Proceed")
|
33 |
with gr.Column(scale=2, min_width=600):
|
34 |
-
ru_sum_description=gr.Markdown(
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
ru_inbtn = gr.Button("Запустить")
|
40 |
-
|
41 |
en_inbtn.click(
|
42 |
pipe.summ,
|
43 |
[en_inputs, en_lang],
|
@@ -49,7 +79,5 @@ with gr.Blocks() as demo:
|
|
49 |
[ru_outputs],
|
50 |
)
|
51 |
|
52 |
-
# demo.launch(show_api=False)
|
53 |
-
|
54 |
# mounting at the root path
|
55 |
-
app = gr.mount_gradio_app(app, demo, path="/")
|
|
|
1 |
import gradio as gr
|
2 |
from fastapi import FastAPI
|
|
|
3 |
from app import Summarizer, Request, Result
|
4 |
+
from app import (
|
5 |
+
EN_SENTIMENT_MODEL,
|
6 |
+
EN_SUMMARY_MODEL,
|
7 |
+
RU_SENTIMENT_MODEL,
|
8 |
+
RU_SUMMARY_MODEL,
|
9 |
+
)
|
10 |
from app import DEFAULT_EN_TEXT, DEFAULT_RU_TEXT
|
11 |
|
12 |
app = FastAPI()
|
13 |
pipe = Summarizer()
|
14 |
|
15 |
+
|
16 |
@app.post("/summ_ru", response_model=Result)
|
17 |
async def ru_summ_api(request: Request):
|
18 |
+
results = pipe.summarize(request.text, lang="ru")
|
19 |
return results
|
20 |
|
21 |
|
|
|
22 |
@app.post("/summ_en", response_model=Result)
|
23 |
+
async def en_summ_api(request: Request):
|
24 |
+
results = pipe.summarize(request.text, lang="en")
|
25 |
return results
|
26 |
|
27 |
|
28 |
with gr.Blocks() as demo:
|
29 |
with gr.Row():
|
30 |
with gr.Column(scale=2, min_width=600):
|
31 |
+
en_sum_description = gr.Markdown(
|
32 |
+
value=f"Model for Summary: {EN_SUMMARY_MODEL}"
|
33 |
+
)
|
34 |
+
en_sent_description = gr.Markdown(
|
35 |
+
value=f"Model for Sentiment: {EN_SENTIMENT_MODEL}"
|
36 |
+
)
|
37 |
+
en_inputs = gr.Textbox(
|
38 |
+
label="en_input",
|
39 |
+
lines=5,
|
40 |
+
value=DEFAULT_EN_TEXT,
|
41 |
+
placeholder=DEFAULT_EN_TEXT,
|
42 |
+
)
|
43 |
+
en_lang = gr.Textbox(value="en", visible=False)
|
44 |
+
en_outputs = gr.Textbox(
|
45 |
+
label="en_output",
|
46 |
+
lines=5,
|
47 |
+
placeholder="Summary and Sentiment would be here...",
|
48 |
+
)
|
49 |
en_inbtn = gr.Button("Proceed")
|
50 |
with gr.Column(scale=2, min_width=600):
|
51 |
+
ru_sum_description = gr.Markdown(
|
52 |
+
value=f"Model for Summary: {RU_SUMMARY_MODEL}"
|
53 |
+
)
|
54 |
+
ru_sent_description = gr.Markdown(
|
55 |
+
value=f"Model for Sentiment: {RU_SENTIMENT_MODEL}"
|
56 |
+
)
|
57 |
+
ru_inputs = gr.Textbox(
|
58 |
+
label="ru_input",
|
59 |
+
lines=5,
|
60 |
+
value=DEFAULT_RU_TEXT,
|
61 |
+
placeholder=DEFAULT_RU_TEXT,
|
62 |
+
)
|
63 |
+
ru_lang = gr.Textbox(value="ru", visible=False)
|
64 |
+
ru_outputs = gr.Textbox(
|
65 |
+
label="ru_output",
|
66 |
+
lines=5,
|
67 |
+
placeholder="Здесь будет обобщение и эмоциональный окрас текста...",
|
68 |
+
)
|
69 |
ru_inbtn = gr.Button("Запустить")
|
70 |
+
|
71 |
en_inbtn.click(
|
72 |
pipe.summ,
|
73 |
[en_inputs, en_lang],
|
|
|
79 |
[ru_outputs],
|
80 |
)
|
81 |
|
|
|
|
|
82 |
# mounting at the root path
|
83 |
+
app = gr.mount_gradio_app(app, demo, path="/")
|
poetry.lock
CHANGED
@@ -91,6 +91,53 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-
|
|
91 |
tests = ["attrs[tests-no-zope]", "zope-interface"]
|
92 |
tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
|
93 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
[[package]]
|
95 |
name = "certifi"
|
96 |
version = "2023.11.17"
|
@@ -373,6 +420,23 @@ docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1
|
|
373 |
testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"]
|
374 |
typing = ["typing-extensions (>=4.8)"]
|
375 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
376 |
[[package]]
|
377 |
name = "fonttools"
|
378 |
version = "4.47.0"
|
@@ -979,6 +1043,18 @@ pillow = ">=8"
|
|
979 |
pyparsing = ">=2.3.1"
|
980 |
python-dateutil = ">=2.7"
|
981 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
982 |
[[package]]
|
983 |
name = "mdurl"
|
984 |
version = "0.1.2"
|
@@ -1007,6 +1083,18 @@ files = [
|
|
1007 |
testing = ["astroid (>=2.0)", "coverage", "pylint (>=2.3.1,<2.4.0)", "pytest"]
|
1008 |
yaml = ["PyYAML (>=5.1.0)"]
|
1009 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1010 |
[[package]]
|
1011 |
name = "numpy"
|
1012 |
version = "1.26.2"
|
@@ -1259,6 +1347,18 @@ sql-other = ["SQLAlchemy (>=1.4.36)"]
|
|
1259 |
test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"]
|
1260 |
xml = ["lxml (>=4.8.0)"]
|
1261 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1262 |
[[package]]
|
1263 |
name = "pillow"
|
1264 |
version = "10.1.0"
|
@@ -1327,6 +1427,22 @@ files = [
|
|
1327 |
docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"]
|
1328 |
tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
|
1329 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1330 |
[[package]]
|
1331 |
name = "pretrainedmodels"
|
1332 |
version = "0.7.4"
|
@@ -1365,6 +1481,18 @@ files = [
|
|
1365 |
{file = "protobuf-4.25.1.tar.gz", hash = "sha256:57d65074b4f5baa4ab5da1605c02be90ac20c8b40fb137d6a8df9f416b0d0ce2"},
|
1366 |
]
|
1367 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1368 |
[[package]]
|
1369 |
name = "pydantic"
|
1370 |
version = "2.5.3"
|
@@ -1515,6 +1643,18 @@ files = [
|
|
1515 |
{file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"},
|
1516 |
]
|
1517 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1518 |
[[package]]
|
1519 |
name = "pygments"
|
1520 |
version = "2.17.2"
|
@@ -2290,6 +2430,18 @@ dev = ["tokenizers[testing]"]
|
|
2290 |
docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"]
|
2291 |
testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"]
|
2292 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2293 |
[[package]]
|
2294 |
name = "tomlkit"
|
2295 |
version = "0.12.0"
|
@@ -2683,4 +2835,4 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
|
|
2683 |
[metadata]
|
2684 |
lock-version = "2.0"
|
2685 |
python-versions = "^3.10"
|
2686 |
-
content-hash = "
|
|
|
91 |
tests = ["attrs[tests-no-zope]", "zope-interface"]
|
92 |
tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
|
93 |
|
94 |
+
[[package]]
|
95 |
+
name = "black"
|
96 |
+
version = "24.1.1"
|
97 |
+
description = "The uncompromising code formatter."
|
98 |
+
category = "dev"
|
99 |
+
optional = false
|
100 |
+
python-versions = ">=3.8"
|
101 |
+
files = [
|
102 |
+
{file = "black-24.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c"},
|
103 |
+
{file = "black-24.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445"},
|
104 |
+
{file = "black-24.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a"},
|
105 |
+
{file = "black-24.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4"},
|
106 |
+
{file = "black-24.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7"},
|
107 |
+
{file = "black-24.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8"},
|
108 |
+
{file = "black-24.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161"},
|
109 |
+
{file = "black-24.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d"},
|
110 |
+
{file = "black-24.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8"},
|
111 |
+
{file = "black-24.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e"},
|
112 |
+
{file = "black-24.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6"},
|
113 |
+
{file = "black-24.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b"},
|
114 |
+
{file = "black-24.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62"},
|
115 |
+
{file = "black-24.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5"},
|
116 |
+
{file = "black-24.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6"},
|
117 |
+
{file = "black-24.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717"},
|
118 |
+
{file = "black-24.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9"},
|
119 |
+
{file = "black-24.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024"},
|
120 |
+
{file = "black-24.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2"},
|
121 |
+
{file = "black-24.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac"},
|
122 |
+
{file = "black-24.1.1-py3-none-any.whl", hash = "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168"},
|
123 |
+
{file = "black-24.1.1.tar.gz", hash = "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b"},
|
124 |
+
]
|
125 |
+
|
126 |
+
[package.dependencies]
|
127 |
+
click = ">=8.0.0"
|
128 |
+
mypy-extensions = ">=0.4.3"
|
129 |
+
packaging = ">=22.0"
|
130 |
+
pathspec = ">=0.9.0"
|
131 |
+
platformdirs = ">=2"
|
132 |
+
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
|
133 |
+
typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""}
|
134 |
+
|
135 |
+
[package.extras]
|
136 |
+
colorama = ["colorama (>=0.4.3)"]
|
137 |
+
d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"]
|
138 |
+
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
|
139 |
+
uvloop = ["uvloop (>=0.15.2)"]
|
140 |
+
|
141 |
[[package]]
|
142 |
name = "certifi"
|
143 |
version = "2023.11.17"
|
|
|
420 |
testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"]
|
421 |
typing = ["typing-extensions (>=4.8)"]
|
422 |
|
423 |
+
[[package]]
|
424 |
+
name = "flake8"
|
425 |
+
version = "7.0.0"
|
426 |
+
description = "the modular source code checker: pep8 pyflakes and co"
|
427 |
+
category = "dev"
|
428 |
+
optional = false
|
429 |
+
python-versions = ">=3.8.1"
|
430 |
+
files = [
|
431 |
+
{file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"},
|
432 |
+
{file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"},
|
433 |
+
]
|
434 |
+
|
435 |
+
[package.dependencies]
|
436 |
+
mccabe = ">=0.7.0,<0.8.0"
|
437 |
+
pycodestyle = ">=2.11.0,<2.12.0"
|
438 |
+
pyflakes = ">=3.2.0,<3.3.0"
|
439 |
+
|
440 |
[[package]]
|
441 |
name = "fonttools"
|
442 |
version = "4.47.0"
|
|
|
1043 |
pyparsing = ">=2.3.1"
|
1044 |
python-dateutil = ">=2.7"
|
1045 |
|
1046 |
+
[[package]]
|
1047 |
+
name = "mccabe"
|
1048 |
+
version = "0.7.0"
|
1049 |
+
description = "McCabe checker, plugin for flake8"
|
1050 |
+
category = "dev"
|
1051 |
+
optional = false
|
1052 |
+
python-versions = ">=3.6"
|
1053 |
+
files = [
|
1054 |
+
{file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"},
|
1055 |
+
{file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
|
1056 |
+
]
|
1057 |
+
|
1058 |
[[package]]
|
1059 |
name = "mdurl"
|
1060 |
version = "0.1.2"
|
|
|
1083 |
testing = ["astroid (>=2.0)", "coverage", "pylint (>=2.3.1,<2.4.0)", "pytest"]
|
1084 |
yaml = ["PyYAML (>=5.1.0)"]
|
1085 |
|
1086 |
+
[[package]]
|
1087 |
+
name = "mypy-extensions"
|
1088 |
+
version = "1.0.0"
|
1089 |
+
description = "Type system extensions for programs checked with the mypy type checker."
|
1090 |
+
category = "dev"
|
1091 |
+
optional = false
|
1092 |
+
python-versions = ">=3.5"
|
1093 |
+
files = [
|
1094 |
+
{file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
|
1095 |
+
{file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
|
1096 |
+
]
|
1097 |
+
|
1098 |
[[package]]
|
1099 |
name = "numpy"
|
1100 |
version = "1.26.2"
|
|
|
1347 |
test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"]
|
1348 |
xml = ["lxml (>=4.8.0)"]
|
1349 |
|
1350 |
+
[[package]]
|
1351 |
+
name = "pathspec"
|
1352 |
+
version = "0.12.1"
|
1353 |
+
description = "Utility library for gitignore style pattern matching of file paths."
|
1354 |
+
category = "dev"
|
1355 |
+
optional = false
|
1356 |
+
python-versions = ">=3.8"
|
1357 |
+
files = [
|
1358 |
+
{file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
|
1359 |
+
{file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
|
1360 |
+
]
|
1361 |
+
|
1362 |
[[package]]
|
1363 |
name = "pillow"
|
1364 |
version = "10.1.0"
|
|
|
1427 |
docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"]
|
1428 |
tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
|
1429 |
|
1430 |
+
[[package]]
|
1431 |
+
name = "platformdirs"
|
1432 |
+
version = "4.1.0"
|
1433 |
+
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
1434 |
+
category = "dev"
|
1435 |
+
optional = false
|
1436 |
+
python-versions = ">=3.8"
|
1437 |
+
files = [
|
1438 |
+
{file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"},
|
1439 |
+
{file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"},
|
1440 |
+
]
|
1441 |
+
|
1442 |
+
[package.extras]
|
1443 |
+
docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"]
|
1444 |
+
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"]
|
1445 |
+
|
1446 |
[[package]]
|
1447 |
name = "pretrainedmodels"
|
1448 |
version = "0.7.4"
|
|
|
1481 |
{file = "protobuf-4.25.1.tar.gz", hash = "sha256:57d65074b4f5baa4ab5da1605c02be90ac20c8b40fb137d6a8df9f416b0d0ce2"},
|
1482 |
]
|
1483 |
|
1484 |
+
[[package]]
|
1485 |
+
name = "pycodestyle"
|
1486 |
+
version = "2.11.1"
|
1487 |
+
description = "Python style guide checker"
|
1488 |
+
category = "dev"
|
1489 |
+
optional = false
|
1490 |
+
python-versions = ">=3.8"
|
1491 |
+
files = [
|
1492 |
+
{file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"},
|
1493 |
+
{file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"},
|
1494 |
+
]
|
1495 |
+
|
1496 |
[[package]]
|
1497 |
name = "pydantic"
|
1498 |
version = "2.5.3"
|
|
|
1643 |
{file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"},
|
1644 |
]
|
1645 |
|
1646 |
+
[[package]]
|
1647 |
+
name = "pyflakes"
|
1648 |
+
version = "3.2.0"
|
1649 |
+
description = "passive checker of Python programs"
|
1650 |
+
category = "dev"
|
1651 |
+
optional = false
|
1652 |
+
python-versions = ">=3.8"
|
1653 |
+
files = [
|
1654 |
+
{file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"},
|
1655 |
+
{file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"},
|
1656 |
+
]
|
1657 |
+
|
1658 |
[[package]]
|
1659 |
name = "pygments"
|
1660 |
version = "2.17.2"
|
|
|
2430 |
docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"]
|
2431 |
testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"]
|
2432 |
|
2433 |
+
[[package]]
|
2434 |
+
name = "tomli"
|
2435 |
+
version = "2.0.1"
|
2436 |
+
description = "A lil' TOML parser"
|
2437 |
+
category = "dev"
|
2438 |
+
optional = false
|
2439 |
+
python-versions = ">=3.7"
|
2440 |
+
files = [
|
2441 |
+
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
|
2442 |
+
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
2443 |
+
]
|
2444 |
+
|
2445 |
[[package]]
|
2446 |
name = "tomlkit"
|
2447 |
version = "0.12.0"
|
|
|
2835 |
[metadata]
|
2836 |
lock-version = "2.0"
|
2837 |
python-versions = "^3.10"
|
2838 |
+
content-hash = "5648f003dcb355b02c351874f25f204380d23b153110cec7f6177e81fd260dbf"
|
pyproject.toml
CHANGED
@@ -22,6 +22,8 @@ uvicorn = "^0.27.0"
|
|
22 |
|
23 |
[tool.poetry.group.dev.dependencies]
|
24 |
huggingface-hub = "^0.20.1"
|
|
|
|
|
25 |
|
26 |
[build-system]
|
27 |
requires = ["poetry-core"]
|
|
|
22 |
|
23 |
[tool.poetry.group.dev.dependencies]
|
24 |
huggingface-hub = "^0.20.1"
|
25 |
+
flake8 = "^7.0.0"
|
26 |
+
black = "^24.1.1"
|
27 |
|
28 |
[build-system]
|
29 |
requires = ["poetry-core"]
|