Spaces:
Running
Running
Commit
·
a21dee1
1
Parent(s):
b675cf6
feat: working mask generation agent
Browse files- app.py +7 -4
- poetry.lock +937 -1
- pyproject.toml +3 -0
- src/agents/Untitled-1.json +39 -0
- src/agents/__init__.py +0 -0
- src/agents/image-edit-agent.py +107 -0
- src/agents/mask-generation-agent.py +87 -0
- src/hopter/client.py +88 -0
- src/models/generate_mask_instruction.py +19 -0
- src/services/__init__.py +0 -0
- src/services/generate_mask.py +110 -0
app.py
CHANGED
@@ -11,15 +11,15 @@ def encode_image(uploaded_file):
|
|
11 |
client = OpenAI(api_key=st.secrets["OPENAI_API_KEY"])
|
12 |
image = st.file_uploader("Upload an image", type=["png", "jpg", "jpeg"])
|
13 |
|
14 |
-
if image is not None:
|
15 |
-
st.session_state.image = image
|
16 |
-
|
17 |
if "openai_model" not in st.session_state:
|
18 |
st.session_state["openai_model"] = "gpt-4o"
|
19 |
|
20 |
if "messages" not in st.session_state:
|
21 |
st.session_state.messages = []
|
22 |
|
|
|
|
|
|
|
23 |
for message in st.session_state.messages:
|
24 |
with st.chat_message(message["role"]):
|
25 |
for content in message["content"]:
|
@@ -30,6 +30,8 @@ for message in st.session_state.messages:
|
|
30 |
|
31 |
if prompt := st.chat_input("What is up?"):
|
32 |
# Add image to the message if it exists
|
|
|
|
|
33 |
if st.session_state.image:
|
34 |
image_data = encode_image(st.session_state.image)
|
35 |
image_url = f"data:image/jpeg;base64,{image_data}"
|
@@ -43,7 +45,8 @@ if prompt := st.chat_input("What is up?"):
|
|
43 |
]})
|
44 |
|
45 |
with st.chat_message("user"):
|
46 |
-
st.
|
|
|
47 |
st.markdown(prompt)
|
48 |
|
49 |
with st.chat_message("assistant"):
|
|
|
11 |
client = OpenAI(api_key=st.secrets["OPENAI_API_KEY"])
|
12 |
image = st.file_uploader("Upload an image", type=["png", "jpg", "jpeg"])
|
13 |
|
|
|
|
|
|
|
14 |
if "openai_model" not in st.session_state:
|
15 |
st.session_state["openai_model"] = "gpt-4o"
|
16 |
|
17 |
if "messages" not in st.session_state:
|
18 |
st.session_state.messages = []
|
19 |
|
20 |
+
if "image" not in st.session_state:
|
21 |
+
st.session_state.image = None
|
22 |
+
|
23 |
for message in st.session_state.messages:
|
24 |
with st.chat_message(message["role"]):
|
25 |
for content in message["content"]:
|
|
|
30 |
|
31 |
if prompt := st.chat_input("What is up?"):
|
32 |
# Add image to the message if it exists
|
33 |
+
if image is not None:
|
34 |
+
st.session_state.image = image
|
35 |
if st.session_state.image:
|
36 |
image_data = encode_image(st.session_state.image)
|
37 |
image_url = f"data:image/jpeg;base64,{image_data}"
|
|
|
45 |
]})
|
46 |
|
47 |
with st.chat_message("user"):
|
48 |
+
if st.session_state.image:
|
49 |
+
st.image(st.session_state.image)
|
50 |
st.markdown(prompt)
|
51 |
|
52 |
with st.chat_message("assistant"):
|
poetry.lock
CHANGED
@@ -35,6 +35,30 @@ files = [
|
|
35 |
{file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
|
36 |
]
|
37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
[[package]]
|
39 |
name = "anyio"
|
40 |
version = "4.8.0"
|
@@ -224,6 +248,28 @@ files = [
|
|
224 |
[package.dependencies]
|
225 |
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
226 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
227 |
[[package]]
|
228 |
name = "colorama"
|
229 |
version = "0.4.6"
|
@@ -235,6 +281,23 @@ files = [
|
|
235 |
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
236 |
]
|
237 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
[[package]]
|
239 |
name = "distro"
|
240 |
version = "1.9.0"
|
@@ -246,6 +309,20 @@ files = [
|
|
246 |
{file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"},
|
247 |
]
|
248 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
[[package]]
|
250 |
name = "exceptiongroup"
|
251 |
version = "1.2.2"
|
@@ -260,6 +337,121 @@ files = [
|
|
260 |
[package.extras]
|
261 |
test = ["pytest (>=6)"]
|
262 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
263 |
[[package]]
|
264 |
name = "gitdb"
|
265 |
version = "4.0.12"
|
@@ -292,6 +484,80 @@ gitdb = ">=4.0.1,<5"
|
|
292 |
doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"]
|
293 |
test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"]
|
294 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
295 |
[[package]]
|
296 |
name = "h11"
|
297 |
version = "0.14.0"
|
@@ -348,6 +614,51 @@ http2 = ["h2 (>=3,<5)"]
|
|
348 |
socks = ["socksio (==1.*)"]
|
349 |
zstd = ["zstandard (>=0.18.0)"]
|
350 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
351 |
[[package]]
|
352 |
name = "idna"
|
353 |
version = "3.10"
|
@@ -362,6 +673,29 @@ files = [
|
|
362 |
[package.extras]
|
363 |
all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
|
364 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
[[package]]
|
366 |
name = "jinja2"
|
367 |
version = "3.1.5"
|
@@ -464,6 +798,17 @@ files = [
|
|
464 |
{file = "jiter-0.8.2.tar.gz", hash = "sha256:cd73d3e740666d0e639f678adb176fad25c1bcbdae88d8d7b857e1783bb4212d"},
|
465 |
]
|
466 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
467 |
[[package]]
|
468 |
name = "jsonschema"
|
469 |
version = "4.23.0"
|
@@ -499,6 +844,60 @@ files = [
|
|
499 |
[package.dependencies]
|
500 |
referencing = ">=0.31.0"
|
501 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
502 |
[[package]]
|
503 |
name = "markdown-it-py"
|
504 |
version = "3.0.0"
|
@@ -604,6 +1003,39 @@ files = [
|
|
604 |
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
|
605 |
]
|
606 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
607 |
[[package]]
|
608 |
name = "narwhals"
|
609 |
version = "1.26.0"
|
@@ -719,6 +1151,117 @@ typing-extensions = ">=4.11,<5"
|
|
719 |
datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"]
|
720 |
realtime = ["websockets (>=13,<15)"]
|
721 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
722 |
[[package]]
|
723 |
name = "packaging"
|
724 |
version = "24.2"
|
@@ -974,6 +1517,31 @@ files = [
|
|
974 |
[package.extras]
|
975 |
test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"]
|
976 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
977 |
[[package]]
|
978 |
name = "pydantic"
|
979 |
version = "2.10.6"
|
@@ -994,6 +1562,59 @@ typing-extensions = ">=4.12.2"
|
|
994 |
email = ["email-validator (>=2.0.0)"]
|
995 |
timezone = ["tzdata"]
|
996 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
997 |
[[package]]
|
998 |
name = "pydantic-core"
|
999 |
version = "2.27.2"
|
@@ -1106,6 +1727,22 @@ files = [
|
|
1106 |
[package.dependencies]
|
1107 |
typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
|
1108 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1109 |
[[package]]
|
1110 |
name = "pydeck"
|
1111 |
version = "0.9.1"
|
@@ -1153,6 +1790,20 @@ files = [
|
|
1153 |
[package.dependencies]
|
1154 |
six = ">=1.5"
|
1155 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1156 |
[[package]]
|
1157 |
name = "pytz"
|
1158 |
version = "2025.1"
|
@@ -1164,6 +1815,68 @@ files = [
|
|
1164 |
{file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"},
|
1165 |
]
|
1166 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1167 |
[[package]]
|
1168 |
name = "referencing"
|
1169 |
version = "0.36.2"
|
@@ -1332,6 +2045,20 @@ files = [
|
|
1332 |
{file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"},
|
1333 |
]
|
1334 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1335 |
[[package]]
|
1336 |
name = "six"
|
1337 |
version = "1.17.0"
|
@@ -1415,6 +2142,38 @@ files = [
|
|
1415 |
doc = ["reno", "sphinx"]
|
1416 |
test = ["pytest", "tornado (>=4.5)", "typeguard"]
|
1417 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1418 |
[[package]]
|
1419 |
name = "toml"
|
1420 |
version = "0.10.2"
|
@@ -1426,6 +2185,47 @@ files = [
|
|
1426 |
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
|
1427 |
]
|
1428 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1429 |
[[package]]
|
1430 |
name = "tornado"
|
1431 |
version = "6.4.2"
|
@@ -1467,6 +2267,20 @@ notebook = ["ipywidgets (>=6)"]
|
|
1467 |
slack = ["slack-sdk"]
|
1468 |
telegram = ["requests"]
|
1469 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1470 |
[[package]]
|
1471 |
name = "typing-extensions"
|
1472 |
version = "4.12.2"
|
@@ -1478,6 +2292,21 @@ files = [
|
|
1478 |
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
|
1479 |
]
|
1480 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1481 |
[[package]]
|
1482 |
name = "tzdata"
|
1483 |
version = "2025.1"
|
@@ -1548,7 +2377,114 @@ files = [
|
|
1548 |
[package.extras]
|
1549 |
watchmedo = ["PyYAML (>=3.10)"]
|
1550 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1551 |
[metadata]
|
1552 |
lock-version = "2.0"
|
1553 |
python-versions = "3.10"
|
1554 |
-
content-hash = "
|
|
|
35 |
{file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
|
36 |
]
|
37 |
|
38 |
+
[[package]]
|
39 |
+
name = "anthropic"
|
40 |
+
version = "0.45.2"
|
41 |
+
description = "The official Python library for the anthropic API"
|
42 |
+
optional = false
|
43 |
+
python-versions = ">=3.8"
|
44 |
+
files = [
|
45 |
+
{file = "anthropic-0.45.2-py3-none-any.whl", hash = "sha256:ecd746f7274451dfcb7e1180571ead624c7e1195d1d46cb7c70143d2aedb4d35"},
|
46 |
+
{file = "anthropic-0.45.2.tar.gz", hash = "sha256:32a18b9ecd12c91b2be4cae6ca2ab46a06937b5aa01b21308d97a6d29794fb5e"},
|
47 |
+
]
|
48 |
+
|
49 |
+
[package.dependencies]
|
50 |
+
anyio = ">=3.5.0,<5"
|
51 |
+
distro = ">=1.7.0,<2"
|
52 |
+
httpx = ">=0.23.0,<1"
|
53 |
+
jiter = ">=0.4.0,<1"
|
54 |
+
pydantic = ">=1.9.0,<3"
|
55 |
+
sniffio = "*"
|
56 |
+
typing-extensions = ">=4.10,<5"
|
57 |
+
|
58 |
+
[package.extras]
|
59 |
+
bedrock = ["boto3 (>=1.28.57)", "botocore (>=1.31.57)"]
|
60 |
+
vertex = ["google-auth (>=2,<3)"]
|
61 |
+
|
62 |
[[package]]
|
63 |
name = "anyio"
|
64 |
version = "4.8.0"
|
|
|
248 |
[package.dependencies]
|
249 |
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
250 |
|
251 |
+
[[package]]
|
252 |
+
name = "cohere"
|
253 |
+
version = "5.13.12"
|
254 |
+
description = ""
|
255 |
+
optional = false
|
256 |
+
python-versions = "<4.0,>=3.9"
|
257 |
+
files = [
|
258 |
+
{file = "cohere-5.13.12-py3-none-any.whl", hash = "sha256:2a043591a3e5280b47716a6b311e4c7f58e799364113a9cb81b50cd4f6c95f7e"},
|
259 |
+
{file = "cohere-5.13.12.tar.gz", hash = "sha256:97bb9ac107e580780b941acbabd3aa5e71960e6835398292c46aaa8a0a4cab88"},
|
260 |
+
]
|
261 |
+
|
262 |
+
[package.dependencies]
|
263 |
+
fastavro = ">=1.9.4,<2.0.0"
|
264 |
+
httpx = ">=0.21.2"
|
265 |
+
httpx-sse = "0.4.0"
|
266 |
+
pydantic = ">=1.9.2"
|
267 |
+
pydantic-core = ">=2.18.2,<3.0.0"
|
268 |
+
requests = ">=2.0.0,<3.0.0"
|
269 |
+
tokenizers = ">=0.15,<1"
|
270 |
+
types-requests = ">=2.0.0,<3.0.0"
|
271 |
+
typing_extensions = ">=4.0.0"
|
272 |
+
|
273 |
[[package]]
|
274 |
name = "colorama"
|
275 |
version = "0.4.6"
|
|
|
281 |
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
282 |
]
|
283 |
|
284 |
+
[[package]]
|
285 |
+
name = "deprecated"
|
286 |
+
version = "1.2.18"
|
287 |
+
description = "Python @deprecated decorator to deprecate old python classes, functions or methods."
|
288 |
+
optional = false
|
289 |
+
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
|
290 |
+
files = [
|
291 |
+
{file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"},
|
292 |
+
{file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"},
|
293 |
+
]
|
294 |
+
|
295 |
+
[package.dependencies]
|
296 |
+
wrapt = ">=1.10,<2"
|
297 |
+
|
298 |
+
[package.extras]
|
299 |
+
dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools", "tox"]
|
300 |
+
|
301 |
[[package]]
|
302 |
name = "distro"
|
303 |
version = "1.9.0"
|
|
|
309 |
{file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"},
|
310 |
]
|
311 |
|
312 |
+
[[package]]
|
313 |
+
name = "eval-type-backport"
|
314 |
+
version = "0.2.2"
|
315 |
+
description = "Like `typing._eval_type`, but lets older Python versions use newer typing features."
|
316 |
+
optional = false
|
317 |
+
python-versions = ">=3.8"
|
318 |
+
files = [
|
319 |
+
{file = "eval_type_backport-0.2.2-py3-none-any.whl", hash = "sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a"},
|
320 |
+
{file = "eval_type_backport-0.2.2.tar.gz", hash = "sha256:f0576b4cf01ebb5bd358d02314d31846af5e07678387486e2c798af0e7d849c1"},
|
321 |
+
]
|
322 |
+
|
323 |
+
[package.extras]
|
324 |
+
tests = ["pytest"]
|
325 |
+
|
326 |
[[package]]
|
327 |
name = "exceptiongroup"
|
328 |
version = "1.2.2"
|
|
|
337 |
[package.extras]
|
338 |
test = ["pytest (>=6)"]
|
339 |
|
340 |
+
[[package]]
|
341 |
+
name = "executing"
|
342 |
+
version = "2.2.0"
|
343 |
+
description = "Get the currently executing AST node of a frame, and other information"
|
344 |
+
optional = false
|
345 |
+
python-versions = ">=3.8"
|
346 |
+
files = [
|
347 |
+
{file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"},
|
348 |
+
{file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"},
|
349 |
+
]
|
350 |
+
|
351 |
+
[package.extras]
|
352 |
+
tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"]
|
353 |
+
|
354 |
+
[[package]]
|
355 |
+
name = "fastavro"
|
356 |
+
version = "1.10.0"
|
357 |
+
description = "Fast read/write of AVRO files"
|
358 |
+
optional = false
|
359 |
+
python-versions = ">=3.9"
|
360 |
+
files = [
|
361 |
+
{file = "fastavro-1.10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1a9fe0672d2caf0fe54e3be659b13de3cad25a267f2073d6f4b9f8862acc31eb"},
|
362 |
+
{file = "fastavro-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86dd0410770e0c99363788f0584523709d85e57bb457372ec5c285a482c17fe6"},
|
363 |
+
{file = "fastavro-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:190e80dc7d77d03a6a8597a026146b32a0bbe45e3487ab4904dc8c1bebecb26d"},
|
364 |
+
{file = "fastavro-1.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bf570d63be9155c3fdc415f60a49c171548334b70fff0679a184b69c29b6bc61"},
|
365 |
+
{file = "fastavro-1.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e07abb6798e95dccecaec316265e35a018b523d1f3944ad396d0a93cb95e0a08"},
|
366 |
+
{file = "fastavro-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:37203097ed11d0b8fd3c004904748777d730cafd26e278167ea602eebdef8eb2"},
|
367 |
+
{file = "fastavro-1.10.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d183c075f527ab695a27ae75f210d4a86bce660cda2f85ae84d5606efc15ef50"},
|
368 |
+
{file = "fastavro-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7a95a2c0639bffd7c079b59e9a796bfc3a9acd78acff7088f7c54ade24e4a77"},
|
369 |
+
{file = "fastavro-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a678153b5da1b024a32ec3f611b2e7afd24deac588cb51dd1b0019935191a6d"},
|
370 |
+
{file = "fastavro-1.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67a597a5cfea4dddcf8b49eaf8c2b5ffee7fda15b578849185bc690ec0cd0d8f"},
|
371 |
+
{file = "fastavro-1.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fd689724760b17f69565d8a4e7785ed79becd451d1c99263c40cb2d6491f1d4"},
|
372 |
+
{file = "fastavro-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f949d463f9ac4221128a51e4e34e2562f401e5925adcadfd28637a73df6c2d8"},
|
373 |
+
{file = "fastavro-1.10.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cfe57cb0d72f304bd0dcc5a3208ca6a7363a9ae76f3073307d095c9d053b29d4"},
|
374 |
+
{file = "fastavro-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74e517440c824cb65fb29d3e3903a9406f4d7c75490cef47e55c4c82cdc66270"},
|
375 |
+
{file = "fastavro-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:203c17d44cadde76e8eecb30f2d1b4f33eb478877552d71f049265dc6f2ecd10"},
|
376 |
+
{file = "fastavro-1.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6575be7f2b5f94023b5a4e766b0251924945ad55e9a96672dc523656d17fe251"},
|
377 |
+
{file = "fastavro-1.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe471deb675ed2f01ee2aac958fbf8ebb13ea00fa4ce7f87e57710a0bc592208"},
|
378 |
+
{file = "fastavro-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:567ff515f2a5d26d9674b31c95477f3e6022ec206124c62169bc2ffaf0889089"},
|
379 |
+
{file = "fastavro-1.10.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:82263af0adfddb39c85f9517d736e1e940fe506dfcc35bc9ab9f85e0fa9236d8"},
|
380 |
+
{file = "fastavro-1.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:566c193109ff0ff84f1072a165b7106c4f96050078a4e6ac7391f81ca1ef3efa"},
|
381 |
+
{file = "fastavro-1.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e400d2e55d068404d9fea7c5021f8b999c6f9d9afa1d1f3652ec92c105ffcbdd"},
|
382 |
+
{file = "fastavro-1.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b8227497f71565270f9249fc9af32a93644ca683a0167cfe66d203845c3a038"},
|
383 |
+
{file = "fastavro-1.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e62d04c65461b30ac6d314e4197ad666371e97ae8cb2c16f971d802f6c7f514"},
|
384 |
+
{file = "fastavro-1.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:86baf8c9740ab570d0d4d18517da71626fe9be4d1142bea684db52bd5adb078f"},
|
385 |
+
{file = "fastavro-1.10.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5bccbb6f8e9e5b834cca964f0e6ebc27ebe65319d3940b0b397751a470f45612"},
|
386 |
+
{file = "fastavro-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0132f6b0b53f61a0a508a577f64beb5de1a5e068a9b4c0e1df6e3b66568eec4"},
|
387 |
+
{file = "fastavro-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca37a363b711202c6071a6d4787e68e15fa3ab108261058c4aae853c582339af"},
|
388 |
+
{file = "fastavro-1.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cf38cecdd67ca9bd92e6e9ba34a30db6343e7a3bedf171753ee78f8bd9f8a670"},
|
389 |
+
{file = "fastavro-1.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f4dd10e0ed42982122d20cdf1a88aa50ee09e5a9cd9b39abdffb1aa4f5b76435"},
|
390 |
+
{file = "fastavro-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:aaef147dc14dd2d7823246178fd06fc5e477460e070dc6d9e07dd8193a6bc93c"},
|
391 |
+
{file = "fastavro-1.10.0.tar.gz", hash = "sha256:47bf41ac6d52cdfe4a3da88c75a802321321b37b663a900d12765101a5d6886f"},
|
392 |
+
]
|
393 |
+
|
394 |
+
[package.extras]
|
395 |
+
codecs = ["cramjam", "lz4", "zstandard"]
|
396 |
+
lz4 = ["lz4"]
|
397 |
+
snappy = ["cramjam"]
|
398 |
+
zstandard = ["zstandard"]
|
399 |
+
|
400 |
+
[[package]]
|
401 |
+
name = "filelock"
|
402 |
+
version = "3.17.0"
|
403 |
+
description = "A platform independent file lock."
|
404 |
+
optional = false
|
405 |
+
python-versions = ">=3.9"
|
406 |
+
files = [
|
407 |
+
{file = "filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338"},
|
408 |
+
{file = "filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e"},
|
409 |
+
]
|
410 |
+
|
411 |
+
[package.extras]
|
412 |
+
docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"]
|
413 |
+
testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"]
|
414 |
+
typing = ["typing-extensions (>=4.12.2)"]
|
415 |
+
|
416 |
+
[[package]]
|
417 |
+
name = "fsspec"
|
418 |
+
version = "2025.2.0"
|
419 |
+
description = "File-system specification"
|
420 |
+
optional = false
|
421 |
+
python-versions = ">=3.8"
|
422 |
+
files = [
|
423 |
+
{file = "fsspec-2025.2.0-py3-none-any.whl", hash = "sha256:9de2ad9ce1f85e1931858535bc882543171d197001a0a5eb2ddc04f1781ab95b"},
|
424 |
+
{file = "fsspec-2025.2.0.tar.gz", hash = "sha256:1c24b16eaa0a1798afa0337aa0db9b256718ab2a89c425371f5628d22c3b6afd"},
|
425 |
+
]
|
426 |
+
|
427 |
+
[package.extras]
|
428 |
+
abfs = ["adlfs"]
|
429 |
+
adl = ["adlfs"]
|
430 |
+
arrow = ["pyarrow (>=1)"]
|
431 |
+
dask = ["dask", "distributed"]
|
432 |
+
dev = ["pre-commit", "ruff"]
|
433 |
+
doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"]
|
434 |
+
dropbox = ["dropbox", "dropboxdrivefs", "requests"]
|
435 |
+
full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"]
|
436 |
+
fuse = ["fusepy"]
|
437 |
+
gcs = ["gcsfs"]
|
438 |
+
git = ["pygit2"]
|
439 |
+
github = ["requests"]
|
440 |
+
gs = ["gcsfs"]
|
441 |
+
gui = ["panel"]
|
442 |
+
hdfs = ["pyarrow (>=1)"]
|
443 |
+
http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"]
|
444 |
+
libarchive = ["libarchive-c"]
|
445 |
+
oci = ["ocifs"]
|
446 |
+
s3 = ["s3fs"]
|
447 |
+
sftp = ["paramiko"]
|
448 |
+
smb = ["smbprotocol"]
|
449 |
+
ssh = ["paramiko"]
|
450 |
+
test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"]
|
451 |
+
test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"]
|
452 |
+
test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"]
|
453 |
+
tqdm = ["tqdm"]
|
454 |
+
|
455 |
[[package]]
|
456 |
name = "gitdb"
|
457 |
version = "4.0.12"
|
|
|
484 |
doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"]
|
485 |
test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"]
|
486 |
|
487 |
+
[[package]]
|
488 |
+
name = "google-auth"
|
489 |
+
version = "2.38.0"
|
490 |
+
description = "Google Authentication Library"
|
491 |
+
optional = false
|
492 |
+
python-versions = ">=3.7"
|
493 |
+
files = [
|
494 |
+
{file = "google_auth-2.38.0-py2.py3-none-any.whl", hash = "sha256:e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a"},
|
495 |
+
{file = "google_auth-2.38.0.tar.gz", hash = "sha256:8285113607d3b80a3f1543b75962447ba8a09fe85783432a784fdeef6ac094c4"},
|
496 |
+
]
|
497 |
+
|
498 |
+
[package.dependencies]
|
499 |
+
cachetools = ">=2.0.0,<6.0"
|
500 |
+
pyasn1-modules = ">=0.2.1"
|
501 |
+
rsa = ">=3.1.4,<5"
|
502 |
+
|
503 |
+
[package.extras]
|
504 |
+
aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"]
|
505 |
+
enterprise-cert = ["cryptography", "pyopenssl"]
|
506 |
+
pyjwt = ["cryptography (>=38.0.3)", "pyjwt (>=2.0)"]
|
507 |
+
pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"]
|
508 |
+
reauth = ["pyu2f (>=0.1.5)"]
|
509 |
+
requests = ["requests (>=2.20.0,<3.0.0.dev0)"]
|
510 |
+
|
511 |
+
[[package]]
|
512 |
+
name = "googleapis-common-protos"
|
513 |
+
version = "1.67.0"
|
514 |
+
description = "Common protobufs used in Google APIs"
|
515 |
+
optional = false
|
516 |
+
python-versions = ">=3.7"
|
517 |
+
files = [
|
518 |
+
{file = "googleapis_common_protos-1.67.0-py2.py3-none-any.whl", hash = "sha256:579de760800d13616f51cf8be00c876f00a9f146d3e6510e19d1f4111758b741"},
|
519 |
+
{file = "googleapis_common_protos-1.67.0.tar.gz", hash = "sha256:21398025365f138be356d5923e9168737d94d46a72aefee4a6110a1f23463c86"},
|
520 |
+
]
|
521 |
+
|
522 |
+
[package.dependencies]
|
523 |
+
protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0"
|
524 |
+
|
525 |
+
[package.extras]
|
526 |
+
grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"]
|
527 |
+
|
528 |
+
[[package]]
|
529 |
+
name = "griffe"
|
530 |
+
version = "1.5.7"
|
531 |
+
description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API."
|
532 |
+
optional = false
|
533 |
+
python-versions = ">=3.9"
|
534 |
+
files = [
|
535 |
+
{file = "griffe-1.5.7-py3-none-any.whl", hash = "sha256:4af8ec834b64de954d447c7b6672426bb145e71605c74a4e22d510cc79fe7d8b"},
|
536 |
+
{file = "griffe-1.5.7.tar.gz", hash = "sha256:465238c86deaf1137761f700fb343edd8ffc846d72f6de43c3c345ccdfbebe92"},
|
537 |
+
]
|
538 |
+
|
539 |
+
[package.dependencies]
|
540 |
+
colorama = ">=0.4"
|
541 |
+
|
542 |
+
[[package]]
|
543 |
+
name = "groq"
|
544 |
+
version = "0.18.0"
|
545 |
+
description = "The official Python library for the groq API"
|
546 |
+
optional = false
|
547 |
+
python-versions = ">=3.8"
|
548 |
+
files = [
|
549 |
+
{file = "groq-0.18.0-py3-none-any.whl", hash = "sha256:81d5ac00057a45d8ce559d23ab5d3b3893011d1f12c35187ab35a9182d826ea6"},
|
550 |
+
{file = "groq-0.18.0.tar.gz", hash = "sha256:8e2ccfea406d68b3525af4b7c0e321fcb3d2a73fc60bb70b4156e6cd88c72f03"},
|
551 |
+
]
|
552 |
+
|
553 |
+
[package.dependencies]
|
554 |
+
anyio = ">=3.5.0,<5"
|
555 |
+
distro = ">=1.7.0,<2"
|
556 |
+
httpx = ">=0.23.0,<1"
|
557 |
+
pydantic = ">=1.9.0,<3"
|
558 |
+
sniffio = "*"
|
559 |
+
typing-extensions = ">=4.10,<5"
|
560 |
+
|
561 |
[[package]]
|
562 |
name = "h11"
|
563 |
version = "0.14.0"
|
|
|
614 |
socks = ["socksio (==1.*)"]
|
615 |
zstd = ["zstandard (>=0.18.0)"]
|
616 |
|
617 |
+
[[package]]
|
618 |
+
name = "httpx-sse"
|
619 |
+
version = "0.4.0"
|
620 |
+
description = "Consume Server-Sent Event (SSE) messages with HTTPX."
|
621 |
+
optional = false
|
622 |
+
python-versions = ">=3.8"
|
623 |
+
files = [
|
624 |
+
{file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"},
|
625 |
+
{file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"},
|
626 |
+
]
|
627 |
+
|
628 |
+
[[package]]
|
629 |
+
name = "huggingface-hub"
|
630 |
+
version = "0.28.1"
|
631 |
+
description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
|
632 |
+
optional = false
|
633 |
+
python-versions = ">=3.8.0"
|
634 |
+
files = [
|
635 |
+
{file = "huggingface_hub-0.28.1-py3-none-any.whl", hash = "sha256:aa6b9a3ffdae939b72c464dbb0d7f99f56e649b55c3d52406f49e0a5a620c0a7"},
|
636 |
+
{file = "huggingface_hub-0.28.1.tar.gz", hash = "sha256:893471090c98e3b6efbdfdacafe4052b20b84d59866fb6f54c33d9af18c303ae"},
|
637 |
+
]
|
638 |
+
|
639 |
+
[package.dependencies]
|
640 |
+
filelock = "*"
|
641 |
+
fsspec = ">=2023.5.0"
|
642 |
+
packaging = ">=20.9"
|
643 |
+
pyyaml = ">=5.1"
|
644 |
+
requests = "*"
|
645 |
+
tqdm = ">=4.42.1"
|
646 |
+
typing-extensions = ">=3.7.4.3"
|
647 |
+
|
648 |
+
[package.extras]
|
649 |
+
all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"]
|
650 |
+
cli = ["InquirerPy (==0.3.4)"]
|
651 |
+
dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"]
|
652 |
+
fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"]
|
653 |
+
hf-transfer = ["hf-transfer (>=0.1.4)"]
|
654 |
+
inference = ["aiohttp"]
|
655 |
+
quality = ["libcst (==1.4.0)", "mypy (==1.5.1)", "ruff (>=0.9.0)"]
|
656 |
+
tensorflow = ["graphviz", "pydot", "tensorflow"]
|
657 |
+
tensorflow-testing = ["keras (<3.0)", "tensorflow"]
|
658 |
+
testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"]
|
659 |
+
torch = ["safetensors[torch]", "torch"]
|
660 |
+
typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"]
|
661 |
+
|
662 |
[[package]]
|
663 |
name = "idna"
|
664 |
version = "3.10"
|
|
|
673 |
[package.extras]
|
674 |
all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
|
675 |
|
676 |
+
[[package]]
|
677 |
+
name = "importlib-metadata"
|
678 |
+
version = "8.5.0"
|
679 |
+
description = "Read metadata from Python packages"
|
680 |
+
optional = false
|
681 |
+
python-versions = ">=3.8"
|
682 |
+
files = [
|
683 |
+
{file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"},
|
684 |
+
{file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"},
|
685 |
+
]
|
686 |
+
|
687 |
+
[package.dependencies]
|
688 |
+
zipp = ">=3.20"
|
689 |
+
|
690 |
+
[package.extras]
|
691 |
+
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
|
692 |
+
cover = ["pytest-cov"]
|
693 |
+
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
|
694 |
+
enabler = ["pytest-enabler (>=2.2)"]
|
695 |
+
perf = ["ipython"]
|
696 |
+
test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
|
697 |
+
type = ["pytest-mypy"]
|
698 |
+
|
699 |
[[package]]
|
700 |
name = "jinja2"
|
701 |
version = "3.1.5"
|
|
|
798 |
{file = "jiter-0.8.2.tar.gz", hash = "sha256:cd73d3e740666d0e639f678adb176fad25c1bcbdae88d8d7b857e1783bb4212d"},
|
799 |
]
|
800 |
|
801 |
+
[[package]]
|
802 |
+
name = "jsonpath-python"
|
803 |
+
version = "1.0.6"
|
804 |
+
description = "A more powerful JSONPath implementation in modern python"
|
805 |
+
optional = false
|
806 |
+
python-versions = ">=3.6"
|
807 |
+
files = [
|
808 |
+
{file = "jsonpath-python-1.0.6.tar.gz", hash = "sha256:dd5be4a72d8a2995c3f583cf82bf3cd1a9544cfdabf2d22595b67aff07349666"},
|
809 |
+
{file = "jsonpath_python-1.0.6-py3-none-any.whl", hash = "sha256:1e3b78df579f5efc23565293612decee04214609208a2335884b3ee3f786b575"},
|
810 |
+
]
|
811 |
+
|
812 |
[[package]]
|
813 |
name = "jsonschema"
|
814 |
version = "4.23.0"
|
|
|
844 |
[package.dependencies]
|
845 |
referencing = ">=0.31.0"
|
846 |
|
847 |
+
[[package]]
|
848 |
+
name = "logfire"
|
849 |
+
version = "3.5.3"
|
850 |
+
description = "The best Python observability tool! 🪵🔥"
|
851 |
+
optional = false
|
852 |
+
python-versions = ">=3.8"
|
853 |
+
files = [
|
854 |
+
{file = "logfire-3.5.3-py3-none-any.whl", hash = "sha256:d06186aaf08fc9d144a71548ba3e3a3fcbe4dddd84241243957167b870c4a731"},
|
855 |
+
{file = "logfire-3.5.3.tar.gz", hash = "sha256:cb4863cde51a4784fcdf78ac178c2a6f739b1c6c6061bb8662edf7eed7b643ac"},
|
856 |
+
]
|
857 |
+
|
858 |
+
[package.dependencies]
|
859 |
+
executing = ">=2.0.1"
|
860 |
+
opentelemetry-exporter-otlp-proto-http = ">=1.21.0,<1.31.0"
|
861 |
+
opentelemetry-instrumentation = ">=0.41b0"
|
862 |
+
opentelemetry-sdk = ">=1.21.0,<1.31.0"
|
863 |
+
protobuf = ">=4.23.4"
|
864 |
+
rich = ">=13.4.2"
|
865 |
+
tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""}
|
866 |
+
typing-extensions = ">=4.1.0"
|
867 |
+
|
868 |
+
[package.extras]
|
869 |
+
aiohttp = ["opentelemetry-instrumentation-aiohttp-client (>=0.42b0)"]
|
870 |
+
asgi = ["opentelemetry-instrumentation-asgi (>=0.42b0)"]
|
871 |
+
asyncpg = ["opentelemetry-instrumentation-asyncpg (>=0.42b0)"]
|
872 |
+
aws-lambda = ["opentelemetry-instrumentation-aws-lambda (>=0.42b0)"]
|
873 |
+
celery = ["opentelemetry-instrumentation-celery (>=0.42b0)"]
|
874 |
+
django = ["opentelemetry-instrumentation-django (>=0.42b0)"]
|
875 |
+
fastapi = ["opentelemetry-instrumentation-fastapi (>=0.42b0)"]
|
876 |
+
flask = ["opentelemetry-instrumentation-flask (>=0.42b0)"]
|
877 |
+
httpx = ["opentelemetry-instrumentation-httpx (>=0.42b0)"]
|
878 |
+
mysql = ["opentelemetry-instrumentation-mysql (>=0.42b0)"]
|
879 |
+
psycopg = ["opentelemetry-instrumentation-psycopg (>=0.42b0)", "packaging"]
|
880 |
+
psycopg2 = ["opentelemetry-instrumentation-psycopg2 (>=0.42b0)", "packaging"]
|
881 |
+
pymongo = ["opentelemetry-instrumentation-pymongo (>=0.42b0)"]
|
882 |
+
redis = ["opentelemetry-instrumentation-redis (>=0.42b0)"]
|
883 |
+
requests = ["opentelemetry-instrumentation-requests (>=0.42b0)"]
|
884 |
+
sqlalchemy = ["opentelemetry-instrumentation-sqlalchemy (>=0.42b0)"]
|
885 |
+
sqlite3 = ["opentelemetry-instrumentation-sqlite3 (>=0.42b0)"]
|
886 |
+
starlette = ["opentelemetry-instrumentation-starlette (>=0.42b0)"]
|
887 |
+
system-metrics = ["opentelemetry-instrumentation-system-metrics (>=0.42b0)"]
|
888 |
+
wsgi = ["opentelemetry-instrumentation-wsgi (>=0.42b0)"]
|
889 |
+
|
890 |
+
[[package]]
|
891 |
+
name = "logfire-api"
|
892 |
+
version = "3.5.3"
|
893 |
+
description = "Shim for the Logfire SDK which does nothing unless Logfire is installed"
|
894 |
+
optional = false
|
895 |
+
python-versions = ">=3.8"
|
896 |
+
files = [
|
897 |
+
{file = "logfire_api-3.5.3-py3-none-any.whl", hash = "sha256:abecb0d2e43f900c58582c333f261c8f9b187e72933cf3f5aec93685666f86ae"},
|
898 |
+
{file = "logfire_api-3.5.3.tar.gz", hash = "sha256:2c15a0ad6f12f39003f62550a35f9247c29c87b466f7839836f346867442a55c"},
|
899 |
+
]
|
900 |
+
|
901 |
[[package]]
|
902 |
name = "markdown-it-py"
|
903 |
version = "3.0.0"
|
|
|
1003 |
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
|
1004 |
]
|
1005 |
|
1006 |
+
[[package]]
|
1007 |
+
name = "mistralai"
|
1008 |
+
version = "1.5.0"
|
1009 |
+
description = "Python Client SDK for the Mistral AI API."
|
1010 |
+
optional = false
|
1011 |
+
python-versions = ">=3.8"
|
1012 |
+
files = [
|
1013 |
+
{file = "mistralai-1.5.0-py3-none-any.whl", hash = "sha256:9372537719f87bd6f9feef4747d0bf1f4fbe971f8c02945ca4b4bf3c94571c97"},
|
1014 |
+
{file = "mistralai-1.5.0.tar.gz", hash = "sha256:fd94bc93bc25aad9c6dd8005b1a0bc4ba1250c6b3fbf855a49936989cc6e5c0d"},
|
1015 |
+
]
|
1016 |
+
|
1017 |
+
[package.dependencies]
|
1018 |
+
eval-type-backport = ">=0.2.0"
|
1019 |
+
httpx = ">=0.27.0"
|
1020 |
+
jsonpath-python = ">=1.0.6"
|
1021 |
+
pydantic = ">=2.9.0"
|
1022 |
+
python-dateutil = ">=2.8.2"
|
1023 |
+
typing-inspect = ">=0.9.0"
|
1024 |
+
|
1025 |
+
[package.extras]
|
1026 |
+
gcp = ["google-auth (>=2.27.0)", "requests (>=2.32.3)"]
|
1027 |
+
|
1028 |
+
[[package]]
|
1029 |
+
name = "mypy-extensions"
|
1030 |
+
version = "1.0.0"
|
1031 |
+
description = "Type system extensions for programs checked with the mypy type checker."
|
1032 |
+
optional = false
|
1033 |
+
python-versions = ">=3.5"
|
1034 |
+
files = [
|
1035 |
+
{file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
|
1036 |
+
{file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
|
1037 |
+
]
|
1038 |
+
|
1039 |
[[package]]
|
1040 |
name = "narwhals"
|
1041 |
version = "1.26.0"
|
|
|
1151 |
datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"]
|
1152 |
realtime = ["websockets (>=13,<15)"]
|
1153 |
|
1154 |
+
[[package]]
|
1155 |
+
name = "opentelemetry-api"
|
1156 |
+
version = "1.30.0"
|
1157 |
+
description = "OpenTelemetry Python API"
|
1158 |
+
optional = false
|
1159 |
+
python-versions = ">=3.8"
|
1160 |
+
files = [
|
1161 |
+
{file = "opentelemetry_api-1.30.0-py3-none-any.whl", hash = "sha256:d5f5284890d73fdf47f843dda3210edf37a38d66f44f2b5aedc1e89ed455dc09"},
|
1162 |
+
{file = "opentelemetry_api-1.30.0.tar.gz", hash = "sha256:375893400c1435bf623f7dfb3bcd44825fe6b56c34d0667c542ea8257b1a1240"},
|
1163 |
+
]
|
1164 |
+
|
1165 |
+
[package.dependencies]
|
1166 |
+
deprecated = ">=1.2.6"
|
1167 |
+
importlib-metadata = ">=6.0,<=8.5.0"
|
1168 |
+
|
1169 |
+
[[package]]
|
1170 |
+
name = "opentelemetry-exporter-otlp-proto-common"
|
1171 |
+
version = "1.30.0"
|
1172 |
+
description = "OpenTelemetry Protobuf encoding"
|
1173 |
+
optional = false
|
1174 |
+
python-versions = ">=3.8"
|
1175 |
+
files = [
|
1176 |
+
{file = "opentelemetry_exporter_otlp_proto_common-1.30.0-py3-none-any.whl", hash = "sha256:5468007c81aa9c44dc961ab2cf368a29d3475977df83b4e30aeed42aa7bc3b38"},
|
1177 |
+
{file = "opentelemetry_exporter_otlp_proto_common-1.30.0.tar.gz", hash = "sha256:ddbfbf797e518411857d0ca062c957080279320d6235a279f7b64ced73c13897"},
|
1178 |
+
]
|
1179 |
+
|
1180 |
+
[package.dependencies]
|
1181 |
+
opentelemetry-proto = "1.30.0"
|
1182 |
+
|
1183 |
+
[[package]]
|
1184 |
+
name = "opentelemetry-exporter-otlp-proto-http"
|
1185 |
+
version = "1.30.0"
|
1186 |
+
description = "OpenTelemetry Collector Protobuf over HTTP Exporter"
|
1187 |
+
optional = false
|
1188 |
+
python-versions = ">=3.8"
|
1189 |
+
files = [
|
1190 |
+
{file = "opentelemetry_exporter_otlp_proto_http-1.30.0-py3-none-any.whl", hash = "sha256:9578e790e579931c5ffd50f1e6975cbdefb6a0a0a5dea127a6ae87df10e0a589"},
|
1191 |
+
{file = "opentelemetry_exporter_otlp_proto_http-1.30.0.tar.gz", hash = "sha256:c3ae75d4181b1e34a60662a6814d0b94dd33b628bee5588a878bed92cee6abdc"},
|
1192 |
+
]
|
1193 |
+
|
1194 |
+
[package.dependencies]
|
1195 |
+
deprecated = ">=1.2.6"
|
1196 |
+
googleapis-common-protos = ">=1.52,<2.0"
|
1197 |
+
opentelemetry-api = ">=1.15,<2.0"
|
1198 |
+
opentelemetry-exporter-otlp-proto-common = "1.30.0"
|
1199 |
+
opentelemetry-proto = "1.30.0"
|
1200 |
+
opentelemetry-sdk = ">=1.30.0,<1.31.0"
|
1201 |
+
requests = ">=2.7,<3.0"
|
1202 |
+
|
1203 |
+
[[package]]
|
1204 |
+
name = "opentelemetry-instrumentation"
|
1205 |
+
version = "0.51b0"
|
1206 |
+
description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python"
|
1207 |
+
optional = false
|
1208 |
+
python-versions = ">=3.8"
|
1209 |
+
files = [
|
1210 |
+
{file = "opentelemetry_instrumentation-0.51b0-py3-none-any.whl", hash = "sha256:c6de8bd26b75ec8b0e54dff59e198946e29de6a10ec65488c357d4b34aa5bdcf"},
|
1211 |
+
{file = "opentelemetry_instrumentation-0.51b0.tar.gz", hash = "sha256:4ca266875e02f3988536982467f7ef8c32a38b8895490ddce9ad9604649424fa"},
|
1212 |
+
]
|
1213 |
+
|
1214 |
+
[package.dependencies]
|
1215 |
+
opentelemetry-api = ">=1.4,<2.0"
|
1216 |
+
opentelemetry-semantic-conventions = "0.51b0"
|
1217 |
+
packaging = ">=18.0"
|
1218 |
+
wrapt = ">=1.0.0,<2.0.0"
|
1219 |
+
|
1220 |
+
[[package]]
|
1221 |
+
name = "opentelemetry-proto"
|
1222 |
+
version = "1.30.0"
|
1223 |
+
description = "OpenTelemetry Python Proto"
|
1224 |
+
optional = false
|
1225 |
+
python-versions = ">=3.8"
|
1226 |
+
files = [
|
1227 |
+
{file = "opentelemetry_proto-1.30.0-py3-none-any.whl", hash = "sha256:c6290958ff3ddacc826ca5abbeb377a31c2334387352a259ba0df37c243adc11"},
|
1228 |
+
{file = "opentelemetry_proto-1.30.0.tar.gz", hash = "sha256:afe5c9c15e8b68d7c469596e5b32e8fc085eb9febdd6fb4e20924a93a0389179"},
|
1229 |
+
]
|
1230 |
+
|
1231 |
+
[package.dependencies]
|
1232 |
+
protobuf = ">=5.0,<6.0"
|
1233 |
+
|
1234 |
+
[[package]]
|
1235 |
+
name = "opentelemetry-sdk"
|
1236 |
+
version = "1.30.0"
|
1237 |
+
description = "OpenTelemetry Python SDK"
|
1238 |
+
optional = false
|
1239 |
+
python-versions = ">=3.8"
|
1240 |
+
files = [
|
1241 |
+
{file = "opentelemetry_sdk-1.30.0-py3-none-any.whl", hash = "sha256:14fe7afc090caad881addb6926cec967129bd9260c4d33ae6a217359f6b61091"},
|
1242 |
+
{file = "opentelemetry_sdk-1.30.0.tar.gz", hash = "sha256:c9287a9e4a7614b9946e933a67168450b9ab35f08797eb9bc77d998fa480fa18"},
|
1243 |
+
]
|
1244 |
+
|
1245 |
+
[package.dependencies]
|
1246 |
+
opentelemetry-api = "1.30.0"
|
1247 |
+
opentelemetry-semantic-conventions = "0.51b0"
|
1248 |
+
typing-extensions = ">=3.7.4"
|
1249 |
+
|
1250 |
+
[[package]]
|
1251 |
+
name = "opentelemetry-semantic-conventions"
|
1252 |
+
version = "0.51b0"
|
1253 |
+
description = "OpenTelemetry Semantic Conventions"
|
1254 |
+
optional = false
|
1255 |
+
python-versions = ">=3.8"
|
1256 |
+
files = [
|
1257 |
+
{file = "opentelemetry_semantic_conventions-0.51b0-py3-none-any.whl", hash = "sha256:fdc777359418e8d06c86012c3dc92c88a6453ba662e941593adb062e48c2eeae"},
|
1258 |
+
{file = "opentelemetry_semantic_conventions-0.51b0.tar.gz", hash = "sha256:3fabf47f35d1fd9aebcdca7e6802d86bd5ebc3bc3408b7e3248dde6e87a18c47"},
|
1259 |
+
]
|
1260 |
+
|
1261 |
+
[package.dependencies]
|
1262 |
+
deprecated = ">=1.2.6"
|
1263 |
+
opentelemetry-api = "1.30.0"
|
1264 |
+
|
1265 |
[[package]]
|
1266 |
name = "packaging"
|
1267 |
version = "24.2"
|
|
|
1517 |
[package.extras]
|
1518 |
test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"]
|
1519 |
|
1520 |
+
[[package]]
|
1521 |
+
name = "pyasn1"
|
1522 |
+
version = "0.6.1"
|
1523 |
+
description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)"
|
1524 |
+
optional = false
|
1525 |
+
python-versions = ">=3.8"
|
1526 |
+
files = [
|
1527 |
+
{file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"},
|
1528 |
+
{file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"},
|
1529 |
+
]
|
1530 |
+
|
1531 |
+
[[package]]
|
1532 |
+
name = "pyasn1-modules"
|
1533 |
+
version = "0.4.1"
|
1534 |
+
description = "A collection of ASN.1-based protocols modules"
|
1535 |
+
optional = false
|
1536 |
+
python-versions = ">=3.8"
|
1537 |
+
files = [
|
1538 |
+
{file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"},
|
1539 |
+
{file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"},
|
1540 |
+
]
|
1541 |
+
|
1542 |
+
[package.dependencies]
|
1543 |
+
pyasn1 = ">=0.4.6,<0.7.0"
|
1544 |
+
|
1545 |
[[package]]
|
1546 |
name = "pydantic"
|
1547 |
version = "2.10.6"
|
|
|
1562 |
email = ["email-validator (>=2.0.0)"]
|
1563 |
timezone = ["tzdata"]
|
1564 |
|
1565 |
+
[[package]]
|
1566 |
+
name = "pydantic-ai"
|
1567 |
+
version = "0.0.24"
|
1568 |
+
description = "Agent Framework / shim to use Pydantic with LLMs"
|
1569 |
+
optional = false
|
1570 |
+
python-versions = ">=3.9"
|
1571 |
+
files = [
|
1572 |
+
{file = "pydantic_ai-0.0.24-py3-none-any.whl", hash = "sha256:dc75f01be0218c2f46fe90a3d43ef4700d764bfbe6240fca9c18a4509f6b86cf"},
|
1573 |
+
{file = "pydantic_ai-0.0.24.tar.gz", hash = "sha256:7af076cbdb5f4c6ac8fae5273f02b67130b69d1cdaed87a022f79f42449f83a9"},
|
1574 |
+
]
|
1575 |
+
|
1576 |
+
[package.dependencies]
|
1577 |
+
pydantic-ai-slim = {version = "0.0.24", extras = ["anthropic", "cohere", "groq", "mistral", "openai", "vertexai"]}
|
1578 |
+
|
1579 |
+
[package.extras]
|
1580 |
+
examples = ["pydantic-ai-examples (==0.0.24)"]
|
1581 |
+
logfire = ["logfire (>=2.3)"]
|
1582 |
+
|
1583 |
+
[[package]]
|
1584 |
+
name = "pydantic-ai-slim"
|
1585 |
+
version = "0.0.24"
|
1586 |
+
description = "Agent Framework / shim to use Pydantic with LLMs, slim package"
|
1587 |
+
optional = false
|
1588 |
+
python-versions = ">=3.9"
|
1589 |
+
files = [
|
1590 |
+
{file = "pydantic_ai_slim-0.0.24-py3-none-any.whl", hash = "sha256:7cd3aec6df572780323169a6dfa114640f76c2e2b21105efcd5cce2b459c7b17"},
|
1591 |
+
{file = "pydantic_ai_slim-0.0.24.tar.gz", hash = "sha256:c82d5ffed6d3a149e64701d0e4cfa09256a8ef9feb296281f908af19050d2bf1"},
|
1592 |
+
]
|
1593 |
+
|
1594 |
+
[package.dependencies]
|
1595 |
+
anthropic = {version = ">=0.40.0", optional = true, markers = "extra == \"anthropic\""}
|
1596 |
+
cohere = {version = ">=5.13.11", optional = true, markers = "extra == \"cohere\""}
|
1597 |
+
eval-type-backport = ">=0.2.0"
|
1598 |
+
google-auth = {version = ">=2.36.0", optional = true, markers = "extra == \"vertexai\""}
|
1599 |
+
griffe = ">=1.3.2"
|
1600 |
+
groq = {version = ">=0.12.0", optional = true, markers = "extra == \"groq\""}
|
1601 |
+
httpx = ">=0.27"
|
1602 |
+
logfire-api = ">=1.2.0"
|
1603 |
+
mistralai = {version = ">=1.2.5", optional = true, markers = "extra == \"mistral\""}
|
1604 |
+
openai = {version = ">=1.61.0", optional = true, markers = "extra == \"openai\""}
|
1605 |
+
pydantic = ">=2.10"
|
1606 |
+
pydantic-graph = "0.0.24"
|
1607 |
+
requests = {version = ">=2.32.3", optional = true, markers = "extra == \"vertexai\""}
|
1608 |
+
|
1609 |
+
[package.extras]
|
1610 |
+
anthropic = ["anthropic (>=0.40.0)"]
|
1611 |
+
cohere = ["cohere (>=5.13.11)"]
|
1612 |
+
groq = ["groq (>=0.12.0)"]
|
1613 |
+
logfire = ["logfire (>=2.3)"]
|
1614 |
+
mistral = ["mistralai (>=1.2.5)"]
|
1615 |
+
openai = ["openai (>=1.61.0)"]
|
1616 |
+
vertexai = ["google-auth (>=2.36.0)", "requests (>=2.32.3)"]
|
1617 |
+
|
1618 |
[[package]]
|
1619 |
name = "pydantic-core"
|
1620 |
version = "2.27.2"
|
|
|
1727 |
[package.dependencies]
|
1728 |
typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
|
1729 |
|
1730 |
+
[[package]]
|
1731 |
+
name = "pydantic-graph"
|
1732 |
+
version = "0.0.24"
|
1733 |
+
description = "Graph and state machine library"
|
1734 |
+
optional = false
|
1735 |
+
python-versions = ">=3.9"
|
1736 |
+
files = [
|
1737 |
+
{file = "pydantic_graph-0.0.24-py3-none-any.whl", hash = "sha256:29d763cb77a2533bcbd07ff34fff36316617d1e62a926a7a15df59f6103fc74e"},
|
1738 |
+
{file = "pydantic_graph-0.0.24.tar.gz", hash = "sha256:40550e2310002f411b1fc0636206222caa5459ede7c44da5c856b3526b3096cd"},
|
1739 |
+
]
|
1740 |
+
|
1741 |
+
[package.dependencies]
|
1742 |
+
httpx = ">=0.27"
|
1743 |
+
logfire-api = ">=1.2.0"
|
1744 |
+
pydantic = ">=2.10"
|
1745 |
+
|
1746 |
[[package]]
|
1747 |
name = "pydeck"
|
1748 |
version = "0.9.1"
|
|
|
1790 |
[package.dependencies]
|
1791 |
six = ">=1.5"
|
1792 |
|
1793 |
+
[[package]]
|
1794 |
+
name = "python-dotenv"
|
1795 |
+
version = "1.0.1"
|
1796 |
+
description = "Read key-value pairs from a .env file and set them as environment variables"
|
1797 |
+
optional = false
|
1798 |
+
python-versions = ">=3.8"
|
1799 |
+
files = [
|
1800 |
+
{file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"},
|
1801 |
+
{file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"},
|
1802 |
+
]
|
1803 |
+
|
1804 |
+
[package.extras]
|
1805 |
+
cli = ["click (>=5.0)"]
|
1806 |
+
|
1807 |
[[package]]
|
1808 |
name = "pytz"
|
1809 |
version = "2025.1"
|
|
|
1815 |
{file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"},
|
1816 |
]
|
1817 |
|
1818 |
+
[[package]]
|
1819 |
+
name = "pyyaml"
|
1820 |
+
version = "6.0.2"
|
1821 |
+
description = "YAML parser and emitter for Python"
|
1822 |
+
optional = false
|
1823 |
+
python-versions = ">=3.8"
|
1824 |
+
files = [
|
1825 |
+
{file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
|
1826 |
+
{file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
|
1827 |
+
{file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"},
|
1828 |
+
{file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"},
|
1829 |
+
{file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"},
|
1830 |
+
{file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"},
|
1831 |
+
{file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"},
|
1832 |
+
{file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"},
|
1833 |
+
{file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"},
|
1834 |
+
{file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"},
|
1835 |
+
{file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"},
|
1836 |
+
{file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"},
|
1837 |
+
{file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"},
|
1838 |
+
{file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"},
|
1839 |
+
{file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"},
|
1840 |
+
{file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"},
|
1841 |
+
{file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"},
|
1842 |
+
{file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"},
|
1843 |
+
{file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
|
1844 |
+
{file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
|
1845 |
+
{file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
|
1846 |
+
{file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
|
1847 |
+
{file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
|
1848 |
+
{file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
|
1849 |
+
{file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
|
1850 |
+
{file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
|
1851 |
+
{file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
|
1852 |
+
{file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"},
|
1853 |
+
{file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"},
|
1854 |
+
{file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"},
|
1855 |
+
{file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"},
|
1856 |
+
{file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"},
|
1857 |
+
{file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"},
|
1858 |
+
{file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"},
|
1859 |
+
{file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"},
|
1860 |
+
{file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"},
|
1861 |
+
{file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"},
|
1862 |
+
{file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"},
|
1863 |
+
{file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"},
|
1864 |
+
{file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"},
|
1865 |
+
{file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"},
|
1866 |
+
{file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"},
|
1867 |
+
{file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"},
|
1868 |
+
{file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"},
|
1869 |
+
{file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"},
|
1870 |
+
{file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"},
|
1871 |
+
{file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"},
|
1872 |
+
{file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"},
|
1873 |
+
{file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"},
|
1874 |
+
{file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"},
|
1875 |
+
{file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"},
|
1876 |
+
{file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"},
|
1877 |
+
{file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
|
1878 |
+
]
|
1879 |
+
|
1880 |
[[package]]
|
1881 |
name = "referencing"
|
1882 |
version = "0.36.2"
|
|
|
2045 |
{file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"},
|
2046 |
]
|
2047 |
|
2048 |
+
[[package]]
|
2049 |
+
name = "rsa"
|
2050 |
+
version = "4.9"
|
2051 |
+
description = "Pure-Python RSA implementation"
|
2052 |
+
optional = false
|
2053 |
+
python-versions = ">=3.6,<4"
|
2054 |
+
files = [
|
2055 |
+
{file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"},
|
2056 |
+
{file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"},
|
2057 |
+
]
|
2058 |
+
|
2059 |
+
[package.dependencies]
|
2060 |
+
pyasn1 = ">=0.1.3"
|
2061 |
+
|
2062 |
[[package]]
|
2063 |
name = "six"
|
2064 |
version = "1.17.0"
|
|
|
2142 |
doc = ["reno", "sphinx"]
|
2143 |
test = ["pytest", "tornado (>=4.5)", "typeguard"]
|
2144 |
|
2145 |
+
[[package]]
|
2146 |
+
name = "tokenizers"
|
2147 |
+
version = "0.21.0"
|
2148 |
+
description = ""
|
2149 |
+
optional = false
|
2150 |
+
python-versions = ">=3.7"
|
2151 |
+
files = [
|
2152 |
+
{file = "tokenizers-0.21.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:3c4c93eae637e7d2aaae3d376f06085164e1660f89304c0ab2b1d08a406636b2"},
|
2153 |
+
{file = "tokenizers-0.21.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f53ea537c925422a2e0e92a24cce96f6bc5046bbef24a1652a5edc8ba975f62e"},
|
2154 |
+
{file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b177fb54c4702ef611de0c069d9169f0004233890e0c4c5bd5508ae05abf193"},
|
2155 |
+
{file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b43779a269f4629bebb114e19c3fca0223296ae9fea8bb9a7a6c6fb0657ff8e"},
|
2156 |
+
{file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aeb255802be90acfd363626753fda0064a8df06031012fe7d52fd9a905eb00e"},
|
2157 |
+
{file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8b09dbeb7a8d73ee204a70f94fc06ea0f17dcf0844f16102b9f414f0b7463ba"},
|
2158 |
+
{file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:400832c0904f77ce87c40f1a8a27493071282f785724ae62144324f171377273"},
|
2159 |
+
{file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84ca973b3a96894d1707e189c14a774b701596d579ffc7e69debfc036a61a04"},
|
2160 |
+
{file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:eb7202d231b273c34ec67767378cd04c767e967fda12d4a9e36208a34e2f137e"},
|
2161 |
+
{file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:089d56db6782a73a27fd8abf3ba21779f5b85d4a9f35e3b493c7bbcbbf0d539b"},
|
2162 |
+
{file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:c87ca3dc48b9b1222d984b6b7490355a6fdb411a2d810f6f05977258400ddb74"},
|
2163 |
+
{file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4145505a973116f91bc3ac45988a92e618a6f83eb458f49ea0790df94ee243ff"},
|
2164 |
+
{file = "tokenizers-0.21.0-cp39-abi3-win32.whl", hash = "sha256:eb1702c2f27d25d9dd5b389cc1f2f51813e99f8ca30d9e25348db6585a97e24a"},
|
2165 |
+
{file = "tokenizers-0.21.0-cp39-abi3-win_amd64.whl", hash = "sha256:87841da5a25a3a5f70c102de371db120f41873b854ba65e52bccd57df5a3780c"},
|
2166 |
+
{file = "tokenizers-0.21.0.tar.gz", hash = "sha256:ee0894bf311b75b0c03079f33859ae4b2334d675d4e93f5a4132e1eae2834fe4"},
|
2167 |
+
]
|
2168 |
+
|
2169 |
+
[package.dependencies]
|
2170 |
+
huggingface-hub = ">=0.16.4,<1.0"
|
2171 |
+
|
2172 |
+
[package.extras]
|
2173 |
+
dev = ["tokenizers[testing]"]
|
2174 |
+
docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"]
|
2175 |
+
testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"]
|
2176 |
+
|
2177 |
[[package]]
|
2178 |
name = "toml"
|
2179 |
version = "0.10.2"
|
|
|
2185 |
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
|
2186 |
]
|
2187 |
|
2188 |
+
[[package]]
|
2189 |
+
name = "tomli"
|
2190 |
+
version = "2.2.1"
|
2191 |
+
description = "A lil' TOML parser"
|
2192 |
+
optional = false
|
2193 |
+
python-versions = ">=3.8"
|
2194 |
+
files = [
|
2195 |
+
{file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"},
|
2196 |
+
{file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"},
|
2197 |
+
{file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"},
|
2198 |
+
{file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"},
|
2199 |
+
{file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"},
|
2200 |
+
{file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"},
|
2201 |
+
{file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"},
|
2202 |
+
{file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"},
|
2203 |
+
{file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"},
|
2204 |
+
{file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"},
|
2205 |
+
{file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"},
|
2206 |
+
{file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"},
|
2207 |
+
{file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"},
|
2208 |
+
{file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"},
|
2209 |
+
{file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"},
|
2210 |
+
{file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"},
|
2211 |
+
{file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"},
|
2212 |
+
{file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"},
|
2213 |
+
{file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"},
|
2214 |
+
{file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"},
|
2215 |
+
{file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"},
|
2216 |
+
{file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"},
|
2217 |
+
{file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"},
|
2218 |
+
{file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"},
|
2219 |
+
{file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"},
|
2220 |
+
{file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"},
|
2221 |
+
{file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"},
|
2222 |
+
{file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"},
|
2223 |
+
{file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"},
|
2224 |
+
{file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"},
|
2225 |
+
{file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"},
|
2226 |
+
{file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"},
|
2227 |
+
]
|
2228 |
+
|
2229 |
[[package]]
|
2230 |
name = "tornado"
|
2231 |
version = "6.4.2"
|
|
|
2267 |
slack = ["slack-sdk"]
|
2268 |
telegram = ["requests"]
|
2269 |
|
2270 |
+
[[package]]
|
2271 |
+
name = "types-requests"
|
2272 |
+
version = "2.32.0.20241016"
|
2273 |
+
description = "Typing stubs for requests"
|
2274 |
+
optional = false
|
2275 |
+
python-versions = ">=3.8"
|
2276 |
+
files = [
|
2277 |
+
{file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"},
|
2278 |
+
{file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"},
|
2279 |
+
]
|
2280 |
+
|
2281 |
+
[package.dependencies]
|
2282 |
+
urllib3 = ">=2"
|
2283 |
+
|
2284 |
[[package]]
|
2285 |
name = "typing-extensions"
|
2286 |
version = "4.12.2"
|
|
|
2292 |
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
|
2293 |
]
|
2294 |
|
2295 |
+
[[package]]
|
2296 |
+
name = "typing-inspect"
|
2297 |
+
version = "0.9.0"
|
2298 |
+
description = "Runtime inspection utilities for typing module."
|
2299 |
+
optional = false
|
2300 |
+
python-versions = "*"
|
2301 |
+
files = [
|
2302 |
+
{file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"},
|
2303 |
+
{file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"},
|
2304 |
+
]
|
2305 |
+
|
2306 |
+
[package.dependencies]
|
2307 |
+
mypy-extensions = ">=0.3.0"
|
2308 |
+
typing-extensions = ">=3.7.4"
|
2309 |
+
|
2310 |
[[package]]
|
2311 |
name = "tzdata"
|
2312 |
version = "2025.1"
|
|
|
2377 |
[package.extras]
|
2378 |
watchmedo = ["PyYAML (>=3.10)"]
|
2379 |
|
2380 |
+
[[package]]
|
2381 |
+
name = "wrapt"
|
2382 |
+
version = "1.17.2"
|
2383 |
+
description = "Module for decorators, wrappers and monkey patching."
|
2384 |
+
optional = false
|
2385 |
+
python-versions = ">=3.8"
|
2386 |
+
files = [
|
2387 |
+
{file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"},
|
2388 |
+
{file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"},
|
2389 |
+
{file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"},
|
2390 |
+
{file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"},
|
2391 |
+
{file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"},
|
2392 |
+
{file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"},
|
2393 |
+
{file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"},
|
2394 |
+
{file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"},
|
2395 |
+
{file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"},
|
2396 |
+
{file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"},
|
2397 |
+
{file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"},
|
2398 |
+
{file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"},
|
2399 |
+
{file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"},
|
2400 |
+
{file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"},
|
2401 |
+
{file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"},
|
2402 |
+
{file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"},
|
2403 |
+
{file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"},
|
2404 |
+
{file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"},
|
2405 |
+
{file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"},
|
2406 |
+
{file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"},
|
2407 |
+
{file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"},
|
2408 |
+
{file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"},
|
2409 |
+
{file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"},
|
2410 |
+
{file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"},
|
2411 |
+
{file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"},
|
2412 |
+
{file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"},
|
2413 |
+
{file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"},
|
2414 |
+
{file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"},
|
2415 |
+
{file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"},
|
2416 |
+
{file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"},
|
2417 |
+
{file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"},
|
2418 |
+
{file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"},
|
2419 |
+
{file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"},
|
2420 |
+
{file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"},
|
2421 |
+
{file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"},
|
2422 |
+
{file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"},
|
2423 |
+
{file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"},
|
2424 |
+
{file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"},
|
2425 |
+
{file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"},
|
2426 |
+
{file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"},
|
2427 |
+
{file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"},
|
2428 |
+
{file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"},
|
2429 |
+
{file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"},
|
2430 |
+
{file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"},
|
2431 |
+
{file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"},
|
2432 |
+
{file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"},
|
2433 |
+
{file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"},
|
2434 |
+
{file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"},
|
2435 |
+
{file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"},
|
2436 |
+
{file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"},
|
2437 |
+
{file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"},
|
2438 |
+
{file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"},
|
2439 |
+
{file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"},
|
2440 |
+
{file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"},
|
2441 |
+
{file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"},
|
2442 |
+
{file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"},
|
2443 |
+
{file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"},
|
2444 |
+
{file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"},
|
2445 |
+
{file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"},
|
2446 |
+
{file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"},
|
2447 |
+
{file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"},
|
2448 |
+
{file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"},
|
2449 |
+
{file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"},
|
2450 |
+
{file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"},
|
2451 |
+
{file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"},
|
2452 |
+
{file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"},
|
2453 |
+
{file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"},
|
2454 |
+
{file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"},
|
2455 |
+
{file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"},
|
2456 |
+
{file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"},
|
2457 |
+
{file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"},
|
2458 |
+
{file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"},
|
2459 |
+
{file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"},
|
2460 |
+
{file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"},
|
2461 |
+
{file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"},
|
2462 |
+
{file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"},
|
2463 |
+
{file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"},
|
2464 |
+
{file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"},
|
2465 |
+
{file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"},
|
2466 |
+
]
|
2467 |
+
|
2468 |
+
[[package]]
|
2469 |
+
name = "zipp"
|
2470 |
+
version = "3.21.0"
|
2471 |
+
description = "Backport of pathlib-compatible object wrapper for zip files"
|
2472 |
+
optional = false
|
2473 |
+
python-versions = ">=3.9"
|
2474 |
+
files = [
|
2475 |
+
{file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"},
|
2476 |
+
{file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"},
|
2477 |
+
]
|
2478 |
+
|
2479 |
+
[package.extras]
|
2480 |
+
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
|
2481 |
+
cover = ["pytest-cov"]
|
2482 |
+
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
|
2483 |
+
enabler = ["pytest-enabler (>=2.2)"]
|
2484 |
+
test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"]
|
2485 |
+
type = ["pytest-mypy"]
|
2486 |
+
|
2487 |
[metadata]
|
2488 |
lock-version = "2.0"
|
2489 |
python-versions = "3.10"
|
2490 |
+
content-hash = "bafe1276871675a1d904b4309d57185b79d491027371bcd5afda1aa59551457e"
|
pyproject.toml
CHANGED
@@ -10,6 +10,9 @@ python = "3.10"
|
|
10 |
streamlit = "^1.42.0"
|
11 |
openai = "^1.63.0"
|
12 |
watchdog = "^6.0.0"
|
|
|
|
|
|
|
13 |
|
14 |
|
15 |
[build-system]
|
|
|
10 |
streamlit = "^1.42.0"
|
11 |
openai = "^1.63.0"
|
12 |
watchdog = "^6.0.0"
|
13 |
+
pydantic-ai = "^0.0.24"
|
14 |
+
python-dotenv = "^1.0.1"
|
15 |
+
logfire = "^3.5.3"
|
16 |
|
17 |
|
18 |
[build-system]
|
src/agents/Untitled-1.json
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "image_editing_instruction",
|
3 |
+
"strict": true,
|
4 |
+
"schema": {
|
5 |
+
"type": "object",
|
6 |
+
"properties": {
|
7 |
+
"category": {
|
8 |
+
"type": "string",
|
9 |
+
"description": "The editing category based on the instruction. Must be one of: Addition, Remove, Local, Global, Background.",
|
10 |
+
"enum": [
|
11 |
+
"Addition",
|
12 |
+
"Remove",
|
13 |
+
"Local",
|
14 |
+
"Global",
|
15 |
+
"Background"
|
16 |
+
]
|
17 |
+
},
|
18 |
+
"subject": {
|
19 |
+
"type": "string",
|
20 |
+
"description": "The subject of the editing instruction. Must be a noun in no more than 5 words."
|
21 |
+
},
|
22 |
+
"caption": {
|
23 |
+
"type": "string",
|
24 |
+
"description": "The detailed description of the image."
|
25 |
+
},
|
26 |
+
"target_caption": {
|
27 |
+
"type": "string",
|
28 |
+
"description": "Apply the editing instruction to the image caption. The target caption should describe the image after the editing instruction is applied."
|
29 |
+
}
|
30 |
+
},
|
31 |
+
"required": [
|
32 |
+
"category",
|
33 |
+
"subject",
|
34 |
+
"caption",
|
35 |
+
"target_caption"
|
36 |
+
],
|
37 |
+
"additionalProperties": false
|
38 |
+
}
|
39 |
+
}
|
src/agents/__init__.py
ADDED
File without changes
|
src/agents/image-edit-agent.py
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic_ai import Agent, RunContext
|
2 |
+
from pydantic_ai.settings import ModelSettings
|
3 |
+
from pydantic_ai.models.openai import OpenAIModel
|
4 |
+
from dotenv import load_dotenv
|
5 |
+
import os
|
6 |
+
import asyncio
|
7 |
+
import base64
|
8 |
+
from dataclasses import dataclass
|
9 |
+
|
10 |
+
load_dotenv()
|
11 |
+
|
12 |
+
@dataclass
|
13 |
+
class ImageEditDeps:
|
14 |
+
edit_instruction: str
|
15 |
+
image_url: str
|
16 |
+
|
17 |
+
model = OpenAIModel(
|
18 |
+
"gpt-4o",
|
19 |
+
api_key=os.environ.get("OPENAI_API_KEY"),
|
20 |
+
)
|
21 |
+
|
22 |
+
image_edit_agent = Agent(
|
23 |
+
model,
|
24 |
+
system_prompt=[
|
25 |
+
'Be concise, reply with one sentence.',
|
26 |
+
"You are an image editing agent. You will be given an image and an editing instruction. Use the tools available to you and come up with a plan to edit the image according to the instruction."
|
27 |
+
],
|
28 |
+
deps_type=ImageEditDeps
|
29 |
+
)
|
30 |
+
|
31 |
+
|
32 |
+
@image_edit_agent.tool
|
33 |
+
async def identify_editing_subject(ctx: RunContext[ImageEditDeps]) -> str:
|
34 |
+
"""
|
35 |
+
Identify the subject of the image editing instruction.
|
36 |
+
|
37 |
+
Args:
|
38 |
+
instruction: The image editing instruction.
|
39 |
+
image_url: The URL of the image.
|
40 |
+
|
41 |
+
Returns:
|
42 |
+
The subject of the image editing instruction.
|
43 |
+
"""
|
44 |
+
messages = [
|
45 |
+
{
|
46 |
+
"type": "text",
|
47 |
+
"text": ctx.deps.edit_instruction
|
48 |
+
},
|
49 |
+
{
|
50 |
+
"type": "image_url",
|
51 |
+
"image_url": {
|
52 |
+
"url": ctx.deps.image_url
|
53 |
+
}
|
54 |
+
}
|
55 |
+
]
|
56 |
+
r = await mask_generation_agent.run(messages, usage=ctx.usage, deps=ctx.deps)
|
57 |
+
return r.data
|
58 |
+
|
59 |
+
mask_generation_agent = Agent(
|
60 |
+
model,
|
61 |
+
system_prompt=[
|
62 |
+
"I will give you an editing instruction of the image. Please output the object needed to be edited.",
|
63 |
+
"You only need to output the basic description of the object in no more than 5 words.",
|
64 |
+
"The output should only contain one noun.",
|
65 |
+
"For example, the editing instruction is 'Change the white cat to a black dog'. Then you need to output: 'white cat'. Only output the new content. Do not output anything else."
|
66 |
+
],
|
67 |
+
deps_type=ImageEditDeps
|
68 |
+
)
|
69 |
+
|
70 |
+
@mask_generation_agent.tool
|
71 |
+
async def generate_mask(ctx: RunContext[ImageEditDeps], mask_subject: str) -> str:
|
72 |
+
"""
|
73 |
+
Generate a mask for the image editing instruction.
|
74 |
+
"""
|
75 |
+
pass
|
76 |
+
|
77 |
+
async def main():
|
78 |
+
image_file_path = "./assets/lakeview.jpg"
|
79 |
+
with open(image_file_path, "rb") as image_file:
|
80 |
+
image_bytes = image_file.read()
|
81 |
+
image_base64 = base64.b64encode(image_bytes).decode("utf-8")
|
82 |
+
image_url = f"data:image/jpeg;base64,{image_base64}"
|
83 |
+
|
84 |
+
prompt = "remove the light post"
|
85 |
+
messages = [
|
86 |
+
{
|
87 |
+
"type": "text",
|
88 |
+
"text": prompt
|
89 |
+
},
|
90 |
+
{
|
91 |
+
"type": "image_url",
|
92 |
+
"image_url": {
|
93 |
+
"url": image_url
|
94 |
+
}
|
95 |
+
}
|
96 |
+
]
|
97 |
+
|
98 |
+
deps = ImageEditDeps(
|
99 |
+
edit_instruction=prompt,
|
100 |
+
image_url=image_url
|
101 |
+
)
|
102 |
+
r = await mask_generation_agent.run(messages, deps=deps)
|
103 |
+
print(r.data)
|
104 |
+
|
105 |
+
|
106 |
+
if __name__ == "__main__":
|
107 |
+
asyncio.run(main())
|
src/agents/mask-generation-agent.py
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic_ai import Agent, RunContext
|
2 |
+
from pydantic_ai.settings import ModelSettings
|
3 |
+
from pydantic_ai.models.openai import OpenAIModel
|
4 |
+
from dotenv import load_dotenv
|
5 |
+
import os
|
6 |
+
import asyncio
|
7 |
+
import base64
|
8 |
+
from dataclasses import dataclass
|
9 |
+
import logfire
|
10 |
+
from src.services.generate_mask import GenerateMaskService
|
11 |
+
|
12 |
+
load_dotenv()
|
13 |
+
|
14 |
+
logfire.configure(token=os.environ.get("LOGFIRE_TOKEN"))
|
15 |
+
logfire.instrument_openai()
|
16 |
+
|
17 |
+
system_prompt = """
|
18 |
+
I will give you an editing instruction of the image.
|
19 |
+
if the edit instruction involved modifying parts of the image, please generate a mask for it.
|
20 |
+
"""
|
21 |
+
|
22 |
+
@dataclass
|
23 |
+
class ImageEditDeps:
|
24 |
+
edit_instruction: str
|
25 |
+
image_url: str
|
26 |
+
|
27 |
+
model = OpenAIModel(
|
28 |
+
"gpt-4o",
|
29 |
+
api_key=os.environ.get("OPENAI_API_KEY"),
|
30 |
+
)
|
31 |
+
|
32 |
+
@dataclass
|
33 |
+
class MaskGenerationResult:
|
34 |
+
mask_image_base64: str
|
35 |
+
|
36 |
+
mask_generation_agent = Agent(
|
37 |
+
model,
|
38 |
+
system_prompt=system_prompt,
|
39 |
+
deps_type=ImageEditDeps
|
40 |
+
)
|
41 |
+
|
42 |
+
@mask_generation_agent.tool
|
43 |
+
async def generate_mask(ctx: RunContext[ImageEditDeps]) -> MaskGenerationResult:
|
44 |
+
"""
|
45 |
+
Generate a mask for the image editing instruction.
|
46 |
+
"""
|
47 |
+
print("Invoking generate_mask tool")
|
48 |
+
service = GenerateMaskService()
|
49 |
+
mask_instruction = await service.get_mask_generation_instruction(ctx.deps.edit_instruction, ctx.deps.image_url)
|
50 |
+
response = mask_instruction.model_dump_json(indent=4)
|
51 |
+
print(f"generate_mask tool response: {response}")
|
52 |
+
|
53 |
+
mask = await service.generate_mask(mask_instruction, ctx.deps.image_url)
|
54 |
+
print("Exiting generate_mask tool")
|
55 |
+
return MaskGenerationResult(mask_image_base64=mask)
|
56 |
+
|
57 |
+
async def main():
|
58 |
+
image_file_path = "./assets/lakeview.jpg"
|
59 |
+
with open(image_file_path, "rb") as image_file:
|
60 |
+
image_bytes = image_file.read()
|
61 |
+
image_base64 = base64.b64encode(image_bytes).decode("utf-8")
|
62 |
+
image_url = f"data:image/jpeg;base64,{image_base64}"
|
63 |
+
|
64 |
+
prompt = "remove the light post"
|
65 |
+
messages = [
|
66 |
+
{
|
67 |
+
"type": "text",
|
68 |
+
"text": prompt
|
69 |
+
},
|
70 |
+
{
|
71 |
+
"type": "image_url",
|
72 |
+
"image_url": {
|
73 |
+
"url": image_url
|
74 |
+
}
|
75 |
+
}
|
76 |
+
]
|
77 |
+
|
78 |
+
deps = ImageEditDeps(
|
79 |
+
edit_instruction=prompt,
|
80 |
+
image_url=image_url
|
81 |
+
)
|
82 |
+
r = await mask_generation_agent.run(messages, deps=deps)
|
83 |
+
print(r.all_messages())
|
84 |
+
|
85 |
+
|
86 |
+
if __name__ == "__main__":
|
87 |
+
asyncio.run(main())
|
src/hopter/client.py
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import asyncio
|
2 |
+
import httpx
|
3 |
+
from enum import Enum
|
4 |
+
from src.models.generate_mask_instruction import GenerateMaskInstruction
|
5 |
+
import base64
|
6 |
+
from dotenv import load_dotenv
|
7 |
+
import os
|
8 |
+
from pydantic import BaseModel, Field
|
9 |
+
from typing import List
|
10 |
+
|
11 |
+
load_dotenv()
|
12 |
+
|
13 |
+
class Environment(Enum):
|
14 |
+
STAGING = "staging"
|
15 |
+
PRODUCTION = "production"
|
16 |
+
|
17 |
+
@property
|
18 |
+
def base_url(self) -> str:
|
19 |
+
match self:
|
20 |
+
case Environment.STAGING:
|
21 |
+
return "https://serving.hopter.staging.picc.co"
|
22 |
+
case Environment.PRODUCTION:
|
23 |
+
return "https://serving.hopter.picc.co"
|
24 |
+
|
25 |
+
class RamGroundedSamInput(BaseModel):
|
26 |
+
text_prompt: str = Field(..., description="The text prompt for the mask generation.")
|
27 |
+
image_b64: str = Field(..., description="The image in base64 format.")
|
28 |
+
|
29 |
+
class RamGroundedSamResult(BaseModel):
|
30 |
+
mask_b64: str = Field(..., description="The mask image in base64 format.")
|
31 |
+
class_label: str = Field(..., description="The class label of the mask.")
|
32 |
+
confidence: float = Field(..., description="The confidence score of the mask.")
|
33 |
+
bbox: List[float] = Field(..., description="The bounding box of the mask in the format [x1, y1, x2, y2].")
|
34 |
+
|
35 |
+
class Hopter:
|
36 |
+
def __init__(
|
37 |
+
self,
|
38 |
+
api_key: str,
|
39 |
+
environment: Environment = Environment.PRODUCTION
|
40 |
+
):
|
41 |
+
self.api_key = api_key
|
42 |
+
self.base_url = environment.base_url
|
43 |
+
self.client = httpx.AsyncClient()
|
44 |
+
|
45 |
+
async def generate_mask(self, input: RamGroundedSamInput) -> RamGroundedSamResult:
|
46 |
+
print(f"Generating mask with input: {input.text_prompt}")
|
47 |
+
try:
|
48 |
+
response = await self.client.post(
|
49 |
+
f"{self.base_url}/api/v1/services/ram-grounded-sam-api/predictions",
|
50 |
+
headers={
|
51 |
+
"Authorization": f"Bearer {self.api_key}",
|
52 |
+
"Content-Type": "application/json"
|
53 |
+
},
|
54 |
+
json={
|
55 |
+
"input": input.model_dump()
|
56 |
+
}
|
57 |
+
)
|
58 |
+
response.raise_for_status() # Raise an error for bad responses
|
59 |
+
instance = response.json().get("output").get("instances")[0]
|
60 |
+
print("Generated mask.")
|
61 |
+
return RamGroundedSamResult(**instance)
|
62 |
+
except httpx.HTTPStatusError as exc:
|
63 |
+
print(f"HTTP error occurred: {exc.response.status_code} - {exc.response.text}")
|
64 |
+
except Exception as exc:
|
65 |
+
print(f"An unexpected error occurred: {exc}")
|
66 |
+
|
67 |
+
# async def _ram_grounded_sam(self, prompt: str, image_base64: str) -> str:
|
68 |
+
|
69 |
+
async def main():
|
70 |
+
hopter = Hopter(
|
71 |
+
api_key=os.getenv("HOPTER_API_KEY"),
|
72 |
+
environment=Environment.STAGING
|
73 |
+
)
|
74 |
+
image_file_path = "./assets/lakeview.jpg"
|
75 |
+
with open(image_file_path, "rb") as image_file:
|
76 |
+
image_bytes = image_file.read()
|
77 |
+
image_base64 = base64.b64encode(image_bytes).decode("utf-8")
|
78 |
+
image_url = f"data:image/jpeg;base64,{image_base64}"
|
79 |
+
|
80 |
+
input = RamGroundedSamInput(
|
81 |
+
text_prompt="pole",
|
82 |
+
image_b64=image_url
|
83 |
+
)
|
84 |
+
mask = await hopter.generate_mask(input)
|
85 |
+
print(mask)
|
86 |
+
|
87 |
+
if __name__ == "__main__":
|
88 |
+
asyncio.run(main())
|
src/models/generate_mask_instruction.py
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic import BaseModel, Field
|
2 |
+
|
3 |
+
class GenerateMaskInstruction(BaseModel):
|
4 |
+
category: str = Field(
|
5 |
+
...,
|
6 |
+
description="The editing category based on the instruction. Must be one of: Addition, Remove, Local, Global, Background."
|
7 |
+
)
|
8 |
+
subject: str = Field(
|
9 |
+
...,
|
10 |
+
description="The subject of the editing instruction. Must be a noun in no more than 5 words."
|
11 |
+
)
|
12 |
+
caption: str = Field(
|
13 |
+
...,
|
14 |
+
description="The detailed description of the image."
|
15 |
+
)
|
16 |
+
target_caption: str = Field(
|
17 |
+
...,
|
18 |
+
description="Apply the editing instruction to the image caption. The target caption should describe the image after the editing instruction is applied."
|
19 |
+
)
|
src/services/__init__.py
ADDED
File without changes
|
src/services/generate_mask.py
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic import BaseModel, Field
|
2 |
+
from openai import OpenAI
|
3 |
+
import os
|
4 |
+
from dotenv import load_dotenv
|
5 |
+
import base64
|
6 |
+
import asyncio
|
7 |
+
from src.hopter.client import Hopter, RamGroundedSamInput, Environment
|
8 |
+
from src.models.generate_mask_instruction import GenerateMaskInstruction
|
9 |
+
load_dotenv()
|
10 |
+
|
11 |
+
system_prompt = """
|
12 |
+
I will give you an editing instruction of the image. Perform the following tasks:
|
13 |
+
|
14 |
+
<task_1>
|
15 |
+
Please output which type of editing category it is in.
|
16 |
+
You can choose from the following categories:
|
17 |
+
1. Addition: Adding new objects within the images, e.g., add a bird
|
18 |
+
2. Remove: Removing objects, e.g., remove the mask
|
19 |
+
3. Local: Replace local parts of an object and later the object's attributes (e.g., make it smile) or alter an object's visual appearance without affecting its structure (e.g., change the cat to a dog)
|
20 |
+
4. Global: Edit the entire image, e.g., let's see it in winter
|
21 |
+
5. Background: Change the scene's background, e.g., have her walk on water, change the background to a beach, make the hedgehog in France, etc.
|
22 |
+
Only output a single word, e.g., 'Addition'.
|
23 |
+
</task_1>
|
24 |
+
|
25 |
+
<task_2>
|
26 |
+
Please output the subject needed to be edited. You only need to output the basic description of the object in no more than 5 words. The output should only contain one noun.
|
27 |
+
|
28 |
+
For example, the editing instruction is 'Change the white cat to a black dog'. Then you need to output: 'white cat'. Only output the new content. Do not output anything else.
|
29 |
+
</task_2>
|
30 |
+
|
31 |
+
<task_3>
|
32 |
+
Please describe the new content that should be present in the image after applying the instruction.
|
33 |
+
|
34 |
+
For example, if the original image content shows a grandmother wearing a mask and the instruction is 'remove the mask', your output should be: 'a grandmother'.
|
35 |
+
The output should only include elements that remain in the image after the edit and should not mention elements that have been changed or removed, such as 'mask' in this example.
|
36 |
+
Do not output 'sorry, xxx', even if it's a guess, directly output the answer you think is correct.
|
37 |
+
</task_3>
|
38 |
+
"""
|
39 |
+
|
40 |
+
class GenerateMaskService:
|
41 |
+
def __init__(self):
|
42 |
+
self.llm = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
|
43 |
+
self.hopter = Hopter(api_key=os.environ.get("HOPTER_API_KEY"), environment=Environment.STAGING)
|
44 |
+
self.model = "gpt-4o"
|
45 |
+
|
46 |
+
async def get_mask_generation_instruction(self, edit_instruction: str, image_url: str) -> GenerateMaskInstruction:
|
47 |
+
|
48 |
+
messages = [
|
49 |
+
{
|
50 |
+
"role": "system",
|
51 |
+
"content": system_prompt
|
52 |
+
},
|
53 |
+
{
|
54 |
+
"role": "user",
|
55 |
+
"content": [
|
56 |
+
{
|
57 |
+
"type": "text",
|
58 |
+
"text": edit_instruction
|
59 |
+
},
|
60 |
+
{
|
61 |
+
"type": "image_url",
|
62 |
+
"image_url": {
|
63 |
+
"url": image_url
|
64 |
+
}
|
65 |
+
}
|
66 |
+
]
|
67 |
+
}
|
68 |
+
]
|
69 |
+
|
70 |
+
response = self.llm.beta.chat.completions.parse(
|
71 |
+
model=self.model,
|
72 |
+
messages=messages,
|
73 |
+
response_format=GenerateMaskInstruction
|
74 |
+
)
|
75 |
+
instruction = response.choices[0].message.parsed
|
76 |
+
return instruction
|
77 |
+
|
78 |
+
async def generate_mask(self, mask_instruction: GenerateMaskInstruction, image_url: str) -> str:
|
79 |
+
"""
|
80 |
+
Generate a mask for the image editing instruction.
|
81 |
+
|
82 |
+
Args:
|
83 |
+
mask_instruction (GenerateMaskInstruction): The mask generation instruction.
|
84 |
+
|
85 |
+
Returns:
|
86 |
+
str: The mask image in base64 format.
|
87 |
+
"""
|
88 |
+
input = RamGroundedSamInput(
|
89 |
+
text_prompt=mask_instruction.subject,
|
90 |
+
image_b64=image_url
|
91 |
+
)
|
92 |
+
generate_mask_result = await self.hopter.generate_mask(input)
|
93 |
+
return generate_mask_result.mask_b64
|
94 |
+
|
95 |
+
async def main():
|
96 |
+
service = GenerateMaskService()
|
97 |
+
edit_instruction = "remove the light post"
|
98 |
+
image_file_path = "./assets/lakeview.jpg"
|
99 |
+
with open(image_file_path, "rb") as image_file:
|
100 |
+
image_bytes = image_file.read()
|
101 |
+
image_base64 = base64.b64encode(image_bytes).decode("utf-8")
|
102 |
+
image_url = f"data:image/jpeg;base64,{image_base64}"
|
103 |
+
|
104 |
+
instruction = await service.get_mask_generation_instruction(edit_instruction, image_url)
|
105 |
+
print(instruction)
|
106 |
+
mask = await service.generate_mask(instruction, image_url)
|
107 |
+
print(mask)
|
108 |
+
|
109 |
+
if __name__ == "__main__":
|
110 |
+
asyncio.run(main())
|