Compare commits

...

10 Commits

Author SHA1 Message Date
Eugene Yurtsev
dc71299ab5 xx 2025-08-08 11:36:50 -04:00
Eugene Yurtsev
53437da99d x 2025-08-07 23:06:51 -04:00
Eugene Yurtsev
a80204eb30 x 2025-08-07 22:20:08 -04:00
Eugene Yurtsev
a50a7b3ffc x 2025-08-07 17:49:00 -04:00
Eugene Yurtsev
7ff1d7d582 x 2025-08-07 17:48:42 -04:00
Eugene Yurtsev
a523c85da2 x 2025-08-07 17:48:18 -04:00
Eugene Yurtsev
1eb9649432 x 2025-08-07 17:34:39 -04:00
Eugene Yurtsev
98530123ae x 2025-08-07 17:09:25 -04:00
Eugene Yurtsev
09ffe446c8 x 2025-08-07 16:50:39 -04:00
Eugene Yurtsev
b4c2e488d9 qxq 2025-08-07 16:00:38 -04:00
5 changed files with 708 additions and 1 deletions

View File

@@ -0,0 +1,53 @@
from typing import Optional, Sequence, Literal, List
from langgraph.prebuilt import create_react_agent
from langgraph.pregel import Pregel
from langchain.sandboxes import create_tools, DaytonaSandboxToolkit, FileUpload
from langchain_core.language_models.base import BaseLanguageModel
from langchain_core.tools import BaseTool
def create_data_analysis_agent(
model: BaseLanguageModel,
sandbox: DaytonaSandboxToolkit,
tools: Sequence[
Literal["run_code", "list_files", "upload_file", "download_file", "exec"]
],
*,
prompt: Optional[str] = None,
files: Optional[list[FileUpload]] = None,
name: str = "Data Analysis Agent",
) -> Pregel:
"""Create a data analysis Pregel agent using Daytona sandbox."""
if files:
sandbox.upload_files(files)
tools_: List[BaseTool] = create_tools(sandbox, tools)
if prompt is None:
files_section = ""
if files:
files_list = "\n".join([f"- {file['destination']}" for file in files])
files_section = f"\n\nThe user has uploaded the following files to ./data/:\n{files_list}"
prompt = f"""
You are a data analysis agent designed to write and execute Python code to answer questions.
You have access to:
- A Python environment where you can run complete scripts
- Root access to install any packages you need using pip
- A filesystem with data files located in {files_section}
Guidelines:
- Write complete, self-contained Python scripts for each execution
- Use proper imports and handle errors gracefully
- Install required packages if needed (e.g., pandas, numpy, matplotlib)
- Always run code to verify your analysis, even if you think you know the answer
- If you encounter errors, debug and fix your code before trying again
- Only use the output of your executed code to answer questions
- If the question cannot be answered with code or with the data, respond with "I don't know"
Answer the user's question using the tools available to you.
"""
return create_react_agent(model=model, tools=tools_, prompt=prompt, name=name)

View File

