diff --git a/.gitignore b/.gitignore index 7d1d2ca75..749d94bea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store +*gaga* *.swp ngrok* .env* diff --git a/README-CN.md b/README-CN.md index e39a65bcc..c0290845f 100644 --- a/README-CN.md +++ b/README-CN.md @@ -6,7 +6,7 @@


- 探索文档 + 探索文档(正在开发中) · 不和谐 · @@ -62,34 +62,39 @@ -

📖 Table of Contents

- -- [主要特点](#%E4%B8%BB%E8%A6%81%E7%89%B9%E7%82%B9) -- [Python 快速入门🐍](#python-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8) -- [Node.js Quick Start 🟩](#nodejs-quick-start-) - - [Step 1: Create an Agent](#step-1-create-an-agent) -- [Components](#components) - - [Mental Model](#mental-model) -- [Concepts](#concepts) -- [Understanding Tasks](#understanding-tasks) - - [Lifecycle of a Task](#lifecycle-of-a-task) - - [Types of Workflow Steps](#types-of-workflow-steps) -- [Tool Types](#tool-types) - - [User-defined `functions`](#user-defined-functions) - - [`system` tools](#system-tools) - - [Built-in `integrations`](#built-in-integrations) - - [Direct `api_calls`](#direct-api_calls) -- [Integrations](#integrations) -- [Other Features](#other-features) - - [Adding Tools to Agents](#adding-tools-to-agents) - - [Managing Sessions and Users](#managing-sessions-and-users) - - [Document Integration and Search](#document-integration-and-search) - - [SDK 参考](#sdk-%E5%8F%82%E8%80%83) - - [API 参考](#api-%E5%8F%82%E8%80%83) -- [本地快速启动](#%E6%9C%AC%E5%9C%B0%E5%BF%AB%E9%80%9F%E5%90%AF%E5%8A%A8) -- [Julep 和 LangChain 等有什么区别?](#julep-%E5%92%8C-langchain-%E7%AD%89%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB) - - [不同的用例](#%E4%B8%8D%E5%90%8C%E7%9A%84%E7%94%A8%E4%BE%8B) - - [不同的外形尺寸](#%E4%B8%8D%E5%90%8C%E7%9A%84%E5%A4%96%E5%BD%A2%E5%B0%BA%E5%AF%B8) +

📖 目录

+ +- [简介](#introduction) +- [主要特点](#key-features) +- [快速示例](#quick-example) +- [安装](#安装) +- [Python 快速入门 🐍](#python-quick-start-) +- [Node.js 快速入门🟩](#nodejs-quick-start-) +- [步骤 1:创建代理](#step-1-create-an-agent) +- [组件](#components) +- [心智模型](#mental-model) +- [概念](#concepts) +- [理解任务](#understanding-tasks) +- [任务的生命周期](#lifecycle-of-a-task) +- [工作流步骤的类型](#types-of-workflow-steps) +- [工具类型](#tool-types) +- [用户定义的`函数`](#user-defined-functions) +- [`系统` 工具](#system-tools) +- [内置 `integrations`](#built-in-integrations) +- [直接`api_calls`](#direct-api_calls) +- [集成](#integrations) +- [其他功能](#other-features) +- [向代理添加工具](#adding-tools-to-agents) +- [管理会话和用户](#managing-sessions-and-users) +- [文档集成与搜索](#document-integration-and-search) +- [参考](#reference) +- [SDK 参考](#sdk-reference) +- [API 参考](#api-reference) +- [本地快速启动](#local-quickstart) +- [Julep 和 LangChain 等有什么区别?](#julep 和 langchain 等之间有什么区别) +- [不同用例](#different-use-cases) +- [不同的外形尺寸](#different-form-factor) +- [总结](#in-summary) @@ -232,7 +237,7 @@ main: > **人工智能研究摘要** > ->###人工智能(AI)研究成果摘要 +> ### 人工智能(AI)研究成果摘要 > > #### 简介 > @@ -1297,7 +1302,7 @@ result: string # Brave Search 的结果 设置: api_key: string # BrowserBase 的 API 密钥 project_id: string # BrowserBase 的项目 ID -session_id: string # (可选)BrowserBase 的会话 ID +session_id: string #(可选)BrowserBase 的会话 ID 参数: urls: list[string] # 使用 BrowserBase 加载的 URL @@ -1352,7 +1357,7 @@ mode: string # 爬虫的类型(默认值:“scrape”) params: dict # (可选)Spider API 的参数 输出: -documents: list # 蜘蛛返回的文档 +documents: list # 从蜘蛛返回的文档 ``` diff --git a/README-FR.md b/README-FR.md index 2848a2637..2a5254c03 100644 --- a/README-FR.md +++ b/README-FR.md @@ -6,7 +6,7 @@


- Explorer les documents + Explorer les documents (en cours) · Discorde · @@ -62,39 +62,39 @@ Des nouvelles passionnantes ! Nous participons au DevFest.AI tout au long du moi -

📖 Table of Contents

+

📖 Table des matières

-- [Introduction](#introduction) -- [Principales caractéristiques](#principales-caract%C3%A9ristiques) -- [Exemple rapide](#exemple-rapide) +- [Présentation](#introduction) +- [Caractéristiques principales](#key-features) +- [Exemple rapide](#quick-example) - [Installation](#installation) -- [Démarrage rapide de Python 🐍](#d%C3%A9marrage-rapide-de-python-) -- [Node.js Quick Start 🟩](#nodejs-quick-start-) - - [Step 1: Create an Agent](#step-1-create-an-agent) -- [Components](#components) - - [Mental Model](#mental-model) +- [Démarrage rapide de Python 🐍](#python-quick-start-) +- [Démarrage rapide de Node.js 🟩](#nodejs-quick-start-) +- [Étape 1 : Créer un agent](#step-1-create-an-agent) +- [Composants](#composants) +- [Modèle mental](#mental-model) - [Concepts](#concepts) -- [Understanding Tasks](#understanding-tasks) - - [Lifecycle of a Task](#lifecycle-of-a-task) - - [Types of Workflow Steps](#types-of-workflow-steps) -- [Tool Types](#tool-types) - - [User-defined `functions`](#user-defined-functions) - - [`system` tools](#system-tools) - - [Built-in `integrations`](#built-in-integrations) - - [Direct `api_calls`](#direct-api_calls) -- [Integrations](#integrations) -- [Other Features](#other-features) - - [Adding Tools to Agents](#adding-tools-to-agents) - - [Managing Sessions and Users](#managing-sessions-and-users) - - [Document Integration and Search](#document-integration-and-search) -- [Référence](#r%C3%A9f%C3%A9rence) - - [Référence du SDK](#r%C3%A9f%C3%A9rence-du-sdk) - - [Référence API](#r%C3%A9f%C3%A9rence-api) -- [Démarrage rapide local](#d%C3%A9marrage-rapide-local) -- [Quelle est la différence entre Julep et LangChain etc ?](#quelle-est-la-diff%C3%A9rence-entre-julep-et-langchain-etc-) - - [Différents cas d'utilisation](#diff%C3%A9rents-cas-dutilisation) - - [Facteur de forme différent](#facteur-de-forme-diff%C3%A9rent) - - [En résumé](#en-r%C3%A9sum%C3%A9) +- [Comprendre les tâches](#understanding-tasks) +- [Cycle de vie d'une tâche](#cycle-de-vie-d-une-tâche) +- [Types d'étapes de flux de travail](#types-of-workflow-steps) +- [Types d'outils](#types-d'outils) +- [`Fonctions` définies par l'utilisateur](#user-defined-functions) +- [outils système](#outils-système) +- [`Intégrations` intégrées](#integrations-integrées) +- [Appels directs `api_calls`](#appels directs-api_calls) +- [Intégrations](#intégrations) +- [Autres fonctionnalités](#other-features) +- [Ajout d'outils aux agents](#adding-tools-to-agents) +- [Gestion des sessions et des utilisateurs](#managing-sessions-and-users) +- [Intégration et recherche de documents](#document-integration-and-search) +- [Référence](#référence) +- [Référence SDK](#sdk-reference) +- [Référence API](#api-reference) +- [Démarrage rapide local](#local-quickstart) +- [Quelle est la différence entre Julep et LangChain etc ?](#quelle-est-la-différence-entre-julep-et-langchain-etc) +- [Différents cas d'utilisation](#different-use-cases) +- [Facteur de forme différent](#different-form-factor) +- [En résumé](#en-resumé) @@ -429,11 +429,11 @@ agent_id=agent.id, ### Étape 3 : Exécuter la tâche exécution = client.executions.create( -task_id=task.id, +task_id=tâche.id, input={"idea": "Un chat qui apprend à voler"} ) -# 🎉 Regardez l'histoire et les panneaux de bande dessinée se générer +# 🎉 Regardez l'histoire et les panneaux de bandes dessinées se générer while (result := client.executions.get(execution.id)).status n'est pas dans ['réussi', 'échec'] : print(résultat.statut, résultat.sortie) heure.sommeil(1) @@ -1561,7 +1561,7 @@ Julep, en revanche, s'intéresse davantage à la création d'agents d'IA persist Utilisez Julep si vous imaginez créer un assistant IA complexe qui doit : - Suivez les interactions des utilisateurs sur plusieurs jours ou semaines. -- Exécutez des tâches planifiées, comme l'envoi de résumés quotidiens ou la surveillance des sources de données. +- Exécutez des tâches planifiées, comme l'envoi de résumés quotidiens ou la surveillance de sources de données. - Prendre des décisions basées sur des interactions antérieures ou des données stockées. - Interagir avec plusieurs services externes dans le cadre de son flux de travail. diff --git a/README-JA.md b/README-JA.md index 116df51ef..d22750547 100644 --- a/README-JA.md +++ b/README-JA.md @@ -6,7 +6,7 @@


- ドキュメントを見る + ドキュメントを探索 (wip) · 不和 · @@ -62,36 +62,39 @@ Julep プロジェクトに新しい貢献者を迎えられることを嬉し -

📖 Table of Contents

- -- [主な特徴](#%E4%B8%BB%E3%81%AA%E7%89%B9%E5%BE%B4) -- [簡単な例](#%E7%B0%A1%E5%8D%98%E3%81%AA%E4%BE%8B) -- [インストール](#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB) -- [Python クイックスタート 🐍](#python-%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88-) -- [Node.js Quick Start 🟩](#nodejs-quick-start-) - - [Step 1: Create an Agent](#step-1-create-an-agent) -- [Components](#components) - - [Mental Model](#mental-model) -- [Concepts](#concepts) -- [Understanding Tasks](#understanding-tasks) - - [Lifecycle of a Task](#lifecycle-of-a-task) - - [Types of Workflow Steps](#types-of-workflow-steps) -- [Tool Types](#tool-types) - - [User-defined `functions`](#user-defined-functions) - - [`system` tools](#system-tools) - - [Built-in `integrations`](#built-in-integrations) - - [Direct `api_calls`](#direct-api_calls) -- [Integrations](#integrations) -- [Other Features](#other-features) - - [Adding Tools to Agents](#adding-tools-to-agents) - - [Managing Sessions and Users](#managing-sessions-and-users) - - [Document Integration and Search](#document-integration-and-search) - - [SDK リファレンス](#sdk-%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9) - - [API リファレンス](#api-%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9) -- [ローカルクイックスタート](#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88) -- [Julep と LangChain などの違いは何ですか?](#julep-%E3%81%A8-langchain-%E3%81%AA%E3%81%A9%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B) - - [さまざまなユースケース](#%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9) - - [異なるフォームファクタ](#%E7%95%B0%E3%81%AA%E3%82%8B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF) +

📖 目次

+ +- [はじめに](#introduction) +- [主な特徴](#key-features) +- [簡単な例](#quick-example) +- [インストール](#installation) +- [Python クイックスタート 🐍](#python-quick-start-) +- [Node.js クイック スタート 🟩](#nodejs-quick-start-) +- [ステップ 1: エージェントを作成する](#step-1-create-an-agent) +- [コンポーネント](#components) +- [メンタルモデル](#mental-model) +- [コンセプト](#concepts) +- [タスクの理解](#understanding-tasks) +- [タスクのライフサイクル](#lifecycle-of-a-task) +- [ワークフロー ステップの種類](#types-of-workflow-steps) +- [ツールの種類](#tool-types) +- [ユーザー定義の `functions`](#user-defined-functions) +- [`システム` ツール](#system-tools) +- [組み込みの `integrations`](#built-in-integrations) +- [直接の `api_calls`](#direct-api_calls) +- [統合](#integrations) +- [その他の機能](#other-features) +- [エージェントへのツールの追加](#adding-tools-to-agents) +- [セッションとユーザーの管理](#managing-sessions-and-users) +- [ドキュメントの統合と検索](#document-integration-and-search) +- [参考](#reference) +- [SDKリファレンス](#sdk-reference) +- [APIリファレンス](#api-reference) +- [ローカルクイックスタート](#local-quickstart) +- [Julep と LangChain などの違いは何ですか?](#whats-the-difference-between-julep-and-langchain-etc) +- [さまざまなユースケース](#different-use-cases) +- [異なるフォームファクター](#different-form-factor) +- [要約](#in-summary) @@ -107,7 +110,7 @@ Julep を使用すると、意思決定、ループ、並列処理、多数の - モデルの出力に基づいて意思決定を行う - 平行枝を生成し、 - たくさんのツールを使い、 -- 長時間走る。 +- 長時間実行します。 > [!ヒント] > 単純な質問に答えるだけでなく、複雑なタスクを処理し、過去のやり取りを記憶し、場合によっては他のツールや API も使用できる AI エージェントを構築したいとします。そこで Julep の出番です。詳細については、[タスクの理解](#understanding-tasks) をお読みください。 @@ -119,7 +122,7 @@ Julep を使用すると、意思決定、ループ、並列処理、多数の 3. 🔄 **複数ステップのタスク**: ループと意思決定を含む複雑な複数ステップのプロセスを構築します。 4. ⏳ **タスク管理**: 無期限に実行される可能性のある長時間実行タスクを処理します。 5. 🛠️ **組み込みツール**: タスクで組み込みツールと外部 API を使用します。 -6. 🔧 **自己修復**: Julep は失敗したステップを自動的に再試行し、メッセージを再送信し、タスクがスムーズに実行されるようにします。 +6. 🔧 **自己修復**: Julep は失敗したステップを自動的に再試行し、メッセージを再送信し、一般的にタスクがスムーズに実行されるようにします。 7. 📚 **RAG**: Julep のドキュメント ストアを使用して、独自のデータを取得して使用するためのシステムを構築します。 ![機能](https://github.com/user-attachments/assets/4355cbae-fcbd-4510-ac0d-f8f77b73af70) @@ -394,7 +397,7 @@ plot_ideas: load_yaml(_.split('```yaml')[1].split('```')[0].ストリップ()) Think about the plot ideas critically. Combine the plot ideas with the results from Wikipedia to create a detailed plot for a story. Write down all your notes and thoughts. - Then finally write the plot as a yaml object inside ```レスポンスの最後に yaml タグを追加します。yaml オブジェクトの構造は次のようになります。 + Then finally write the plot as a yaml object inside ```応答の最後に yaml タグを追加します。yaml オブジェクトの構造は次のようになります。 ```yaml title: "" @@ -1457,7 +1460,7 @@ context_overflow="適応型" # 同じセッションで会話を続ける レスポンス = client.sessions.chat( -セッションID=セッションID、 +session_id=セッションID、 メッセージ=[ { 「役割」: 「ユーザー」、 diff --git a/agents-api/agents_api/activities/task_steps/prompt_step.py b/agents-api/agents_api/activities/task_steps/prompt_step.py index 246b51910..1c8810427 100644 --- a/agents-api/agents_api/activities/task_steps/prompt_step.py +++ b/agents-api/agents_api/activities/task_steps/prompt_step.py @@ -1,7 +1,11 @@ import os +from datetime import datetime -from anthropic import Anthropic # Import Anthropic client +from anthropic import Anthropic +from anthropic.types.beta.beta_message import BetaMessage from beartype import beartype +from litellm import ChatCompletionMessageToolCall, Function, Message +from litellm.types.utils import Choices, ModelResponse from temporalio import activity from temporalio.exceptions import ApplicationError @@ -18,24 +22,151 @@ COMPUTER_USE_BETA_FLAG = "computer-use-2024-10-22" -# FIXME: This shouldn't be here. -def format_agent_tool(tool: Tool) -> dict: +def make_function_call(tool: Tool) -> dict | None: + result = {"type": "function"} + if tool.function: - return { - "type": "function", - "function": { - "name": tool.name, - "description": tool.description, - "parameters": tool.function.parameters, - }, - } + result.update( + { + "function": { + "name": tool.name, + "description": tool.description, + "parameters": tool.function.parameters, + }, + } + ) + elif tool.api_call: + result.update( + { + "function": { + "name": tool.name, + "description": tool.description, + "parameters": { + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The HTTP method to use", + }, + "url": { + "type": "string", + "description": "The URL to call", + }, + "headers": { + "type": "object", + "description": "The headers to send with the request", + }, + "content": { + "type": "string", + "description": "The content as base64 to send with the request", + }, + "data": { + "type": "object", + "description": "The data to send as form data", + }, + "json": { + "type": "object", + "description": "JSON body to send with the request", + }, + "cookies": { + "type": "object", + "description": "Cookies", + }, + "params": { + "type": "object", + "description": "The parameters to send with the request", + }, + "follow_redirects": { + "type": "boolean", + "description": "Follow redirects", + }, + "timeout": { + "type": "int", + "description": "The timeout for the request", + }, + }, + "required": ["method", "url"], + "additionalProperties": False, + }, + }, + } + ) + elif tool.system: + result.update( + { + "function": { + "name": f"{tool.system.resource}.{tool.system.operation}", + "description": f"{tool.system.operation} a {tool.system.resource}", + "parameters": { + "type": "object", + "properties": { + "resource": { + "type": "string", + "description": "Resource is the name of the resource to use, one of: agent, user, task, execution, doc, session, job", + }, + "operation": { + "type": "string", + "description": "Operation is the name of the operation to perform, one of: create, update, patch, create_or_update, embed, change_status, search, chat, history, delete, get, list", + }, + "resource_id": { + "type": "string", + "description": "Resource id", + }, + "subresource": { + "type": "string", + "description": "Sub-resource type, one of: tool, doc, execution, transition", + }, + "arguments": { + "type": "object", + "description": "The arguments to pre-apply to the system call", + }, + }, + "required": ["resource", "operation"], + "additionalProperties": False, + }, + } + } + ) + elif tool.integration: + result.update( + { + "function": { + "name": tool.name, + "description": f"{tool.integration.provider} integration", + "parameters": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "The provider of the integration", + }, + "method": { + "type": "string", + "description": "The specific method of the integration to call", + }, + "setup": { + "type": "object", + "description": "The setup parameters the integration accepts", + }, + "arguments": { + "type": "object", + "description": "The arguments to pre-apply to the integration call", + }, + }, + "required": ["provider"], + "additionalProperties": False, + }, + } + } + ) + elif tool.computer_20241022: return { "type": tool.type, "name": tool.name, - "display_width_px": tool.display_width_px, - "display_height_px": tool.display_height_px, - "display_number": tool.display_number, + "display_width_px": tool.computer_20241022.display_width_px, + "display_height_px": tool.computer_20241022.display_height_px, + "display_number": tool.computer_20241022.display_number, } elif tool.bash_20241022: return { @@ -47,9 +178,10 @@ def format_agent_tool(tool: Tool) -> dict: "type": tool.type, "name": tool.name, } - # TODO: Add integration | system | api_call tool types else: - return {} + raise ValueError(f"Unsupported tool: {tool}") + + return result @activity.defn @@ -87,6 +219,14 @@ async def prompt_step(context: StepContext) -> StepOutcome: direction="desc", ) + formatted_agent_tools = [ + func_call for tool in agent_tools if (func_call := make_function_call(tool)) + ] + tools_mapping = { + fmt_tool["function"]["name"]: orig_tool + for fmt_tool, orig_tool in zip(formatted_agent_tools, agent_tools) + } + if context.current_step.settings: passed_settings: dict = context.current_step.settings.model_dump( exclude_unset=True @@ -98,20 +238,18 @@ async def prompt_step(context: StepContext) -> StepOutcome: if isinstance(prompt, str): prompt = [{"role": "user", "content": prompt}] - # Format agent_tools for litellm - formatted_agent_tools = [ - format_agent_tool(tool) for tool in agent_tools if format_agent_tool(tool) - ] - - # Check if the model is Anthropic - if "claude-3.5-sonnet-20241022" == agent_model.lower(): + # Check if the model is Anthropic and bash/editor/computer use tool is included + if "claude" in agent_model.lower() and any( + tool.type in ["bash_20241022", "text_editor_20241022", "computer_20241022"] + for tool in agent_tools + ): # Retrieve the API key from the environment variable betas = [COMPUTER_USE_BETA_FLAG] # Use Anthropic API directly client = Anthropic(api_key=anthropic_api_key) # Claude Response - response = await client.beta.messages.create( + claude_response: BetaMessage = await client.beta.messages.create( model=agent_model, messages=prompt, tools=formatted_agent_tools, @@ -119,12 +257,47 @@ async def prompt_step(context: StepContext) -> StepOutcome: betas=betas, ) - return StepOutcome( - output=response.model_dump() - if hasattr(response, "model_dump") - else response, - next=None, + # FIXME: Handle multiple messages + if len(claude_response.content) != 1: + raise ApplicationError("Claude should only return one message") + + content_block = claude_response.content[0] + stop_reason = claude_response.stop_reason + + if stop_reason == "tool_use": + choice = Choices( + message=Message( + role="assistant", + content=None, + tool_calls=[ + ChatCompletionMessageToolCall( + type="function", + function=Function( + name=content_block.name, + arguments=content_block.input, + ), + ) + ], + ), + finish_reason="tool_calls", + ) + else: + choice = Choices( + message=Message( + role="assistant", + content=content_block.text, + ), + finish_reason="stop", + ) + + response: ModelResponse = ModelResponse( + id=claude_response.id, + choices=[choice], + created=datetime.now().timestamp(), + model=claude_response.model, + object="text_completion", ) + else: # Use litellm for other models completion_data: dict = { @@ -134,25 +307,54 @@ async def prompt_step(context: StepContext) -> StepOutcome: **agent_default_settings, **passed_settings, } - extra_body = { "cache": {"no-cache": debug}, } - response = await litellm.acompletion( + response: ModelResponse = await litellm.acompletion( **completion_data, extra_body=extra_body, ) - if context.current_step.unwrap: - if response.choices[0].finish_reason == "tool_calls": - raise ApplicationError("Tool calls cannot be unwrapped") + if context.current_step.unwrap: + if len(response.choices) != 1: + raise ApplicationError("Only one choice is supported") - response = response.choices[0].message.content + choice = response.choices[0] + if choice.finish_reason == "tool_calls": + raise ApplicationError("Tool calls cannot be unwrapped") return StepOutcome( - output=response.model_dump() - if hasattr(response, "model_dump") - else response, + output=choice.message.content, next=None, ) + + # Re-convert tool-calls to integration/system calls if needed + response_as_dict = response.model_dump() + + for choice in response_as_dict["choices"]: + if choice["finish_reason"] == "tool_calls": + calls = choice["message"]["tool_calls"] + + for call in calls: + call_name = call["function"]["name"] + call_args = call["function"]["arguments"] + + original_tool = tools_mapping.get(call_name) + if not original_tool: + raise ApplicationError(f"Tool {call_name} not found") + + if original_tool.type == "function": + continue + + call.pop("function") + call["type"] = original_tool.type + call[original_tool.type] = { + "name": call_name, + "arguments": call_args, + } + + return StepOutcome( + output=response_as_dict, + next=None, + ) diff --git a/agents-api/agents_api/workflows/task_execution/__init__.py b/agents-api/agents_api/workflows/task_execution/__init__.py index ea8b4fb22..520ae9c37 100644 --- a/agents-api/agents_api/workflows/task_execution/__init__.py +++ b/agents-api/agents_api/workflows/task_execution/__init__.py @@ -119,6 +119,82 @@ # Probably can be implemented much more efficiently +async def run_api_call(tool_call: dict, context: StepContext): + call = tool_call["api_call"] + tool_name = call["name"] + arguments = call["arguments"] + apicall_spec = next((t for t in context.tools if t.name == tool_name), None) + + if apicall_spec is None: + raise ApplicationError(f"Integration {tool_name} not found") + + api_call = ApiCallDef( + method=apicall_spec.spec["method"], + url=apicall_spec.spec["url"], + headers=apicall_spec.spec["headers"], + follow_redirects=apicall_spec.spec["follow_redirects"], + ) + + if "json_" in arguments: + arguments["json"] = arguments["json_"] + del arguments["json_"] + + return await workflow.execute_activity( + execute_api_call, + args=[ + api_call, + arguments, + ], + schedule_to_close_timeout=timedelta(seconds=30 if debug or testing else 600), + ) + + +async def run_integration_call(tool_call: dict, context: StepContext): + call = tool_call["integration"] + tool_name = call["name"] + arguments = call["arguments"] + integration_spec = next((t for t in context.tools if t.name == tool_name), None) + + if integration_spec is None: + raise ApplicationError(f"Integration {tool_name} not found") + + # FIXME: Refactor this + # Tools that are not defined in the task spec have a different format + if isinstance(integration_spec, TaskToolDef): + provider = integration_spec.spec["provider"] + setup = integration_spec.spec["setup"] + method = integration_spec.spec["method"] + else: + provider = integration_spec.integration.provider + setup = integration_spec.integration.setup.model_dump() + method = integration_spec.integration.method + + integration = BaseIntegrationDef( + provider=provider, + setup=setup, + method=method, + arguments=arguments, + ) + + return await workflow.execute_activity( + execute_integration, + args=[context, tool_name, integration, arguments], + schedule_to_close_timeout=timedelta(seconds=30 if debug or testing else 600), + retry_policy=DEFAULT_RETRY_POLICY, + ) + + +async def run_system_call(tool_call: dict, context: StepContext): + call = tool_call.get("system") + + system_call = SystemDef(**call) + return await workflow.execute_activity( + execute_system, + args=[context, system_call], + schedule_to_close_timeout=timedelta(seconds=30 if debug or testing else 600), + ) + + # Main workflow definition @workflow.defn class TaskExecutionWorkflow: @@ -395,13 +471,23 @@ async def run( message = response["choices"][0]["message"] tool_calls_input = message["tool_calls"] - # Enter a wait-for-input step to ask the developer to run the tool calls - tool_calls_results = await workflow.execute_activity( - task_steps.raise_complete_async, - args=[context, tool_calls_input], - schedule_to_close_timeout=timedelta(days=31), - retry_policy=DEFAULT_RETRY_POLICY, - ) + if tool_calls_input.get("api_call"): + tool_calls_results = await run_api_call(tool_calls_input, context) + elif tool_calls_input.get("integration"): + tool_calls_results = await run_integration_call( + tool_calls_input, context + ) + elif tool_calls_input.get("system"): + tool_calls_results = await run_system_call( + tool_calls_input, context + ) + else: + tool_calls_results = await workflow.execute_activity( + task_steps.raise_complete_async, + args=[context, tool_calls_input], + schedule_to_close_timeout=timedelta(days=31), + retry_policy=DEFAULT_RETRY_POLICY, + ) # Feed the tool call results back to the model context.current_step.prompt.append(message) @@ -453,96 +539,19 @@ async def run( case ToolCallStep(), StepOutcome(output=tool_call) if tool_call[ "type" ] == "integration": - call = tool_call["integration"] - tool_name = call["name"] - arguments = call["arguments"] - integration_spec = next( - (t for t in context.tools if t.name == tool_name), None - ) - - if integration_spec is None: - raise ApplicationError(f"Integration {tool_name} not found") - - # FIXME: Refactor this - # Tools that are not defined in the task spec have a different format - if isinstance(integration_spec, TaskToolDef): - provider = integration_spec.spec["provider"] - setup = integration_spec.spec["setup"] - method = integration_spec.spec["method"] - else: - provider = integration_spec.integration.provider - setup = integration_spec.integration.setup.model_dump() - method = integration_spec.integration.method - - integration = BaseIntegrationDef( - provider=provider, - setup=setup, - method=method, - arguments=arguments, - ) - - tool_call_response = await workflow.execute_activity( - execute_integration, - args=[context, tool_name, integration, arguments], - schedule_to_close_timeout=timedelta( - seconds=30 if debug or testing else 600 - ), - retry_policy=DEFAULT_RETRY_POLICY, - ) - + tool_call_response = await run_integration_call(tool_call, context) state = PartialTransition(output=tool_call_response) case ToolCallStep(), StepOutcome(output=tool_call) if tool_call[ "type" ] == "api_call": - call = tool_call["api_call"] - tool_name = call["name"] - arguments = call["arguments"] - apicall_spec = next( - (t for t in context.tools if t.name == tool_name), None - ) - - if apicall_spec is None: - raise ApplicationError(f"Integration {tool_name} not found") - - api_call = ApiCallDef( - method=apicall_spec.spec["method"], - url=apicall_spec.spec["url"], - headers=apicall_spec.spec["headers"], - follow_redirects=apicall_spec.spec["follow_redirects"], - ) - - if "json_" in arguments: - arguments["json"] = arguments["json_"] - del arguments["json_"] - - # Execute the API call using the `execute_api_call` function - tool_call_response = await workflow.execute_activity( - execute_api_call, - args=[ - api_call, - arguments, - ], - schedule_to_close_timeout=timedelta( - seconds=30 if debug or testing else 600 - ), - ) - + tool_call_response = await run_api_call(tool_call, context) state = PartialTransition(output=tool_call_response) case ToolCallStep(), StepOutcome(output=tool_call) if tool_call[ "type" ] == "system": - call = tool_call.get("system") - - system_call = SystemDef(**call) - tool_call_response = await workflow.execute_activity( - execute_system, - args=[context, system_call], - schedule_to_close_timeout=timedelta( - seconds=30 if debug or testing else 600 - ), - ) + tool_call_response = await run_system_call(tool_call, context) state = PartialTransition(output=tool_call_response) diff --git a/agents-api/poetry.lock b/agents-api/poetry.lock index 373da6c0b..55e0837a8 100644 --- a/agents-api/poetry.lock +++ b/agents-api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -498,17 +498,17 @@ numpy = ">=2.0.0,<3.0.0" [[package]] name = "boto3" -version = "1.35.51" +version = "1.35.52" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.51-py3-none-any.whl", hash = "sha256:c922f6a18958af9d8af0489d6d8503b517029d8159b26aa4859a8294561c72e9"}, - {file = "boto3-1.35.51.tar.gz", hash = "sha256:a57c6c7012ecb40c43e565a6f7a891f39efa990ff933eab63cd456f7501c2731"}, + {file = "boto3-1.35.52-py3-none-any.whl", hash = "sha256:ec0e797441db56af63b1150bba49f114b0f885f5d76c3b6dc18075f73030d2bb"}, + {file = "boto3-1.35.52.tar.gz", hash = "sha256:68299da8ab2bb37cc843d61b9f4c1c9367438406cfd65a8f593afc7b3bfe226d"}, ] [package.dependencies] -botocore = ">=1.35.51,<1.36.0" +botocore = ">=1.35.52,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -517,13 +517,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.51" +version = "1.35.52" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.51-py3-none-any.whl", hash = "sha256:4d65b00111bd12b98e9f920ecab602cf619cc6a6d0be6e5dd53f517e4b92901c"}, - {file = "botocore-1.35.51.tar.gz", hash = "sha256:a9b3d1da76b3e896ad74605c01d88f596324a3337393d4bfbfa0d6c35822ca9c"}, + {file = "botocore-1.35.52-py3-none-any.whl", hash = "sha256:cdbb5e43c9c3a977763e2a10d3b8b9c405d51279f9fcfd4ca4800763b22acba5"}, + {file = "botocore-1.35.52.tar.gz", hash = "sha256:1fe7485ea13d638b089103addd818c12984ff1e4d208de15f180b1e25ad944c5"}, ] [package.dependencies] @@ -965,10 +965,7 @@ inflect = ">=4.1.0,<6.0" isort = ">=4.3.21,<6.0" jinja2 = ">=2.10.1,<4.0" packaging = "*" -pydantic = [ - {version = ">=1.10.0,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, - {version = ">=1.10.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.11\" and python_version < \"4.0\""}, -] +pydantic = {version = ">=1.10.0,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.12\" and python_version < \"4.0\""} pyyaml = ">=6.0.1" [package.extras] @@ -1931,13 +1928,13 @@ referencing = ">=0.31.0" [[package]] name = "julep" -version = "1.25.0" +version = "1.26.0" description = "The official Python library for the julep API" optional = false python-versions = ">=3.7" files = [ - {file = "julep-1.25.0-py3-none-any.whl", hash = "sha256:a99e18310f4932b038a0a5450302381f201c8a86634eea543c408574f384932d"}, - {file = "julep-1.25.0.tar.gz", hash = "sha256:29d851b063ad29508f795742ac2c9f07e02fd0aedc2cb07d6c18600fd326f036"}, + {file = "julep-1.26.0-py3-none-any.whl", hash = "sha256:0ffdeb86ea857163bddd172db82c298c67040e6a0dd4c04b7d46a47307b6d714"}, + {file = "julep-1.26.0.tar.gz", hash = "sha256:9f13c6e48887497af5f6b95751cc5c266818ab22ce92f539d139857def4af4ec"}, ] [package.dependencies] @@ -2250,13 +2247,13 @@ dev = ["Sphinx (>=5.1.1)", "black (==24.8.0)", "build (>=0.10.0)", "coverage[tom [[package]] name = "litellm" -version = "1.51.1" +version = "1.51.2" description = "Library to easily interface with LLM API providers" optional = false python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" files = [ - {file = "litellm-1.51.1-py3-none-any.whl", hash = "sha256:1a389ca5b8ddd7a98d97ad229118d8323caeaaf9c1c5b79b1072edc2a18e773d"}, - {file = "litellm-1.51.1.tar.gz", hash = "sha256:ef9019bdd8bbad927e49696a300d03ea00b86721ebe7b62621c923f728e50d18"}, + {file = "litellm-1.51.2-py3-none-any.whl", hash = "sha256:a8469d8b037a61fd7ba5041b2c42b7f1ba433d4953081b86c9916b6dd220e51c"}, + {file = "litellm-1.51.2.tar.gz", hash = "sha256:a86e524b5cf9ad2863d835adb81fd92afd206a190c8629f3e86f652b5f405efa"}, ] [package.dependencies] @@ -4789,110 +4786,110 @@ files = [ [[package]] name = "simsimd" -version = "5.9.7" +version = "5.9.8" description = "Portable mixed-precision BLAS-like vector math library for x86 and ARM" optional = false python-versions = "*" files = [ - {file = "simsimd-5.9.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:938c3131ba92d9354c8067ce8415c918348eed60fd97bdec926c7878f3943d38"}, - {file = "simsimd-5.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:75d637166b74df2998b11b7f5b51bbf31dae027e13e446505c6b29abcca4c340"}, - {file = "simsimd-5.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f8c0c053102822524e388346e8928a884a98708fdaa752543aa00f4e4d4753ea"}, - {file = "simsimd-5.9.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f38b1c685095b046ba630856297e1f3c149cbc6765dacc3dd234475c72b4620"}, - {file = "simsimd-5.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51567ebac7039601522170fd9036f8ee4f50bc864ca33dc5ec84612c257a5398"}, - {file = "simsimd-5.9.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5af1d7b085e5da287c3c6bfd77192093d2f56632047f7b95cbf9f651348c134"}, - {file = "simsimd-5.9.7-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:512209d9be3d39782c68c3be6e8ccb003ef7ab239454009bf8127578c8762a1c"}, - {file = "simsimd-5.9.7-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e0e0016a79a811fe7f9e979b7d2407735787974b57ab6579a4c74f6b7512afe2"}, - {file = "simsimd-5.9.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cbf42c563b91c275c006a5a61a95c2e98ef5b7a53588bee129a6d5aa925f4b6b"}, - {file = "simsimd-5.9.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:23740c8f5924ee970c2d5343dfc8b2c8e99377ff824c3ba35bbb612ae71214c2"}, - {file = "simsimd-5.9.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5b7ecc290a8e1764089729b0d459345381fbecfecd8aea166e934b183290944e"}, - {file = "simsimd-5.9.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:92b67f87872f44ff1196238841fd50ca92ea7e199dc767707b544b3cccbc518a"}, - {file = "simsimd-5.9.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:389f4f7262c869a520136c0c5bb2c785b8f75c99739fc6c807bbf8dccaf0b79e"}, - {file = "simsimd-5.9.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c7ff96ab0e2bed6e8af747179c5c6fa1ed45e17f2f43dd95d45034cb752ff812"}, - {file = "simsimd-5.9.7-cp310-cp310-win32.whl", hash = "sha256:629e00a4ab649111f4132af9cdf294b3ea8169b31e40a2e1bc59c0ccabc0b8a5"}, - {file = "simsimd-5.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:3647f2bb6554c95c1ae852a4dbf7ace4873523c51d9ec13d2a55f0c9dcc3697c"}, - {file = "simsimd-5.9.7-cp310-cp310-win_arm64.whl", hash = "sha256:f703c4a54a4442e7ca8459ed14aa4e49421d53fedaa84874880511a871e69761"}, - {file = "simsimd-5.9.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4c4ce63e53ab245601ba812a8d573ec0225256407de1d1a9f7c08b616965d94c"}, - {file = "simsimd-5.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:716782eca1ce1dcf33ad978c052b6cf1af2a0a78a4570a299a9bb47b1ea75e5b"}, - {file = "simsimd-5.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4497ae34f47de3574ec76f2efcb32270f9e7f22a506800adf6b2e686b9104188"}, - {file = "simsimd-5.9.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a42c3f00f9c77716d6fe9be1f6d2ae88342a0696dd3f5a2a353b00eb53dfca1b"}, - {file = "simsimd-5.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:606ce52cdae2643e441a887611ec9f9db0cc3e4f5f90e6e5fc1a659bb9188069"}, - {file = "simsimd-5.9.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da3fd865ab7287b68af638a7d54a46e9b34832864f603d856b190126eae7025e"}, - {file = "simsimd-5.9.7-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:1f1e2b12b0a31656c6e42223fcddc90990f54f2c2f40a065bdff897a36edc064"}, - {file = "simsimd-5.9.7-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2019ee8ef83ffce3f7bd980264b89fb29059f2e6e4d447cf640a41f12b6c1242"}, - {file = "simsimd-5.9.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8270d0f29f1db2989e8a55929557ca2b97650a685353774ddd6306c6422a3568"}, - {file = "simsimd-5.9.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f7e94bc9295eb2538cdb85887c21864121a9df715ecba05455691801be14ac65"}, - {file = "simsimd-5.9.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1553c287eb6be6a3fe5688affbdf92fb5a18809512f4c711bbb0dedf11957e63"}, - {file = "simsimd-5.9.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:529c67718ba0db6da3c082d1249815063c67e3938884bc3c432e85dbd06a6c03"}, - {file = "simsimd-5.9.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:dc7e3170edda3b119b6ed03422d11ba546583564a7314db28e72b3c1acbcd6d1"}, - {file = "simsimd-5.9.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b17ae04b8b0ad909d92fa6411583a4b99788034a619a088e60a3e7b8ae85a81b"}, - {file = "simsimd-5.9.7-cp311-cp311-win32.whl", hash = "sha256:8ad9f94458e94d9263d36f98c2fdc022e0c3215ca57526cbf9dd6aa309eb87ba"}, - {file = "simsimd-5.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:90f03656b96127a0ae4aef7038590663a7f40a3eeb219f63ba3cf9aff19f316b"}, - {file = "simsimd-5.9.7-cp311-cp311-win_arm64.whl", hash = "sha256:24cf4d7093e92a1f0be609a06361f87d504efd66f1f73d4433079e9981389b46"}, - {file = "simsimd-5.9.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:aa859dd9af0a2363bda031fafc96a3580cc6607c6e9b7a73842d5dbfe1f3b3ea"}, - {file = "simsimd-5.9.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5dbe91bf1035d95db8d93f9ffa1b037945477122c1d49de690a9ac2134201208"}, - {file = "simsimd-5.9.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:84647c7d83cd31d9755af0aa7d6e73b842364b3b19b76af01ea69246c09b11e6"}, - {file = "simsimd-5.9.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5559b485acd6b90cce94cf5e8463f4ad345ef8551b7db40f9dce1b2dfeb4f1b6"}, - {file = "simsimd-5.9.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cdfd52cf44d5c3d1f9fed02b3724de790f7f34a7ba9e9368241e4385af84fd5"}, - {file = "simsimd-5.9.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ba99fe25291fa20b71da409607c8ba97624f85d0bff6eb1e02d7f68546334fa"}, - {file = "simsimd-5.9.7-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a5564348dec3f08de79a0851d03d744cff7efd0e10c5e410e89663e56a890f31"}, - {file = "simsimd-5.9.7-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3a1224a0b85c642cfed341c6626e4a7c6d2d6bc5a290c312a041fd030f98c835"}, - {file = "simsimd-5.9.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4f49307f6e00bbd2694ccfeaf3726827fa53a9dd9f57707543633cf8974a897d"}, - {file = "simsimd-5.9.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:f4ace050efe35d911b2f73c8a5493296478de6d041cdd751df3947dd51425449"}, - {file = "simsimd-5.9.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:03c060fbb718c21e715ef485b27d3068d95cf38d3681d367f5bd3ca56d0a2a8b"}, - {file = "simsimd-5.9.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:004d7d05d06fd53ba24c258bccd5524cf17a162c19948a62035dbb8f8c927159"}, - {file = "simsimd-5.9.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e48ce99ba425eb32935f5ca8b7cb5cfaeeb8f8b2642827ef09181595a401ca6b"}, - {file = "simsimd-5.9.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:119c4395e1fad9f1da5d40654f77b3501afb8576e310e0c568e7b8c85a46432f"}, - {file = "simsimd-5.9.7-cp312-cp312-win32.whl", hash = "sha256:8c35f8f122ab33f325d7818fef88e21159d34f224e9a9c40abc4a60f986cb1aa"}, - {file = "simsimd-5.9.7-cp312-cp312-win_amd64.whl", hash = "sha256:49527d4ec509d08157dfab5dc2ab66398e086d56bb6a6a9b640fd107c0e7f736"}, - {file = "simsimd-5.9.7-cp312-cp312-win_arm64.whl", hash = "sha256:25ab98e9de3322a5adc29446557e8770d45c2e42d7ab288f04c4437df5c9ee30"}, - {file = "simsimd-5.9.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7e1f90ca2dd3efc7de3fe317dad36c67bc0b4ae67937d98962c87856271077ce"}, - {file = "simsimd-5.9.7-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dddfbfff7bf7b298f085722ca882c19df1dd1e5fec3385e80efd236185c8f984"}, - {file = "simsimd-5.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7f14384d6d423f95bd31bccf2369f52769ae046e0417721a48f517a11757cae"}, - {file = "simsimd-5.9.7-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6cebe128e191a437fd7be2087442e6520a7f6acc15eb652b86cf533367c613c3"}, - {file = "simsimd-5.9.7-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:8b42da72779f1496b8a9dd63e101119bde32605535469783e3b78b1fa5443eea"}, - {file = "simsimd-5.9.7-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:cb2ffb7c026038d069a61249d609e5820ac71a1690de2ca6b5530394c2f1f5bd"}, - {file = "simsimd-5.9.7-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:edd26bc50214671df12bb4a4afc12006fef182ae6cbfab2b4041ff5e1b5dde04"}, - {file = "simsimd-5.9.7-cp37-cp37m-musllinux_1_2_armv7l.whl", hash = "sha256:58b4f355d7a1ce57e07892091f4d8fc9a80895ee2bcca5245537e0623e5ac693"}, - {file = "simsimd-5.9.7-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:12d105e88a2bdb5b6a8546c2d1f3e11a1f476928d1f9876c0ce9d41e1e64b4c1"}, - {file = "simsimd-5.9.7-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:d6e68b8ebf05a8ba317b6b976fc372645994bf196ef2206b775d093fc89a6855"}, - {file = "simsimd-5.9.7-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2bef6b9bc9ce1e548b48c0f8ac59552d0fa53be4d3d424927db7e5e4f5941318"}, - {file = "simsimd-5.9.7-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:5a921b35ef507dccd86c41afb236d7c353a129f498559bb994893ff5a3850baa"}, - {file = "simsimd-5.9.7-cp37-cp37m-win32.whl", hash = "sha256:a4f78746f2e5f892e523fd22d84c93036f227a876a2ee5d8b8a53698d241ecf1"}, - {file = "simsimd-5.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be3c6726a3e0cf90301a1172dbdbc8fa5f6e886b93bbc4d8aad2984081c87dfc"}, - {file = "simsimd-5.9.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fff0935f5dcc84669a4091b36bf476d4bd30adef76fafe77814299fabbff2ab4"}, - {file = "simsimd-5.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8dc83551684cd547ca6aab662eda4b2e48aa7460dd8eb103fb6e9a453320971d"}, - {file = "simsimd-5.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c358756518243835a329da4eb3e454226562d8cc7a4b10eef8338753e41e9aa7"}, - {file = "simsimd-5.9.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb8d590664865cb607c9c540a5a09d77a109c4ef18bd68053fbe7b889721a4db"}, - {file = "simsimd-5.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bf35cfb12d43f8901b66a7d1f055531426d27b47b31831873801d039b5d69c1"}, - {file = "simsimd-5.9.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06244ea5ca32758de43680c1df1dac3e17e2d1164e572545769913318685a409"}, - {file = "simsimd-5.9.7-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:edf732a4bec34ead58e93f94c9fc8af6d14c709920825ca4533f25dbf9537906"}, - {file = "simsimd-5.9.7-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6e8c93fd9d488fe3cc6ebf8de47473f41c7496b3781c6af1d2d9235dd4480f5f"}, - {file = "simsimd-5.9.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fa214449499a02ff3a37173a53984b59f8915e31e9f2ae1a0e837c8a3c2def5b"}, - {file = "simsimd-5.9.7-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:049e6472a6c8c667ec02328747acabbb9e17d543d15147fc9ebd56ddd94457be"}, - {file = "simsimd-5.9.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ae812b06784791b3cdbf5690058f0d20b48dfca50e606fa647361229e00b5f9d"}, - {file = "simsimd-5.9.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:bbaba24ffc5a27853c7a295318b309a6486c4585c2015936f7693114181a8ca6"}, - {file = "simsimd-5.9.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:be5c6a747ead4b68634dfd7fc38ab3488fbdd5ead5ea68042644e6408be8364e"}, - {file = "simsimd-5.9.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:add53369966db2087f8d18aadeaf844480f1f8a53ba05d59306b83b05082c7b8"}, - {file = "simsimd-5.9.7-cp38-cp38-win32.whl", hash = "sha256:bc884c797cbcd02b2002d96dfd892d61e03c54d49f62014cb81e1f6174bc7594"}, - {file = "simsimd-5.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:695ce472cbdb0bfc76f724f4cc45537bb9b47e5dd56f0204a3044c0c59f09630"}, - {file = "simsimd-5.9.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cdd2eb4aaea4295dceeee019948d5cbf03b436e02db4c725762b3a8f84eeedd3"}, - {file = "simsimd-5.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:383ec8b0da899193280269474ee13b2393a5312da8d5a00c6d2241f00e6011a6"}, - {file = "simsimd-5.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:046b0a8e2124d99c72aa0bb1faaa6994c9877707cfae9d4edcb92bacd2e18d03"}, - {file = "simsimd-5.9.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c9c6b52460791ee39143aef8e99be10e0adc934bfdd22258ec121bfa385e26b"}, - {file = "simsimd-5.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7e991d112f061a106ee76786080b1316567e31dddd583cac331921eaf377b43b"}, - {file = "simsimd-5.9.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:be6e79473daeca18ba355d0296b8202d7602c7cc5d674ecc5e2b665530c5163e"}, - {file = "simsimd-5.9.7-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:42b92127c1c5a01ea8aa54b309f4a137e55660beb9706145bc8be51aa70abb04"}, - {file = "simsimd-5.9.7-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:f5449609732d2ab785f273069bcde228d68b9d168db30c85a006d8d6d01f83aa"}, - {file = "simsimd-5.9.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1df7750149c5762070506bc54000233f3328ea78a2287cd4af065d8426d3ab5f"}, - {file = "simsimd-5.9.7-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:8912ab45874d6f4eb4805c369380afebcfccf5944211d96d40f387c00cdc5bf5"}, - {file = "simsimd-5.9.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2dec5916eebb83a3eb66bc596d68398f3b8f7c3c745c2d6ee50fefe3e419f5fa"}, - {file = "simsimd-5.9.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:67bb890385a765043ec092b5bdf2336df857eedbbae396d288aea07b54842409"}, - {file = "simsimd-5.9.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:49b9bc13ae251bdfdac6f527d37746d7ca411340d702e2e3736920f759201ae4"}, - {file = "simsimd-5.9.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:36cf86ca1e5f3ad91c9faa48db6835bbdc3284bad2d9d280a0e9bb1fcd781423"}, - {file = "simsimd-5.9.7-cp39-cp39-win32.whl", hash = "sha256:1e868e6dab93a1f0493e549e25d94948da1ce46f990cc84404421916024f3ab3"}, - {file = "simsimd-5.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:2eb4332914095b935a725fa61493d8c1088ba53ae43c69cf514225a4de38d8a8"}, - {file = "simsimd-5.9.7-cp39-cp39-win_arm64.whl", hash = "sha256:760313023711b7a4d1c5969e0bdd933502a4639f150b324055571a80f11fceb9"}, - {file = "simsimd-5.9.7.tar.gz", hash = "sha256:7612f7087aee7c5415385089080fdcdd3c52b3988e33cdf1f779f26d8ab54ac8"}, + {file = "simsimd-5.9.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4e702fc4a1035878f285e2a54f22d292c87df41c9518b74e7343cd897034af14"}, + {file = "simsimd-5.9.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e9fba1f38286359e8cb74fafe59ae728628703eae76641ccf48b892cc2bdfc88"}, + {file = "simsimd-5.9.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:55071a0ce4e5786ef3f44e3f52a656224ef84f4db4fb994b1eca5833481f19c1"}, + {file = "simsimd-5.9.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74490c4e744a35772cb7be6c2ac14c611762fc422076e1382c232a7de899976f"}, + {file = "simsimd-5.9.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:448dfaa140a690e3137f047f32861c26af76800cc78a2fd510b107a6136e62f1"}, + {file = "simsimd-5.9.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4003e9b9695b6b919da813fd82596a796c6a1efa4ca428eadd90eeb8333eb044"}, + {file = "simsimd-5.9.8-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:129059da8eeb9aa93fd81c92dd42bc4968f442aec9f4c100c25112425a04c277"}, + {file = "simsimd-5.9.8-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ce7214c6fda1c2129bf29e27243c3f21ef637f5bd7e3ab24d94af9e95f19aa3b"}, + {file = "simsimd-5.9.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8d9c77141145505cd588b15f25813dd7e8e7bf0cf9e7d26efa82d3ec75a0ae5a"}, + {file = "simsimd-5.9.8-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:31462a283e47e8c6e74706b805bf71f3a103949d97b56324107b9ab8b4699633"}, + {file = "simsimd-5.9.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d99df805c99eb1111fa36a7ae4e2c9b89577fb5cc5d3852dbd111295019b9fa5"}, + {file = "simsimd-5.9.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8dd6ea8d5b177c837d5c81103ce3eff0740172c96b47beda782cf08893a254f2"}, + {file = "simsimd-5.9.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:91b9e68af60cee3f21a123e8561b23dfec05a774404389c105ffd16dde0c5d25"}, + {file = "simsimd-5.9.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8be720ca3f33b9d722b0cc90fe6fe4217c0f863aef439a16d4a63dd4053babd3"}, + {file = "simsimd-5.9.8-cp310-cp310-win32.whl", hash = "sha256:8cad4cbb7238b686dbe00bb1ebd227ccad0e18c96e9282888e53f74799364a39"}, + {file = "simsimd-5.9.8-cp310-cp310-win_amd64.whl", hash = "sha256:ef2810e3d5d42db898b99941177bde30cb399008feae4f3d60aa907875bbb4ea"}, + {file = "simsimd-5.9.8-cp310-cp310-win_arm64.whl", hash = "sha256:b3393571802f547c7addfbfc748b5e2bc18e9000a048a20241830e923d9bfc40"}, + {file = "simsimd-5.9.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:49a1aee2b946f2a964d109775bcb8fd104036eb4a54fdd3773e76a0d0f386bf5"}, + {file = "simsimd-5.9.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e27eb0cca71688f6a1ec19d3f73cb37c056d0fb86d1ef5deb21036d8ca594484"}, + {file = "simsimd-5.9.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:15db0075af6dba11dd17237a981246b35dc40ddaf9df8ebb7467e8f02bb845a7"}, + {file = "simsimd-5.9.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51e535e7ce3eea8bfddf596dabec9d37b52abceb90c5eca0eafdbad34d8e3b4"}, + {file = "simsimd-5.9.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8992b92a2112a569360c675fa494d241b5be23b49e4fb1c575f07e1812f78d4"}, + {file = "simsimd-5.9.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c95128606ea1dd1cd915e70d1d99ea1ad7dc8e5fc7e0698bcd87539f6f042ce0"}, + {file = "simsimd-5.9.8-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:ec7f2151aa6257ea21426d8619a12a15a11dbfae655536847b29a1babf8cb8ae"}, + {file = "simsimd-5.9.8-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fa9b4142c765b0df060f737c42f84722f93d8c5d3a8b50263ca1f4b2bd9f7301"}, + {file = "simsimd-5.9.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5ae654579afb17a77470876b9a050763af07576b8fa1b5456d443fc5ba039c3f"}, + {file = "simsimd-5.9.8-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8acc30436dec0f52501499eafb29557fb15e1378d10898b47fa3e103c90d2221"}, + {file = "simsimd-5.9.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:924387ff7955957ab082670500ea220aa7e1f45405f72516cfa4b96ba09ee26d"}, + {file = "simsimd-5.9.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ac2ccd4898d0e1dcdd85674cefdc30d68cb8f7c79f1f0cdbfa9217067c2be7dd"}, + {file = "simsimd-5.9.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f2f733e724ce3471340aed8c5b07ce08d19c8d0c81027d08cee565e908f5729c"}, + {file = "simsimd-5.9.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:934c72bce7fa26e84439e7cb3f9a0d1b66b9fbea361479ecfb8a362d0dcfcc13"}, + {file = "simsimd-5.9.8-cp311-cp311-win32.whl", hash = "sha256:efce03705c4971399835758bdf7ab132c33964af8c69600e543180047b70d3dc"}, + {file = "simsimd-5.9.8-cp311-cp311-win_amd64.whl", hash = "sha256:35c27ba5efbd08ddf83f760172ea1809ae6085c1dae6ec36f77788dea669a747"}, + {file = "simsimd-5.9.8-cp311-cp311-win_arm64.whl", hash = "sha256:f549a251f8718b7a1642b27ef7f4a48138e7c7a21446b4b2bed665f0f32d1ec3"}, + {file = "simsimd-5.9.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:75730ce28776dcdef764eb70f7be0944bf7dd7ac1fddb522f9748c1f4c70db9c"}, + {file = "simsimd-5.9.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e63a7d98eda99fe6167268b904054407123391e05c35c7771e15b586215651ca"}, + {file = "simsimd-5.9.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48740b97ea2483a05aa42f034817949874019b1b76c7510f77a31d70f40bf5ca"}, + {file = "simsimd-5.9.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9905a5b0db221bae8b68c7a7bb260e93c19576e830fa306d9a3bf5f6bec133ee"}, + {file = "simsimd-5.9.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d10fc44dbbc1b2aa5def76303496435507c670fb8d1ff8f394fda5e4e142173"}, + {file = "simsimd-5.9.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46aad42caefd51fcbcc9f363b38ce46833d736d19d961933b67d5bf2b00eca86"}, + {file = "simsimd-5.9.8-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a799332a2e87d7985f40b503caeb1b8a07b2b6a4b777afc75746a81f37e373fb"}, + {file = "simsimd-5.9.8-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6432c19203b7c74910d1c35e9fe39624a7d26c0a2f95ba4ad735a02b72a60442"}, + {file = "simsimd-5.9.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5030b311a0805733c12c66ffb1ef635e3ace2a35ded63e602a714c0526d152ca"}, + {file = "simsimd-5.9.8-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7ad1e97dacdc34957aa79a713f2b38b259eb7236ccbef21c92d319b5442e3bab"}, + {file = "simsimd-5.9.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b5f1c37931d6879db4b0b7977c55ad3ed34ee4ecc3df2985d820e94cc43cac16"}, + {file = "simsimd-5.9.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c44cfa241d116dd3d236b563c7970b4c38ab72edc92c8133a5afb6263cc06d08"}, + {file = "simsimd-5.9.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:df35c99507db1d7c06ded9cb91177bc422fabcf747e91a388def921f8f881ffd"}, + {file = "simsimd-5.9.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:26039d91d2d5c6a0824bae7d1cd428b910c0159d6a0f34508a70c63c3b2e3780"}, + {file = "simsimd-5.9.8-cp312-cp312-win32.whl", hash = "sha256:cabec13bd284ab6c3f542f3d8a5c85af9ce0c6d9b0ba4714082eeaa8c4d48e5b"}, + {file = "simsimd-5.9.8-cp312-cp312-win_amd64.whl", hash = "sha256:dff96474b303ac775e6fd7839881fe2940f831e113226d387a51487b8154ec67"}, + {file = "simsimd-5.9.8-cp312-cp312-win_arm64.whl", hash = "sha256:9d0091eb35c16b5135d7fdb4143c64c40b3e071f09bac404f54c77032675d266"}, + {file = "simsimd-5.9.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d4da1f6e9e63d07461e1277cd6d48052f217d85213bfb55ddd16b7b359b39cd2"}, + {file = "simsimd-5.9.8-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91a7baacd64528012480c70a65eca649874683756775143db1457a537d788399"}, + {file = "simsimd-5.9.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:366f7c75ba6d7eb62b7e2fd4a82f1dd36251649b262120989488c1c343af5f3e"}, + {file = "simsimd-5.9.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:835498a99cee1fe75d6bace6da541ba2e211e21a910ed4e10ac9c0dbb645116f"}, + {file = "simsimd-5.9.8-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:d37da55942c77c59a7d86073682e597ebd709e834c5931f84e841af165d40c1b"}, + {file = "simsimd-5.9.8-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:fb1e4de8d6b9c024e90e330707e70085fa67cafde4f82a5f5c19304d9cfa18dd"}, + {file = "simsimd-5.9.8-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:3a5ff0c6682916df7e5d72eb45f8524a218d0ed0a888ee62a33789e3f2c800ef"}, + {file = "simsimd-5.9.8-cp37-cp37m-musllinux_1_2_armv7l.whl", hash = "sha256:6aba4438a6d229eddd646bf2a2b1c0f5aa30eda572ee4bc2d8a2f3714b7693a5"}, + {file = "simsimd-5.9.8-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:c588d7b45fbea17d10c90f64046f1982ff787e10ae918d9050ba4f470a8224de"}, + {file = "simsimd-5.9.8-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:a195907d5ae4045c6c4d5f64c2cc4e71ca72e87989426ee5dcd8ebf0fffedac7"}, + {file = "simsimd-5.9.8-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:bc3f166e6c0dfcef0976c054c48fb1cf2430af83d3d5610f1ca67db03749010d"}, + {file = "simsimd-5.9.8-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:3941b25bf900069c26e0cb7b90ed2841521dd6ecaf02904d521529a50f2ffa03"}, + {file = "simsimd-5.9.8-cp37-cp37m-win32.whl", hash = "sha256:a99dbb48590b10fa066ae0a25ae2dc81b3d41bc5f67090a55420a7666fb793eb"}, + {file = "simsimd-5.9.8-cp37-cp37m-win_amd64.whl", hash = "sha256:5fd69768c5e6a4174648a460369afa6301200f21fb0572cb788d80a8d7e207f1"}, + {file = "simsimd-5.9.8-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:906ea3bffaba8ffd6484ed42a140422d6cfe7c8fbac274f06c02de6688f4dfe2"}, + {file = "simsimd-5.9.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:728ea940addbdf326b3ea8778622b1aa90842202a297281c5772e21670b55775"}, + {file = "simsimd-5.9.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:437591683c623841ac7cc3960a663fc709d8f477f1026b5e6082ec864dc050e5"}, + {file = "simsimd-5.9.8-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9dcd3061a1e9a6fb3dd685199635268818fefbeab853248db85aef20b813211"}, + {file = "simsimd-5.9.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10ac2069068675ff44b8575149633ad57f7bd8f93c09f6b3d4f51ad53255e1bb"}, + {file = "simsimd-5.9.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00a286ebd3a1ae78639a8433c66811aab014db3275513dd211d1a4f08515d01d"}, + {file = "simsimd-5.9.8-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:85afbd74ec6e0fa009964484e22139f5a96c50aefe619fc62e0f1952fd8daed8"}, + {file = "simsimd-5.9.8-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:497b76a7e43d1e4303584580805bdb22f7b55abc1d86dd99ad9f11dbd6c52b11"}, + {file = "simsimd-5.9.8-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ddcdfceb832f868eb7bbf5f641288d62fe5e7768604e15f30ded2411aded61c3"}, + {file = "simsimd-5.9.8-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:e2b475559654d02d49b904bca09d4bc144abab480f92418defcf4e98d54b92c5"}, + {file = "simsimd-5.9.8-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:449c5b4b3c41fc97b4f09747630bc55b22725f5567bdd0b521b5090153418196"}, + {file = "simsimd-5.9.8-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:43b344708c6bb34145a2d233fd5ceb935b130ec2c1114e585afc043d3f4124f3"}, + {file = "simsimd-5.9.8-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:b0239592ffe6bbfe2bbba4760dbd584a6d97abb9a16048cb0a10198ed64cf7e8"}, + {file = "simsimd-5.9.8-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b553b52215fda8aa46bb0e8caa38618c4547087ea05c3bff5c25e32523fcd450"}, + {file = "simsimd-5.9.8-cp38-cp38-win32.whl", hash = "sha256:803f73796c66d88cea055dcde8f28f58afd0f5b3e3794b1eaf7c16cfc08b9277"}, + {file = "simsimd-5.9.8-cp38-cp38-win_amd64.whl", hash = "sha256:0f4214d4635d8244d07e14332e728eb7e46a98a2570d53dfcaba8762744d5192"}, + {file = "simsimd-5.9.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:be2e77a94095c17eb2810a1cf1e3327999b4a56c322ce5e9c03521d7414baf84"}, + {file = "simsimd-5.9.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f4457811438d3cd061c9619eb7605ad8ea793f9c95007aea4bb6a4c57d2d236"}, + {file = "simsimd-5.9.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c39c7f5bb5dc871eb137b931738335fa0f06933563fdc4cf2db1819d8c5ba093"}, + {file = "simsimd-5.9.8-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8bcee9a1f93312f43824d1a6b18d5a243ac7caab49d7492a55a632afef393c47"}, + {file = "simsimd-5.9.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03d44ea01e47eb147d9e397e82da91edc1e78f7c43536af3f525b6b39234e5b0"}, + {file = "simsimd-5.9.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:220591a93070d965a52a87b3206673cbae1b5b68c81ed9ab4a7e15572cd6d9b2"}, + {file = "simsimd-5.9.8-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:f8a5bcda2c8a057dae7ac7eca099cb5c9534ff59fbc10010627463ae5597ee70"}, + {file = "simsimd-5.9.8-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:4870bc02ce7efc0fd129aa0c66076dd9a81369bfe876a41561413c76ce5ceaba"}, + {file = "simsimd-5.9.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cb9624ca970ec449416a52012059974ff5a991db8390f1d5934aca8d13bacc39"}, + {file = "simsimd-5.9.8-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:8f674115df62f59c2f1012e5fe182b0c6ed092cfc734375d1da976e7cb854c04"}, + {file = "simsimd-5.9.8-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f16ed7a2a7c7524c495b9a440b0b059332560af63b12295e44e291e6cbf05285"}, + {file = "simsimd-5.9.8-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ed840763b455adbd893e9385e723981137d23a3dc8ffadcd3e773ad502796870"}, + {file = "simsimd-5.9.8-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:bd09b0f1a3f12402682e3b6a33ab26c37859e45c8e7e3487a07c73227b6b45a3"}, + {file = "simsimd-5.9.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:42e3ab561110c6be84644381387f9dee75f3922fd9b444a602cbe4dfa4a51df6"}, + {file = "simsimd-5.9.8-cp39-cp39-win32.whl", hash = "sha256:9ef76f86a041f1e82f8dd7364e71de54b666e6ebbbbc00c0990951cadc4324d9"}, + {file = "simsimd-5.9.8-cp39-cp39-win_amd64.whl", hash = "sha256:dd27b0c4a72a125cb884df8e0b32c36ca533a17599a593f607a9f7f020d89c88"}, + {file = "simsimd-5.9.8-cp39-cp39-win_arm64.whl", hash = "sha256:a45b4aeed230876c52a312507cd25f1897d933a18b8f3a56b5a50eb54d7434bc"}, + {file = "simsimd-5.9.8.tar.gz", hash = "sha256:da61db9ee910b8029ade91fc52107d6d41f891eeb7cb57f70504ac593aafd2a1"}, ] [[package]] @@ -6096,93 +6093,93 @@ files = [ [[package]] name = "yarl" -version = "1.17.0" +version = "1.17.1" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d8715edfe12eee6f27f32a3655f38d6c7410deb482158c0b7d4b7fad5d07628"}, - {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1803bf2a7a782e02db746d8bd18f2384801bc1d108723840b25e065b116ad726"}, - {file = "yarl-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e66589110e20c2951221a938fa200c7aa134a8bdf4e4dc97e6b21539ff026d4"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7069d411cfccf868e812497e0ec4acb7c7bf8d684e93caa6c872f1e6f5d1664d"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbf70ba16118db3e4b0da69dcde9d4d4095d383c32a15530564c283fa38a7c52"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0bc53cc349675b32ead83339a8de79eaf13b88f2669c09d4962322bb0f064cbc"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6aa18a402d1c80193ce97c8729871f17fd3e822037fbd7d9b719864018df746"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d89c5bc701861cfab357aa0cd039bc905fe919997b8c312b4b0c358619c38d4d"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b728bdf38ca58f2da1d583e4af4ba7d4cd1a58b31a363a3137a8159395e7ecc7"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:5542e57dc15d5473da5a39fbde14684b0cc4301412ee53cbab677925e8497c11"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e564b57e5009fb150cb513804d7e9e9912fee2e48835638f4f47977f88b4a39c"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:eb3c4cff524b4c1c1dba3a6da905edb1dfd2baf6f55f18a58914bbb2d26b59e1"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:05e13f389038842da930d439fbed63bdce3f7644902714cb68cf527c971af804"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:153c38ee2b4abba136385af4467459c62d50f2a3f4bde38c7b99d43a20c143ef"}, - {file = "yarl-1.17.0-cp310-cp310-win32.whl", hash = "sha256:4065b4259d1ae6f70fd9708ffd61e1c9c27516f5b4fae273c41028afcbe3a094"}, - {file = "yarl-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:abf366391a02a8335c5c26163b5fe6f514cc1d79e74d8bf3ffab13572282368e"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:19a4fe0279626c6295c5b0c8c2bb7228319d2e985883621a6e87b344062d8135"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cadd0113f4db3c6b56868d6a19ca6286f5ccfa7bc08c27982cf92e5ed31b489a"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:60d6693eef43215b1ccfb1df3f6eae8db30a9ff1e7989fb6b2a6f0b468930ee8"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb8bf3843e1fa8cf3fe77813c512818e57368afab7ebe9ef02446fe1a10b492"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2a5b35fd1d8d90443e061d0c8669ac7600eec5c14c4a51f619e9e105b136715"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5bf17b32f392df20ab5c3a69d37b26d10efaa018b4f4e5643c7520d8eee7ac7"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f51b529b958cd06e78158ff297a8bf57b4021243c179ee03695b5dbf9cb6e1"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fcaa06bf788e19f913d315d9c99a69e196a40277dc2c23741a1d08c93f4d430"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:32f3ee19ff0f18a7a522d44e869e1ebc8218ad3ae4ebb7020445f59b4bbe5897"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a4fb69a81ae2ec2b609574ae35420cf5647d227e4d0475c16aa861dd24e840b0"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7bacc8b77670322132a1b2522c50a1f62991e2f95591977455fd9a398b4e678d"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:437bf6eb47a2d20baaf7f6739895cb049e56896a5ffdea61a4b25da781966e8b"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30534a03c87484092080e3b6e789140bd277e40f453358900ad1f0f2e61fc8ec"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b30df4ff98703649915144be6f0df3b16fd4870ac38a09c56d5d9e54ff2d5f96"}, - {file = "yarl-1.17.0-cp311-cp311-win32.whl", hash = "sha256:263b487246858e874ab53e148e2a9a0de8465341b607678106829a81d81418c6"}, - {file = "yarl-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:07055a9e8b647a362e7d4810fe99d8f98421575e7d2eede32e008c89a65a17bd"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:84095ab25ba69a8fa3fb4936e14df631b8a71193fe18bd38be7ecbe34d0f5512"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02608fb3f6df87039212fc746017455ccc2a5fc96555ee247c45d1e9f21f1d7b"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13468d291fe8c12162b7cf2cdb406fe85881c53c9e03053ecb8c5d3523822cd9"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8da3f8f368fb7e2f052fded06d5672260c50b5472c956a5f1bd7bf474ae504ab"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec0507ab6523980bed050137007c76883d941b519aca0e26d4c1ec1f297dd646"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08fc76df7fd8360e9ff30e6ccc3ee85b8dbd6ed5d3a295e6ec62bcae7601b932"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d522f390686acb6bab2b917dd9ca06740c5080cd2eaa5aef8827b97e967319d"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:147c527a80bb45b3dcd6e63401af8ac574125d8d120e6afe9901049286ff64ef"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:24cf43bcd17a0a1f72284e47774f9c60e0bf0d2484d5851f4ddf24ded49f33c6"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c28a44b9e0fba49c3857360e7ad1473fc18bc7f6659ca08ed4f4f2b9a52c75fa"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:350cacb2d589bc07d230eb995d88fcc646caad50a71ed2d86df533a465a4e6e1"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:fd1ab1373274dea1c6448aee420d7b38af163b5c4732057cd7ee9f5454efc8b1"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4934e0f96dadc567edc76d9c08181633c89c908ab5a3b8f698560124167d9488"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8d0a278170d75c88e435a1ce76557af6758bfebc338435b2eba959df2552163e"}, - {file = "yarl-1.17.0-cp312-cp312-win32.whl", hash = "sha256:61584f33196575a08785bb56db6b453682c88f009cd9c6f338a10f6737ce419f"}, - {file = "yarl-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:9987a439ad33a7712bd5bbd073f09ad10d38640425fa498ecc99d8aa064f8fc4"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8deda7b8eb15a52db94c2014acdc7bdd14cb59ec4b82ac65d2ad16dc234a109e"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56294218b348dcbd3d7fce0ffd79dd0b6c356cb2a813a1181af730b7c40de9e7"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1fab91292f51c884b290ebec0b309a64a5318860ccda0c4940e740425a67b6b7"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cf93fa61ff4d9c7d40482ce1a2c9916ca435e34a1b8451e17f295781ccc034f"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:261be774a0d71908c8830c33bacc89eef15c198433a8cc73767c10eeeb35a7d0"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deec9693b67f6af856a733b8a3e465553ef09e5e8ead792f52c25b699b8f9e6e"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c804b07622ba50a765ca7fb8145512836ab65956de01307541def869e4a456c9"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d013a7c9574e98c14831a8f22d27277688ec3b2741d0188ac01a910b009987a"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e2cfcba719bd494c7413dcf0caafb51772dec168c7c946e094f710d6aa70494e"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c068aba9fc5b94dfae8ea1cedcbf3041cd4c64644021362ffb750f79837e881f"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3616df510ffac0df3c9fa851a40b76087c6c89cbcea2de33a835fc80f9faac24"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:755d6176b442fba9928a4df787591a6a3d62d4969f05c406cad83d296c5d4e05"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c18f6e708d1cf9ff5b1af026e697ac73bea9cb70ee26a2b045b112548579bed2"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5b937c216b6dee8b858c6afea958de03c5ff28406257d22b55c24962a2baf6fd"}, - {file = "yarl-1.17.0-cp313-cp313-win32.whl", hash = "sha256:d0131b14cb545c1a7bd98f4565a3e9bdf25a1bd65c83fc156ee5d8a8499ec4a3"}, - {file = "yarl-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:01c96efa4313c01329e88b7e9e9e1b2fc671580270ddefdd41129fa8d0db7696"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0d44f67e193f0a7acdf552ecb4d1956a3a276c68e7952471add9f93093d1c30d"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:16ea0aa5f890cdcb7ae700dffa0397ed6c280840f637cd07bffcbe4b8d68b985"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cf5469dc7dcfa65edf5cc3a6add9f84c5529c6b556729b098e81a09a92e60e51"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e662bf2f6e90b73cf2095f844e2bc1fda39826472a2aa1959258c3f2a8500a2f"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8260e88f1446904ba20b558fa8ce5d0ab9102747238e82343e46d056d7304d7e"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dc16477a4a2c71e64c5d3d15d7ae3d3a6bb1e8b955288a9f73c60d2a391282f"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46027e326cecd55e5950184ec9d86c803f4f6fe4ba6af9944a0e537d643cdbe0"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc95e46c92a2b6f22e70afe07e34dbc03a4acd07d820204a6938798b16f4014f"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:16ca76c7ac9515320cd09d6cc083d8d13d1803f6ebe212b06ea2505fd66ecff8"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eb1a5b97388f2613f9305d78a3473cdf8d80c7034e554d8199d96dcf80c62ac4"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:41fd5498975418cdc34944060b8fbeec0d48b2741068077222564bea68daf5a6"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:146ca582ed04a5664ad04b0e0603934281eaab5c0115a5a46cce0b3c061a56a1"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:6abb8c06107dbec97481b2392dafc41aac091a5d162edf6ed7d624fe7da0587a"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d14be4613dd4f96c25feb4bd8c0d8ce0f529ab0ae555a17df5789e69d8ec0c5"}, - {file = "yarl-1.17.0-cp39-cp39-win32.whl", hash = "sha256:174d6a6cad1068f7850702aad0c7b1bca03bcac199ca6026f84531335dfc2646"}, - {file = "yarl-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:6af417ca2c7349b101d3fd557ad96b4cd439fdb6ab0d288e3f64a068eea394d0"}, - {file = "yarl-1.17.0-py3-none-any.whl", hash = "sha256:62dd42bb0e49423f4dd58836a04fcf09c80237836796025211bbe913f1524993"}, - {file = "yarl-1.17.0.tar.gz", hash = "sha256:d3f13583f378930377e02002b4085a3d025b00402d5a80911726d43a67911cd9"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931"}, + {file = "yarl-1.17.1-cp310-cp310-win32.whl", hash = "sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b"}, + {file = "yarl-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4"}, + {file = "yarl-1.17.1-cp311-cp311-win32.whl", hash = "sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7"}, + {file = "yarl-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199"}, + {file = "yarl-1.17.1-cp312-cp312-win32.whl", hash = "sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96"}, + {file = "yarl-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258"}, + {file = "yarl-1.17.1-cp313-cp313-win32.whl", hash = "sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2"}, + {file = "yarl-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f"}, + {file = "yarl-1.17.1-cp39-cp39-win32.whl", hash = "sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473"}, + {file = "yarl-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138"}, + {file = "yarl-1.17.1-py3-none-any.whl", hash = "sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06"}, + {file = "yarl-1.17.1.tar.gz", hash = "sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47"}, ] [package.dependencies]