@@ -0,0 +1,408 @@
"""Temporary wrapper for sandbox integrations."""
from __future__ import annotations
import os
from typing import (
TYPE_CHECKING,
Callable,
Literal,
NotRequired,
Optional,
TypedDict,
)
from daytona import Daytona
from daytona import DaytonaConfig
from daytona.common.filesystem import FileUpload as DaytonaFileUpload
from pydantic import BaseModel, Field
from langchain_core.tools import BaseTool, StructuredTool
if TYPE_CHECKING:
from collections.abc import Sequence
from daytona import Sandbox
class FileInfo(TypedDict):
"""Metadata of a file in the sandbox."""
name: str
is_dir: bool
size: NotRequired[float]
mod_time: NotRequired[str]
mode: NotRequired[str]
permissions: NotRequired[str]
owner: NotRequired[str]
group: NotRequired[str]
class SandboxCapabilities(TypedDict):
"""Capabilities of the sandbox."""
can_upload: bool
can_download: bool
can_list_files: bool
can_run_code: bool
supported_languages: list[str]
support_repl: bool
can_exec: bool
can_exec_session: bool
class FileUpload(TypedDict):
"""File upload."""
source: str | bytes
"""Source file path or contents to upload."""
destination: str
"""Destination path in the sandbox."""
class ExecuteResponse(TypedDict):
"""Result of code execution."""
result: str
"""The output of the executed code.
This will usually be the standard output of the command executed.
"""
exit_code: NotRequired[int]
"""The exit code of the executed code, if applicable."""
class DaytonaSandboxManager:
def __init__(
self, *, daytona_client: Optional[Daytona] = None, api_key: Optional[str] = None
) -> None:
"""Initialize the SandboxManager with a Daytona client."""
if daytona_client and api_key:
raise ValueError("Provide either daytona_client or api_key, not both.")
if daytona_client is None:
api_key = api_key or os.environ.get("DAYTONA_API_KEY")
if api_key is None:
raise ValueError("Either daytona_client or api_key must be provided.")
config = DaytonaConfig(api_key=api_key)
daytona_client = Daytona(config)
self.daytona_client = daytona_client
def list(self) -> list[id]:
"""List available sandboxes."""
return self.daytona_client.list()
def delete(self, id: str) -> None:
"""Delete a sandbox by its ID."""
# This could be optimized by using the API directly or by accessing
# private attributes, for now we'll keep it simple and restrict to the
# public API.
sandbox = self.daytona_client.get(id)
self.daytona_client.delete(sandbox)
def get(self, id: str) -> DaytonaSandboxToolkit:
"""Get a toolkit for a given ID."""
sandbox = self.daytona_client.get(id)
return DaytonaSandboxToolkit(sandbox)
def create(self, **kwargs) -> DaytonaSandboxToolkit:
"""Create and return a new sandbox ID."""
sandbox = self.daytona_client.create(**kwargs)
# For now, we'll only support a single session ID for execution. It's simple!
session_id = "main-exec-session"
sandbox.process.create_session(session_id)
return DaytonaSandboxToolkit(
sandbox,
)
class DaytonaSandboxToolkit:
"""A toolkit for interacting with sandboxes."""
def __init__(
self,
sandbox: Sandbox,
*,
default_language: str | None = None,
) -> None:
"""Initialize the SandboxToolkit with a DaytonSandbox instance."""
self.sandbox = sandbox
self._default_language = default_language
self.exec_session_id = "main-exec-session"
@property
def id(self) -> str:
"""Get the ID of the sandbox."""
return self.sandbox.id
def list_files(self, path: str) -> list[FileInfo]:
"""List files in the specified path."""
return self.sandbox.fs.list_files(path)
def move_files(self, source: str, destination: str) -> None:
"""Move a file from source to destination."""
return self.sandbox.fs.move_files(source, destination)
def upload_file(
self, file: bytes, remote_path: str, *, timeout: int = 30 * 60
) -> None:
"""Upload a file to the sandbox."""
return self.sandbox.fs.upload_file(file, remote_path, timeout=timeout)
def upload_files(self, files: list[FileUpload], *, timeout: int = 30 * 60):
"""Upload one or more files to the sandbox."""
file_uploads = [
DaytonaFileUpload(source=file["source"], destination=file["destination"])
for file in files
]
return self.sandbox.fs.upload_files(file_uploads, timeout)
def download_file(self, remote_path: str, *, timeout: int = 30 * 60) -> bytes:
"""Download a file from the sandbox."""
return self.sandbox.fs.download_file(remote_path, timeout)
def run_code(self, code: str, *, timeout: int = 30 * 60) -> ExecuteResponse:
"""Run code in the sandbox."""
execute_response = self.sandbox.process.code_run(code, timeout=timeout)
return ExecuteResponse(
result=execute_response.result,
exit_code=execute_response.exit_code,
)
def repl(self, code: str, *, timeout: int = 30 * 60) -> ExecuteResponse:
"""Support for REPL execution in the sandbox."""
raise NotImplementedError
def exec(
self, command: str, cwd: Optional[str] = None, *, timeout: int = 30 * 60
) -> ExecuteResponse:
"""Execute a command in the sandbox."""
execute_response = self.sandbox.process.exec(command, cwd=cwd, timeout=timeout)
return ExecuteResponse(
result=execute_response.result,
exit_code=execute_response.exit_code,
)
def exec_session(self, command: str) -> ExecuteResponse:
"""Execute a shell in the `main` session."""
execute_response = self.sandbox.process.execute_session_command(
self.exec_session_id, {"command": command}
)
return execute_response
@property
def default_language(self) -> str | None:
"""Get the default language for code execution."""
return self._default_language
def get_capabilities(self) -> SandboxCapabilities:
"""Get the capabilities of the sandbox."""
return {
"can_upload": True,
"can_download": True,
"can_list_files": True,
"can_run_code": True,
"support_repl": False,
"can_exec": True,
"supported_languages": ["python"],
}
class Adapter:
"""An adapter to integrate responses from a sandbox toolkit to an LLM."""
def format_response(self, response: ExecuteResponse) -> str:
"""Format the response for code execution."""
result = f"<execute_result>\n<output>{response['result']}</output>"
if "exit_code" in response and response["exit_code"] is not None:
result += f"\n<exit_code>{response['exit_code']}</exit_code>"
result += "\n</execute_result>"
return result
def format_list_files(self, files: list[FileInfo]) -> str:
"""Format the response for a list of files."""
if not files:
return "<file_list>\n<message>No files found</message>\n</file_list>"
result = "<file_list>\n"
for file_info in files:
file_type = "directory" if file_info["is_dir"] else "file"
result += f'<item type="{file_type}">\n<name>{file_info["name"]}</name>\n'
if "size" in file_info:
result += f"<size>{file_info['size']}</size>\n"
if "mod_time" in file_info:
result += f"<modified>{file_info['mod_time']}</modified>\n"
if "permissions" in file_info:
result += f"<permissions>{file_info['permissions']}</permissions>\n"
if "owner" in file_info:
result += f"<owner>{file_info['owner']}</owner>\n"
if "group" in file_info:
result += f"<group>{file_info['group']}</group>\n"
result += "</item>\n"
result += "</file_list>"
return result
def format_upload_file(self) -> str:
"""Format the response for an uploaded file."""
return (
"<upload_result>\n"
"<status>success</status>\n"
"<message>File uploaded successfully</message>\n"
"</upload_result>"
)
def format_download_file(self, size: int) -> str:
"""Format the response for a downloaded file."""
return (
"<download_result>\n"
"<status>success</status>\n"
"<message>File downloaded successfully</message>\n"
f"<size_bytes>{size}</size_bytes>\n"
"<note>Binary content omitted from display</note>\n"
"</download_result>"
)
def _wrap_tool(func, formatter, *, no_return: bool = False) -> Callable:
def wrapped(*args, **kwargs):
raw = func(*args, **kwargs)
if no_return:
return formatter(None)
return formatter(raw)
return wrapped
class CodeExecutionInput(BaseModel):
"""Input schema for code execution tools."""
code: str = Field(
description="The code to execute in the sandbox.",
)
class ExecutionInput(BaseModel):
"""Input schema for command execution tools."""
command: str = Field(
description="The command to execute in the sandbox.",
)
cwd: Optional[str] = Field(
default=None,
description="The working directory to execute the command in.",
)
def create_tools(
toolkit: DaytonaSandboxToolkit,
tool_selection: Sequence[
Literal[
"run_code", "list_files", "upload_file", "download_file", "exec", "repl"
]
],
) -> list[BaseTool]:
"""Create tools for the given sandbox.
Args:
toolkit: The SandboxToolkit to use for creating tools.
tool_selection: A sequence of tool names to create.
"""
capabilities = toolkit.get_capabilities()
formatter = Adapter()
# Let's create each tool now
tools: list[BaseTool] = []
for tool_name in tool_selection:
if tool_name == "run_code":
if not capabilities["can_run_code"]:
msg = "Sandbox does not support running code."
raise ValueError(msg)
tools.append(
StructuredTool(
description="Run code in the sandbox.",
name="run_code",
func=_wrap_tool(toolkit.run_code, formatter.format_response),
args_schema=CodeExecutionInput,
)
)
elif tool_name == "list_files":
if not capabilities["can_list_files"]:
msg = "Sandbox does not support listing files."
raise ValueError(msg)
tools.append(
StructuredTool(
description="List files in the sandbox.",
name="list_files",
func=_wrap_tool(toolkit.list_files, formatter.format_list_files),
)
)
elif tool_name == "upload_file":
if not capabilities["can_upload"]:
msg = "Sandbox does not support uploading files."
raise ValueError(msg)
tools.append(
StructuredTool(
description="Upload a file to the sandbox.",
name="upload_file",
func=_wrap_tool(
toolkit.upload_file,
formatter.format_upload_file,
no_return=True,
),
)
)
elif tool_name == "download_file":
if not capabilities["can_download"]:
msg = "Sandbox does not support downloading files."
raise ValueError(msg)
tools.append(
StructuredTool(
description="Download a file from the sandbox.",
name="download_file",
func=_wrap_tool(
toolkit.download_file, formatter.format_download_file
),
)
)
elif tool_name == "repl":
if not capabilities["can_run_code"]:
msg = "Sandbox does not support REPL execution."
raise ValueError(msg)
tools.append(
StructuredTool(
description="Run code in a REPL environment in the sandbox.",
name="repl",
func=_wrap_tool(toolkit.repl, formatter.format_response),
)
)
elif tool_name == "exec":
if not capabilities["can_run_code"]:
msg = "Sandbox does not support executing commands."
raise ValueError(msg)
tools.append(
StructuredTool(
description="Execute a command in the sandbox.",
name="exec",
args_schema=ExecutionInput,
func=_wrap_tool(toolkit.exec, formatter.format_response),
)
)
else:
known_tools = {
"run_code",
"list_files",
"upload_file",
"download_file",
}
msg = (
f"Unsupported tool: {tool_name}. "
f"Supported tools are: {', '.join(known_tools)}."
)
raise ValueError(msg)
return tools

View File

@@ -7,6 +7,7 @@ authors = []
license = { text = "MIT" }
requires-python = ">=3.9, <4.0"
dependencies = [
"daytona>=0.25.5",
"langchain-core<1.0.0,>=0.3.66",
"langchain-text-splitters<1.0.0,>=0.3.8",
"langgraph>=0.6.0",

View File

@@ -14,6 +14,15 @@ resolution-markers = [
"python_full_version < '3.10' and platform_python_implementation != 'PyPy'",
]
[[package]]
name = "aiofiles"
version = "24.1.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247, upload-time = "2024-06-24T11:02:03.584Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896, upload-time = "2024-06-24T11:02:01.529Z" },
]
[[package]]
name = "aiohappyeyeballs"
version = "2.6.1"
@@ -126,6 +135,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a0/c0/2f1cefb7b077bf5c19f01bdf0d82b89de0bf2801b441eda23ada0b8966ac/aiohttp-3.12.14-cp39-cp39-win_amd64.whl", hash = "sha256:196858b8820d7f60578f8b47e5669b3195c21d8ab261e39b1d705346458f445f", size = 452436, upload-time = "2025-07-10T13:05:31.77Z" },
]
[[package]]
name = "aiohttp-retry"
version = "2.9.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohttp" },
]
sdist = { url = "https://files.pythonhosted.org/packages/9d/61/ebda4d8e3d8cfa1fd3db0fb428db2dd7461d5742cea35178277ad180b033/aiohttp_retry-2.9.1.tar.gz", hash = "sha256:8eb75e904ed4ee5c2ec242fefe85bf04240f685391c4879d8f541d6028ff01f1", size = 13608, upload-time = "2024-11-06T10:44:54.574Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/1a/99/84ba7273339d0f3dfa57901b846489d2e5c2cd731470167757f1935fffbd/aiohttp_retry-2.9.1-py3-none-any.whl", hash = "sha256:66d2759d1921838256a05a3f80ad7e724936f083e35be5abb5e16eed6be6dc54", size = 9981, upload-time = "2024-11-06T10:44:52.917Z" },
]
[[package]]
name = "aiosignal"
version = "1.4.0"
@@ -274,6 +295,50 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/99/b3/e2d7ab810eb68575a5c7569b03c0228b8f4ce927ffa6211471b526f270c9/azure_identity-1.23.1-py3-none-any.whl", hash = "sha256:7eed28baa0097a47e3fb53bd35a63b769e6b085bb3cb616dfce2b67f28a004a1", size = 186810, upload-time = "2025-07-15T19:16:40.184Z" },
]
[[package]]
name = "backports-datetime-fromisoformat"
version = "2.0.3"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/71/81/eff3184acb1d9dc3ce95a98b6f3c81a49b4be296e664db8e1c2eeabef3d9/backports_datetime_fromisoformat-2.0.3.tar.gz", hash = "sha256:b58edc8f517b66b397abc250ecc737969486703a66eb97e01e6d51291b1a139d", size = 23588, upload-time = "2024-12-28T20:18:15.017Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/42/4b/d6b051ca4b3d76f23c2c436a9669f3be616b8cf6461a7e8061c7c4269642/backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f681f638f10588fa3c101ee9ae2b63d3734713202ddfcfb6ec6cea0778a29d4", size = 27561, upload-time = "2024-12-28T20:16:47.974Z" },
{ url = "https://files.pythonhosted.org/packages/6d/40/e39b0d471e55eb1b5c7c81edab605c02f71c786d59fb875f0a6f23318747/backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:cd681460e9142f1249408e5aee6d178c6d89b49e06d44913c8fdfb6defda8d1c", size = 34448, upload-time = "2024-12-28T20:16:50.712Z" },
{ url = "https://files.pythonhosted.org/packages/f2/28/7a5c87c5561d14f1c9af979231fdf85d8f9fad7a95ff94e56d2205e2520a/backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:ee68bc8735ae5058695b76d3bb2aee1d137c052a11c8303f1e966aa23b72b65b", size = 27093, upload-time = "2024-12-28T20:16:52.994Z" },
{ url = "https://files.pythonhosted.org/packages/80/ba/f00296c5c4536967c7d1136107fdb91c48404fe769a4a6fd5ab045629af8/backports_datetime_fromisoformat-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8273fe7932db65d952a43e238318966eab9e49e8dd546550a41df12175cc2be4", size = 52836, upload-time = "2024-12-28T20:16:55.283Z" },
{ url = "https://files.pythonhosted.org/packages/e3/92/bb1da57a069ddd601aee352a87262c7ae93467e66721d5762f59df5021a6/backports_datetime_fromisoformat-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39d57ea50aa5a524bb239688adc1d1d824c31b6094ebd39aa164d6cadb85de22", size = 52798, upload-time = "2024-12-28T20:16:56.64Z" },
{ url = "https://files.pythonhosted.org/packages/df/ef/b6cfd355982e817ccdb8d8d109f720cab6e06f900784b034b30efa8fa832/backports_datetime_fromisoformat-2.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ac6272f87693e78209dc72e84cf9ab58052027733cd0721c55356d3c881791cf", size = 52891, upload-time = "2024-12-28T20:16:58.887Z" },
{ url = "https://files.pythonhosted.org/packages/37/39/b13e3ae8a7c5d88b68a6e9248ffe7066534b0cfe504bf521963e61b6282d/backports_datetime_fromisoformat-2.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:44c497a71f80cd2bcfc26faae8857cf8e79388e3d5fbf79d2354b8c360547d58", size = 52955, upload-time = "2024-12-28T20:17:00.028Z" },
{ url = "https://files.pythonhosted.org/packages/1e/e4/70cffa3ce1eb4f2ff0c0d6f5d56285aacead6bd3879b27a2ba57ab261172/backports_datetime_fromisoformat-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:6335a4c9e8af329cb1ded5ab41a666e1448116161905a94e054f205aa6d263bc", size = 29323, upload-time = "2024-12-28T20:17:01.125Z" },
{ url = "https://files.pythonhosted.org/packages/62/f5/5bc92030deadf34c365d908d4533709341fb05d0082db318774fdf1b2bcb/backports_datetime_fromisoformat-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2e4b66e017253cdbe5a1de49e0eecff3f66cd72bcb1229d7db6e6b1832c0443", size = 27626, upload-time = "2024-12-28T20:17:03.448Z" },
{ url = "https://files.pythonhosted.org/packages/28/45/5885737d51f81dfcd0911dd5c16b510b249d4c4cf6f4a991176e0358a42a/backports_datetime_fromisoformat-2.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:43e2d648e150777e13bbc2549cc960373e37bf65bd8a5d2e0cef40e16e5d8dd0", size = 34588, upload-time = "2024-12-28T20:17:04.459Z" },
{ url = "https://files.pythonhosted.org/packages/bc/6d/bd74de70953f5dd3e768c8fc774af942af0ce9f211e7c38dd478fa7ea910/backports_datetime_fromisoformat-2.0.3-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:4ce6326fd86d5bae37813c7bf1543bae9e4c215ec6f5afe4c518be2635e2e005", size = 27162, upload-time = "2024-12-28T20:17:06.752Z" },
{ url = "https://files.pythonhosted.org/packages/47/ba/1d14b097f13cce45b2b35db9898957578b7fcc984e79af3b35189e0d332f/backports_datetime_fromisoformat-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7c8fac333bf860208fd522a5394369ee3c790d0aa4311f515fcc4b6c5ef8d75", size = 54482, upload-time = "2024-12-28T20:17:08.15Z" },
{ url = "https://files.pythonhosted.org/packages/25/e9/a2a7927d053b6fa148b64b5e13ca741ca254c13edca99d8251e9a8a09cfe/backports_datetime_fromisoformat-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4da5ab3aa0cc293dc0662a0c6d1da1a011dc1edcbc3122a288cfed13a0b45", size = 54362, upload-time = "2024-12-28T20:17:10.605Z" },
{ url = "https://files.pythonhosted.org/packages/c1/99/394fb5e80131a7d58c49b89e78a61733a9994885804a0bb582416dd10c6f/backports_datetime_fromisoformat-2.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:58ea11e3bf912bd0a36b0519eae2c5b560b3cb972ea756e66b73fb9be460af01", size = 54162, upload-time = "2024-12-28T20:17:12.301Z" },
{ url = "https://files.pythonhosted.org/packages/88/25/1940369de573c752889646d70b3fe8645e77b9e17984e72a554b9b51ffc4/backports_datetime_fromisoformat-2.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8a375c7dbee4734318714a799b6c697223e4bbb57232af37fbfff88fb48a14c6", size = 54118, upload-time = "2024-12-28T20:17:13.609Z" },
{ url = "https://files.pythonhosted.org/packages/b7/46/f275bf6c61683414acaf42b2df7286d68cfef03e98b45c168323d7707778/backports_datetime_fromisoformat-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:ac677b1664c4585c2e014739f6678137c8336815406052349c85898206ec7061", size = 29329, upload-time = "2024-12-28T20:17:16.124Z" },
{ url = "https://files.pythonhosted.org/packages/a2/0f/69bbdde2e1e57c09b5f01788804c50e68b29890aada999f2b1a40519def9/backports_datetime_fromisoformat-2.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66ce47ee1ba91e146149cf40565c3d750ea1be94faf660ca733d8601e0848147", size = 27630, upload-time = "2024-12-28T20:17:19.442Z" },
{ url = "https://files.pythonhosted.org/packages/d5/1d/1c84a50c673c87518b1adfeafcfd149991ed1f7aedc45d6e5eac2f7d19d7/backports_datetime_fromisoformat-2.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:8b7e069910a66b3bba61df35b5f879e5253ff0821a70375b9daf06444d046fa4", size = 34707, upload-time = "2024-12-28T20:17:21.79Z" },
{ url = "https://files.pythonhosted.org/packages/71/44/27eae384e7e045cda83f70b551d04b4a0b294f9822d32dea1cbf1592de59/backports_datetime_fromisoformat-2.0.3-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:a3b5d1d04a9e0f7b15aa1e647c750631a873b298cdd1255687bb68779fe8eb35", size = 27280, upload-time = "2024-12-28T20:17:24.503Z" },
{ url = "https://files.pythonhosted.org/packages/a7/7a/a4075187eb6bbb1ff6beb7229db5f66d1070e6968abeb61e056fa51afa5e/backports_datetime_fromisoformat-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec1b95986430e789c076610aea704db20874f0781b8624f648ca9fb6ef67c6e1", size = 55094, upload-time = "2024-12-28T20:17:25.546Z" },
{ url = "https://files.pythonhosted.org/packages/71/03/3fced4230c10af14aacadc195fe58e2ced91d011217b450c2e16a09a98c8/backports_datetime_fromisoformat-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffe5f793db59e2f1d45ec35a1cf51404fdd69df9f6952a0c87c3060af4c00e32", size = 55605, upload-time = "2024-12-28T20:17:29.208Z" },
{ url = "https://files.pythonhosted.org/packages/f6/0a/4b34a838c57bd16d3e5861ab963845e73a1041034651f7459e9935289cfd/backports_datetime_fromisoformat-2.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:620e8e73bd2595dfff1b4d256a12b67fce90ece3de87b38e1dde46b910f46f4d", size = 55353, upload-time = "2024-12-28T20:17:32.433Z" },
{ url = "https://files.pythonhosted.org/packages/d9/68/07d13c6e98e1cad85606a876367ede2de46af859833a1da12c413c201d78/backports_datetime_fromisoformat-2.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4cf9c0a985d68476c1cabd6385c691201dda2337d7453fb4da9679ce9f23f4e7", size = 55298, upload-time = "2024-12-28T20:17:34.919Z" },
{ url = "https://files.pythonhosted.org/packages/60/33/45b4d5311f42360f9b900dea53ab2bb20a3d61d7f9b7c37ddfcb3962f86f/backports_datetime_fromisoformat-2.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:d144868a73002e6e2e6fef72333e7b0129cecdd121aa8f1edba7107fd067255d", size = 29375, upload-time = "2024-12-28T20:17:36.018Z" },
{ url = "https://files.pythonhosted.org/packages/36/bf/990ac5a4f86fdb92d435511bb80a9e66f0a8dd87e76ae00dd062db2cf649/backports_datetime_fromisoformat-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fa2de871801d824c255fac7e5e7e50f2be6c9c376fd9268b40c54b5e9da91f42", size = 27548, upload-time = "2024-12-28T20:17:55.065Z" },
{ url = "https://files.pythonhosted.org/packages/c6/e8/8f49cfc187df0231a1c1bcf780bbdb3d1c391dccafc3510cd033b637f836/backports_datetime_fromisoformat-2.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:1314d4923c1509aa9696712a7bc0c7160d3b7acf72adafbbe6c558d523f5d491", size = 34445, upload-time = "2024-12-28T20:17:56.134Z" },
{ url = "https://files.pythonhosted.org/packages/06/25/4ac60683f383d51337620ef6f5ff56438174b18f5d6a66f71da2ea4acd26/backports_datetime_fromisoformat-2.0.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:b750ecba3a8815ad8bc48311552f3f8ab99dd2326d29df7ff670d9c49321f48f", size = 27093, upload-time = "2024-12-28T20:17:57.17Z" },
{ url = "https://files.pythonhosted.org/packages/c7/ea/561edac54f9a1440a4bce0aecc291e5155e734ab42db88ce24cd1cccf288/backports_datetime_fromisoformat-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d5117dce805d8a2f78baeddc8c6127281fa0a5e2c40c6dd992ba6b2b367876", size = 52352, upload-time = "2024-12-28T20:17:59.642Z" },
{ url = "https://files.pythonhosted.org/packages/43/aa/98ed742a9a1bd88f5ead7852eb1d2fc828cba96b46340b70fc216a7f4b70/backports_datetime_fromisoformat-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb35f607bd1cbe37b896379d5f5ed4dc298b536f4b959cb63180e05cacc0539d", size = 52314, upload-time = "2024-12-28T20:18:00.771Z" },
{ url = "https://files.pythonhosted.org/packages/c7/ab/5b8f8c0be6a563f00bf2ecefff18beb6daf1e78025c0d823f581bf0a879f/backports_datetime_fromisoformat-2.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:61c74710900602637d2d145dda9720c94e303380803bf68811b2a151deec75c2", size = 52488, upload-time = "2024-12-28T20:18:01.888Z" },
{ url = "https://files.pythonhosted.org/packages/20/14/fef93556a022530525c77729f94eab3452568a11f7893cbcd76e06b398e8/backports_datetime_fromisoformat-2.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ece59af54ebf67ecbfbbf3ca9066f5687879e36527ad69d8b6e3ac565d565a62", size = 52555, upload-time = "2024-12-28T20:18:03.065Z" },
{ url = "https://files.pythonhosted.org/packages/2f/bf/e1a2fe6ec0ce2b983d7cc93c43b41334f595fd7793aa35afbd02737c5e75/backports_datetime_fromisoformat-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:d0a7c5f875068efe106f62233bc712d50db4d07c13c7db570175c7857a7b5dbd", size = 29331, upload-time = "2024-12-28T20:18:05.494Z" },
{ url = "https://files.pythonhosted.org/packages/be/03/7eaa9f9bf290395d57fd30d7f1f2f9dff60c06a31c237dc2beb477e8f899/backports_datetime_fromisoformat-2.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90e202e72a3d5aae673fcc8c9a4267d56b2f532beeb9173361293625fe4d2039", size = 28980, upload-time = "2024-12-28T20:18:06.554Z" },
{ url = "https://files.pythonhosted.org/packages/47/80/a0ecf33446c7349e79f54cc532933780341d20cff0ee12b5bfdcaa47067e/backports_datetime_fromisoformat-2.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2df98ef1b76f5a58bb493dda552259ba60c3a37557d848e039524203951c9f06", size = 28449, upload-time = "2024-12-28T20:18:07.77Z" },
{ url = "https://files.pythonhosted.org/packages/93/a3/ef965bee678d5dfbabfd85283d8a9caf125b11c394174eceb76707e64334/backports_datetime_fromisoformat-2.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2797593760da6bcc32c4a13fa825af183cd4bfd333c60b3dbf84711afca26ef", size = 28978, upload-time = "2024-12-28T20:18:12.441Z" },
{ url = "https://files.pythonhosted.org/packages/dc/e7/910935727b5c0e4975820d0ae5c9489d111859c651109f72208a8a28105b/backports_datetime_fromisoformat-2.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35a144fd681a0bea1013ccc4cd3fd4dc758ea17ee23dca019c02b82ec46fc0c4", size = 28437, upload-time = "2024-12-28T20:18:13.465Z" },
]
[[package]]
name = "blockbuster"
version = "1.5.25"
@@ -761,6 +826,70 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f6/34/31a1604c9a9ade0fdab61eb48570e09a796f4d9836121266447b0eaf7feb/cryptography-45.0.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e357286c1b76403dd384d938f93c46b2b058ed4dfcdce64a770f0537ed3feb6f", size = 3331106, upload-time = "2025-07-02T13:06:18.058Z" },
]
[[package]]
name = "daytona"
version = "0.25.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiofiles" },
{ name = "daytona-api-client" },
{ name = "daytona-api-client-async" },
{ name = "deprecated" },
{ name = "environs" },
{ name = "httpx" },
{ name = "obstore" },
{ name = "pydantic" },
{ name = "toml" },
]
sdist = { url = "https://files.pythonhosted.org/packages/19/d2/a4eef252d3298ace0195e36a2ba354ae61d4ddf6953b133485c484247c9e/daytona-0.25.5.tar.gz", hash = "sha256:664138384f5fc7d67a0d37242574d8d17a4d5b08d06df68da38846331f69f896", size = 92170, upload-time = "2025-08-06T14:43:55.852Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a7/5b/8a3999c20661e73168349c5478ccd28592fd9c27632e8bd7e2bb96296fad/daytona-0.25.5-py3-none-any.whl", hash = "sha256:9b9dfe1f3027d630a0bd7810d847c90278100dd1ec12832e2c08333ca4922269", size = 114920, upload-time = "2025-08-06T14:43:54.665Z" },
]
[[package]]
name = "daytona-api-client"
version = "0.25.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic" },
{ name = "python-dateutil" },
{ name = "typing-extensions" },
{ name = "urllib3" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5a/d5/83f4bee9c0b304042a10d4f9b2a7158fce28407cd8f4c32f516d25923556/daytona_api_client-0.25.5.tar.gz", hash = "sha256:50f28c35a776fd1313bfc73ffb65898e8bf9342333a7145c6461e2919148081b", size = 100695, upload-time = "2025-08-06T14:31:25.135Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a5/06/b54e865c14da06a1a9519bb92bd0421dd1f9ca9b39dc4b419614c68bbe40/daytona_api_client-0.25.5-py3-none-any.whl", hash = "sha256:b0b1e997082fead8de22750ffbacc42b7ac2f99d60cdd9541a1b80caff3d7c70", size = 287796, upload-time = "2025-08-06T14:31:23.946Z" },
]
[[package]]
name = "daytona-api-client-async"
version = "0.25.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohttp" },
{ name = "aiohttp-retry" },
{ name = "pydantic" },
{ name = "python-dateutil" },
{ name = "typing-extensions" },
{ name = "urllib3" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e3/d3/1a337a966eaee7b6f09da09d396e84521ccab95bbd5537f5350dda8f420b/daytona_api_client_async-0.25.5.tar.gz", hash = "sha256:94cc1d9c2368da211d55c4b92347aad02f370548399f80f4071361b30f621d6b", size = 100636, upload-time = "2025-08-06T14:31:26.16Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e7/75/938470fbe3230258c075043ae9d17f1dfe6588d361931b95e1c18f5bfb04/daytona_api_client_async-0.25.5-py3-none-any.whl", hash = "sha256:f8aeca577bab7c07c4d112fc53d7cc84bdf3a9ccdae7f6ce43c424244c3313b2", size = 301098, upload-time = "2025-08-06T14:31:24.049Z" },
]
[[package]]
name = "deprecated"
version = "1.2.18"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "wrapt" },
]
sdist = { url = "https://files.pythonhosted.org/packages/98/97/06afe62762c9a8a86af0cfb7bfdab22a43ad17138b07af5b1a58442690a2/deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d", size = 2928744, upload-time = "2025-01-27T10:46:25.7Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998, upload-time = "2025-01-27T10:46:09.186Z" },
]
[[package]]
name = "distro"
version = "1.9.0"
@@ -779,6 +908,20 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708", size = 36896, upload-time = "2025-07-21T07:35:00.684Z" },
]
[[package]]
name = "environs"
version = "14.3.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "marshmallow" },
{ name = "python-dotenv" },
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/7f/7c/db59db76a70254aa0f9de2b509379b09ab89b2c1fa309acb8daf02e06ec2/environs-14.3.0.tar.gz", hash = "sha256:20672d92db325ce8114872b1989104eb84f083486325b5a44bcddff56472a384", size = 34209, upload-time = "2025-08-01T15:56:54.39Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ad/e3/98d8567eb438c7856a4dcedd97a8a7c6707120a5ada6f7d84ace44fd8591/environs-14.3.0-py3-none-any.whl", hash = "sha256:91e4c4ea964be277855cdd83a588f6375f10fad9fa452660ecb9f503c230f26a", size = 16355, upload-time = "2025-08-01T15:56:52.897Z" },
]
[[package]]
name = "exceptiongroup"
version = "1.3.0"
@@ -1558,6 +1701,7 @@ name = "langchain"
version = "1.0.0.dev1"
source = { editable = "." }
dependencies = [
{ name = "daytona" },
{ name = "langchain-core" },
{ name = "langchain-text-splitters" },
{ name = "langgraph" },
@@ -1650,6 +1794,7 @@ typing = [
[package.metadata]
requires-dist = [
{ name = "daytona", specifier = ">=0.25.5" },
{ name = "langchain-anthropic", marker = "extra == 'anthropic'" },
{ name = "langchain-aws", marker = "extra == 'aws'" },
{ name = "langchain-azure-ai", marker = "extra == 'azure-ai'" },
@@ -1757,7 +1902,7 @@ wheels = [
[[package]]
name = "langchain-core"
version = "0.3.72"
version = "0.3.73"
source = { editable = "../core" }
dependencies = [
{ name = "jsonpatch" },
@@ -2217,6 +2362,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" },
]
[[package]]
name = "marshmallow"
version = "4.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "backports-datetime-fromisoformat", marker = "python_full_version < '3.11'" },
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/1e/ff/26df5a9f5ac57ccf693a5854916ab47243039d2aa9e0fe5f5a0331e7b74b/marshmallow-4.0.0.tar.gz", hash = "sha256:3b6e80aac299a7935cfb97ed01d1854fb90b5079430969af92118ea1b12a8d55", size = 220507, upload-time = "2025-04-17T02:25:54.925Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d6/26/6cc45d156f44dbe1d5696d9e54042e4dcaf7b946c0b86df6a97d29706f32/marshmallow-4.0.0-py3-none-any.whl", hash = "sha256:e7b0528337e9990fd64950f8a6b3a1baabed09ad17a0dfb844d701151f92d203", size = 48420, upload-time = "2025-04-17T02:25:53.375Z" },
]
[[package]]
name = "mdurl"
version = "0.1.2"
@@ -2642,6 +2800,93 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/48/6b/1c6b515a83d5564b1698a61efa245727c8feecf308f4091f565988519d20/numpy-2.3.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e610832418a2bc09d974cc9fecebfa51e9532d6190223bc5ef6a7402ebf3b5cb", size = 12927246, upload-time = "2025-06-21T12:27:38.618Z" },
]
[[package]]
name = "obstore"
version = "0.7.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/67/05/be6001032f5cb13d774b6c24b13d686489108a7d65fffc99a90a42ca4d1c/obstore-0.7.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:8c89b6205672490fb99e16159bb290a12d4d8e6f9b27904720faafd4fd8ae436", size = 3680450, upload-time = "2025-08-01T22:36:37.459Z" },
{ url = "https://files.pythonhosted.org/packages/a5/d8/2ae952c7ed1dcd6922520cb5e12089797ccc1b77e6b59e6a97e308c15d0b/obstore-0.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26357df7b3824f431ced44e26fe334f686410cb5e8c218569759d6aa32ab7242", size = 3397608, upload-time = "2025-08-01T22:36:39.726Z" },
{ url = "https://files.pythonhosted.org/packages/8d/68/24aa8897d9a62bfda31d65e3c0e95f777d11b571176883a886af64efd72b/obstore-0.7.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca3380121cc5ce6d040698fcf126c1acab4a00282db5a6bc8e5026bba22fc43d", size = 3554402, upload-time = "2025-08-01T22:36:45.157Z" },
{ url = "https://files.pythonhosted.org/packages/76/01/5a9f23e973f2ec8d9820b0492dd7d672d6653b61ed7844cd6ab888a0c266/obstore-0.7.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1eca930fa0229f7fd5d881bc03deffca51e96ad754cbf256e4aa27ac7c50db6", size = 3703713, upload-time = "2025-08-01T22:36:46.688Z" },
{ url = "https://files.pythonhosted.org/packages/b6/14/859af1bb467b99249466be67dbe372a4bdd2ce09aa7e6273241b8bde85e8/obstore-0.7.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4b91fec58a65350303b643ce1da7a890fb2cc411c2a9d86672ad30febb196df", size = 3976639, upload-time = "2025-08-01T22:36:52.178Z" },
{ url = "https://files.pythonhosted.org/packages/68/9a/c5fbc300af7e8484b89fab3b16a7c56d830bcfcc052025afc59363765351/obstore-0.7.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4eba1c87af7002d95cce8c2c67fac814056938f16500880e1fb908a0e8c7a7f5", size = 4012188, upload-time = "2025-08-01T22:36:53.67Z" },
{ url = "https://files.pythonhosted.org/packages/fa/78/6c48c8539648b8e70f95640556177bcb174b82d2cd79b93bca4fb93bc917/obstore-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5e8ad65c5b481f168080db1c5290cf55ad7ab77b45fd467c4d25367db2a3ae", size = 3809077, upload-time = "2025-08-01T22:36:55.418Z" },
{ url = "https://files.pythonhosted.org/packages/97/23/63a1ea91df816c86a698d396c8081cc8ced1de5d6656e193a3902b63af65/obstore-0.7.3-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:b680dd856d238a892a14ef3115daee33e267502229cee248266a20e03dbe98d0", size = 3579674, upload-time = "2025-08-01T22:36:56.998Z" },
{ url = "https://files.pythonhosted.org/packages/4e/80/369cb90cf78b74b3f452f7f7030a3c8314e7bb3252b3fdc6004f6b5eb62d/obstore-0.7.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c3dccb74ebfec1f5517c2160503f30629b62685c78bbe15ad03492969fadd858", size = 3743021, upload-time = "2025-08-01T22:36:58.53Z" },
{ url = "https://files.pythonhosted.org/packages/64/3f/458b4319debf42ee12fd4eab016476d8966a33b4b36fff60064a17d0810d/obstore-0.7.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd614e53a00d22b2facfd1fb9b516fa210cd788ecce513dd532a8e65fa07d55d", size = 3777781, upload-time = "2025-08-01T22:36:59.764Z" },
{ url = "https://files.pythonhosted.org/packages/71/4f/eae8419034117f987e6d90a5c93f21615419e5a39ada33c15c89f75c3271/obstore-0.7.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:32841a2b4bef838412302e9a8612fc3ba1c51bd808b77b4854efe6b1f7a65f0d", size = 3784117, upload-time = "2025-08-01T22:37:00.994Z" },
{ url = "https://files.pythonhosted.org/packages/0e/95/2a9af40d200e6fd564d194dd1ce60236461a96403627283f3b0da5784098/obstore-0.7.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a58f3952b43fb5f7b0f0f9f08272983e4dd50f83b16a05943f89581b0e6bff20", size = 3982070, upload-time = "2025-08-01T22:37:02.437Z" },
{ url = "https://files.pythonhosted.org/packages/15/33/9bafae1a9fbc71c2015fad29e4af95b9bbd5c87ada400e21739fc917067f/obstore-0.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:8745e2437e79e073c3cf839454f803909540fa4f6cd9180c9ab4ce742c716c8b", size = 4038720, upload-time = "2025-08-01T22:37:04.053Z" },
{ url = "https://files.pythonhosted.org/packages/44/e4/722ab931b8b2544f1d60bceceaa97d22d810f588f3a26ad64997213c2c4d/obstore-0.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65ffe43fd63c9968172bed649fcaf6345b41a124be5d34f46adb94604e9ccef8", size = 3680639, upload-time = "2025-08-01T22:37:05.531Z" },
{ url = "https://files.pythonhosted.org/packages/f9/99/7f5efcc0110144f32152b23bd284927ee3f34b28962466b81aa98f8229fb/obstore-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2947609a1fab1f9b808235a8088e7e99814fbaf3b6000833d760fd90f68fa7cd", size = 3397505, upload-time = "2025-08-01T22:37:06.745Z" },
{ url = "https://files.pythonhosted.org/packages/15/84/0b21cb4fdeb1ca8aa256acb8cccabb7f0d450a36c03655512fcda308759e/obstore-0.7.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15409f75acc4e10f924fe118f7018607d6d96a72330ac4cc1663d36b7c6847b1", size = 3554635, upload-time = "2025-08-01T22:37:08.27Z" },
{ url = "https://files.pythonhosted.org/packages/e5/eb/0e9ad4d31e49f8bed3d6f482261fcde5035667330d81348cc3ff041f6ef2/obstore-0.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5224d834bbe7a9f2592b130e4ddd86340fa172e5a3a51284e706f6515d95c036", size = 3703695, upload-time = "2025-08-01T22:37:09.51Z" },
{ url = "https://files.pythonhosted.org/packages/fa/f3/49e854c782076a2877d475089eebf3556a5658df0c0544f6182203af5eab/obstore-0.7.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b1af6c1a33d98db9954f7ceab8eb5e543aea683a79a0ffd72b6c8d176834a9b", size = 3976486, upload-time = "2025-08-01T22:37:10.777Z" },
{ url = "https://files.pythonhosted.org/packages/38/16/518e9e47f0d486821a922e82fe7b1e382f8afb62468cd3129d06937d8403/obstore-0.7.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:708c27c4e5e85799fe7a2d2ae443fbd96c2ad36b561c815a9b01b5333ab536ad", size = 4011834, upload-time = "2025-08-01T22:37:12.136Z" },
{ url = "https://files.pythonhosted.org/packages/99/f8/585e3da7d1fc09965d78763ad68063a2fd7fe114e3953af26399db196e70/obstore-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7da327920bef8bbd02445f33947487fe4e94fcb9e084c810108e88be57d0877b", size = 3809352, upload-time = "2025-08-01T22:37:13.681Z" },
{ url = "https://files.pythonhosted.org/packages/d9/a2/4fa492ae67b0354f8415fec8b8ca928e94f4e07f8a12b4d7502a856915ce/obstore-0.7.3-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:8f3b23a40ad374fe7a65fab4678a9978978ec83a597156a2a9d1dbeab433a469", size = 3579895, upload-time = "2025-08-01T22:37:15.243Z" },
{ url = "https://files.pythonhosted.org/packages/b4/35/a8034730b2f7d71268f5685fefc5b37eee589d404e5face79bc38ecd1698/obstore-0.7.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b3e7d0c7e85e4f67e479f7efab5dea26ceaace10897d639d38f77831ef0cdaf", size = 3742907, upload-time = "2025-08-01T22:37:16.429Z" },
{ url = "https://files.pythonhosted.org/packages/96/ca/3174ccc5d3d0f91ff1b6f0f258c795671d5a3bb64f8d72937b44733bdc78/obstore-0.7.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:dfee24c5e9d5b7e0f43e4bbf8cc15069e5c60bfdb86873ce97c0eb487afa5da8", size = 3778325, upload-time = "2025-08-01T22:37:17.669Z" },
{ url = "https://files.pythonhosted.org/packages/53/5c/0cba21607f2a294fc0b6fab3a4ddf5eafe94de384c0212cea6977a4bc3ee/obstore-0.7.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:99e187cee4a6e13605886b906b34fec7ae9902dd25b1e9aafae863a9d55c6e47", size = 3784247, upload-time = "2025-08-01T22:37:18.954Z" },
{ url = "https://files.pythonhosted.org/packages/f8/87/886402bf40643163a8042da602cdc8ce3b9355062e7c6930af8e5567f6d3/obstore-0.7.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5de3b0859512b9ddbf57ac34db96ad41fb85fc9597e422916044d1bf550427d", size = 3983087, upload-time = "2025-08-01T22:37:20.194Z" },
{ url = "https://files.pythonhosted.org/packages/69/d5/95b9bfdbb449795d1a6e312dd6ac4469b31b3df5807d85321d6e6762f264/obstore-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:35fdd1cd8856984de1b5a11fced83f6fd6623eb459736e57b9975400ff5baf5a", size = 4038939, upload-time = "2025-08-01T22:37:21.411Z" },
{ url = "https://files.pythonhosted.org/packages/98/29/1ba71bad5aa3cd01b6849490f4e8457b4253c60322b70014c5155bce0549/obstore-0.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6cbe5dde68bf6ab5a88f3bb467ca8f123bcce3efc03e22fd8339688559d36199", size = 3676670, upload-time = "2025-08-01T22:37:22.904Z" },
{ url = "https://files.pythonhosted.org/packages/26/5f/abea8b6261c0117ff3f7b1da34185806cc7fb0958dd2eec5f25b43d4134c/obstore-0.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a6db23cbcb3aec10e09a31fd0883950cb9b7f77f4fcf1fb0e8a276e1d1961bf3", size = 3387707, upload-time = "2025-08-01T22:37:24.804Z" },
{ url = "https://files.pythonhosted.org/packages/ad/a7/6fe561c2dab64ce69ed05e76902c6eb9ce82c934bd3b3e6e796a2897dd62/obstore-0.7.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00fde287770bdbdbb06379670d30c257b20e77a4a11b36f1e232b5bc6ef07b7a", size = 3558626, upload-time = "2025-08-01T22:37:26.058Z" },
{ url = "https://files.pythonhosted.org/packages/ed/83/f0c25dcce75e5297cba2a8ecb93198b01f4ff7af699fa1296207e30bf02e/obstore-0.7.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c420036356269666197f0704392c9495f255bb3ff9b667c69fb49bc65bd50dcd", size = 3706975, upload-time = "2025-08-01T22:37:27.306Z" },
{ url = "https://files.pythonhosted.org/packages/da/6d/029a65fa2c51443d27d5a6f57a76becc51793d0a53ea0efac2e4fbce3eda/obstore-0.7.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28482626ca9481569ad16ba0c0c36947ce96e8147c64011dc0af6d58be8ff9c", size = 3973329, upload-time = "2025-08-01T22:37:28.592Z" },
{ url = "https://files.pythonhosted.org/packages/b1/d6/0e49f9d6c5e9d0021722c5e3ad7402d8457ffe2743fe245a1b16fc9caf72/obstore-0.7.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cead20055221337ddf218098afe8138f8624395b0cf2a730da72a4523c11b2f", size = 4021499, upload-time = "2025-08-01T22:37:30.135Z" },
{ url = "https://files.pythonhosted.org/packages/f6/8e/daf5d23477c14cd52525b6e8d5046106e37fbf4f4e62fc0a4c0952c7e229/obstore-0.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71017142a593022848f4af0ac1e39af1a56927981cc2c89542888edb206eb33", size = 3806108, upload-time = "2025-08-01T22:37:31.438Z" },
{ url = "https://files.pythonhosted.org/packages/23/a5/123bcc4b0762e479f9bc443b8a91885c90cc92e844543c2f87d48b1b674e/obstore-0.7.3-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:8aebc2bf796a0d1525318a9ac69608a96d03abc621ca1e6d810e08a70bd695c1", size = 3576246, upload-time = "2025-08-01T22:37:32.698Z" },
{ url = "https://files.pythonhosted.org/packages/71/29/c2fc9ebdb84bddf25a644ee15d5855d8c5e29218dd6ee7877a3378b0094d/obstore-0.7.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c0ebf03969b81ee559c377c5ebca9dcdffbef0e6650d43659676aeaeb302a272", size = 3739761, upload-time = "2025-08-01T22:37:33.961Z" },
{ url = "https://files.pythonhosted.org/packages/14/be/a04542e8f37b547fa8720d518c333760f90323cbd392e60bf48d1631e965/obstore-0.7.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e0f5d97064ec35fdef3079f867afe6fa5e76ab2bb3e809855ab34a1aa34c9dcd", size = 3784232, upload-time = "2025-08-01T22:37:35.223Z" },
{ url = "https://files.pythonhosted.org/packages/05/d9/d164f871f9dd91fc5870171a3c60f5986d5f9f98a6e58da4663bbe16a662/obstore-0.7.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3a80541671646c5e49493de61361a1851c8c172cf28981b76aa4248a9f02f5b1", size = 3788418, upload-time = "2025-08-01T22:37:36.418Z" },
{ url = "https://files.pythonhosted.org/packages/78/9e/59701156233d94b4654637424890188bb5e1154ea53260a93016084ce423/obstore-0.7.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a5ce6385ad89afad106d05d37296f724ba10f8f4e57ab8ad7f4ecce0aa226d3d", size = 3976968, upload-time = "2025-08-01T22:37:37.702Z" },
{ url = "https://files.pythonhosted.org/packages/a2/fe/d551a770ae10fe2ca5feb5c7256c777219614297c6e45d6714ade9b43fbf/obstore-0.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:632522ba63a44768977defc0a93fc5dd59ea0455bfd6926cd3121971306da4e5", size = 4050093, upload-time = "2025-08-01T22:37:38.962Z" },
{ url = "https://files.pythonhosted.org/packages/2a/ef/491cf28be51301aa9695d8448c4e6489956c162564dbdf4f21836696e294/obstore-0.7.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:dcb71412dc8d2bd464b340d1f36d8c0ceb7894c01c2ceaaa5f2ac45376503fa2", size = 3676519, upload-time = "2025-08-01T22:37:40.194Z" },
{ url = "https://files.pythonhosted.org/packages/f0/12/41c51cca59784d2b6c60a99a2a010f8e73a089416d288db12d91cbcdbd02/obstore-0.7.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6d486bb01438039d686401ce4207d82c02b8b639227baa5bdd578efdab388dea", size = 3387665, upload-time = "2025-08-01T22:37:41.431Z" },
{ url = "https://files.pythonhosted.org/packages/cb/27/9aac5a70c6d4a496a837748bc9368e7825dc58761711d5f65cc8bc9d3765/obstore-0.7.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaaf0c9223b5592658c131ff32a0574be995c7e237f406266f9a68ea2266769", size = 3558354, upload-time = "2025-08-01T22:37:42.678Z" },
{ url = "https://files.pythonhosted.org/packages/f2/04/70e6cf1931d56db2f86a359ea171aa403146c04faf20aeb025eeabe254dd/obstore-0.7.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8ae6cde734df3cc542c14152029170d9ae70ce50b957831ed71073113bd3d60", size = 3706831, upload-time = "2025-08-01T22:37:44.415Z" },
{ url = "https://files.pythonhosted.org/packages/e9/a9/758920c8c7256f0cd366a3b0063247a197d9a1e2e189e2309400022787c5/obstore-0.7.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30da82ae3bfdf24fa80af38967e323ae8da0bb7c36cce01f0dda7689faaf1272", size = 3973250, upload-time = "2025-08-01T22:37:45.631Z" },
{ url = "https://files.pythonhosted.org/packages/59/f8/5a6a831d7328a4351caab13ba7faf47cb1bdcb5afba2e46535386ccf1170/obstore-0.7.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5daa9f912eac8cdf218161d34e13f38cbb594e934eaaf8a7c09dca5a394b231", size = 4030160, upload-time = "2025-08-01T22:37:47.208Z" },
{ url = "https://files.pythonhosted.org/packages/67/7d/698e4851049999b4a8ff9622ece0cba86e64c4242fa981e21f9832bdd378/obstore-0.7.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef06cad4e8978d672357b328b4f61c48827b2b79d7eaf58b68ee31ac0e652b8", size = 3805594, upload-time = "2025-08-01T22:37:48.699Z" },
{ url = "https://files.pythonhosted.org/packages/b4/a6/4a9290cac8aaa16a7ce9aec6e8a001ed0d0ed42d1e49570c6770d31f693c/obstore-0.7.3-cp313-cp313-manylinux_2_24_aarch64.whl", hash = "sha256:d34920539a94da2b87195787b80004960638dfd0aa2f4369fc9239e0a41470a8", size = 3575482, upload-time = "2025-08-01T22:37:50.216Z" },
{ url = "https://files.pythonhosted.org/packages/e6/c9/87f7c88daf07a52b5d86a9de0664574ee0dea2f5e6cd26a91ad4688b53fb/obstore-0.7.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcdaa779f376745ff493cce7f19cbbe8d75f68304bf1062e757ab60bd62de1", size = 3739411, upload-time = "2025-08-01T22:37:51.483Z" },
{ url = "https://files.pythonhosted.org/packages/69/58/1163bcb48e80e220ef6010130880d24a75239025fde1092356ce71b6efee/obstore-0.7.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ae095f679e4796b8f6ef80ed3813ddd14a477ae219a0c059c23cf294f9288ded", size = 3783914, upload-time = "2025-08-01T22:37:52.857Z" },
{ url = "https://files.pythonhosted.org/packages/75/a2/f5b68265a6ea248adbd4e2f9db2dae7d727ab6ac53a63dfebcf28f1aacea/obstore-0.7.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6def59e79c19b8804743fec6407f542b387dc1630c2254412ae8bd3a0b98e7e4", size = 3787905, upload-time = "2025-08-01T22:37:54.414Z" },
{ url = "https://files.pythonhosted.org/packages/8b/2c/23b671c7eaf37097fe9c3c2cc925c466135d4866e2009444daf91f180fed/obstore-0.7.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f97797c42476ab19853ef4a161b903eaf96c2363a23b9e0187d66b0daee350cb", size = 3976888, upload-time = "2025-08-01T22:37:55.681Z" },
{ url = "https://files.pythonhosted.org/packages/42/10/5f352e6dd1388f5c8931261357e111a6923121d937a1ebad09f4cf391418/obstore-0.7.3-cp313-cp313-win_amd64.whl", hash = "sha256:8f0ecc01b1444bc08ff98e368b80ea2c085a7783621075298e86d3aba96f8e27", size = 4050018, upload-time = "2025-08-01T22:37:57.285Z" },
{ url = "https://files.pythonhosted.org/packages/33/77/475397c0e425b84b7dcc5e3d9ef1d9a9fe318d0651c8e58e9a935a1f4493/obstore-0.7.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b0a337b6d2b430040e752effdf9584b0d6adddef2ead2bbbc3c204957a2f69d2", size = 3681349, upload-time = "2025-08-01T22:37:58.528Z" },
{ url = "https://files.pythonhosted.org/packages/af/98/bb60149a36841fd061d0eaf53a58937e9a5a049415f7ce3b088ad0b4a992/obstore-0.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:439874c31a78198211c45ebde0b3535650dc3585353be51b361bd017bc492090", size = 3398939, upload-time = "2025-08-01T22:37:59.896Z" },
{ url = "https://files.pythonhosted.org/packages/9c/19/eda26a3f6f2d2eccf59299304e7f6dcbb1c265b3ed0b49ee28e8cedb1ff7/obstore-0.7.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:360034e4b1fe84da59bc3b090798acdd1b4a8b75cc1e56d2656591c7cc8776f2", size = 3554324, upload-time = "2025-08-01T22:38:01.185Z" },
{ url = "https://files.pythonhosted.org/packages/1e/ac/ae9a00d8263f4416c747e49e53b9615f62f59f8f38e1ce7cab4ec672c8f9/obstore-0.7.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44989c9be1156c8ad02522bcb0358e813fd71fa061e51c3331cc11f4b6d36525", size = 3703845, upload-time = "2025-08-01T22:38:02.476Z" },
{ url = "https://files.pythonhosted.org/packages/3a/60/8dae38d3d913951751cf9750cf1a106640eca7581773e30873db1108de2b/obstore-0.7.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bf0b9c28b3149138ff3db0c2cfb3acb329d3a3bef02a3146edec6d2419b27ad", size = 3977308, upload-time = "2025-08-01T22:38:04.054Z" },
{ url = "https://files.pythonhosted.org/packages/14/31/cf0a34e60ceea50035e7f0bc6a01c81b61796e58cbeb212828acc02765d0/obstore-0.7.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98fd91e90442ff3bf8832c713189c81cd892299a8423fc5d8c4534e84db62643", size = 4012269, upload-time = "2025-08-01T22:38:05.391Z" },
{ url = "https://files.pythonhosted.org/packages/db/3c/c3c3a742ca3b0e6db8b397a618d64ba47bbdffacb7f9c225e5bd4c3f740f/obstore-0.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eccae18d75d753129d58c080716cd91738fd1f913b7182eb5695f483d6cbd94", size = 3809894, upload-time = "2025-08-01T22:38:06.746Z" },
{ url = "https://files.pythonhosted.org/packages/46/6a/04d54c5a1df97e38e5fe3e0fdb752cc91e62e3c282d7cab5b2b5f7b33372/obstore-0.7.3-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:bbe0488ca1573020af14ca585ddc5e5aa7593f8fc42ec5d1f53b83393ccaefa5", size = 3580116, upload-time = "2025-08-01T22:38:08.003Z" },
{ url = "https://files.pythonhosted.org/packages/80/e3/98e721429fa0ff4ec53ccdfc9ea75c611628fae24ae31f1b8a0c9a7a1668/obstore-0.7.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6765cef76ca62b13d4cfec4648fbf6048410d34c2e11455323d011d208977b89", size = 3743208, upload-time = "2025-08-01T22:38:09.298Z" },
{ url = "https://files.pythonhosted.org/packages/b3/81/749287db1b3353e316c461d13d8fa65ba39a31570e840d9c282d16069412/obstore-0.7.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:00f8d1211d247fc24c9f5d5614f2ed25872fe2c4af2e283f3e6cc85544a3dee5", size = 3777991, upload-time = "2025-08-01T22:38:10.617Z" },
{ url = "https://files.pythonhosted.org/packages/21/7d/1bf1c884a2ed045e83c096b08df102a8fb58750e1e1cbb94b210bdf5f842/obstore-0.7.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ebc387320a00918c8afb5f2d76c07157003a661d60ff03763103278670bc75e3", size = 3784472, upload-time = "2025-08-01T22:38:12.225Z" },
{ url = "https://files.pythonhosted.org/packages/c2/61/062b0b9ec2f461cfc2a8e8b4d60554f98d1e5fe8803c3bb50b8c3db0ff35/obstore-0.7.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8b526bdc5b5392ac55b3a45bf04f2eba3a33c132dfa04418e7ffba38763d7b5d", size = 3983603, upload-time = "2025-08-01T22:38:13.467Z" },
{ url = "https://files.pythonhosted.org/packages/f3/11/6a5e778b5134868ca7eed564565c58619d0ff47e90e169d0dd1b5ebd1a76/obstore-0.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:1af6dfef86b37e74ff812bd70d8643619e16485559fcaee01b3f2442b70d4918", size = 4038795, upload-time = "2025-08-01T22:38:14.83Z" },
{ url = "https://files.pythonhosted.org/packages/b8/80/1b1f2f05e2cf88199e6b4d0e6a92e612e2069c435cbad0032caafbb3a4f6/obstore-0.7.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:848eb12ed713f447a7b1f7de3f0bff570de99546f76c37e6315102f5bbdaf71c", size = 3681551, upload-time = "2025-08-01T22:38:16.614Z" },
{ url = "https://files.pythonhosted.org/packages/c4/2d/209730d717e68b819ccfa7bfac6f69c4da3de23bd72b0fe0f1d670142f75/obstore-0.7.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:091998d57331aa0e648a9dca0adebf6dc09eb53a4e6935c9c06625998120acc1", size = 3398183, upload-time = "2025-08-01T22:38:17.931Z" },
{ url = "https://files.pythonhosted.org/packages/69/9a/9cb506a72a2c038c8abf0b1b42b0020164f8b3d040231832a2b4a9168097/obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed7c957d19a6a994e8c9198b1e58b31e0fc3748ca056e27f738a4ead789eb80b", size = 3553938, upload-time = "2025-08-01T22:38:19.218Z" },
{ url = "https://files.pythonhosted.org/packages/ee/e1/ca025b50b8154b4a0ce42c72cc77cc36763d6fb8b4d44de0a0b6b8b3a1ae/obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af8daa0568c89ce863986ccf14570c30d1dc817b51ed2146eecb76fddc82704e", size = 3703894, upload-time = "2025-08-01T22:38:20.446Z" },
{ url = "https://files.pythonhosted.org/packages/7d/8f/7b5719e1dd2d9ac95cf63f671c01e292dbf5b75ab164ebf163836888d26c/obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe42053413a35a964e88ea156af3253defac30bedd973797b55b8e230cc50fe4", size = 3976476, upload-time = "2025-08-01T22:38:21.767Z" },
{ url = "https://files.pythonhosted.org/packages/26/f2/aa79ab61b245cfadb8a39783f477fa11741032494c35500c3084a923528b/obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2faa2ac90672334cdaabbf930c82e91efa184928dc55b55bcbf84b152bc4df1", size = 4014124, upload-time = "2025-08-01T22:38:23.632Z" },
{ url = "https://files.pythonhosted.org/packages/12/2c/b2ebc3e7c37a2cf07aa30754fc3417e0254349a20ec1f9cafe038de427df/obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49f20fdabd295a5a001569957c19a51615d288cd255fb80dcf966e2307ca0cec", size = 3809683, upload-time = "2025-08-01T22:38:24.917Z" },
{ url = "https://files.pythonhosted.org/packages/69/4c/7f924876dffe326006f0e225bff06e1025b7d33e908c11dcdf0bca090b87/obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_24_aarch64.whl", hash = "sha256:aa131d089565fb7a5225220fcdfe260e3b1fc6821c0a2eef2e3a23c5ba9c79bd", size = 3579186, upload-time = "2025-08-01T22:38:26.162Z" },
{ url = "https://files.pythonhosted.org/packages/86/fd/9f38c3d885c7b33750e073dff7a5fcc7963dc753b95392a704ba6507f7fb/obstore-0.7.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:73df8b270b89a97ef9e87fc8e552d97d426bbfcb61c55097f5d452a7457ee9d5", size = 3742929, upload-time = "2025-08-01T22:38:27.532Z" },
{ url = "https://files.pythonhosted.org/packages/34/b2/47547db59dcd1d752771475567e4788d2395582143bc3188b4d0489a24a2/obstore-0.7.3-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:25cea5cf5a727800b14cf4d09fd2b799c28fb755cc04e5635e7fb36d413bf772", size = 3777891, upload-time = "2025-08-01T22:38:28.864Z" },
{ url = "https://files.pythonhosted.org/packages/18/bf/ce029a12676d3d16cd6e6eedc4bc4f62b239bda1f40f254ca49cba2fa0ad/obstore-0.7.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:aae7fea048d7e73e5c206efef1627bff677455f6eed5c94a596906c4fcedc744", size = 3785130, upload-time = "2025-08-01T22:38:30.155Z" },
{ url = "https://files.pythonhosted.org/packages/fe/f8/3bcd3c0a014843d2bd8d0b99efe2a2eb9efcdccb5ded2b32dadf802d41e0/obstore-0.7.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:b4ee1ee4f8846ae891f1715a19a8f89d16a00c9e8913bf60c9f3acf24d905de2", size = 3982257, upload-time = "2025-08-01T22:38:31.484Z" },
]
[[package]]
name = "ollama"
version = "0.5.1"