diff --git a/Docker/config.py b/Docker/config.py new file mode 100644 index 0000000..2a0edb3 --- /dev/null +++ b/Docker/config.py @@ -0,0 +1,81 @@ +from pathlib import Path +from pydantic_settings import BaseSettings, SettingsConfigDict +from dotenv import load_dotenv +from datetime import timedelta +import warnings +import os + +load_dotenv() + +MODEL_NAME=os.getenv("MODEL_NAME", "gpt-3.5-turbo") +OPENAI_API_KEY=os.getenv("OPENAI_API_KEY", "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") + +OLLAMA_URL=os.getenv("OLLAMA_URL", "http://host.docker.internal:11434") +OLLAMA_LOCAL_URL=os.getenv("OLLAMA_LOCAL_URL", "http://localhost:11434") +OLLAMA_MODEL_NAME=os.getenv("OLLAMA_MODEL_NAME", "qwen3-0.6B:latest") +OLLAMA_EMB_MODEL_NAME=os.getenv("OLLAMA_EMB_MODEL_NAME", "qwen3-0.6B-emb:latest") + +LANGFUSE_HOST=os.getenv("LANGFUSE_HOST", "http://45.77.119.180") +LANGFUSE_PUBLIC_KEY=os.getenv("LANGFUSE_PUBLIC_KEY", "pk-lf-0e6db694-3e95-4dd4-aedf-5a2694267058") +LANGFUSE_SECRET_KEY=os.getenv("LANGFUSE_SECRET_KEY", "sk-lf-dbf28bb9-15bb-4d03-a8c3-05caa3e3905f") + +ELASTICSEARCH_URL=os.getenv("ELASTICSEARCH_URL", "http://host.docker.internal:9200") +ELASTICSEARCH_LOCAL_URL=os.getenv("ELASTICSEARCH_LOCAL_URL", "http://localhost:9200") +ELASTICSEARCH_INDEX=os.getenv("ELASTICSEARCH_INDEX", "avap-docs-test") + +DATABASE_URL=os.getenv("DATABASE_URL", "postgresql://postgres:brunix_pass@host.docker.internal:5432/postgres") + +KUBECONFIG_PATH=os.getenv("KUBECONFIG_PATH", "kubernetes/kubeconfig.yaml") + +HF_TOKEN=os.getenv("HF_TOKEN", "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") +HF_EMB_MODEL_NAME=os.getenv("HF_EMB_MODEL_NAME", "Qwen/Qwen3-Embedding-0.6B") + +MRH_AVAP_DATA_PATH_=os.getenv("MRH_AVAP_DATA_PATH_", "/home/pseco/VsCodeProjects/assistance-engine/data/") + +MRH_AVAP_MODELS_PATH_=os.getenv("MRH_AVAP_MODELS_PATH_", "/home/pseco/VsCodeProjects/assistance-engine/data/models") +MRH_AVAP_RAW_PATH_=os.getenv("MRH_AVAP_RAW_PATH_", "/home/pseco/VsCodeProjects/assistance-engine/data/raw") +MRH_AVAP_PROCESSED_PATH_=os.getenv("MRH_AVAP_PROCESSED_PATH_", "/home/pseco/VsCodeProjects/assistance-engine/data/processed") +MRH_AVAP_INTERIM_PATH_=os.getenv("MRH_AVAP_INTERIM_PATH_", "/home/pseco/VsCodeProjects/assistance-engine/data/interim") +MRH_AVAP_EXTERNAL_PATH_=os.getenv("MRH_AVAP_EXTERNAL_PATH_", "/home/pseco/VsCodeProjects/assistance-engine/data/external") + + +class Settings(BaseSettings): + raw_path_: str + processed_path_: str + models_path_:str + interim_path_:str + external_path_:str + + model_config = SettingsConfigDict( + env_prefix="mrh_avap_", + env_file=".env", + env_file_encoding="utf-8", + case_sensitive=False, + extra="ignore", + ) + + @property + def raw_path(self) -> Path: + return Path(self.raw_path_) + + @property + def processed_path(self) -> Path: + return Path(self.processed_path_) + + @property + def proj_root(self) -> Path: + return Path(__file__).resolve().parents[1] + + @property + def interim_path(self) -> Path: + return Path(self.interim_path_) + + @property + def external_path(self) -> Path: + return Path(self.external_path_) + + @property + def models_path(self) -> Path: + return Path(self.models_path_) + +settings = Settings() diff --git a/Makefile b/Makefile index 6303f8a..26c6c5b 100644 --- a/Makefile +++ b/Makefile @@ -40,4 +40,8 @@ sync_data_down: .PHONY: sync_data_up sync_data_up: aws s3 sync --exclude "*.gitkeep" data/ \ - s3://mrh-avap/data \ No newline at end of file + s3://mrh-avap/data + +.PHONY: ollama_local +ollama_local: + ssh -i ~/.ssh/mrh-transformers.pem -L 11434:localhost:11434 ubuntu@172.18.14.34 diff --git a/pyproject.toml b/pyproject.toml index 29f97d5..eff7c81 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,12 +5,14 @@ description = "Add your description here" readme = "README.md" requires-python = ">=3.11" dependencies = [ + "accelerate>=1.12.0", "grpcio>=1.78.0", "grpcio-reflection>=1.78.0", "grpcio-tools>=1.78.0", "langchain>=1.2.10", "langchain-community>=0.4.1", "langchain-elasticsearch>=1.0.0", + "langchain-huggingface>=1.2.0", "langchain-ollama>=1.0.1", "loguru>=0.7.3", "nltk>=3.9.2", @@ -20,15 +22,16 @@ dependencies = [ "torch>=2.10.0", "torchvision>=0.25.0", "tqdm>=4.67.3", - "transformers>=5.2.0", ] [dependency-groups] dev = [ "beir>=2.2.0", "jupyter>=1.1.1", - "langfuse>=3.14.4", + "langfuse<=3", + "markdown>=3.10.2", "mteb>=2.8.8", "polars>=1.38.1", + "ragas>=0.4.3", "ruff>=0.15.1", ] diff --git a/scratches/acano/langgraph_agent_simple.ipynb b/scratches/acano/langgraph_agent_simple.ipynb index ac4a096..aad3c8f 100644 --- a/scratches/acano/langgraph_agent_simple.ipynb +++ b/scratches/acano/langgraph_agent_simple.ipynb @@ -611,12 +611,146 @@ ] }, { +<<<<<<< HEAD "cell_type": "code", "execution_count": null, "id": "4052f229", "metadata": {}, "outputs": [], "source": [] +======= + "cell_type": "markdown", + "id": "07f9f5e5", + "metadata": {}, + "source": [ + "# Evaluate" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ec2362c4", + "metadata": {}, + "outputs": [], + "source": [ + "from dataclasses import dataclass\n", + "from typing import Any, Iterable\n", + " \n", + "import numpy as np\n", + " \n", + "import mteb\n", + "from mteb.types import Array\n", + "from mteb.models import SearchEncoderWrapper\n", + " \n", + " \n", + "def _l2_normalize(x: np.ndarray, eps: float = 1e-12) -> np.ndarray:\n", + " norms = np.linalg.norm(x, axis=1, keepdims=True)\n", + " return x / np.clip(norms, eps, None)\n", + " \n", + " \n", + "def _to_text_list(batch: dict[str, Any]) -> list[str]:\n", + " \"\"\"\n", + " MTEB batched inputs can be:\n", + " - TextInput: {\"text\": [..]}\n", + " - CorpusInput: {\"title\": [..], \"body\": [..], \"text\": [..]}\n", + " - QueryInput: {\"query\": [..], \"instruction\": [..], \"text\": [..]}\n", + " We prefer \"text\" if present; otherwise compose from title/body or query/instruction.\n", + " \"\"\"\n", + " if \"text\" in batch and batch[\"text\"] is not None:\n", + " return list(batch[\"text\"])\n", + " \n", + " if \"title\" in batch and \"body\" in batch:\n", + " titles = batch[\"title\"] or [\"\"] * len(batch[\"body\"])\n", + " bodies = batch[\"body\"] or [\"\"] * len(batch[\"title\"])\n", + " return [f\"{t} {b}\".strip() for t, b in zip(titles, bodies)]\n", + " \n", + " if \"query\" in batch:\n", + " queries = list(batch[\"query\"])\n", + " instructions = batch.get(\"instruction\")\n", + " if instructions:\n", + " return [f\"{i} {q}\".strip() for q, i in zip(queries, instructions)]\n", + " return queries\n", + " \n", + " raise ValueError(f\"Unsupported batch keys: {sorted(batch.keys())}\")\n", + " \n", + " \n", + "@dataclass\n", + "class OllamaLangChainEncoder:\n", + " lc_embeddings: Any # OllamaEmbeddings implements embed_documents()\n", + " normalize: bool = True\n", + " \n", + " # Optional metadata hook used by some wrappers; safe to keep as None for local runs\n", + " mteb_model_meta: Any = None\n", + " \n", + " def encode(\n", + " self,\n", + " inputs: Iterable[dict[str, Any]],\n", + " *,\n", + " task_metadata: Any,\n", + " hf_split: str,\n", + " hf_subset: str,\n", + " prompt_type: Any = None,\n", + " **kwargs: Any,\n", + " ) -> Array:\n", + " all_vecs: list[np.ndarray] = []\n", + " \n", + " for batch in inputs:\n", + " texts = _to_text_list(batch)\n", + " vecs = self.lc_embeddings.embed_documents(texts)\n", + " arr = np.asarray(vecs, dtype=np.float32)\n", + " if self.normalize:\n", + " arr = _l2_normalize(arr)\n", + " all_vecs.append(arr)\n", + " \n", + " if not all_vecs:\n", + " return np.zeros((0, 0), dtype=np.float32)\n", + " \n", + " return np.vstack(all_vecs)\n", + " \n", + " def similarity(self, embeddings1: Array, embeddings2: Array) -> Array:\n", + " a = np.asarray(embeddings1, dtype=np.float32)\n", + " b = np.asarray(embeddings2, dtype=np.float32)\n", + " if self.normalize:\n", + " # dot == cosine if already normalized\n", + " return a @ b.T\n", + " a = _l2_normalize(a)\n", + " b = _l2_normalize(b)\n", + " return a @ b.T\n", + " \n", + " def similarity_pairwise(self, embeddings1: Array, embeddings2: Array) -> Array:\n", + " a = np.asarray(embeddings1, dtype=np.float32)\n", + " b = np.asarray(embeddings2, dtype=np.float32)\n", + " if not self.normalize:\n", + " a = _l2_normalize(a)\n", + " b = _l2_normalize(b)\n", + " return np.sum(a * b, axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db6fa201", + "metadata": {}, + "outputs": [], + "source": [ + "encoder = OllamaLangChainEncoder(lc_embeddings=embeddings, normalize=True)\n", + "search_model = SearchEncoderWrapper(encoder)\n", + " \n", + "tasks = mteb.get_tasks([\n", + " \"CodeSearchNetRetrieval\",\n", + " \"CodeSearchNetCCRetrieval\",\n", + " \"AppsRetrieval\",\n", + " \"StackOverflowDupQuestions\",\n", + "])\n", + "results = mteb.evaluate(\n", + " model=search_model,\n", + " tasks=tasks,\n", + " encode_kwargs={\"batch_size\": 32, \"show_progress_bar\": True}\n", + ")\n", + " \n", + "print(results)" + ] +>>>>>>> 6480c77edb061d556280a688e9f3e8c5c7f5f054 } ], "metadata": { diff --git a/scratches/pseco/agent/n00 LangGraph Agent.ipynb b/scratches/pseco/agent/n00 LangGraph Agent v1.ipynb similarity index 100% rename from scratches/pseco/agent/n00 LangGraph Agent.ipynb rename to scratches/pseco/agent/n00 LangGraph Agent v1.ipynb diff --git a/scratches/pseco/agent/n00 LangGraph Agent v2.ipynb b/scratches/pseco/agent/n00 LangGraph Agent v2.ipynb new file mode 100644 index 0000000..d3840e0 --- /dev/null +++ b/scratches/pseco/agent/n00 LangGraph Agent v2.ipynb @@ -0,0 +1,414 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "9f97dd1e", + "metadata": {}, + "source": [ + "# Libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "id": "9e974df6", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import re\n", + "from typing import TypedDict, List, Optional, Annotated\n", + "from IPython.display import Image, display\n", + "\n", + "from langchain_core.documents import Document\n", + "from langchain_core.messages import BaseMessage, SystemMessage\n", + "from langchain_core.tools import tool\n", + "from langgraph.checkpoint.memory import InMemorySaver\n", + "from langgraph.graph.message import add_messages\n", + "from langchain_ollama import ChatOllama, OllamaEmbeddings\n", + "from langchain_elasticsearch import ElasticsearchStore\n", + "from langgraph.graph import StateGraph, END\n", + "from langgraph.prebuilt import ToolNode\n", + "from langfuse import get_client, Langfuse\n", + "from langfuse.langchain import CallbackHandler\n", + "\n", + "from typing import TypedDict, List, Optional, Annotated, Literal\n", + "from pydantic import BaseModel, Field\n", + "from langchain_core.messages import BaseMessage, SystemMessage, AIMessage" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "id": "30edcecc", + "metadata": {}, + "outputs": [], + "source": [ + "ES_URL = os.getenv(\"ELASTICSEARCH_LOCAL_URL\")\n", + "INDEX_NAME = os.getenv(\"ELASTICSEARCH_INDEX\")\n", + "BASE_URL = os.getenv(\"OLLAMA_LOCAL_URL\")\n", + "MODEL_NAME = os.getenv(\"OLLAMA_MODEL_NAME\")\n", + "EMB_MODEL_NAME = os.getenv(\"OLLAMA_EMB_MODEL_NAME\")\n", + "LANGFUSE_PUBLIC_KEY = os.getenv(\"LANGFUSE_PUBLIC_KEY\")\n", + "LANGFUSE_SECRET_KEY = os.getenv(\"LANGFUSE_SECRET_KEY\")\n", + "LANGFUSE_HOST = os.getenv(\"LANGFUSE_HOST\")\n", + "\n", + "\n", + "embeddings = OllamaEmbeddings(base_url=BASE_URL, model=EMB_MODEL_NAME)\n", + "llm = ChatOllama(base_url=BASE_URL, model=MODEL_NAME, temperature=0)\n", + "\n", + "vector_store = ElasticsearchStore(\n", + " es_url=ES_URL,\n", + " index_name=INDEX_NAME,\n", + " embedding=embeddings,\n", + " query_field=\"text\",\n", + " vector_query_field=\"vector\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "873ea2f6", + "metadata": {}, + "source": [ + "### State" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "id": "5f8c88cf", + "metadata": {}, + "outputs": [], + "source": [ + "class AgentState(TypedDict):\n", + " messages: Annotated[list, add_messages]" + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "id": "30473bce", + "metadata": {}, + "outputs": [], + "source": [ + "class AgentResponse(BaseModel):\n", + " \"\"\"\n", + " Structured output contract for final assistant responses.\n", + " \"\"\"\n", + " language: Literal[\"en\"] = Field(\n", + " description=\"ISO code. Must always be 'en'.\"\n", + " )\n", + " content: str = Field(\n", + " description=\"Final answer in English.\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "1d60c120", + "metadata": {}, + "source": [ + "### Tools" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "id": "f0a21230", + "metadata": {}, + "outputs": [], + "source": [ + "retrieve_kwargs = {\"k\": 5}" + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "id": "f9359747", + "metadata": {}, + "outputs": [], + "source": [ + "def format_context(docs: List[Document]) -> str:\n", + " chunks: List[str] = []\n", + " for i, doc in enumerate(docs, 1):\n", + " source = (doc.metadata or {}).get(\"source\", \"Untitled\")\n", + " source_id = (doc.metadata or {}).get(\"id\", f\"chunk-{i}\")\n", + " text = doc.page_content or \"\"\n", + " chunks.append(f\"[{i}] id={source_id} source={source}\\n{text}\")\n", + " return \"\\n\\n\".join(chunks)\n", + "\n", + "\n", + "@tool\n", + "def retrieve(query: str) -> str:\n", + " \"\"\"This tool retrieves relevant documents from the vector store based on the input query and formats them for the agent's response.\n", + " Args:\n", + " query (str): The input query for which to retrieve relevant documents.\n", + " \"\"\"\n", + " retriever = vector_store.as_retriever(\n", + " search_type=\"similarity\",\n", + " search_kwargs=retrieve_kwargs,\n", + " )\n", + " docs = retriever.invoke(query)\n", + " return format_context(docs)" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "id": "e5247ab9", + "metadata": {}, + "outputs": [], + "source": [ + "def should_continue(state: AgentState) -> str:\n", + " last = state[\"messages\"][-1]\n", + " \n", + " if getattr(last, \"tool_calls\", None):\n", + " return \"tools\"\n", + " return \"end\"" + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "id": "a644f6fa", + "metadata": {}, + "outputs": [], + "source": [ + "tools = [retrieve]\n", + "tool_node = ToolNode(tools)\n", + "memory = InMemorySaver()" + ] + }, + { + "cell_type": "markdown", + "id": "395966e2", + "metadata": {}, + "source": [ + "### Agent" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "id": "36d0f54e", + "metadata": {}, + "outputs": [], + "source": [ + "def _message_text(message: BaseMessage) -> str:\n", + " content = getattr(message, \"content\", \"\")\n", + " if isinstance(content, str):\n", + " return content\n", + " if isinstance(content, list):\n", + " return \" \".join(str(item) for item in content)\n", + " return str(content)\n", + "\n", + "\n", + "def _last_user_query(messages: List[BaseMessage]) -> str:\n", + " for message in reversed(messages):\n", + " message_type = getattr(message, \"type\", \"\")\n", + " if message_type == \"human\":\n", + " return _message_text(message)\n", + " return _message_text(messages[-1]) if messages else \"\"\n", + "\n", + "\n", + "def _last_assistant_text(messages: List[BaseMessage]) -> str:\n", + " for message in reversed(messages):\n", + " message_type = getattr(message, \"type\", \"\")\n", + " if message_type == \"ai\":\n", + " return _message_text(message)\n", + " return \"\"\n", + "\n", + "\n", + "MAX_LANGUAGE_RETRIES = 5\n", + "\n", + "\n", + "def agent(state: AgentState) -> AgentState:\n", + " messages: List[BaseMessage] = state[\"messages\"]\n", + " user_query = _last_user_query(messages)\n", + "\n", + " retrieved_context = retrieve.invoke({\"query\": user_query})\n", + "\n", + " system = SystemMessage(\n", + " content=(\n", + " \"\"\"\n", + " You are an AVAP language assistant focused on accurate and grounded answers.\n", + "\n", + " Rules:\n", + " 1. ALWAYS use the provided retrieval context from Elasticsearch FIRST.\n", + " 2. Use ONLY the retrieved context to produce the final answer. Do NOT invent AVAP commands.\n", + " 3. ALWAYS reply in English only. Never respond in any other language.\n", + " 4. If asked for code/snippet, include exactly ONE fenced AVAP block (```avap ... ```).\n", + " 5. Never output internal reasoning or unrelated text.\n", + "\n", + " Retrieved context:\n", + " \"\"\"\n", + " + retrieved_context\n", + " )\n", + " )\n", + "\n", + "\n", + "\n", + " structured_model = llm.with_structured_output(AgentResponse)\n", + " structured_response: AgentResponse = structured_model.invoke(\n", + " [system, *messages]\n", + " )\n", + "\n", + " # Keep LangGraph message flow unchanged\n", + " final_message = AIMessage(content=structured_response.content)\n", + " return {\"messages\": [*messages, final_message]}\n", + "\n", + " # model = llm.bind_tools(tools)\n", + " # response = model.invoke([system, *messages])\n", + "\n", + " # return {\"messages\": [*messages, response]}" + ] + }, + { + "cell_type": "markdown", + "id": "ef55bca3", + "metadata": {}, + "source": [ + "### Graph" + ] + }, + { + "cell_type": "code", + "execution_count": 154, + "id": "fae46a58", + "metadata": {}, + "outputs": [], + "source": [ + "graph = StateGraph(AgentState)\n", + "graph.add_node(\"agent\", agent)\n", + "\n", + "\n", + "graph.set_entry_point(\"agent\")\n", + "graph.add_edge(\"agent\", END)\n", + "\n", + "# Alternative mode (single pass) - kept commented for quick rollback.\n", + "# graph.set_entry_point(\"agent\")\n", + "# graph.add_edge(\"agent\", END)\n", + "\n", + "agent_graph = graph.compile()" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "id": "2fec3fdb", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "try:\n", + " display(Image(agent_graph.get_graph().draw_mermaid_png()))\n", + "except Exception:\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "id": "1e9aff05", + "metadata": {}, + "source": [ + "### Test" + ] + }, + { + "cell_type": "code", + "execution_count": 156, + "id": "8569cf39", + "metadata": {}, + "outputs": [], + "source": [ + "config = {\"configurable\": {\"thread_id\": \"5\"}, \n", + " #\"callbacks\": [langfuse_handler],\n", + " #\"run_name\": \"rag-local-test\"differences between getDatetime() and getTimeStamp() functions in AVAP\n", + " }\n", + "\n", + "def stream_graph_updates(user_input: str):\n", + " for event in agent_graph.stream(\n", + " {\"messages\": [{\"role\": \"user\", \"content\": user_input}]},\n", + " #config=config,\n", + " stream_mode=\"values\",\n", + " ):\n", + " event[\"messages\"][-1].pretty_print()" + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "id": "a1a1f3cf", + "metadata": {}, + "outputs": [], + "source": [ + "user_input = (\n", + " \"Generate two variables, asigning them one number to each, do it in AVAP language.\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "id": "53b89690", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "================================\u001b[1m Human Message \u001b[0m=================================\n", + "\n", + "Generate two variables, asigning them one number to each, do it in AVAP language.\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "\n", + "user: generate two variables, assigning them one number to each, you assign themize in, avap language.\n" + ] + } + ], + "source": [ + "a = stream_graph_updates(user_input)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "136f420c", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "assistance-engine", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/scratches/pseco/agent/n00 langgraph_agent_simple.ipynb b/scratches/pseco/agent/n00 langgraph_agent_simple.ipynb index 7826a6e..b8fc476 100644 --- a/scratches/pseco/agent/n00 langgraph_agent_simple.ipynb +++ b/scratches/pseco/agent/n00 langgraph_agent_simple.ipynb @@ -123,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "id": "5f8c88cf", "metadata": {}, "outputs": [], @@ -142,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "id": "f9359747", "metadata": {}, "outputs": [], @@ -174,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "id": "e5247ab9", "metadata": {}, "outputs": [], @@ -189,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "id": "a644f6fa", "metadata": {}, "outputs": [], @@ -209,7 +209,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "id": "36d0f54e", "metadata": {}, "outputs": [], @@ -242,7 +242,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "id": "fae46a58", "metadata": {}, "outputs": [], @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "id": "2fec3fdb", "metadata": {}, "outputs": [ @@ -292,7 +292,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "id": "a7f4fbf6", "metadata": {}, "outputs": [], @@ -302,7 +302,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "id": "8569cf39", "metadata": {}, "outputs": [], @@ -324,7 +324,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "53b89690", "metadata": {}, "outputs": [ @@ -342,6 +342,7 @@ "name": "stderr", "output_type": "stream", "text": [ + "Failed to export span batch code: 404, reason:
\"Langfuse

Loading ...

\n", "Failed to export span batch code: 404, reason:
\"Langfuse

Loading ...

\n" ] }, @@ -351,11 +352,15 @@ "text": [ "==================================\u001b[1m Ai Message \u001b[0m==================================\n", "\n", - "To provide you with an accurate answer about what vertical farming proposes, I would need to call a specific function that retrieves context from Elasticsearch. However, without access to actual data points or recent developments in the field of hydroponic agriculture, it's difficult to give an exhaustive and up-to-date response.\n", + "\n", + "Okay, the user is asking what vertical farming proposes. First, I need to recall what vertical farming is. From what I remember, vertical farming is a method of growing crops in stacked layers, often in controlled environments. It's a form of hydroponics or aquaponics. The idea is to maximize space efficiency by using vertical structures. \n", "\n", - "For precise information on current practices and innovations within vertical farming, you might want to refer to specialized agricultural news outlets, industry reports, or directly contact experts in this area. This could include websites focusing on indoor agriculture, research institutions working with hydroponics, or the latest publications from agritech companies that specialize in vertical farming technology.\n", + "But wait, maybe I should check if there's any specific information I'm missing. The user might be looking for details about the technology involved, like using LED lights, hydroponics, or aquaponics. Also, vertical farms can reduce the need for land, water, and pesticides. \n", "\n", - "If you're interested in learning about current trends and advancements in vertical farming, I can try to provide a more comprehensive answer when I do have access to relevant data.\n", + "I should present this information clearly. Let me make sure to mention the key aspects: stacked layers, controlled environment, space efficiency, and sustainability. That should answer the question comprehensively.\n", + "\n", + "\n", + "Vertical farming is a method of growing crops in stacked layers (like vertical gardens) in controlled environments, often using hydroponics or aquaponics. It maximizes space efficiency, reduces water and land use, and promotes sustainability by minimizing resource consumption.\n", "\n", "Flushing traces to Langfuse...\n", "✓ Traces flushed (check your Langfuse dashboard at http://45.77.119.180)\n" @@ -364,12 +369,7 @@ ], "source": [ "print(\"Starting agent...\")\n", - "stream_graph_updates(user_input)\n", - "\n", - "# Ensure all spans are flushed to Langfuse\n", - "print(\"\\nFlushing traces to Langfuse...\")\n", - "langfuse.flush()\n", - "print(\"✓ Traces flushed (check your Langfuse dashboard at \" + LANGFUSE_HOST + \")\")" + "stream_graph_updates(user_input)" ] }, { diff --git a/scratches/pseco/evaluation/embeddings/n00 Beir Analysis CodeXGlue.ipynb b/scratches/pseco/evaluation/embeddings/n00 Beir Analysis CodeXGlue.ipynb index 0ba4395..a4bc78f 100644 --- a/scratches/pseco/evaluation/embeddings/n00 Beir Analysis CodeXGlue.ipynb +++ b/scratches/pseco/evaluation/embeddings/n00 Beir Analysis CodeXGlue.ipynb @@ -174,11 +174,33 @@ "# Evaluar métricas (NDCG, MAP, Recall, Precision)\n", "ndcg, _map, recall, precision = evaluator.evaluate(\n", " qrels, results, [1, 3, 5, 10]\n", - ")\n", - "\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5c0f9845", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Resultados para CodeXGLUE:\n", + "NDCG: {'NDCG@1': 0.94971, 'NDCG@3': 0.96956, 'NDCG@5': 0.97166, 'NDCG@10': 0.97342}\n", + "MAP: {'MAP@1': 0.94971, 'MAP@3': 0.96504, 'MAP@5': 0.9662, 'MAP@10': 0.96694}\n", + "Recall: {'Recall@1': 0.94971, 'Recall@3': 0.98251, 'Recall@5': 0.98761, 'Recall@10': 0.99297}\n", + "Precision: {'P@1': 0.94971, 'P@3': 0.3275, 'P@5': 0.19752, 'P@10': 0.0993}\n" + ] + } + ], + "source": [ "print(f\"Resultados para CodeXGLUE:\")\n", - "print(\"NDCG@10:\", ndcg[\"NDCG@10\"])\n", - "print(\"Recall@10:\", recall[\"Recall@10\"])" + "print(\"NDCG:\", ndcg)\n", + "print(\"MAP:\", _map)\n", + "print(\"Recall:\", recall)\n", + "print(\"Precision:\", precision)" ] }, { @@ -191,43 +213,99 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "5ced1c25", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NDCG: {'NDCG@1': 0.02333, 'NDCG@3': 0.03498, 'NDCG@5': 0.0404, 'NDCG@10': 0.04619, 'NDCG@100': 0.07768}\n", - "MAP: {'MAP@1': 0.02083, 'MAP@3': 0.03083, 'MAP@5': 0.03375, 'MAP@10': 0.03632, 'MAP@100': 0.04123}\n", - "Recall: {'Recall@1': 0.02083, 'Recall@3': 0.04417, 'Recall@5': 0.0575, 'Recall@10': 0.07417, 'Recall@100': 0.23144}\n", - "Precision: {'P@1': 0.02333, 'P@3': 0.01556, 'P@5': 0.01267, 'P@10': 0.00833, 'P@100': 0.00277}\n" - ] - } - ], + "outputs": [], "source": [ - "model = BEIROllamaEmbeddings(\n", + "model_q2 = BEIROllamaEmbeddings(\n", " base_url=\"http://localhost:11434\",\n", " model=\"qwen2.5:1.5b\",\n", " batch_size=64,\n", ")\n", "\n", "# Inicializar buscador y evaluador\n", - "retriever = DenseRetrievalExactSearch(model, batch_size=64)\n", - "evaluator = EvaluateRetrieval(retriever, score_function=\"cos_sim\")\n", + "retriever_q2 = DenseRetrievalExactSearch(model_q2, batch_size=64)\n", + "evaluator_q2 = EvaluateRetrieval(retriever_q2, score_function=\"cos_sim\")\n", "\n", "# Ejecutar recuperación\n", - "results = evaluator.retrieve(corpus, queries)\n", + "results_q2 = evaluator_q2.retrieve(corpus, queries)\n", "\n", "# Evaluar métricas (NDCG, MAP, Recall, Precision)\n", - "ndcg, _map, recall, precision = evaluator.evaluate(\n", - " qrels, results, [1, 3, 5, 10]\n", - ")\n", - "\n", + "ndcg_qwen_2, _map_qwen_2, recall_qwen_2, precision_qwen_2 = evaluator_q2.evaluate(\n", + " qrels, results_q2, [1, 3, 5, 10]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "6a95189e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Resultados para CodeXGLUE:\n", + "NDCG: {'NDCG@1': 0.00031, 'NDCG@3': 0.00061, 'NDCG@5': 0.00086, 'NDCG@10': 0.00118}\n", + "MAP: {'MAP@1': 0.00031, 'MAP@3': 0.00051, 'MAP@5': 0.00065, 'MAP@10': 0.00078}\n", + "Recall: {'Recall@1': 0.00031, 'Recall@3': 0.00088, 'Recall@5': 0.00151, 'Recall@10': 0.0025}\n", + "Precision: {'P@1': 0.00031, 'P@3': 0.00029, 'P@5': 0.0003, 'P@10': 0.00025}\n" + ] + } + ], + "source": [ "print(f\"Resultados para CodeXGLUE:\")\n", - "print(\"NDCG@10:\", ndcg[\"NDCG@10\"])\n", - "print(\"Recall@10:\", recall[\"Recall@10\"])" + "print(\"NDCG:\", ndcg_qwen_2)\n", + "print(\"MAP:\", _map_qwen_2)\n", + "print(\"Recall:\", recall_qwen_2)\n", + "print(\"Precision:\", precision_qwen_2)" + ] + }, + { + "cell_type": "markdown", + "id": "3dad9811", + "metadata": {}, + "source": [ + "# Save data" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "f875dd8d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Resultados guardados en /home/pseco/VsCodeProjects/assistance-engine/data/interim/beir_CodeXGlue_results.json\n" + ] + } + ], + "source": [ + "results_data = {\n", + " \"qwen3-0.6B-emb:latest\": {\n", + " \"NDCG\": ndcg,\n", + " \"MAP\": _map,\n", + " \"Recall\": recall,\n", + " \"Precision\": precision,\n", + " },\n", + " \"qwen2.5:1.5b\": {\n", + " \"NDCG\": ndcg_qwen_2,\n", + " \"MAP\": _map_qwen_2,\n", + " \"Recall\": recall_qwen_2,\n", + " \"Precision\": precision_qwen_2,\n", + " }\n", + "}\n", + "\n", + "output_file = \"/home/pseco/VsCodeProjects/assistance-engine/data/interim/beir_CodeXGlue_results.json\"\n", + "with open(output_file, \"w\") as f:\n", + " json.dump(results_data, f, indent=2)\n", + "\n", + "print(f\"Resultados guardados en {output_file}\")" ] } ], diff --git a/scratches/pseco/evaluation/embeddings/n00 Beir Analysis.ipynb b/scratches/pseco/evaluation/embeddings/n00 Beir Analysis.ipynb index b7c1ae2..fcd0587 100644 --- a/scratches/pseco/evaluation/embeddings/n00 Beir Analysis.ipynb +++ b/scratches/pseco/evaluation/embeddings/n00 Beir Analysis.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "c01c19dc", "metadata": {}, "outputs": [], @@ -252,6 +252,51 @@ "print(\"Recall:\", recall_qwen_2)\n", "print(\"Precision:\", precision_qwen_2)" ] + }, + { + "cell_type": "markdown", + "id": "b9402837", + "metadata": {}, + "source": [ + "# Save Data" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "c281d5e1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Resultados guardados en /home/pseco/VsCodeProjects/assistance-engine/data/interim/beir_Scifact_results.json\n" + ] + } + ], + "source": [ + "results_data = {\n", + " \"qwen3-0.6B-emb:latest\": {\n", + " \"NDCG\": ndcg,\n", + " \"MAP\": _map,\n", + " \"Recall\": recall,\n", + " \"Precision\": precision,\n", + " },\n", + " \"qwen2.5:1.5b\": {\n", + " \"NDCG\": ndcg_qwen_2,\n", + " \"MAP\": _map_qwen_2,\n", + " \"Recall\": recall_qwen_2,\n", + " \"Precision\": precision_qwen_2,\n", + " }\n", + "}\n", + "\n", + "output_file = \"/home/pseco/VsCodeProjects/assistance-engine/data/interim/beir_Scifact_results.json\"\n", + "with open(output_file, \"w\") as f:\n", + " json.dump(results_data, f, indent=2)\n", + "\n", + "print(f\"Resultados guardados en {output_file}\")" + ] } ], "metadata": { diff --git a/scratches/pseco/evaluation/embeddings/n00 Beir Analysis_cosqa.ipynb b/scratches/pseco/evaluation/embeddings/n00 Beir Analysis_cosqa.ipynb index 1e3f10d..da51de3 100644 --- a/scratches/pseco/evaluation/embeddings/n00 Beir Analysis_cosqa.ipynb +++ b/scratches/pseco/evaluation/embeddings/n00 Beir Analysis_cosqa.ipynb @@ -261,6 +261,8 @@ "print(\"Recall:\", recall_qwen_2)\n", "print(\"Precision:\", precision_qwen_2)" ] +<<<<<<< HEAD +======= }, { "cell_type": "code", @@ -306,6 +308,7 @@ "metadata": {}, "outputs": [], "source": [] +>>>>>>> 4b5352d93cf89b7562895b550fb5bd62160586c5 } ], "metadata": { diff --git a/scratches/pseco/ingestion/n00 Count tokens.ipynb b/scratches/pseco/ingestion/n00 Count tokens.ipynb new file mode 100644 index 0000000..d5aa12f --- /dev/null +++ b/scratches/pseco/ingestion/n00 Count tokens.ipynb @@ -0,0 +1,297 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ed60d28c", + "metadata": {}, + "source": [ + "# Libreries" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "95cf533e", + "metadata": {}, + "outputs": [], + "source": [ + "from transformers import AutoTokenizer\n", + "from Docker.config import settings\n", + "from pathlib import Path\n", + "from transformers import AutoConfig\n", + "import os" + ] + }, + { + "cell_type": "markdown", + "id": "c9b7265a", + "metadata": {}, + "source": [ + "# Functions" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6fd7de78", + "metadata": {}, + "outputs": [], + "source": [ + "def load_text_from_file(file_path: str) -> str:\n", + " \"\"\"\n", + " Load text content from a specified file.\n", + "\n", + " Args:\n", + " file_path: Path to the .txt file to load.\n", + "\n", + " Returns:\n", + " The text content of the file.\n", + "\n", + " Raises:\n", + " FileNotFoundError: If the file does not exist.\n", + " IOError: If the file cannot be read.\n", + " \"\"\"\n", + " try:\n", + " with open(file_path, \"r\", encoding=\"utf-8\") as file:\n", + " return file.read()\n", + " except FileNotFoundError:\n", + " raise FileNotFoundError(f\"El archivo '{file_path}' no existe.\")\n", + " except IOError as error:\n", + " raise IOError(f\"Error al leer '{file_path}': {error}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "6389092e", + "metadata": {}, + "outputs": [], + "source": [ + "def infer_context_window(model_id: str, tokenizer_obj) -> int:\n", + " \"\"\"Infer context window from tokenizer/model config.\"\"\"\n", + " large_sentinel = int(1e9)\n", + "\n", + " tokenizer_limit = getattr(tokenizer_obj, \"model_max_length\", None)\n", + " if isinstance(tokenizer_limit, int) and 0 < tokenizer_limit < large_sentinel:\n", + " return tokenizer_limit\n", + "\n", + " config = AutoConfig.from_pretrained(model_id)\n", + "\n", + " for field_name in (\n", + " \"max_position_embeddings\",\n", + " \"n_positions\",\n", + " \"seq_length\",\n", + " \"model_max_length\",\n", + " ):\n", + " value = getattr(config, field_name, None)\n", + " if isinstance(value, int) and value > 0:\n", + " return value\n", + "\n", + " raise ValueError(\n", + " \"No se pudo inferir la ventana de contexto del modelo. \"\n", + " \"Define context_window manualmente.\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7190080b", + "metadata": {}, + "outputs": [], + "source": [ + "def run_token_count_test() -> dict[str, int | bool]:\n", + " \"\"\"Run token count test across all raw .txt files.\"\"\"\n", + " raw_dir = Path(settings.raw_path)\n", + " txt_files = sorted(raw_dir.glob(\"*.txt\"))\n", + "\n", + " if not txt_files:\n", + " print(f\"No se encontraron .txt en: {raw_dir}\")\n", + " return {\n", + " \"total_tokens_without_special\": 0,\n", + " \"total_tokens_with_special\": 0,\n", + " \"fits_without\": True,\n", + " \"fits_with\": True,\n", + " }\n", + "\n", + " total_tokens_without_special = 0\n", + " total_tokens_with_special = 0\n", + "\n", + " print(f\"Modelo: {model_name}\")\n", + " print(f\"Ventana de contexto detectada: {context_window}\")\n", + " print(f\"Archivos analizados: {len(txt_files)}\")\n", + " print(\"-\" * 80)\n", + "\n", + " for file_path in txt_files:\n", + " content = load_text_from_file(str(file_path))\n", + " token_ids_without_special = tokenizer.encode(\n", + " content, add_special_tokens=False\n", + " )\n", + " token_ids_with_special = tokenizer.encode(content)\n", + "\n", + " count_without_special = len(token_ids_without_special)\n", + " count_with_special = len(token_ids_with_special)\n", + "\n", + " total_tokens_without_special += count_without_special\n", + " total_tokens_with_special += count_with_special\n", + "\n", + " print(\n", + " f\"{file_path.name:<35} \"\n", + " f\"sin especiales: {count_without_special:>8} | \"\n", + " f\"con especiales: {count_with_special:>8}\"\n", + " )\n", + "\n", + " print(\"-\" * 80)\n", + " print(\n", + " f\"TOTAL sin especiales: {total_tokens_without_special} tokens\"\n", + " )\n", + " print(\n", + " f\"TOTAL con especiales: {total_tokens_with_special} tokens\"\n", + " )\n", + "\n", + " fits_without = total_tokens_without_special <= context_window\n", + " fits_with = total_tokens_with_special <= context_window\n", + "\n", + " print(\n", + " f\"¿Cabe en ventana ({context_window}) sin especiales? \"\n", + " f\"{'Sí' if fits_without else 'No'}\"\n", + " )\n", + " print(\n", + " f\"¿Cabe en ventana ({context_window}) con especiales? \"\n", + " f\"{'Sí' if fits_with else 'No'}\"\n", + " )\n", + "\n", + " if not fits_with:\n", + " overflow = total_tokens_with_special - context_window\n", + " print(\n", + " f\"Exceso aproximado: {overflow} tokens\"\n", + " )\n", + "\n", + " return {\n", + " \"total_tokens_without_special\": total_tokens_without_special,\n", + " \"total_tokens_with_special\": total_tokens_with_special,\n", + " \"fits_without\": fits_without,\n", + " \"fits_with\": fits_with,\n", + " }" + ] + }, + { + "cell_type": "markdown", + "id": "04e0f72f", + "metadata": {}, + "source": [ + "# Model Data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "19c815e4", + "metadata": {}, + "outputs": [], + "source": [ + "model_name = os.getenv(\"HF_EMB_MODEL_NAME\")\n", + "if not model_name:\n", + " raise ValueError(\n", + " \"No se encontró HF_EMB_MODEL_NAME en variables de entorno.\"\n", + " )\n", + "\n", + "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", + "context_window = infer_context_window(model_name, tokenizer)" + ] + }, + { + "cell_type": "markdown", + "id": "22bcc0fe", + "metadata": {}, + "source": [ + "# Test" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f6517705", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Modelo: Qwen/Qwen3-Embedding-0.6B\n", + "Ventana de contexto detectada: 131072\n", + "Archivos analizados: 24\n", + "--------------------------------------------------------------------------------\n", + "10_Execution_model_in_avap.txt sin especiales: 10349 | con especiales: 10350\n", + "11_Conditional_statements.txt sin especiales: 524 | con especiales: 525\n", + "12_Loop_statement.txt sin especiales: 594 | con especiales: 595\n", + "13_Api_inbound_interface.txt sin especiales: 415 | con especiales: 416\n", + "14_Working_with_libraries.txt sin especiales: 873 | con especiales: 874\n", + "15_Function_declaration.txt sin especiales: 394 | con especiales: 395\n", + "16_Appendix.txt sin especiales: 9209 | con especiales: 9210\n", + "17_Architecture_memory_foundations.txt sin especiales: 1086 | con especiales: 1087\n", + "18_Input_output_management.txt sin especiales: 1104 | con especiales: 1105\n", + "19_Control_logic_decision_structures.txt sin especiales: 1166 | con especiales: 1167\n", + "1_Introduction.txt sin especiales: 1072 | con especiales: 1073\n", + "20_Concurrency_asynchrony.txt sin especiales: 1049 | con especiales: 1050\n", + "21_Persistance_connectors_orm.txt sin especiales: 1135 | con especiales: 1136\n", + "22_System_utilities_transformation.txt sin especiales: 882 | con especiales: 883\n", + "23_Function_architecture_scopes.txt sin especiales: 604 | con especiales: 605\n", + "24_Master_example.txt sin especiales: 241 | con especiales: 242\n", + "2_Dynamic_Programming_Language.txt sin especiales: 707 | con especiales: 708\n", + "3_Notation.txt sin especiales: 1368 | con especiales: 1369\n", + "4_Lexics.txt sin especiales: 750 | con especiales: 751\n", + "5_Data_Model.txt sin especiales: 605 | con especiales: 606\n", + "6_Data_Types.txt sin especiales: 611 | con especiales: 612\n", + "7_Working_With_Variables.txt sin especiales: 601 | con especiales: 602\n", + "8_How_to_work_with_comments.txt sin especiales: 726 | con especiales: 727\n", + "9_Expressions_in_avap.txt sin especiales: 646 | con especiales: 647\n", + "--------------------------------------------------------------------------------\n", + "TOTAL sin especiales: 36711 tokens\n", + "TOTAL con especiales: 36735 tokens\n", + "¿Cabe en ventana (131072) sin especiales? Sí\n", + "¿Cabe en ventana (131072) con especiales? Sí\n" + ] + }, + { + "data": { + "text/plain": [ + "{'total_tokens_without_special': 36711,\n", + " 'total_tokens_with_special': 36735,\n", + " 'fits_without': True,\n", + " 'fits_with': True}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_result = run_token_count_test()\n", + "test_result" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "assistance-engine", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/scratches/pseco/synthetic_dataset/n00 Ragas TestSet Generation.ipynb b/scratches/pseco/synthetic_dataset/n00 Ragas TestSet Generation.ipynb new file mode 100644 index 0000000..d2a539d --- /dev/null +++ b/scratches/pseco/synthetic_dataset/n00 Ragas TestSet Generation.ipynb @@ -0,0 +1,302 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "efbabfec", + "metadata": {}, + "source": [ + "# Libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e06aaf8c", + "metadata": {}, + "outputs": [], + "source": [ + "from src.config import ELASTICSEARCH_INDEX, OPENAI_API_KEY, OPENAI_MODEL, BASE_URL, MODEL_NAME" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8488db9f", + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'ragas.testset.generator'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 6\u001b[39m\n\u001b[32m 4\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mlangchain_core\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mdocuments\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Document\n\u001b[32m 5\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mlangchain_ollama\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m ChatOllama, OllamaEmbeddings\n\u001b[32m----> \u001b[39m\u001b[32m6\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mragas\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mtestset\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mgenerator\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m TestsetGenerator\n\u001b[32m 7\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mragas\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mllms\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m LangchainLLMWrapper\n", + "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'ragas.testset.generator'" + ] + } + ], + "source": [ + "from langchain_core.embeddings import Embeddings \n", + "from ragas.testset import TestsetGenerator \n", + "from langchain_community.document_loaders import DirectoryLoader \n", + "from openai import OpenAI \n", + "from ragas.llms import llm_factory \n", + "from langchain_core.documents import Document" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "816afb58", + "metadata": {}, + "outputs": [], + "source": [ + "class ElasticsearchEmbeddings(Embeddings): \n", + " \"\"\"Fetch precomputed embeddings from Elasticsearch.\"\"\" \n", + " def __init__(self, es_client, index_name, id_field=\"_id\", embedding_field=\"embedding_vector\"): \n", + " self.es = es_client \n", + " self.index = index_name \n", + " self.id_field = id_field \n", + " self.embedding_field = embedding_field \n", + " \n", + " def embed_query(self, text: str): \n", + " # Example: hash text to a doc ID or perform a text lookup in ES \n", + " doc_id = self._text_to_doc_id(text) # implement your mapping \n", + " resp = self.es.get(index=self.index, id=doc_id) \n", + " return resp[\"_source\"][self.embedding_field] \n", + " \n", + " def embed_documents(self, texts): \n", + " return [self.embed_query(t) for t in texts] \n", + " \n", + " # Optional: implement async variants if Ragas calls them" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "65a7c504", + "metadata": {}, + "outputs": [], + "source": [ + "loader = DirectoryLoader(\"./my_code_repo\", glob=\"**/*.py\", recursive=True) \n", + "docs = loader.load() \n", + " \n", + "# 2) Ollama LLM via OpenAI-compatible client \n", + "ollama_client = OpenAI(base_url=\"http://localhost:11434/v1\", api_key=\"ollama\") \n", + "generator_llm = llm_factory(\"codellama\", provider=\"openai\", client=ollama_client) \n", + " \n", + "# 3) Custom ES embeddings wrapper \n", + "from elasticsearch import Elasticsearch \n", + "es_client = Elasticsearch(\"http://localhost:9200\") \n", + "es_embeddings = ElasticsearchEmbeddings(es_client, index_name=\"my_docs_embeddings\") \n", + " \n", + "# 4) Ragas TestsetGenerator using the ES embeddings \n", + "generator = TestsetGenerator.from_langchain(generator_llm, es_embeddings) \n", + " \n", + "# 5) Generate testset \n", + "dataset = generator.generate_with_langchain_docs(docs, testset_size=20) \n", + " \n", + "# 6) Export \n", + "df = dataset.to_pandas() \n", + "print(df[[\"user_input\", \"reference\"]].head())" + ] + }, + { + "cell_type": "markdown", + "id": "06f41852", + "metadata": {}, + "source": [ + "# Functions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d24262b0", + "metadata": {}, + "outputs": [], + "source": [ + "def fetch_documents_from_elasticsearch(\n", + " es_url: str, \n", + " index_name: str, \n", + " size: int = 100\n", + ") -> List[Document]:\n", + " \"\"\"\n", + " Retrieve documents from Elasticsearch and convert to LangChain Document objects.\n", + " \n", + " Args:\n", + " es_url: Elasticsearch URL\n", + " index_name: Index name to query\n", + " size: Number of documents to retrieve\n", + " \n", + " Returns:\n", + " List of LangChain Document objects with metadata\n", + " \"\"\"\n", + " es = Elasticsearch(es_url)\n", + " \n", + " # Query all documents from the index\n", + " response = es.search(\n", + " index=index_name,\n", + " body={\"query\": {\"match_all\": {}}, \"size\": size}\n", + " )\n", + " \n", + " documents = []\n", + " for hit in response[\"hits\"][\"hits\"]:\n", + " source = hit.get(\"_source\", {})\n", + " \n", + " # Extract text content (field name is 'text' based on your ES setup)\n", + " page_content = source.get(\"text\", \"\")\n", + " \n", + " if not page_content:\n", + " continue\n", + " \n", + " # Extract metadata from the document\n", + " metadata = {\n", + " \"source\": source.get(\"source\", \"unknown\"),\n", + " \"doc_id\": source.get(\"doc_id\", hit.get(\"_id\", \"\")),\n", + " \"chunk_id\": source.get(\"chunk_id\", \"\"),\n", + " \"title\": source.get(\"title\", \"Untitled\"),\n", + " \"es_id\": hit.get(\"_id\") # Store the ES document ID for reference\n", + " }\n", + " \n", + " # Create LangChain Document object\n", + " doc = Document(page_content=page_content, metadata=metadata)\n", + " documents.append(doc)\n", + " \n", + " print(f\"✓ Retrieved {len(documents)} documents from Elasticsearch\")\n", + " return documents\n", + "\n", + "\n", + "# Fetch documents from Elasticsearch\n", + "documents = fetch_documents_from_elasticsearch(ELASTICSEARCH_URL, ELASTICSEARCH_INDEX, size=100)\n", + "\n", + "if documents:\n", + " print(f\"\\nFirst document sample:\")\n", + " print(f\" Content length: {len(documents[0].page_content)} chars\")\n", + " print(f\" Metadata: {documents[0].metadata}\")\n", + "else:\n", + " print(\"⚠️ No documents found in Elasticsearch. Check index name and ES connection.\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bf8797ac", + "metadata": {}, + "outputs": [], + "source": [ + "if not documents:\n", + " print(\"❌ Cannot proceed: No documents to generate testset from.\")\n", + " print(\"Ensure Elasticsearch is running and the index contains documents.\")\n", + "else:\n", + " print(\"\\n\" + \"=\" * 60)\n", + " print(\"Initializing Ragas TestSetGenerator\")\n", + " print(\"=\" * 60)\n", + " \n", + " # Initialize LLMs for test generation\n", + " generator_llm = LangchainLLMWrapper(\n", + " ChatOllama(base_url=BASE_URL, model=MODEL_NAME)\n", + " )\n", + " \n", + " # Initialize embeddings for semantic similarity evaluation\n", + " embeddings = OllamaEmbeddings(base_url=BASE_URL, model=MODEL_NAME)\n", + " \n", + " # Create the TestsetGenerator\n", + " generator = TestsetGenerator.from_langchain(\n", + " llm=generator_llm,\n", + " embedding_model=embeddings\n", + " )\n", + " \n", + " print(\"✓ TestsetGenerator initialized successfully\")\n", + " print(f\" - LLM Model: {MODEL_NAME}\")\n", + " print(f\" - Using {len(documents)} documents for generation\")\n", + " print(\"\\n⏳ Generating synthetic test set (this may take a few minutes)...\")\n", + " \n", + " # Generate synthetic test set\n", + " # Adjust testset_size based on your needs and token budget\n", + " testset_size = min(50, len(documents) * 2) # Generate up to 50 test cases or 2x the docs\n", + " \n", + " testset = generator.generate_with_langchain_docs(\n", + " documents=documents,\n", + " testset_size=testset_size,\n", + " raise_exceptions=False\n", + " )\n", + " \n", + " print(f\"✓ Test set generated with {len(testset)} examples\")\n", + " \n", + " # Convert to DataFrame for easy viewing and exporting\n", + " df = testset.to_pandas()\n", + " \n", + " print(\"\\n\" + \"=\" * 60)\n", + " print(\"Test Set Summary\")\n", + " print(\"=\" * 60)\n", + " print(f\"Total test cases: {len(df)}\")\n", + " print(f\"\\nColumns: {list(df.columns)}\")\n", + " print(f\"\\nFirst few rows:\")\n", + " print(df.head())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8dfd3472", + "metadata": {}, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "from pathlib import Path\n", + "\n", + "# Define output directory\n", + "output_dir = Path(\"data/interim/synthetic_testsets\")\n", + "output_dir.mkdir(parents=True, exist_ok=True)\n", + "\n", + "# Generate filename with timestamp\n", + "timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n", + "output_file = output_dir / f\"testset_{timestamp}.csv\"\n", + "\n", + "# Save to CSV\n", + "df.to_csv(output_file, index=False)\n", + "print(f\"✓ Test set saved to: {output_file}\")\n", + "\n", + "# Optional: Save as JSON for better structure preservation\n", + "json_file = output_dir / f\"testset_{timestamp}.json\"\n", + "testset.save_as_json(str(json_file))\n", + "print(f\"✓ Test set saved (JSON) to: {json_file}\")\n", + "\n", + "# Display statistics\n", + "print(\"\\n\" + \"=\" * 60)\n", + "print(\"Test Set Distribution\")\n", + "print(\"=\" * 60)\n", + "if \"question_type\" in df.columns:\n", + " print(\"\\nQuestion types:\")\n", + " print(df[\"question_type\"].value_counts())\n", + "\n", + "if \"retrieval_context\" in df.columns:\n", + " avg_context_len = df[\"retrieval_context\"].apply(lambda x: len(x) if x else 0).mean()\n", + " print(f\"\\nAverage context length: {avg_context_len:.0f} characters\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "assistance-engine", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/config.py b/src/config.py new file mode 100644 index 0000000..952b935 --- /dev/null +++ b/src/config.py @@ -0,0 +1,36 @@ +from pathlib import Path +from dotenv import load_dotenv +import os + +load_dotenv() + +OPENAI_API_KEY=os.getenv("OPENAI_API_KEY", "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") + +OLLAMA_URL=os.getenv("OLLAMA_URL", "http://host.docker.internal:11434") +OLLAMA_LOCAL_URL=os.getenv("OLLAMA_LOCAL_URL", "http://localhost:11434") +OLLAMA_MODEL_NAME=os.getenv("OLLAMA_MODEL_NAME", "qwen3-0.6B:latest") +OLLAMA_EMB_MODEL_NAME=os.getenv("OLLAMA_EMB_MODEL_NAME", "qwen3-0.6B-emb:latest") + +LANGFUSE_HOST=os.getenv("LANGFUSE_HOST", "http://45.77.119.180") +LANGFUSE_PUBLIC_KEY=os.getenv("LANGFUSE_PUBLIC_KEY", "pk-lf-0e6db694-3e95-4dd4-aedf-5a2694267058") +LANGFUSE_SECRET_KEY=os.getenv("LANGFUSE_SECRET_KEY", "sk-lf-dbf28bb9-15bb-4d03-a8c3-05caa3e3905f") + +ELASTICSEARCH_URL=os.getenv("ELASTICSEARCH_URL", "http://host.docker.internal:9200") +ELASTICSEARCH_LOCAL_URL=os.getenv("ELASTICSEARCH_LOCAL_URL", "http://localhost:9200") +ELASTICSEARCH_INDEX=os.getenv("ELASTICSEARCH_INDEX", "avap-docs-test") + +DATABASE_URL=os.getenv("DATABASE_URL", "postgresql://postgres:brunix_pass@host.docker.internal:5432/postgres") + +KUBECONFIG_PATH=os.getenv("KUBECONFIG_PATH", "kubernetes/kubeconfig.yaml") + +HF_TOKEN=os.getenv("HF_TOKEN", "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") +HF_EMB_MODEL_NAME=os.getenv("HF_EMB_MODEL_NAME", "Qwen/Qwen3-Embedding-0.6B") + +PROJ_ROOT = Path(__file__).resolve().parents[1] + +DATA_DIR=PROJ_ROOT / "data" +MODELS_DIR=DATA_DIR / "models" +RAW_DIR=DATA_DIR / "raw" +PROCESSED_DIR=DATA_DIR / "processed" +INTERIM_DIR=DATA_DIR / "interim" +EXTERNAL_DIR=DATA_DIR / "external" \ No newline at end of file diff --git a/src/llm_factory v1.py b/src/llm_factory v1.py new file mode 100644 index 0000000..0a3b1a9 --- /dev/null +++ b/src/llm_factory v1.py @@ -0,0 +1,152 @@ +from __future__ import annotations + +from dataclasses import dataclass +from enum import StrEnum +from typing import Optional + +from langchain_ollama import ChatOllama, OllamaEmbeddings + + +class Provider(StrEnum): + OLLAMA = "ollama" + OPENAI = "openai" + ANTHROPIC = "anthropic" + AWS_BEDROCK = "aws_bedrock" + HUGGINGFACE = "huggingface" + + +@dataclass(frozen=True) +class ChatModelConfig: + provider: Provider + model: str + temperature: float = 0.0 + + # Ollama + ollama_base_url: Optional[str] = None + validate_model_on_init: bool = True + + # OpenAI / Anthropic / Azure + api_key: Optional[str] = None + azure_endpoint: Optional[str] = None + azure_deployment: Optional[str] = None + api_version: Optional[str] = None + + +@dataclass(frozen=True) +class EmbeddingsConfig: + provider: Provider + model: str + + # Ollama + ollama_base_url: Optional[str] = None + + # OpenAI / Azure + api_key: Optional[str] = None + azure_endpoint: Optional[str] = None + azure_deployment: Optional[str] = None + api_version: Optional[str] = None + + +def build_chat_model(cfg: ChatModelConfig): + match cfg.provider: + case Provider.OLLAMA: + return ChatOllama( + model=cfg.model, + temperature=cfg.temperature, + validate_model_on_init=cfg.validate_model_on_init, + base_url=cfg.ollama_base_url, + ) + + case Provider.OPENAI: + from langchain_openai import ChatOpenAI # pip install langchain-openai + + if not cfg.api_key: + raise ValueError("Missing api_key for OpenAI provider.") + return ChatOpenAI( + model=cfg.model, + temperature=cfg.temperature, + api_key=cfg.api_key, + ) + + case Provider.ANTHROPIC: + from langchain_anthropic import ChatAnthropic # pip install langchain-anthropic + + if not cfg.api_key: + raise ValueError("Missing api_key for Anthropic provider.") + return ChatAnthropic( + model=cfg.model, + temperature=cfg.temperature, + api_key=cfg.api_key, + ) + + case Provider.AZURE_OPENAI: + from langchain_openai import AzureChatOpenAI # pip install langchain-openai + + missing = [ + name + for name, value in { + "api_key": cfg.api_key, + "azure_endpoint": cfg.azure_endpoint, + "azure_deployment": cfg.azure_deployment, + "api_version": cfg.api_version, + }.items() + if not value + ] + if missing: + raise ValueError(f"Missing Azure settings: {', '.join(missing)}") + + return AzureChatOpenAI( + api_key=cfg.api_key, + azure_endpoint=cfg.azure_endpoint, + azure_deployment=cfg.azure_deployment, + api_version=cfg.api_version, + temperature=cfg.temperature, + ) + + case _: + raise ValueError(f"Unsupported provider: {cfg.provider}") + + +def build_embeddings(cfg: EmbeddingsConfig): + match cfg.provider: + case Provider.OLLAMA: + return OllamaEmbeddings( + model=cfg.model, + base_url=cfg.ollama_base_url, + ) + + case Provider.OPENAI: + from langchain_openai import OpenAIEmbeddings # pip install langchain-openai + + if not cfg.api_key: + raise ValueError("Missing api_key for OpenAI embeddings provider.") + return OpenAIEmbeddings( + model=cfg.model, + api_key=cfg.api_key, + ) + + case Provider.AZURE_OPENAI: + from langchain_openai import AzureOpenAIEmbeddings # pip install langchain-openai + + missing = [ + name + for name, value in { + "api_key": cfg.api_key, + "azure_endpoint": cfg.azure_endpoint, + "azure_deployment": cfg.azure_deployment, + "api_version": cfg.api_version, + }.items() + if not value + ] + if missing: + raise ValueError(f"Missing Azure settings: {', '.join(missing)}") + + return AzureOpenAIEmbeddings( + api_key=cfg.api_key, + azure_endpoint=cfg.azure_endpoint, + azure_deployment=cfg.azure_deployment, + api_version=cfg.api_version, + ) + + case _: + raise ValueError(f"Unsupported embeddings provider: {cfg.provider}") \ No newline at end of file diff --git a/src/llm_factory v2.py b/src/llm_factory v2.py new file mode 100644 index 0000000..2c89d33 --- /dev/null +++ b/src/llm_factory v2.py @@ -0,0 +1,179 @@ +from __future__ import annotations + +from dataclasses import dataclass +from enum import StrEnum +from typing import Optional + + +# ---------- Providers ---------- +class Provider(StrEnum): + OLLAMA = "ollama" + OPENAI = "openai" + ANTHROPIC = "anthropic" + AWS_BEDROCK = "aws_bedrock" + HUGGINGFACE = "huggingface" + + +# ---------- Provider-specific configs ---------- +@dataclass(frozen=True) +class OllamaCfg: + base_url: Optional[str] = None + validate_model_on_init: bool = True + + +@dataclass(frozen=True) +class OpenAICfg: + api_key: str + + +@dataclass(frozen=True) +class AnthropicCfg: + api_key: str + + +@dataclass(frozen=True) +class BedrockCfg: + # depende de cómo autentiques: env vars, perfil AWS, role, etc. + region_name: Optional[str] = None + # model_kwargs típicos: temperature, max_tokens, etc. (según wrapper) + # lo dejamos mínimo para no acoplar + pass + + +@dataclass(frozen=True) +class HuggingFaceCfg: + # puede ser token HF o endpoint, según uses Inference API o local + api_key: Optional[str] = None + endpoint_url: Optional[str] = None + + +# ---------- Base configs ---------- +@dataclass(frozen=True) +class ChatModelConfig: + provider: Provider + model: str + temperature: float = 0.0 + + # EXACTAMENTE una de estas debería venir informada según provider: + ollama: Optional[OllamaCfg] = None + openai: Optional[OpenAICfg] = None + anthropic: Optional[AnthropicCfg] = None + bedrock: Optional[BedrockCfg] = None + huggingface: Optional[HuggingFaceCfg] = None + + +@dataclass(frozen=True) +class EmbeddingsConfig: + provider: Provider + model: str + + ollama: Optional[OllamaCfg] = None + openai: Optional[OpenAICfg] = None + bedrock: Optional[BedrockCfg] = None + huggingface: Optional[HuggingFaceCfg] = None + + +# ---------- Helpers ---------- +def _require(value, msg: str): + if value is None: + raise ValueError(msg) + return value + + +def _require_cfg(cfg_obj, msg: str): + if cfg_obj is None: + raise ValueError(msg) + return cfg_obj + + +# ---------- Builders ---------- +def build_chat_model(cfg: ChatModelConfig): + match cfg.provider: + case Provider.OLLAMA: + from langchain_ollama import ChatOllama + + ocfg = cfg.ollama or OllamaCfg() + return ChatOllama( + model=cfg.model, + temperature=cfg.temperature, + validate_model_on_init=ocfg.validate_model_on_init, + base_url=ocfg.base_url, + ) + + case Provider.OPENAI: + from langchain_openai import ChatOpenAI # pip install langchain-openai + + ocfg = _require_cfg(cfg.openai, "Missing cfg.openai for OpenAI provider.") + return ChatOpenAI( + model=cfg.model, + temperature=cfg.temperature, + api_key=ocfg.api_key, + ) + + case Provider.ANTHROPIC: + from langchain_anthropic import ChatAnthropic # pip install langchain-anthropic + + acfg = _require_cfg(cfg.anthropic, "Missing cfg.anthropic for Anthropic provider.") + return ChatAnthropic( + model=cfg.model, + temperature=cfg.temperature, + api_key=acfg.api_key, + ) + + case Provider.AWS_BEDROCK: + # wrapper típico: langchain-aws (según versión) o langchain-community en algunos setups + # aquí lo dejo como ejemplo con guardrail claro + try: + from langchain_aws import ChatBedrock # pip install langchain-aws + except Exception as e: + raise ImportError( + "To use AWS Bedrock, install `langchain-aws` and configure AWS credentials." + ) from e + + bcfg = cfg.bedrock or BedrockCfg() + # OJO: ChatBedrock suele usar model_id en vez de model, depende del wrapper/versión. + return ChatBedrock( + model_id=cfg.model, + region_name=bcfg.region_name, + model_kwargs={"temperature": cfg.temperature}, + ) + + case Provider.HUGGINGFACE: + # depende MUCHO: endpoint, local pipeline, inference API... + raise NotImplementedError( + "HUGGINGFACE provider not implemented here (depends on whether you use Inference API, TGI, or local pipeline)." + ) + + case _: + raise ValueError(f"Unsupported provider: {cfg.provider}") + + +def build_embeddings(cfg: EmbeddingsConfig): + match cfg.provider: + case Provider.OLLAMA: + from langchain_ollama import OllamaEmbeddings + + ocfg = cfg.ollama or OllamaCfg() + return OllamaEmbeddings( + model=cfg.model, + base_url=ocfg.base_url, + ) + + case Provider.OPENAI: + from langchain_openai import OpenAIEmbeddings # pip install langchain-openai + + ocfg = _require_cfg(cfg.openai, "Missing cfg.openai for OpenAI embeddings provider.") + return OpenAIEmbeddings( + model=cfg.model, + api_key=ocfg.api_key, + ) + + case Provider.AWS_BEDROCK: + # Igual: depende del wrapper + raise NotImplementedError("Bedrock embeddings: añade el wrapper que uses y mapea aquí.") + + case Provider.HUGGINGFACE: + raise NotImplementedError("HuggingFace embeddings: depende del wrapper (endpoint/local).") + + case _: + raise ValueError(f"Unsupported embeddings provider: {cfg.provider}") \ No newline at end of file diff --git a/uv.lock b/uv.lock index 6af74ae..1a8c53d 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 2 requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", @@ -16,6 +16,24 @@ resolution-markers = [ "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] +[[package]] +name = "accelerate" +version = "1.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyyaml" }, + { name = "safetensors" }, + { name = "torch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/8e/ac2a9566747a93f8be36ee08532eb0160558b07630a081a6056a9f89bf1d/accelerate-1.12.0.tar.gz", hash = "sha256:70988c352feb481887077d2ab845125024b2a137a5090d6d7a32b57d03a45df6", size = 398399, upload-time = "2025-11-21T11:27:46.973Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/d2/c581486aa6c4fbd7394c23c47b83fa1a919d34194e16944241daf9e762dd/accelerate-1.12.0-py3-none-any.whl", hash = "sha256:3e2091cd341423207e2f084a6654b1efcd250dc326f2a37d6dde446e07cabb11", size = 380935, upload-time = "2025-11-21T11:27:44.522Z" }, +] + [[package]] name = "aiohappyeyeballs" version = "2.6.1" @@ -171,6 +189,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" }, ] +[[package]] +name = "appdirs" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/d8/05696357e0311f5b5c316d7b95f46c669dd9c15aaeecbb48c7d0aeb88c40/appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", size = 13470, upload-time = "2020-05-11T07:59:51.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128", size = 9566, upload-time = "2020-05-11T07:59:49.499Z" }, +] + [[package]] name = "appnope" version = "0.1.4" @@ -241,12 +268,14 @@ name = "assistance-engine" version = "0.1.0" source = { virtual = "." } dependencies = [ + { name = "accelerate" }, { name = "grpcio" }, { name = "grpcio-reflection" }, { name = "grpcio-tools" }, { name = "langchain" }, { name = "langchain-community" }, { name = "langchain-elasticsearch" }, + { name = "langchain-huggingface" }, { name = "langchain-ollama" }, { name = "loguru" }, { name = "nltk" }, @@ -256,7 +285,6 @@ dependencies = [ { name = "torch" }, { name = "torchvision" }, { name = "tqdm" }, - { name = "transformers" }, ] [package.dev-dependencies] @@ -264,19 +292,23 @@ dev = [ { name = "beir" }, { name = "jupyter" }, { name = "langfuse" }, + { name = "markdown" }, { name = "mteb" }, { name = "polars" }, + { name = "ragas" }, { name = "ruff" }, ] [package.metadata] requires-dist = [ + { name = "accelerate", specifier = ">=1.12.0" }, { name = "grpcio", specifier = ">=1.78.0" }, { name = "grpcio-reflection", specifier = ">=1.78.0" }, { name = "grpcio-tools", specifier = ">=1.78.0" }, { name = "langchain", specifier = ">=1.2.10" }, { name = "langchain-community", specifier = ">=0.4.1" }, { name = "langchain-elasticsearch", specifier = ">=1.0.0" }, + { name = "langchain-huggingface", specifier = ">=1.2.0" }, { name = "langchain-ollama", specifier = ">=1.0.1" }, { name = "loguru", specifier = ">=0.7.3" }, { name = "nltk", specifier = ">=3.9.2" }, @@ -286,16 +318,17 @@ requires-dist = [ { name = "torch", specifier = ">=2.10.0" }, { name = "torchvision", specifier = ">=0.25.0" }, { name = "tqdm", specifier = ">=4.67.3" }, - { name = "transformers", specifier = ">=5.2.0" }, ] [package.metadata.requires-dev] dev = [ { name = "beir", specifier = ">=2.2.0" }, { name = "jupyter", specifier = ">=1.1.1" }, - { name = "langfuse", specifier = ">=3.14.4" }, + { name = "langfuse", specifier = "<=3" }, + { name = "markdown", specifier = ">=3.10.2" }, { name = "mteb", specifier = ">=2.8.8" }, { name = "polars", specifier = ">=1.38.1" }, + { name = "ragas", specifier = ">=0.4.3" }, { name = "ruff", specifier = ">=0.15.1" }, ] @@ -684,6 +717,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668, upload-time = "2025-04-16T00:41:47.671Z" }, ] +[[package]] +name = "diskcache" +version = "5.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916, upload-time = "2023-08-31T06:12:00.316Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" }, +] + [[package]] name = "distro" version = "1.9.0" @@ -693,6 +735,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, ] +[[package]] +name = "docstring-parser" +version = "0.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/9d/c3b43da9515bd270df0f80548d9944e389870713cc1fe2b8fb35fe2bcefd/docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912", size = 27442, upload-time = "2025-07-21T07:35:01.868Z" } +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 = "elastic-transport" version = "8.17.1" @@ -1139,23 +1190,21 @@ wheels = [ [[package]] name = "huggingface-hub" -version = "1.4.1" +version = "0.36.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "fsspec" }, - { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, - { name = "httpx" }, + { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, { name = "packaging" }, { name = "pyyaml" }, - { name = "shellingham" }, + { name = "requests" }, { name = "tqdm" }, - { name = "typer-slim" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c4/fc/eb9bc06130e8bbda6a616e1b80a7aa127681c448d6b49806f61db2670b61/huggingface_hub-1.4.1.tar.gz", hash = "sha256:b41131ec35e631e7383ab26d6146b8d8972abc8b6309b963b306fbcca87f5ed5", size = 642156, upload-time = "2026-02-06T09:20:03.013Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/b7/8cb61d2eece5fb05a83271da168186721c450eb74e3c31f7ef3169fa475b/huggingface_hub-0.36.2.tar.gz", hash = "sha256:1934304d2fb224f8afa3b87007d58501acfda9215b334eed53072dd5e815ff7a", size = 649782, upload-time = "2026-02-06T09:24:13.098Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/ae/2f6d96b4e6c5478d87d606a1934b5d436c4a2bce6bb7c6fdece891c128e3/huggingface_hub-1.4.1-py3-none-any.whl", hash = "sha256:9931d075fb7a79af5abc487106414ec5fba2c0ae86104c0c62fd6cae38873d18", size = 553326, upload-time = "2026-02-06T09:20:00.728Z" }, + { url = "https://files.pythonhosted.org/packages/a8/af/48ac8483240de756d2438c380746e7130d1c6f75802ef22f3c6d49982787/huggingface_hub-0.36.2-py3-none-any.whl", hash = "sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270", size = 566395, upload-time = "2026-02-06T09:24:11.133Z" }, ] [[package]] @@ -1179,6 +1228,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, ] +[[package]] +name = "instructor" +version = "1.14.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "diskcache" }, + { name = "docstring-parser" }, + { name = "jinja2" }, + { name = "jiter" }, + { name = "openai" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "requests" }, + { name = "rich" }, + { name = "tenacity" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0b/ef/986d059424db204ed57b29d8c07fda35de2a2c72dee8ea7994bc90a6f767/instructor-1.14.5.tar.gz", hash = "sha256:fcb6432867f2fe4a5986e8bf389dcc64ed2ad4039a12a2dff85464e51c2f171a", size = 69950754, upload-time = "2026-01-29T14:18:50.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/04/e442e1356c97b03a6d30d2b462f7c0bdfbf207e75f6833815fd1225a75b4/instructor-1.14.5-py3-none-any.whl", hash = "sha256:2a5a31222b008c0989be1cc001e33a237f49506e80ac5833f6d36d7690bae7b1", size = 177445, upload-time = "2026-01-29T14:18:53.641Z" }, +] + [[package]] name = "ipykernel" version = "7.2.0" @@ -1291,87 +1363,87 @@ wheels = [ [[package]] name = "jiter" -version = "0.13.0" +version = "0.11.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/5e/4ec91646aee381d01cdb9974e30882c9cd3b8c5d1079d6b5ff4af522439a/jiter-0.13.0.tar.gz", hash = "sha256:f2839f9c2c7e2dffc1bc5929a510e14ce0a946be9365fd1219e7ef342dae14f4", size = 164847, upload-time = "2026-02-02T12:37:56.441Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/68/0357982493a7b20925aece061f7fb7a2678e3b232f8d73a6edb7e5304443/jiter-0.11.1.tar.gz", hash = "sha256:849dcfc76481c0ea0099391235b7ca97d7279e0fa4c86005457ac7c88e8b76dc", size = 168385, upload-time = "2025-10-17T11:31:15.186Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/71/29/499f8c9eaa8a16751b1c0e45e6f5f1761d180da873d417996cc7bddc8eef/jiter-0.13.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ea026e70a9a28ebbdddcbcf0f1323128a8db66898a06eaad3a4e62d2f554d096", size = 311157, upload-time = "2026-02-02T12:35:37.758Z" }, - { url = "https://files.pythonhosted.org/packages/50/f6/566364c777d2ab450b92100bea11333c64c38d32caf8dc378b48e5b20c46/jiter-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66aa3e663840152d18cc8ff1e4faad3dd181373491b9cfdc6004b92198d67911", size = 319729, upload-time = "2026-02-02T12:35:39.246Z" }, - { url = "https://files.pythonhosted.org/packages/73/dd/560f13ec5e4f116d8ad2658781646cca91b617ae3b8758d4a5076b278f70/jiter-0.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3524798e70655ff19aec58c7d05adb1f074fecff62da857ea9be2b908b6d701", size = 354766, upload-time = "2026-02-02T12:35:40.662Z" }, - { url = "https://files.pythonhosted.org/packages/7c/0d/061faffcfe94608cbc28a0d42a77a74222bdf5055ccdbe5fd2292b94f510/jiter-0.13.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec7e287d7fbd02cb6e22f9a00dd9c9cd504c40a61f2c61e7e1f9690a82726b4c", size = 362587, upload-time = "2026-02-02T12:35:42.025Z" }, - { url = "https://files.pythonhosted.org/packages/92/c9/c66a7864982fd38a9773ec6e932e0398d1262677b8c60faecd02ffb67bf3/jiter-0.13.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47455245307e4debf2ce6c6e65a717550a0244231240dcf3b8f7d64e4c2f22f4", size = 487537, upload-time = "2026-02-02T12:35:43.459Z" }, - { url = "https://files.pythonhosted.org/packages/6c/86/84eb4352cd3668f16d1a88929b5888a3fe0418ea8c1dfc2ad4e7bf6e069a/jiter-0.13.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ee9da221dca6e0429c2704c1b3655fe7b025204a71d4d9b73390c759d776d165", size = 373717, upload-time = "2026-02-02T12:35:44.928Z" }, - { url = "https://files.pythonhosted.org/packages/6e/09/9fe4c159358176f82d4390407a03f506a8659ed13ca3ac93a843402acecf/jiter-0.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24ab43126d5e05f3d53a36a8e11eb2f23304c6c1117844aaaf9a0aa5e40b5018", size = 362683, upload-time = "2026-02-02T12:35:46.636Z" }, - { url = "https://files.pythonhosted.org/packages/c9/5e/85f3ab9caca0c1d0897937d378b4a515cae9e119730563572361ea0c48ae/jiter-0.13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9da38b4fedde4fb528c740c2564628fbab737166a0e73d6d46cb4bb5463ff411", size = 392345, upload-time = "2026-02-02T12:35:48.088Z" }, - { url = "https://files.pythonhosted.org/packages/12/4c/05b8629ad546191939e6f0c2f17e29f542a398f4a52fb987bc70b6d1eb8b/jiter-0.13.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0b34c519e17658ed88d5047999a93547f8889f3c1824120c26ad6be5f27b6cf5", size = 517775, upload-time = "2026-02-02T12:35:49.482Z" }, - { url = "https://files.pythonhosted.org/packages/4d/88/367ea2eb6bc582c7052e4baf5ddf57ebe5ab924a88e0e09830dfb585c02d/jiter-0.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2a6394e6af690d462310a86b53c47ad75ac8c21dc79f120714ea449979cb1d3", size = 551325, upload-time = "2026-02-02T12:35:51.104Z" }, - { url = "https://files.pythonhosted.org/packages/f3/12/fa377ffb94a2f28c41afaed093e0d70cfe512035d5ecb0cad0ae4792d35e/jiter-0.13.0-cp311-cp311-win32.whl", hash = "sha256:0f0c065695f616a27c920a56ad0d4fc46415ef8b806bf8fc1cacf25002bd24e1", size = 204709, upload-time = "2026-02-02T12:35:52.467Z" }, - { url = "https://files.pythonhosted.org/packages/cb/16/8e8203ce92f844dfcd3d9d6a5a7322c77077248dbb12da52d23193a839cd/jiter-0.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:0733312953b909688ae3c2d58d043aa040f9f1a6a75693defed7bc2cc4bf2654", size = 204560, upload-time = "2026-02-02T12:35:53.925Z" }, - { url = "https://files.pythonhosted.org/packages/44/26/97cc40663deb17b9e13c3a5cf29251788c271b18ee4d262c8f94798b8336/jiter-0.13.0-cp311-cp311-win_arm64.whl", hash = "sha256:5d9b34ad56761b3bf0fbe8f7e55468704107608512350962d3317ffd7a4382d5", size = 189608, upload-time = "2026-02-02T12:35:55.304Z" }, - { url = "https://files.pythonhosted.org/packages/2e/30/7687e4f87086829955013ca12a9233523349767f69653ebc27036313def9/jiter-0.13.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0a2bd69fc1d902e89925fc34d1da51b2128019423d7b339a45d9e99c894e0663", size = 307958, upload-time = "2026-02-02T12:35:57.165Z" }, - { url = "https://files.pythonhosted.org/packages/c3/27/e57f9a783246ed95481e6749cc5002a8a767a73177a83c63ea71f0528b90/jiter-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f917a04240ef31898182f76a332f508f2cc4b57d2b4d7ad2dbfebbfe167eb505", size = 318597, upload-time = "2026-02-02T12:35:58.591Z" }, - { url = "https://files.pythonhosted.org/packages/cf/52/e5719a60ac5d4d7c5995461a94ad5ef962a37c8bf5b088390e6fad59b2ff/jiter-0.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1e2b199f446d3e82246b4fd9236d7cb502dc2222b18698ba0d986d2fecc6152", size = 348821, upload-time = "2026-02-02T12:36:00.093Z" }, - { url = "https://files.pythonhosted.org/packages/61/db/c1efc32b8ba4c740ab3fc2d037d8753f67685f475e26b9d6536a4322bcdd/jiter-0.13.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04670992b576fa65bd056dbac0c39fe8bd67681c380cb2b48efa885711d9d726", size = 364163, upload-time = "2026-02-02T12:36:01.937Z" }, - { url = "https://files.pythonhosted.org/packages/55/8a/fb75556236047c8806995671a18e4a0ad646ed255276f51a20f32dceaeec/jiter-0.13.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a1aff1fbdb803a376d4d22a8f63f8e7ccbce0b4890c26cc7af9e501ab339ef0", size = 483709, upload-time = "2026-02-02T12:36:03.41Z" }, - { url = "https://files.pythonhosted.org/packages/7e/16/43512e6ee863875693a8e6f6d532e19d650779d6ba9a81593ae40a9088ff/jiter-0.13.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b3fb8c2053acaef8580809ac1d1f7481a0a0bdc012fd7f5d8b18fb696a5a089", size = 370480, upload-time = "2026-02-02T12:36:04.791Z" }, - { url = "https://files.pythonhosted.org/packages/f8/4c/09b93e30e984a187bc8aaa3510e1ec8dcbdcd71ca05d2f56aac0492453aa/jiter-0.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdaba7d87e66f26a2c45d8cbadcbfc4bf7884182317907baf39cfe9775bb4d93", size = 360735, upload-time = "2026-02-02T12:36:06.994Z" }, - { url = "https://files.pythonhosted.org/packages/1a/1b/46c5e349019874ec5dfa508c14c37e29864ea108d376ae26d90bee238cd7/jiter-0.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b88d649135aca526da172e48083da915ec086b54e8e73a425ba50999468cc08", size = 391814, upload-time = "2026-02-02T12:36:08.368Z" }, - { url = "https://files.pythonhosted.org/packages/15/9e/26184760e85baee7162ad37b7912797d2077718476bf91517641c92b3639/jiter-0.13.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e404ea551d35438013c64b4f357b0474c7abf9f781c06d44fcaf7a14c69ff9e2", size = 513990, upload-time = "2026-02-02T12:36:09.993Z" }, - { url = "https://files.pythonhosted.org/packages/e9/34/2c9355247d6debad57a0a15e76ab1566ab799388042743656e566b3b7de1/jiter-0.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f4748aad1b4a93c8bdd70f604d0f748cdc0e8744c5547798acfa52f10e79228", size = 548021, upload-time = "2026-02-02T12:36:11.376Z" }, - { url = "https://files.pythonhosted.org/packages/ac/4a/9f2c23255d04a834398b9c2e0e665382116911dc4d06b795710503cdad25/jiter-0.13.0-cp312-cp312-win32.whl", hash = "sha256:0bf670e3b1445fc4d31612199f1744f67f889ee1bbae703c4b54dc097e5dd394", size = 203024, upload-time = "2026-02-02T12:36:12.682Z" }, - { url = "https://files.pythonhosted.org/packages/09/ee/f0ae675a957ae5a8f160be3e87acea6b11dc7b89f6b7ab057e77b2d2b13a/jiter-0.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:15db60e121e11fe186c0b15236bd5d18381b9ddacdcf4e659feb96fc6c969c92", size = 205424, upload-time = "2026-02-02T12:36:13.93Z" }, - { url = "https://files.pythonhosted.org/packages/1b/02/ae611edf913d3cbf02c97cdb90374af2082c48d7190d74c1111dde08bcdd/jiter-0.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:41f92313d17989102f3cb5dd533a02787cdb99454d494344b0361355da52fcb9", size = 186818, upload-time = "2026-02-02T12:36:15.308Z" }, - { url = "https://files.pythonhosted.org/packages/91/9c/7ee5a6ff4b9991e1a45263bfc46731634c4a2bde27dfda6c8251df2d958c/jiter-0.13.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1f8a55b848cbabf97d861495cd65f1e5c590246fabca8b48e1747c4dfc8f85bf", size = 306897, upload-time = "2026-02-02T12:36:16.748Z" }, - { url = "https://files.pythonhosted.org/packages/7c/02/be5b870d1d2be5dd6a91bdfb90f248fbb7dcbd21338f092c6b89817c3dbf/jiter-0.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f556aa591c00f2c45eb1b89f68f52441a016034d18b65da60e2d2875bbbf344a", size = 317507, upload-time = "2026-02-02T12:36:18.351Z" }, - { url = "https://files.pythonhosted.org/packages/da/92/b25d2ec333615f5f284f3a4024f7ce68cfa0604c322c6808b2344c7f5d2b/jiter-0.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7e1d61da332ec412350463891923f960c3073cf1aae93b538f0bb4c8cd46efb", size = 350560, upload-time = "2026-02-02T12:36:19.746Z" }, - { url = "https://files.pythonhosted.org/packages/be/ec/74dcb99fef0aca9fbe56b303bf79f6bd839010cb18ad41000bf6cc71eec0/jiter-0.13.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3097d665a27bc96fd9bbf7f86178037db139f319f785e4757ce7ccbf390db6c2", size = 363232, upload-time = "2026-02-02T12:36:21.243Z" }, - { url = "https://files.pythonhosted.org/packages/1b/37/f17375e0bb2f6a812d4dd92d7616e41917f740f3e71343627da9db2824ce/jiter-0.13.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d01ecc3a8cbdb6f25a37bd500510550b64ddf9f7d64a107d92f3ccb25035d0f", size = 483727, upload-time = "2026-02-02T12:36:22.688Z" }, - { url = "https://files.pythonhosted.org/packages/77/d2/a71160a5ae1a1e66c1395b37ef77da67513b0adba73b993a27fbe47eb048/jiter-0.13.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed9bbc30f5d60a3bdf63ae76beb3f9db280d7f195dfcfa61af792d6ce912d159", size = 370799, upload-time = "2026-02-02T12:36:24.106Z" }, - { url = "https://files.pythonhosted.org/packages/01/99/ed5e478ff0eb4e8aa5fd998f9d69603c9fd3f32de3bd16c2b1194f68361c/jiter-0.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98fbafb6e88256f4454de33c1f40203d09fc33ed19162a68b3b257b29ca7f663", size = 359120, upload-time = "2026-02-02T12:36:25.519Z" }, - { url = "https://files.pythonhosted.org/packages/16/be/7ffd08203277a813f732ba897352797fa9493faf8dc7995b31f3d9cb9488/jiter-0.13.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5467696f6b827f1116556cb0db620440380434591e93ecee7fd14d1a491b6daa", size = 390664, upload-time = "2026-02-02T12:36:26.866Z" }, - { url = "https://files.pythonhosted.org/packages/d1/84/e0787856196d6d346264d6dcccb01f741e5f0bd014c1d9a2ebe149caf4f3/jiter-0.13.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2d08c9475d48b92892583df9da592a0e2ac49bcd41fae1fec4f39ba6cf107820", size = 513543, upload-time = "2026-02-02T12:36:28.217Z" }, - { url = "https://files.pythonhosted.org/packages/65/50/ecbd258181c4313cf79bca6c88fb63207d04d5bf5e4f65174114d072aa55/jiter-0.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:aed40e099404721d7fcaf5b89bd3b4568a4666358bcac7b6b15c09fb6252ab68", size = 547262, upload-time = "2026-02-02T12:36:29.678Z" }, - { url = "https://files.pythonhosted.org/packages/27/da/68f38d12e7111d2016cd198161b36e1f042bd115c169255bcb7ec823a3bf/jiter-0.13.0-cp313-cp313-win32.whl", hash = "sha256:36ebfbcffafb146d0e6ffb3e74d51e03d9c35ce7c625c8066cdbfc7b953bdc72", size = 200630, upload-time = "2026-02-02T12:36:31.808Z" }, - { url = "https://files.pythonhosted.org/packages/25/65/3bd1a972c9a08ecd22eb3b08a95d1941ebe6938aea620c246cf426ae09c2/jiter-0.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:8d76029f077379374cf0dbc78dbe45b38dec4a2eb78b08b5194ce836b2517afc", size = 202602, upload-time = "2026-02-02T12:36:33.679Z" }, - { url = "https://files.pythonhosted.org/packages/15/fe/13bd3678a311aa67686bb303654792c48206a112068f8b0b21426eb6851e/jiter-0.13.0-cp313-cp313-win_arm64.whl", hash = "sha256:bb7613e1a427cfcb6ea4544f9ac566b93d5bf67e0d48c787eca673ff9c9dff2b", size = 185939, upload-time = "2026-02-02T12:36:35.065Z" }, - { url = "https://files.pythonhosted.org/packages/49/19/a929ec002ad3228bc97ca01dbb14f7632fffdc84a95ec92ceaf4145688ae/jiter-0.13.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fa476ab5dd49f3bf3a168e05f89358c75a17608dbabb080ef65f96b27c19ab10", size = 316616, upload-time = "2026-02-02T12:36:36.579Z" }, - { url = "https://files.pythonhosted.org/packages/52/56/d19a9a194afa37c1728831e5fb81b7722c3de18a3109e8f282bfc23e587a/jiter-0.13.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade8cb6ff5632a62b7dbd4757d8c5573f7a2e9ae285d6b5b841707d8363205ef", size = 346850, upload-time = "2026-02-02T12:36:38.058Z" }, - { url = "https://files.pythonhosted.org/packages/36/4a/94e831c6bf287754a8a019cb966ed39ff8be6ab78cadecf08df3bb02d505/jiter-0.13.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9950290340acc1adaded363edd94baebcee7dabdfa8bee4790794cd5cfad2af6", size = 358551, upload-time = "2026-02-02T12:36:39.417Z" }, - { url = "https://files.pythonhosted.org/packages/a2/ec/a4c72c822695fa80e55d2b4142b73f0012035d9fcf90eccc56bc060db37c/jiter-0.13.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2b4972c6df33731aac0742b64fd0d18e0a69bc7d6e03108ce7d40c85fd9e3e6d", size = 201950, upload-time = "2026-02-02T12:36:40.791Z" }, - { url = "https://files.pythonhosted.org/packages/b6/00/393553ec27b824fbc29047e9c7cd4a3951d7fbe4a76743f17e44034fa4e4/jiter-0.13.0-cp313-cp313t-win_arm64.whl", hash = "sha256:701a1e77d1e593c1b435315ff625fd071f0998c5f02792038a5ca98899261b7d", size = 185852, upload-time = "2026-02-02T12:36:42.077Z" }, - { url = "https://files.pythonhosted.org/packages/6e/f5/f1997e987211f6f9bd71b8083047b316208b4aca0b529bb5f8c96c89ef3e/jiter-0.13.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:cc5223ab19fe25e2f0bf2643204ad7318896fe3729bf12fde41b77bfc4fafff0", size = 308804, upload-time = "2026-02-02T12:36:43.496Z" }, - { url = "https://files.pythonhosted.org/packages/cd/8f/5482a7677731fd44881f0204981ce2d7175db271f82cba2085dd2212e095/jiter-0.13.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9776ebe51713acf438fd9b4405fcd86893ae5d03487546dae7f34993217f8a91", size = 318787, upload-time = "2026-02-02T12:36:45.071Z" }, - { url = "https://files.pythonhosted.org/packages/f3/b9/7257ac59778f1cd025b26a23c5520a36a424f7f1b068f2442a5b499b7464/jiter-0.13.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879e768938e7b49b5e90b7e3fecc0dbec01b8cb89595861fb39a8967c5220d09", size = 353880, upload-time = "2026-02-02T12:36:47.365Z" }, - { url = "https://files.pythonhosted.org/packages/c3/87/719eec4a3f0841dad99e3d3604ee4cba36af4419a76f3cb0b8e2e691ad67/jiter-0.13.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:682161a67adea11e3aae9038c06c8b4a9a71023228767477d683f69903ebc607", size = 366702, upload-time = "2026-02-02T12:36:48.871Z" }, - { url = "https://files.pythonhosted.org/packages/d2/65/415f0a75cf6921e43365a1bc227c565cb949caca8b7532776e430cbaa530/jiter-0.13.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a13b68cd1cd8cc9de8f244ebae18ccb3e4067ad205220ef324c39181e23bbf66", size = 486319, upload-time = "2026-02-02T12:36:53.006Z" }, - { url = "https://files.pythonhosted.org/packages/54/a2/9e12b48e82c6bbc6081fd81abf915e1443add1b13d8fc586e1d90bb02bb8/jiter-0.13.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87ce0f14c6c08892b610686ae8be350bf368467b6acd5085a5b65441e2bf36d2", size = 372289, upload-time = "2026-02-02T12:36:54.593Z" }, - { url = "https://files.pythonhosted.org/packages/4e/c1/e4693f107a1789a239c759a432e9afc592366f04e901470c2af89cfd28e1/jiter-0.13.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c365005b05505a90d1c47856420980d0237adf82f70c4aff7aebd3c1cc143ad", size = 360165, upload-time = "2026-02-02T12:36:56.112Z" }, - { url = "https://files.pythonhosted.org/packages/17/08/91b9ea976c1c758240614bd88442681a87672eebc3d9a6dde476874e706b/jiter-0.13.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1317fdffd16f5873e46ce27d0e0f7f4f90f0cdf1d86bf6abeaea9f63ca2c401d", size = 389634, upload-time = "2026-02-02T12:36:57.495Z" }, - { url = "https://files.pythonhosted.org/packages/18/23/58325ef99390d6d40427ed6005bf1ad54f2577866594bcf13ce55675f87d/jiter-0.13.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:c05b450d37ba0c9e21c77fef1f205f56bcee2330bddca68d344baebfc55ae0df", size = 514933, upload-time = "2026-02-02T12:36:58.909Z" }, - { url = "https://files.pythonhosted.org/packages/5b/25/69f1120c7c395fd276c3996bb8adefa9c6b84c12bb7111e5c6ccdcd8526d/jiter-0.13.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:775e10de3849d0631a97c603f996f518159272db00fdda0a780f81752255ee9d", size = 548842, upload-time = "2026-02-02T12:37:00.433Z" }, - { url = "https://files.pythonhosted.org/packages/18/05/981c9669d86850c5fbb0d9e62bba144787f9fba84546ba43d624ee27ef29/jiter-0.13.0-cp314-cp314-win32.whl", hash = "sha256:632bf7c1d28421c00dd8bbb8a3bac5663e1f57d5cd5ed962bce3c73bf62608e6", size = 202108, upload-time = "2026-02-02T12:37:01.718Z" }, - { url = "https://files.pythonhosted.org/packages/8d/96/cdcf54dd0b0341db7d25413229888a346c7130bd20820530905fdb65727b/jiter-0.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:f22ef501c3f87ede88f23f9b11e608581c14f04db59b6a801f354397ae13739f", size = 204027, upload-time = "2026-02-02T12:37:03.075Z" }, - { url = "https://files.pythonhosted.org/packages/fb/f9/724bcaaab7a3cd727031fe4f6995cb86c4bd344909177c186699c8dec51a/jiter-0.13.0-cp314-cp314-win_arm64.whl", hash = "sha256:07b75fe09a4ee8e0c606200622e571e44943f47254f95e2436c8bdcaceb36d7d", size = 187199, upload-time = "2026-02-02T12:37:04.414Z" }, - { url = "https://files.pythonhosted.org/packages/62/92/1661d8b9fd6a3d7a2d89831db26fe3c1509a287d83ad7838831c7b7a5c7e/jiter-0.13.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:964538479359059a35fb400e769295d4b315ae61e4105396d355a12f7fef09f0", size = 318423, upload-time = "2026-02-02T12:37:05.806Z" }, - { url = "https://files.pythonhosted.org/packages/4f/3b/f77d342a54d4ebcd128e520fc58ec2f5b30a423b0fd26acdfc0c6fef8e26/jiter-0.13.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e104da1db1c0991b3eaed391ccd650ae8d947eab1480c733e5a3fb28d4313e40", size = 351438, upload-time = "2026-02-02T12:37:07.189Z" }, - { url = "https://files.pythonhosted.org/packages/76/b3/ba9a69f0e4209bd3331470c723c2f5509e6f0482e416b612431a5061ed71/jiter-0.13.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e3a5f0cde8ff433b8e88e41aa40131455420fb3649a3c7abdda6145f8cb7202", size = 364774, upload-time = "2026-02-02T12:37:08.579Z" }, - { url = "https://files.pythonhosted.org/packages/b3/16/6cdb31fa342932602458dbb631bfbd47f601e03d2e4950740e0b2100b570/jiter-0.13.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57aab48f40be1db920a582b30b116fe2435d184f77f0e4226f546794cedd9cf0", size = 487238, upload-time = "2026-02-02T12:37:10.066Z" }, - { url = "https://files.pythonhosted.org/packages/ed/b1/956cc7abaca8d95c13aa8d6c9b3f3797241c246cd6e792934cc4c8b250d2/jiter-0.13.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7772115877c53f62beeb8fd853cab692dbc04374ef623b30f997959a4c0e7e95", size = 372892, upload-time = "2026-02-02T12:37:11.656Z" }, - { url = "https://files.pythonhosted.org/packages/26/c4/97ecde8b1e74f67b8598c57c6fccf6df86ea7861ed29da84629cdbba76c4/jiter-0.13.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1211427574b17b633cfceba5040de8081e5abf114f7a7602f73d2e16f9fdaa59", size = 360309, upload-time = "2026-02-02T12:37:13.244Z" }, - { url = "https://files.pythonhosted.org/packages/4b/d7/eabe3cf46715854ccc80be2cd78dd4c36aedeb30751dbf85a1d08c14373c/jiter-0.13.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7beae3a3d3b5212d3a55d2961db3c292e02e302feb43fce6a3f7a31b90ea6dfe", size = 389607, upload-time = "2026-02-02T12:37:14.881Z" }, - { url = "https://files.pythonhosted.org/packages/df/2d/03963fc0804e6109b82decfb9974eb92df3797fe7222428cae12f8ccaa0c/jiter-0.13.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:e5562a0f0e90a6223b704163ea28e831bd3a9faa3512a711f031611e6b06c939", size = 514986, upload-time = "2026-02-02T12:37:16.326Z" }, - { url = "https://files.pythonhosted.org/packages/f6/6c/8c83b45eb3eb1c1e18d841fe30b4b5bc5619d781267ca9bc03e005d8fd0a/jiter-0.13.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:6c26a424569a59140fb51160a56df13f438a2b0967365e987889186d5fc2f6f9", size = 548756, upload-time = "2026-02-02T12:37:17.736Z" }, - { url = "https://files.pythonhosted.org/packages/47/66/eea81dfff765ed66c68fd2ed8c96245109e13c896c2a5015c7839c92367e/jiter-0.13.0-cp314-cp314t-win32.whl", hash = "sha256:24dc96eca9f84da4131cdf87a95e6ce36765c3b156fc9ae33280873b1c32d5f6", size = 201196, upload-time = "2026-02-02T12:37:19.101Z" }, - { url = "https://files.pythonhosted.org/packages/ff/32/4ac9c7a76402f8f00d00842a7f6b83b284d0cf7c1e9d4227bc95aa6d17fa/jiter-0.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0a8d76c7524087272c8ae913f5d9d608bd839154b62c4322ef65723d2e5bb0b8", size = 204215, upload-time = "2026-02-02T12:37:20.495Z" }, - { url = "https://files.pythonhosted.org/packages/f9/8e/7def204fea9f9be8b3c21a6f2dd6c020cf56c7d5ff753e0e23ed7f9ea57e/jiter-0.13.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2c26cf47e2cad140fa23b6d58d435a7c0161f5c514284802f25e87fddfe11024", size = 187152, upload-time = "2026-02-02T12:37:22.124Z" }, - { url = "https://files.pythonhosted.org/packages/79/b3/3c29819a27178d0e461a8571fb63c6ae38be6dc36b78b3ec2876bbd6a910/jiter-0.13.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b1cbfa133241d0e6bdab48dcdc2604e8ba81512f6bbd68ec3e8e1357dd3c316c", size = 307016, upload-time = "2026-02-02T12:37:42.755Z" }, - { url = "https://files.pythonhosted.org/packages/eb/ae/60993e4b07b1ac5ebe46da7aa99fdbb802eb986c38d26e3883ac0125c4e0/jiter-0.13.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:db367d8be9fad6e8ebbac4a7578b7af562e506211036cba2c06c3b998603c3d2", size = 305024, upload-time = "2026-02-02T12:37:44.774Z" }, - { url = "https://files.pythonhosted.org/packages/77/fa/2227e590e9cf98803db2811f172b2d6460a21539ab73006f251c66f44b14/jiter-0.13.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45f6f8efb2f3b0603092401dc2df79fa89ccbc027aaba4174d2d4133ed661434", size = 339337, upload-time = "2026-02-02T12:37:46.668Z" }, - { url = "https://files.pythonhosted.org/packages/2d/92/015173281f7eb96c0ef580c997da8ef50870d4f7f4c9e03c845a1d62ae04/jiter-0.13.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:597245258e6ad085d064780abfb23a284d418d3e61c57362d9449c6c7317ee2d", size = 346395, upload-time = "2026-02-02T12:37:48.09Z" }, - { url = "https://files.pythonhosted.org/packages/80/60/e50fa45dd7e2eae049f0ce964663849e897300433921198aef94b6ffa23a/jiter-0.13.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:3d744a6061afba08dd7ae375dcde870cffb14429b7477e10f67e9e6d68772a0a", size = 305169, upload-time = "2026-02-02T12:37:50.376Z" }, - { url = "https://files.pythonhosted.org/packages/d2/73/a009f41c5eed71c49bec53036c4b33555afcdee70682a18c6f66e396c039/jiter-0.13.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:ff732bd0a0e778f43d5009840f20b935e79087b4dc65bd36f1cd0f9b04b8ff7f", size = 303808, upload-time = "2026-02-02T12:37:52.092Z" }, - { url = "https://files.pythonhosted.org/packages/c4/10/528b439290763bff3d939268085d03382471b442f212dca4ff5f12802d43/jiter-0.13.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab44b178f7981fcaea7e0a5df20e773c663d06ffda0198f1a524e91b2fde7e59", size = 337384, upload-time = "2026-02-02T12:37:53.582Z" }, - { url = "https://files.pythonhosted.org/packages/67/8a/a342b2f0251f3dac4ca17618265d93bf244a2a4d089126e81e4c1056ac50/jiter-0.13.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bb00b6d26db67a05fe3e12c76edc75f32077fb51deed13822dc648fa373bc19", size = 343768, upload-time = "2026-02-02T12:37:55.055Z" }, + { url = "https://files.pythonhosted.org/packages/8b/34/c9e6cfe876f9a24f43ed53fe29f052ce02bd8d5f5a387dbf46ad3764bef0/jiter-0.11.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9b0088ff3c374ce8ce0168523ec8e97122ebb788f950cf7bb8e39c7dc6a876a2", size = 310160, upload-time = "2025-10-17T11:28:59.174Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9f/b06ec8181d7165858faf2ac5287c54fe52b2287760b7fe1ba9c06890255f/jiter-0.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74433962dd3c3090655e02e461267095d6c84f0741c7827de11022ef8d7ff661", size = 316573, upload-time = "2025-10-17T11:29:00.905Z" }, + { url = "https://files.pythonhosted.org/packages/66/49/3179d93090f2ed0c6b091a9c210f266d2d020d82c96f753260af536371d0/jiter-0.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d98030e345e6546df2cc2c08309c502466c66c4747b043f1a0d415fada862b8", size = 348998, upload-time = "2025-10-17T11:29:02.321Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/63db2c8eabda7a9cad65a2e808ca34aaa8689d98d498f5a2357d7a2e2cec/jiter-0.11.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1d6db0b2e788db46bec2cf729a88b6dd36959af2abd9fa2312dfba5acdd96dcb", size = 363413, upload-time = "2025-10-17T11:29:03.787Z" }, + { url = "https://files.pythonhosted.org/packages/25/ff/3e6b3170c5053053c7baddb8d44e2bf11ff44cd71024a280a8438ae6ba32/jiter-0.11.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55678fbbda261eafe7289165dd2ddd0e922df5f9a1ae46d7c79a5a15242bd7d1", size = 487144, upload-time = "2025-10-17T11:29:05.37Z" }, + { url = "https://files.pythonhosted.org/packages/b0/50/b63fcadf699893269b997f4c2e88400bc68f085c6db698c6e5e69d63b2c1/jiter-0.11.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a6b74fae8e40497653b52ce6ca0f1b13457af769af6fb9c1113efc8b5b4d9be", size = 376215, upload-time = "2025-10-17T11:29:07.123Z" }, + { url = "https://files.pythonhosted.org/packages/39/8c/57a8a89401134167e87e73471b9cca321cf651c1fd78c45f3a0f16932213/jiter-0.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a55a453f8b035eb4f7852a79a065d616b7971a17f5e37a9296b4b38d3b619e4", size = 359163, upload-time = "2025-10-17T11:29:09.047Z" }, + { url = "https://files.pythonhosted.org/packages/4b/96/30b0cdbffbb6f753e25339d3dbbe26890c9ef119928314578201c758aace/jiter-0.11.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2638148099022e6bdb3f42904289cd2e403609356fb06eb36ddec2d50958bc29", size = 385344, upload-time = "2025-10-17T11:29:10.69Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d5/31dae27c1cc9410ad52bb514f11bfa4f286f7d6ef9d287b98b8831e156ec/jiter-0.11.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:252490567a5d990986f83b95a5f1ca1bf205ebd27b3e9e93bb7c2592380e29b9", size = 517972, upload-time = "2025-10-17T11:29:12.174Z" }, + { url = "https://files.pythonhosted.org/packages/61/1e/5905a7a3aceab80de13ab226fd690471a5e1ee7e554dc1015e55f1a6b896/jiter-0.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d431d52b0ca2436eea6195f0f48528202100c7deda354cb7aac0a302167594d5", size = 508408, upload-time = "2025-10-17T11:29:13.597Z" }, + { url = "https://files.pythonhosted.org/packages/91/12/1c49b97aa49077e136e8591cef7162f0d3e2860ae457a2d35868fd1521ef/jiter-0.11.1-cp311-cp311-win32.whl", hash = "sha256:db6f41e40f8bae20c86cb574b48c4fd9f28ee1c71cb044e9ec12e78ab757ba3a", size = 203937, upload-time = "2025-10-17T11:29:14.894Z" }, + { url = "https://files.pythonhosted.org/packages/6d/9d/2255f7c17134ee9892c7e013c32d5bcf4bce64eb115402c9fe5e727a67eb/jiter-0.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0cc407b8e6cdff01b06bb80f61225c8b090c3df108ebade5e0c3c10993735b19", size = 207589, upload-time = "2025-10-17T11:29:16.166Z" }, + { url = "https://files.pythonhosted.org/packages/3c/28/6307fc8f95afef84cae6caf5429fee58ef16a582c2ff4db317ceb3e352fa/jiter-0.11.1-cp311-cp311-win_arm64.whl", hash = "sha256:fe04ea475392a91896d1936367854d346724a1045a247e5d1c196410473b8869", size = 188391, upload-time = "2025-10-17T11:29:17.488Z" }, + { url = "https://files.pythonhosted.org/packages/15/8b/318e8af2c904a9d29af91f78c1e18f0592e189bbdb8a462902d31fe20682/jiter-0.11.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c92148eec91052538ce6823dfca9525f5cfc8b622d7f07e9891a280f61b8c96c", size = 305655, upload-time = "2025-10-17T11:29:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/f7/29/6c7de6b5d6e511d9e736312c0c9bfcee8f9b6bef68182a08b1d78767e627/jiter-0.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ecd4da91b5415f183a6be8f7158d127bdd9e6a3174138293c0d48d6ea2f2009d", size = 315645, upload-time = "2025-10-17T11:29:20.889Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5f/ef9e5675511ee0eb7f98dd8c90509e1f7743dbb7c350071acae87b0145f3/jiter-0.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7e3ac25c00b9275684d47aa42febaa90a9958e19fd1726c4ecf755fbe5e553b", size = 348003, upload-time = "2025-10-17T11:29:22.712Z" }, + { url = "https://files.pythonhosted.org/packages/56/1b/abe8c4021010b0a320d3c62682769b700fb66f92c6db02d1a1381b3db025/jiter-0.11.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:57d7305c0a841858f866cd459cd9303f73883fb5e097257f3d4a3920722c69d4", size = 365122, upload-time = "2025-10-17T11:29:24.408Z" }, + { url = "https://files.pythonhosted.org/packages/2a/2d/4a18013939a4f24432f805fbd5a19893e64650b933edb057cd405275a538/jiter-0.11.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e86fa10e117dce22c547f31dd6d2a9a222707d54853d8de4e9a2279d2c97f239", size = 488360, upload-time = "2025-10-17T11:29:25.724Z" }, + { url = "https://files.pythonhosted.org/packages/f0/77/38124f5d02ac4131f0dfbcfd1a19a0fac305fa2c005bc4f9f0736914a1a4/jiter-0.11.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae5ef1d48aec7e01ee8420155d901bb1d192998fa811a65ebb82c043ee186711", size = 376884, upload-time = "2025-10-17T11:29:27.056Z" }, + { url = "https://files.pythonhosted.org/packages/7b/43/59fdc2f6267959b71dd23ce0bd8d4aeaf55566aa435a5d00f53d53c7eb24/jiter-0.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb68e7bf65c990531ad8715e57d50195daf7c8e6f1509e617b4e692af1108939", size = 358827, upload-time = "2025-10-17T11:29:28.698Z" }, + { url = "https://files.pythonhosted.org/packages/7d/d0/b3cc20ff5340775ea3bbaa0d665518eddecd4266ba7244c9cb480c0c82ec/jiter-0.11.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43b30c8154ded5845fa454ef954ee67bfccce629b2dea7d01f795b42bc2bda54", size = 385171, upload-time = "2025-10-17T11:29:30.078Z" }, + { url = "https://files.pythonhosted.org/packages/d2/bc/94dd1f3a61f4dc236f787a097360ec061ceeebebf4ea120b924d91391b10/jiter-0.11.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:586cafbd9dd1f3ce6a22b4a085eaa6be578e47ba9b18e198d4333e598a91db2d", size = 518359, upload-time = "2025-10-17T11:29:31.464Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8c/12ee132bd67e25c75f542c227f5762491b9a316b0dad8e929c95076f773c/jiter-0.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:677cc2517d437a83bb30019fd4cf7cad74b465914c56ecac3440d597ac135250", size = 509205, upload-time = "2025-10-17T11:29:32.895Z" }, + { url = "https://files.pythonhosted.org/packages/39/d5/9de848928ce341d463c7e7273fce90ea6d0ea4343cd761f451860fa16b59/jiter-0.11.1-cp312-cp312-win32.whl", hash = "sha256:fa992af648fcee2b850a3286a35f62bbbaeddbb6dbda19a00d8fbc846a947b6e", size = 205448, upload-time = "2025-10-17T11:29:34.217Z" }, + { url = "https://files.pythonhosted.org/packages/ee/b0/8002d78637e05009f5e3fb5288f9d57d65715c33b5d6aa20fd57670feef5/jiter-0.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:88b5cae9fa51efeb3d4bd4e52bfd4c85ccc9cac44282e2a9640893a042ba4d87", size = 204285, upload-time = "2025-10-17T11:29:35.446Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a2/bb24d5587e4dff17ff796716542f663deee337358006a80c8af43ddc11e5/jiter-0.11.1-cp312-cp312-win_arm64.whl", hash = "sha256:9a6cae1ab335551917f882f2c3c1efe7617b71b4c02381e4382a8fc80a02588c", size = 188712, upload-time = "2025-10-17T11:29:37.027Z" }, + { url = "https://files.pythonhosted.org/packages/7c/4b/e4dd3c76424fad02a601d570f4f2a8438daea47ba081201a721a903d3f4c/jiter-0.11.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:71b6a920a5550f057d49d0e8bcc60945a8da998019e83f01adf110e226267663", size = 305272, upload-time = "2025-10-17T11:29:39.249Z" }, + { url = "https://files.pythonhosted.org/packages/67/83/2cd3ad5364191130f4de80eacc907f693723beaab11a46c7d155b07a092c/jiter-0.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0b3de72e925388453a5171be83379549300db01284f04d2a6f244d1d8de36f94", size = 314038, upload-time = "2025-10-17T11:29:40.563Z" }, + { url = "https://files.pythonhosted.org/packages/d3/3c/8e67d9ba524e97d2f04c8f406f8769a23205026b13b0938d16646d6e2d3e/jiter-0.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc19dd65a2bd3d9c044c5b4ebf657ca1e6003a97c0fc10f555aa4f7fb9821c00", size = 345977, upload-time = "2025-10-17T11:29:42.009Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a5/489ce64d992c29bccbffabb13961bbb0435e890d7f2d266d1f3df5e917d2/jiter-0.11.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d58faaa936743cd1464540562f60b7ce4fd927e695e8bc31b3da5b914baa9abd", size = 364503, upload-time = "2025-10-17T11:29:43.459Z" }, + { url = "https://files.pythonhosted.org/packages/d4/c0/e321dd83ee231d05c8fe4b1a12caf1f0e8c7a949bf4724d58397104f10f2/jiter-0.11.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:902640c3103625317291cb73773413b4d71847cdf9383ba65528745ff89f1d14", size = 487092, upload-time = "2025-10-17T11:29:44.835Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5e/8f24ec49c8d37bd37f34ec0112e0b1a3b4b5a7b456c8efff1df5e189ad43/jiter-0.11.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30405f726e4c2ed487b176c09f8b877a957f535d60c1bf194abb8dadedb5836f", size = 376328, upload-time = "2025-10-17T11:29:46.175Z" }, + { url = "https://files.pythonhosted.org/packages/7f/70/ded107620e809327cf7050727e17ccfa79d6385a771b7fe38fb31318ef00/jiter-0.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3217f61728b0baadd2551844870f65219ac4a1285d5e1a4abddff3d51fdabe96", size = 356632, upload-time = "2025-10-17T11:29:47.454Z" }, + { url = "https://files.pythonhosted.org/packages/19/53/c26f7251613f6a9079275ee43c89b8a973a95ff27532c421abc2a87afb04/jiter-0.11.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1364cc90c03a8196f35f396f84029f12abe925415049204446db86598c8b72c", size = 384358, upload-time = "2025-10-17T11:29:49.377Z" }, + { url = "https://files.pythonhosted.org/packages/84/16/e0f2cc61e9c4d0b62f6c1bd9b9781d878a427656f88293e2a5335fa8ff07/jiter-0.11.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:53a54bf8e873820ab186b2dca9f6c3303f00d65ae5e7b7d6bda1b95aa472d646", size = 517279, upload-time = "2025-10-17T11:29:50.968Z" }, + { url = "https://files.pythonhosted.org/packages/60/5c/4cd095eaee68961bca3081acbe7c89e12ae24a5dae5fd5d2a13e01ed2542/jiter-0.11.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7e29aca023627b0e0c2392d4248f6414d566ff3974fa08ff2ac8dbb96dfee92a", size = 508276, upload-time = "2025-10-17T11:29:52.619Z" }, + { url = "https://files.pythonhosted.org/packages/4f/25/f459240e69b0e09a7706d96ce203ad615ca36b0fe832308d2b7123abf2d0/jiter-0.11.1-cp313-cp313-win32.whl", hash = "sha256:f153e31d8bca11363751e875c0a70b3d25160ecbaee7b51e457f14498fb39d8b", size = 205593, upload-time = "2025-10-17T11:29:53.938Z" }, + { url = "https://files.pythonhosted.org/packages/7c/16/461bafe22bae79bab74e217a09c907481a46d520c36b7b9fe71ee8c9e983/jiter-0.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:f773f84080b667c69c4ea0403fc67bb08b07e2b7ce1ef335dea5868451e60fed", size = 203518, upload-time = "2025-10-17T11:29:55.216Z" }, + { url = "https://files.pythonhosted.org/packages/7b/72/c45de6e320edb4fa165b7b1a414193b3cae302dd82da2169d315dcc78b44/jiter-0.11.1-cp313-cp313-win_arm64.whl", hash = "sha256:635ecd45c04e4c340d2187bcb1cea204c7cc9d32c1364d251564bf42e0e39c2d", size = 188062, upload-time = "2025-10-17T11:29:56.631Z" }, + { url = "https://files.pythonhosted.org/packages/65/9b/4a57922437ca8753ef823f434c2dec5028b237d84fa320f06a3ba1aec6e8/jiter-0.11.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d892b184da4d94d94ddb4031296931c74ec8b325513a541ebfd6dfb9ae89904b", size = 313814, upload-time = "2025-10-17T11:29:58.509Z" }, + { url = "https://files.pythonhosted.org/packages/76/50/62a0683dadca25490a4bedc6a88d59de9af2a3406dd5a576009a73a1d392/jiter-0.11.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa22c223a3041dacb2fcd37c70dfd648b44662b4a48e242592f95bda5ab09d58", size = 344987, upload-time = "2025-10-17T11:30:00.208Z" }, + { url = "https://files.pythonhosted.org/packages/da/00/2355dbfcbf6cdeaddfdca18287f0f38ae49446bb6378e4a5971e9356fc8a/jiter-0.11.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:330e8e6a11ad4980cd66a0f4a3e0e2e0f646c911ce047014f984841924729789", size = 356399, upload-time = "2025-10-17T11:30:02.084Z" }, + { url = "https://files.pythonhosted.org/packages/c9/07/c2bd748d578fa933d894a55bff33f983bc27f75fc4e491b354bef7b78012/jiter-0.11.1-cp313-cp313t-win_amd64.whl", hash = "sha256:09e2e386ebf298547ca3a3704b729471f7ec666c2906c5c26c1a915ea24741ec", size = 203289, upload-time = "2025-10-17T11:30:03.656Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ee/ace64a853a1acbd318eb0ca167bad1cf5ee037207504b83a868a5849747b/jiter-0.11.1-cp313-cp313t-win_arm64.whl", hash = "sha256:fe4a431c291157e11cee7c34627990ea75e8d153894365a3bc84b7a959d23ca8", size = 188284, upload-time = "2025-10-17T11:30:05.046Z" }, + { url = "https://files.pythonhosted.org/packages/8d/00/d6006d069e7b076e4c66af90656b63da9481954f290d5eca8c715f4bf125/jiter-0.11.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:0fa1f70da7a8a9713ff8e5f75ec3f90c0c870be6d526aa95e7c906f6a1c8c676", size = 304624, upload-time = "2025-10-17T11:30:06.678Z" }, + { url = "https://files.pythonhosted.org/packages/fc/45/4a0e31eb996b9ccfddbae4d3017b46f358a599ccf2e19fbffa5e531bd304/jiter-0.11.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:569ee559e5046a42feb6828c55307cf20fe43308e3ae0d8e9e4f8d8634d99944", size = 315042, upload-time = "2025-10-17T11:30:08.87Z" }, + { url = "https://files.pythonhosted.org/packages/e7/91/22f5746f5159a28c76acdc0778801f3c1181799aab196dbea2d29e064968/jiter-0.11.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f69955fa1d92e81987f092b233f0be49d4c937da107b7f7dcf56306f1d3fcce9", size = 346357, upload-time = "2025-10-17T11:30:10.222Z" }, + { url = "https://files.pythonhosted.org/packages/f5/4f/57620857d4e1dc75c8ff4856c90cb6c135e61bff9b4ebfb5dc86814e82d7/jiter-0.11.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:090f4c9d4a825e0fcbd0a2647c9a88a0f366b75654d982d95a9590745ff0c48d", size = 365057, upload-time = "2025-10-17T11:30:11.585Z" }, + { url = "https://files.pythonhosted.org/packages/ce/34/caf7f9cc8ae0a5bb25a5440cc76c7452d264d1b36701b90fdadd28fe08ec/jiter-0.11.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbf3d8cedf9e9d825233e0dcac28ff15c47b7c5512fdfe2e25fd5bbb6e6b0cee", size = 487086, upload-time = "2025-10-17T11:30:13.052Z" }, + { url = "https://files.pythonhosted.org/packages/50/17/85b5857c329d533d433fedf98804ebec696004a1f88cabad202b2ddc55cf/jiter-0.11.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2aa9b1958f9c30d3d1a558b75f0626733c60eb9b7774a86b34d88060be1e67fe", size = 376083, upload-time = "2025-10-17T11:30:14.416Z" }, + { url = "https://files.pythonhosted.org/packages/85/d3/2d9f973f828226e6faebdef034097a2918077ea776fb4d88489949024787/jiter-0.11.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42d1ca16590b768c5e7d723055acd2633908baacb3628dd430842e2e035aa90", size = 357825, upload-time = "2025-10-17T11:30:15.765Z" }, + { url = "https://files.pythonhosted.org/packages/f4/55/848d4dabf2c2c236a05468c315c2cb9dc736c5915e65449ccecdba22fb6f/jiter-0.11.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5db4c2486a023820b701a17aec9c5a6173c5ba4393f26662f032f2de9c848b0f", size = 383933, upload-time = "2025-10-17T11:30:17.34Z" }, + { url = "https://files.pythonhosted.org/packages/0b/6c/204c95a4fbb0e26dfa7776c8ef4a878d0c0b215868011cc904bf44f707e2/jiter-0.11.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:4573b78777ccfac954859a6eff45cbd9d281d80c8af049d0f1a3d9fc323d5c3a", size = 517118, upload-time = "2025-10-17T11:30:18.684Z" }, + { url = "https://files.pythonhosted.org/packages/88/25/09956644ea5a2b1e7a2a0f665cb69a973b28f4621fa61fc0c0f06ff40a31/jiter-0.11.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:7593ac6f40831d7961cb67633c39b9fef6689a211d7919e958f45710504f52d3", size = 508194, upload-time = "2025-10-17T11:30:20.719Z" }, + { url = "https://files.pythonhosted.org/packages/09/49/4d1657355d7f5c9e783083a03a3f07d5858efa6916a7d9634d07db1c23bd/jiter-0.11.1-cp314-cp314-win32.whl", hash = "sha256:87202ec6ff9626ff5f9351507def98fcf0df60e9a146308e8ab221432228f4ea", size = 203961, upload-time = "2025-10-17T11:30:22.073Z" }, + { url = "https://files.pythonhosted.org/packages/76/bd/f063bd5cc2712e7ca3cf6beda50894418fc0cfeb3f6ff45a12d87af25996/jiter-0.11.1-cp314-cp314-win_amd64.whl", hash = "sha256:a5dd268f6531a182c89d0dd9a3f8848e86e92dfff4201b77a18e6b98aa59798c", size = 202804, upload-time = "2025-10-17T11:30:23.452Z" }, + { url = "https://files.pythonhosted.org/packages/52/ca/4d84193dfafef1020bf0bedd5e1a8d0e89cb67c54b8519040effc694964b/jiter-0.11.1-cp314-cp314-win_arm64.whl", hash = "sha256:5d761f863f912a44748a21b5c4979c04252588ded8d1d2760976d2e42cd8d991", size = 188001, upload-time = "2025-10-17T11:30:24.915Z" }, + { url = "https://files.pythonhosted.org/packages/d5/fa/3b05e5c9d32efc770a8510eeb0b071c42ae93a5b576fd91cee9af91689a1/jiter-0.11.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2cc5a3965285ddc33e0cab933e96b640bc9ba5940cea27ebbbf6695e72d6511c", size = 312561, upload-time = "2025-10-17T11:30:26.742Z" }, + { url = "https://files.pythonhosted.org/packages/50/d3/335822eb216154ddb79a130cbdce88fdf5c3e2b43dc5dba1fd95c485aaf5/jiter-0.11.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b572b3636a784c2768b2342f36a23078c8d3aa6d8a30745398b1bab58a6f1a8", size = 344551, upload-time = "2025-10-17T11:30:28.252Z" }, + { url = "https://files.pythonhosted.org/packages/31/6d/a0bed13676b1398f9b3ba61f32569f20a3ff270291161100956a577b2dd3/jiter-0.11.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ad93e3d67a981f96596d65d2298fe8d1aa649deb5374a2fb6a434410ee11915e", size = 363051, upload-time = "2025-10-17T11:30:30.009Z" }, + { url = "https://files.pythonhosted.org/packages/a4/03/313eda04aa08545a5a04ed5876e52f49ab76a4d98e54578896ca3e16313e/jiter-0.11.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a83097ce379e202dcc3fe3fc71a16d523d1ee9192c8e4e854158f96b3efe3f2f", size = 485897, upload-time = "2025-10-17T11:30:31.429Z" }, + { url = "https://files.pythonhosted.org/packages/5f/13/a1011b9d325e40b53b1b96a17c010b8646013417f3902f97a86325b19299/jiter-0.11.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7042c51e7fbeca65631eb0c332f90c0c082eab04334e7ccc28a8588e8e2804d9", size = 375224, upload-time = "2025-10-17T11:30:33.18Z" }, + { url = "https://files.pythonhosted.org/packages/92/da/1b45026b19dd39b419e917165ff0ea629dbb95f374a3a13d2df95e40a6ac/jiter-0.11.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a68d679c0e47649a61df591660507608adc2652442de7ec8276538ac46abe08", size = 356606, upload-time = "2025-10-17T11:30:34.572Z" }, + { url = "https://files.pythonhosted.org/packages/7a/0c/9acb0e54d6a8ba59ce923a180ebe824b4e00e80e56cefde86cc8e0a948be/jiter-0.11.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a1b0da75dbf4b6ec0b3c9e604d1ee8beaf15bc046fff7180f7d89e3cdbd3bb51", size = 384003, upload-time = "2025-10-17T11:30:35.987Z" }, + { url = "https://files.pythonhosted.org/packages/3f/2b/e5a5fe09d6da2145e4eed651e2ce37f3c0cf8016e48b1d302e21fb1628b7/jiter-0.11.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:69dd514bf0fa31c62147d6002e5ca2b3e7ef5894f5ac6f0a19752385f4e89437", size = 516946, upload-time = "2025-10-17T11:30:37.425Z" }, + { url = "https://files.pythonhosted.org/packages/5f/fe/db936e16e0228d48eb81f9934e8327e9fde5185e84f02174fcd22a01be87/jiter-0.11.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:bb31ac0b339efa24c0ca606febd8b77ef11c58d09af1b5f2be4c99e907b11111", size = 507614, upload-time = "2025-10-17T11:30:38.977Z" }, + { url = "https://files.pythonhosted.org/packages/86/db/c4438e8febfb303486d13c6b72f5eb71cf851e300a0c1f0b4140018dd31f/jiter-0.11.1-cp314-cp314t-win32.whl", hash = "sha256:b2ce0d6156a1d3ad41da3eec63b17e03e296b78b0e0da660876fccfada86d2f7", size = 204043, upload-time = "2025-10-17T11:30:40.308Z" }, + { url = "https://files.pythonhosted.org/packages/36/59/81badb169212f30f47f817dfaabf965bc9b8204fed906fab58104ee541f9/jiter-0.11.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f4db07d127b54c4a2d43b4cf05ff0193e4f73e0dd90c74037e16df0b29f666e1", size = 204046, upload-time = "2025-10-17T11:30:41.692Z" }, + { url = "https://files.pythonhosted.org/packages/dd/01/43f7b4eb61db3e565574c4c5714685d042fb652f9eef7e5a3de6aafa943a/jiter-0.11.1-cp314-cp314t-win_arm64.whl", hash = "sha256:28e4fdf2d7ebfc935523e50d1efa3970043cfaa161674fe66f9642409d001dfe", size = 188069, upload-time = "2025-10-17T11:30:43.23Z" }, + { url = "https://files.pythonhosted.org/packages/9d/51/bd41562dd284e2a18b6dc0a99d195fd4a3560d52ab192c42e56fe0316643/jiter-0.11.1-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:e642b5270e61dd02265866398707f90e365b5db2eb65a4f30c789d826682e1f6", size = 306871, upload-time = "2025-10-17T11:31:03.616Z" }, + { url = "https://files.pythonhosted.org/packages/ba/cb/64e7f21dd357e8cd6b3c919c26fac7fc198385bbd1d85bb3b5355600d787/jiter-0.11.1-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:464ba6d000585e4e2fd1e891f31f1231f497273414f5019e27c00a4b8f7a24ad", size = 301454, upload-time = "2025-10-17T11:31:05.338Z" }, + { url = "https://files.pythonhosted.org/packages/55/b0/54bdc00da4ef39801b1419a01035bd8857983de984fd3776b0be6b94add7/jiter-0.11.1-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:055568693ab35e0bf3a171b03bb40b2dcb10352359e0ab9b5ed0da2bf1eb6f6f", size = 336801, upload-time = "2025-10-17T11:31:06.893Z" }, + { url = "https://files.pythonhosted.org/packages/de/8f/87176ed071d42e9db415ed8be787ef4ef31a4fa27f52e6a4fbf34387bd28/jiter-0.11.1-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0c69ea798d08a915ba4478113efa9e694971e410056392f4526d796f136d3fa", size = 343452, upload-time = "2025-10-17T11:31:08.259Z" }, + { url = "https://files.pythonhosted.org/packages/a6/bc/950dd7f170c6394b6fdd73f989d9e729bd98907bcc4430ef080a72d06b77/jiter-0.11.1-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:0d4d6993edc83cf75e8c6828a8d6ce40a09ee87e38c7bfba6924f39e1337e21d", size = 302626, upload-time = "2025-10-17T11:31:09.645Z" }, + { url = "https://files.pythonhosted.org/packages/3a/65/43d7971ca82ee100b7b9b520573eeef7eabc0a45d490168ebb9a9b5bb8b2/jiter-0.11.1-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f78d151c83a87a6cf5461d5ee55bc730dd9ae227377ac6f115b922989b95f838", size = 297034, upload-time = "2025-10-17T11:31:10.975Z" }, + { url = "https://files.pythonhosted.org/packages/19/4c/000e1e0c0c67e96557a279f8969487ea2732d6c7311698819f977abae837/jiter-0.11.1-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9022974781155cd5521d5cb10997a03ee5e31e8454c9d999dcdccd253f2353f", size = 337328, upload-time = "2025-10-17T11:31:12.399Z" }, + { url = "https://files.pythonhosted.org/packages/d9/71/71408b02c6133153336d29fa3ba53000f1e1a3f78bb2fc2d1a1865d2e743/jiter-0.11.1-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18c77aaa9117510d5bdc6a946baf21b1f0cfa58ef04d31c8d016f206f2118960", size = 343697, upload-time = "2025-10-17T11:31:13.773Z" }, ] [[package]] @@ -1739,6 +1811,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0f/1c/d8445772488aab3b34c2e7f41d6d1531bf2a50ca1b0b5e31a4f751bca6f8/langchain_elasticsearch-1.0.0-py3-none-any.whl", hash = "sha256:bcca1f10baed48452167c00f9d0919a681033cfa4cdf7d4672017d7b427daab9", size = 54457, upload-time = "2025-12-16T16:51:52.477Z" }, ] +[[package]] +name = "langchain-huggingface" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "langchain-core" }, + { name = "tokenizers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/67/2c/4fddeb3387baa05b6a95870ad514f649cafb46e0c0ef9caf949d974e55d2/langchain_huggingface-1.2.0.tar.gz", hash = "sha256:18a2d79955271261fb245b233fea6aa29625576e841f2b4f5bee41e51cc70949", size = 255602, upload-time = "2025-12-12T22:19:51.021Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/ce/502157ef7390a31cc67e5873ad66e737a25d1d33fcf6936e5c9a0a451409/langchain_huggingface-1.2.0-py3-none-any.whl", hash = "sha256:0ff6a17d3eb36ce2304f446e3285c74b59358703e8f7916c15bfcf9ec7b57bf1", size = 30671, upload-time = "2025-12-12T22:19:50.023Z" }, +] + [[package]] name = "langchain-ollama" version = "1.0.1" @@ -1752,6 +1838,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e3/46/f2907da16dc5a5a6c679f83b7de21176178afad8d2ca635a581429580ef6/langchain_ollama-1.0.1-py3-none-any.whl", hash = "sha256:37eb939a4718a0255fe31e19fbb0def044746c717b01b97d397606ebc3e9b440", size = 29207, upload-time = "2025-12-12T21:48:27.832Z" }, ] +[[package]] +name = "langchain-openai" +version = "1.1.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, + { name = "openai" }, + { name = "tiktoken" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/0f/01147f842499338ae3b0dd0a351fb83006d9ed623cf3a999bd68ba5bbe2d/langchain_openai-1.1.10.tar.gz", hash = "sha256:ca6fae7cf19425acc81814efed59c7d205ec9a1f284fd1d08aae9bda85d6501b", size = 1059755, upload-time = "2026-02-17T18:03:44.506Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/17/3785cbcdc81c451179247e4176d2697879cb4f45ab2c59d949ca574e072d/langchain_openai-1.1.10-py3-none-any.whl", hash = "sha256:d91b2c09e9fbc70f7af45345d3aa477744962d41c73a029beb46b4f83b824827", size = 87205, upload-time = "2026-02-17T18:03:43.502Z" }, +] + [[package]] name = "langchain-text-splitters" version = "1.1.1" @@ -1766,23 +1866,22 @@ wheels = [ [[package]] name = "langfuse" -version = "3.14.5" +version = "3.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "backoff" }, { name = "httpx" }, - { name = "openai" }, { name = "opentelemetry-api" }, - { name = "opentelemetry-exporter-otlp-proto-http" }, + { name = "opentelemetry-exporter-otlp" }, { name = "opentelemetry-sdk" }, { name = "packaging" }, { name = "pydantic" }, { name = "requests" }, { name = "wrapt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ec/6b/7a945e8bc56cbf343b6f6171fd45870b0ea80ea38463b2db8dd5a9dc04a2/langfuse-3.14.5.tar.gz", hash = "sha256:2f543ec1540053d39b08a50ed5992caf1cd54d472a55cb8e5dcf6d4fcb7ff631", size = 235474, upload-time = "2026-02-23T10:42:47.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/13/5faae9cc988c135a63eddc247d4cc5808b956f6cde1cd95469e7c67802bf/langfuse-3.0.0.tar.gz", hash = "sha256:c47449ae93a3007efee6b861484f529efb187ddbfb5093e0cb94b84636e0a605", size = 147241, upload-time = "2025-06-05T14:19:09.837Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/a1/10f04224542d6a57073c4f339b6763836a0899c98966f1d4ffcf56d2cf61/langfuse-3.14.5-py3-none-any.whl", hash = "sha256:5054b1c705ec69bce2d7077ce7419727ac629159428da013790979ca9cae77d5", size = 421240, upload-time = "2026-02-23T10:42:46.085Z" }, + { url = "https://files.pythonhosted.org/packages/5d/3f/4ebe4e2977b48ba8876dc8a9deecd721655a17dde5d898df19212e9c5609/langfuse-3.0.0-py3-none-any.whl", hash = "sha256:5f493bd15760b15195cc71ec7aaa4f93008058a1f5dfe4b32f72f31cbdc6f605", size = 291814, upload-time = "2025-06-05T14:19:08.216Z" }, ] [[package]] @@ -1883,6 +1982,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, ] +[[package]] +name = "markdown" +version = "3.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, +] + [[package]] name = "markdown-it-py" version = "4.0.0" @@ -2564,6 +2672,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cf/df/d3f1ddf4bb4cb50ed9b1139cc7b1c54c34a1e7ce8fd1b9a37c0d1551a6bd/opentelemetry_api-1.39.1-py3-none-any.whl", hash = "sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950", size = 66356, upload-time = "2025-12-11T13:32:17.304Z" }, ] +[[package]] +name = "opentelemetry-exporter-otlp" +version = "1.39.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-exporter-otlp-proto-grpc" }, + { name = "opentelemetry-exporter-otlp-proto-http" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/30/9c/3ab1db90f32da200dba332658f2bbe602369e3d19f6aba394031a42635be/opentelemetry_exporter_otlp-1.39.1.tar.gz", hash = "sha256:7cf7470e9fd0060c8a38a23e4f695ac686c06a48ad97f8d4867bc9b420180b9c", size = 6147, upload-time = "2025-12-11T13:32:40.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/6c/bdc82a066e6fb1dcf9e8cc8d4e026358fe0f8690700cc6369a6bf9bd17a7/opentelemetry_exporter_otlp-1.39.1-py3-none-any.whl", hash = "sha256:68ae69775291f04f000eb4b698ff16ff685fdebe5cb52871bc4e87938a7b00fe", size = 7019, upload-time = "2025-12-11T13:32:19.387Z" }, +] + [[package]] name = "opentelemetry-exporter-otlp-proto-common" version = "1.39.1" @@ -2576,6 +2697,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8c/02/ffc3e143d89a27ac21fd557365b98bd0653b98de8a101151d5805b5d4c33/opentelemetry_exporter_otlp_proto_common-1.39.1-py3-none-any.whl", hash = "sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde", size = 18366, upload-time = "2025-12-11T13:32:20.2Z" }, ] +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.39.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos" }, + { name = "grpcio" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-common" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/48/b329fed2c610c2c32c9366d9dc597202c9d1e58e631c137ba15248d8850f/opentelemetry_exporter_otlp_proto_grpc-1.39.1.tar.gz", hash = "sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad", size = 24650, upload-time = "2025-12-11T13:32:41.429Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/a3/cc9b66575bd6597b98b886a2067eea2693408d2d5f39dad9ab7fc264f5f3/opentelemetry_exporter_otlp_proto_grpc-1.39.1-py3-none-any.whl", hash = "sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18", size = 19766, upload-time = "2025-12-11T13:32:21.027Z" }, +] + [[package]] name = "opentelemetry-exporter-otlp-proto-http" version = "1.39.1" @@ -2760,11 +2899,11 @@ wheels = [ [[package]] name = "packaging" -version = "25.0" +version = "24.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, ] [[package]] @@ -3549,6 +3688,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862, upload-time = "2025-09-08T23:09:56.509Z" }, ] +[[package]] +name = "ragas" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appdirs" }, + { name = "datasets" }, + { name = "diskcache" }, + { name = "instructor" }, + { name = "langchain" }, + { name = "langchain-community" }, + { name = "langchain-core" }, + { name = "langchain-openai" }, + { name = "nest-asyncio" }, + { name = "networkx" }, + { name = "numpy" }, + { name = "openai" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "rich" }, + { name = "scikit-network" }, + { name = "tiktoken" }, + { name = "tqdm" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d2/bc/3234517692ac0ffae1ec2ec940992e4057844c49ee6c51c07ce385bb98f1/ragas-0.4.3.tar.gz", hash = "sha256:1eb1f61dbc8613ad014fdb8d630cbe9a1caec1ea01664a106993cb756128c001", size = 44029626, upload-time = "2026-01-13T17:48:01.043Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/e0/1fecd22c93d3ed66453cbbdefd05528331af4d33b2b76a370d751231912c/ragas-0.4.3-py3-none-any.whl", hash = "sha256:ef1d75f674c294e9a6e7d8e9ad261b6bf4697dad1c9cbd1a756ba7a6b4849a38", size = 466452, upload-time = "2026-01-13T17:47:59.2Z" }, +] + [[package]] name = "referencing" version = "0.37.0" @@ -3945,6 +4114,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/60/22/d7b2ebe4704a5e50790ba089d5c2ae308ab6bb852719e6c3bd4f04c3a363/scikit_learn-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f28dd15c6bb0b66ba09728cf09fd8736c304be29409bd8445a080c1280619e8c", size = 8002647, upload-time = "2025-12-10T07:08:51.601Z" }, ] +[[package]] +name = "scikit-network" +version = "0.33.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/6d/28b00fbef9ff7d8ba31861bf16705a1a74a1696fb65aab2a7c584f966bec/scikit_network-0.33.5.tar.gz", hash = "sha256:ae2149d9a280fdc4bbadd5f8a7b17c8af61c054bc3f834792bc61483e6783c12", size = 1784205, upload-time = "2025-11-19T09:45:14.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/ed/4a14f48ae7eceeb4bc2085c9467e7dda487b8728261a2556a3d2fdc99b0e/scikit_network-0.33.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38a5a55f125b9ff574b085994e6374f783469faf1542d140c1630ad2c14127b9", size = 2854152, upload-time = "2025-11-19T09:44:43.049Z" }, + { url = "https://files.pythonhosted.org/packages/30/f9/71e225866bedaf6256ba3cd720c5bdbbe4828df7574d3c9cb741789b0f85/scikit_network-0.33.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6d796382dd914ccaa7d3fb990e148f5f095817690f07119d614f4d5bd63b347e", size = 2840146, upload-time = "2025-11-19T09:44:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/a0/ac/ed64fbc2a21074aa399d3e527695f4d4bb35be3346b5e09edf0637d58080/scikit_network-0.33.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:406af38a07ee1d631b62616496013fc5d941fffb5221fdb9e9091b87352a3f0c", size = 8005762, upload-time = "2025-11-19T09:44:47.186Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8e/9631ea79d6144d746e9a73e79d392656ae0c1d2989b8183f4f13134ad253/scikit_network-0.33.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d001988f07abe03ef4d8189da148968ad520f8cb8666d9ecee0d51c277bd466", size = 8061688, upload-time = "2025-11-19T09:44:49.034Z" }, + { url = "https://files.pythonhosted.org/packages/05/d2/26d21c25245204ef0ac6dfd047e8b6181bdc40d486dd9daadaadfed1c0e6/scikit_network-0.33.5-cp311-cp311-win_amd64.whl", hash = "sha256:8b9338feb0b2bae0f32ddd77453125b4e6c2d365cfb1bb1334b016888466e42f", size = 2738782, upload-time = "2025-11-19T09:44:50.881Z" }, + { url = "https://files.pythonhosted.org/packages/72/32/f092fca9a3ae256e0608ec6a4d8830023ea4ae478c2e27e94cf5802824f0/scikit_network-0.33.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ced625228be1632595d11adaf22d61d1d4c788909cd4d8c364e720b2814aac7f", size = 2874698, upload-time = "2025-11-19T09:44:52.765Z" }, + { url = "https://files.pythonhosted.org/packages/4b/c7/5b2ce72f93b422af48a2b755fbcbab271bf980a6b46484f754d63978f1ff/scikit_network-0.33.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:808b625d28005c24b47cbdf65f780a3a355aa4080992e6b78f03434e873d06e6", size = 2854224, upload-time = "2025-11-19T09:44:55.574Z" }, + { url = "https://files.pythonhosted.org/packages/86/02/974ae67f493ccf988108894e8a9dedfd00ca5113d2848e0b9fc2a4d18824/scikit_network-0.33.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9f2d98059cd79bdb935ff6a638f1c3a12b0b1cb7ace9e1d3fb35476eeeaabaa", size = 7924650, upload-time = "2025-11-19T09:44:57.704Z" }, + { url = "https://files.pythonhosted.org/packages/8d/34/b67e48e111916a6f09fe29a971a9716c14f78525e0ab7c46e6a6538cf2f6/scikit_network-0.33.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aac2d3bc14214f02dac300624f5ec2650af9a98b52f304d300f0ec2813a0e544", size = 8012322, upload-time = "2025-11-19T09:45:00.079Z" }, + { url = "https://files.pythonhosted.org/packages/c3/a2/49293b53b837b3248d19fffd41a9fd73dcb2eeabbab890cc4c8aa237b545/scikit_network-0.33.5-cp312-cp312-win_amd64.whl", hash = "sha256:2866b16aed9ef25ba42cb2f2e44ef2ad079337f336ce48d0604b55fa4af87688", size = 2746491, upload-time = "2025-11-19T09:45:01.997Z" }, + { url = "https://files.pythonhosted.org/packages/d6/cd/0069244e970d27fa0ab0512394295a106605f00c271e85618182460d2c92/scikit_network-0.33.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aa8b490a777e081dd6f69627a26b50cc4012f27fff683a1e4828819a88a5dcf2", size = 2862564, upload-time = "2025-11-19T09:45:03.93Z" }, + { url = "https://files.pythonhosted.org/packages/51/37/85454864e50a65e528fe3b15eb3b41eb68b0c7f6d5c51c220b3198622ede/scikit_network-0.33.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3615d073ba9ae1ae30dda2de747474cd23c86cededa82b317471ee9f9bebd1b2", size = 2842521, upload-time = "2025-11-19T09:45:06.31Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b9/4023f35e430b51020f17b0f1d8933768cf1ed7cd1623cc089f5543048983/scikit_network-0.33.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2408d3f4c81256a3193d536aad4a6ffcfbb05d096abe6a9cc0b6b5e275df876d", size = 7871695, upload-time = "2025-11-19T09:45:08.101Z" }, + { url = "https://files.pythonhosted.org/packages/8e/ec/e50755f7459130ba745c42c37665c5ae9a7c7e357f43400b5b8b966f902e/scikit_network-0.33.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:526490a1e0e8e49ad0f4cca193f581d60082a2fa8c9a825eb0b6936050b0d02b", size = 7968762, upload-time = "2025-11-19T09:45:10.347Z" }, + { url = "https://files.pythonhosted.org/packages/45/2a/616974a0adb9d04a791570e9371caaef14c54f8806b04dd59c80a7b60289/scikit_network-0.33.5-cp313-cp313-win_amd64.whl", hash = "sha256:722c15fcede5e07ac008354bbd6ef375e0f5bf1fd52bd40271775997be2fb715", size = 2742482, upload-time = "2025-11-19T09:45:12.843Z" }, +] + [[package]] name = "scipy" version = "1.17.1" @@ -4288,6 +4484,60 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, ] +[[package]] +name = "tiktoken" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "regex" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/4d017d0f76ec3171d469d80fc03dfbb4e48a4bcaddaa831b31d526f05edc/tiktoken-0.12.0.tar.gz", hash = "sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931", size = 37806, upload-time = "2025-10-06T20:22:45.419Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/46/21ea696b21f1d6d1efec8639c204bdf20fde8bafb351e1355c72c5d7de52/tiktoken-0.12.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb", size = 1051565, upload-time = "2025-10-06T20:21:44.566Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d9/35c5d2d9e22bb2a5f74ba48266fb56c63d76ae6f66e02feb628671c0283e/tiktoken-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa", size = 995284, upload-time = "2025-10-06T20:21:45.622Z" }, + { url = "https://files.pythonhosted.org/packages/01/84/961106c37b8e49b9fdcf33fe007bb3a8fdcc380c528b20cc7fbba80578b8/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc", size = 1129201, upload-time = "2025-10-06T20:21:47.074Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d0/3d9275198e067f8b65076a68894bb52fd253875f3644f0a321a720277b8a/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded", size = 1152444, upload-time = "2025-10-06T20:21:48.139Z" }, + { url = "https://files.pythonhosted.org/packages/78/db/a58e09687c1698a7c592e1038e01c206569b86a0377828d51635561f8ebf/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd", size = 1195080, upload-time = "2025-10-06T20:21:49.246Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1b/a9e4d2bf91d515c0f74afc526fd773a812232dd6cda33ebea7f531202325/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967", size = 1255240, upload-time = "2025-10-06T20:21:50.274Z" }, + { url = "https://files.pythonhosted.org/packages/9d/15/963819345f1b1fb0809070a79e9dd96938d4ca41297367d471733e79c76c/tiktoken-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def", size = 879422, upload-time = "2025-10-06T20:21:51.734Z" }, + { url = "https://files.pythonhosted.org/packages/a4/85/be65d39d6b647c79800fd9d29241d081d4eeb06271f383bb87200d74cf76/tiktoken-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8", size = 1050728, upload-time = "2025-10-06T20:21:52.756Z" }, + { url = "https://files.pythonhosted.org/packages/4a/42/6573e9129bc55c9bf7300b3a35bef2c6b9117018acca0dc760ac2d93dffe/tiktoken-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b", size = 994049, upload-time = "2025-10-06T20:21:53.782Z" }, + { url = "https://files.pythonhosted.org/packages/66/c5/ed88504d2f4a5fd6856990b230b56d85a777feab84e6129af0822f5d0f70/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37", size = 1129008, upload-time = "2025-10-06T20:21:54.832Z" }, + { url = "https://files.pythonhosted.org/packages/f4/90/3dae6cc5436137ebd38944d396b5849e167896fc2073da643a49f372dc4f/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad", size = 1152665, upload-time = "2025-10-06T20:21:56.129Z" }, + { url = "https://files.pythonhosted.org/packages/a3/fe/26df24ce53ffde419a42f5f53d755b995c9318908288c17ec3f3448313a3/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5", size = 1194230, upload-time = "2025-10-06T20:21:57.546Z" }, + { url = "https://files.pythonhosted.org/packages/20/cc/b064cae1a0e9fac84b0d2c46b89f4e57051a5f41324e385d10225a984c24/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3", size = 1254688, upload-time = "2025-10-06T20:21:58.619Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/b8523105c590c5b8349f2587e2fdfe51a69544bd5a76295fc20f2374f470/tiktoken-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd", size = 878694, upload-time = "2025-10-06T20:21:59.876Z" }, + { url = "https://files.pythonhosted.org/packages/00/61/441588ee21e6b5cdf59d6870f86beb9789e532ee9718c251b391b70c68d6/tiktoken-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3", size = 1050802, upload-time = "2025-10-06T20:22:00.96Z" }, + { url = "https://files.pythonhosted.org/packages/1f/05/dcf94486d5c5c8d34496abe271ac76c5b785507c8eae71b3708f1ad9b45a/tiktoken-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160", size = 993995, upload-time = "2025-10-06T20:22:02.788Z" }, + { url = "https://files.pythonhosted.org/packages/a0/70/5163fe5359b943f8db9946b62f19be2305de8c3d78a16f629d4165e2f40e/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa", size = 1128948, upload-time = "2025-10-06T20:22:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/0c/da/c028aa0babf77315e1cef357d4d768800c5f8a6de04d0eac0f377cb619fa/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be", size = 1151986, upload-time = "2025-10-06T20:22:05.173Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5a/886b108b766aa53e295f7216b509be95eb7d60b166049ce2c58416b25f2a/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a", size = 1194222, upload-time = "2025-10-06T20:22:06.265Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f8/4db272048397636ac7a078d22773dd2795b1becee7bc4922fe6207288d57/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3", size = 1255097, upload-time = "2025-10-06T20:22:07.403Z" }, + { url = "https://files.pythonhosted.org/packages/8e/32/45d02e2e0ea2be3a9ed22afc47d93741247e75018aac967b713b2941f8ea/tiktoken-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697", size = 879117, upload-time = "2025-10-06T20:22:08.418Z" }, + { url = "https://files.pythonhosted.org/packages/ce/76/994fc868f88e016e6d05b0da5ac24582a14c47893f4474c3e9744283f1d5/tiktoken-0.12.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16", size = 1050309, upload-time = "2025-10-06T20:22:10.939Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b8/57ef1456504c43a849821920d582a738a461b76a047f352f18c0b26c6516/tiktoken-0.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a", size = 993712, upload-time = "2025-10-06T20:22:12.115Z" }, + { url = "https://files.pythonhosted.org/packages/72/90/13da56f664286ffbae9dbcfadcc625439142675845baa62715e49b87b68b/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27", size = 1128725, upload-time = "2025-10-06T20:22:13.541Z" }, + { url = "https://files.pythonhosted.org/packages/05/df/4f80030d44682235bdaecd7346c90f67ae87ec8f3df4a3442cb53834f7e4/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb", size = 1151875, upload-time = "2025-10-06T20:22:14.559Z" }, + { url = "https://files.pythonhosted.org/packages/22/1f/ae535223a8c4ef4c0c1192e3f9b82da660be9eb66b9279e95c99288e9dab/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e", size = 1194451, upload-time = "2025-10-06T20:22:15.545Z" }, + { url = "https://files.pythonhosted.org/packages/78/a7/f8ead382fce0243cb625c4f266e66c27f65ae65ee9e77f59ea1653b6d730/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25", size = 1253794, upload-time = "2025-10-06T20:22:16.624Z" }, + { url = "https://files.pythonhosted.org/packages/93/e0/6cc82a562bc6365785a3ff0af27a2a092d57c47d7a81d9e2295d8c36f011/tiktoken-0.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f", size = 878777, upload-time = "2025-10-06T20:22:18.036Z" }, + { url = "https://files.pythonhosted.org/packages/72/05/3abc1db5d2c9aadc4d2c76fa5640134e475e58d9fbb82b5c535dc0de9b01/tiktoken-0.12.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646", size = 1050188, upload-time = "2025-10-06T20:22:19.563Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7b/50c2f060412202d6c95f32b20755c7a6273543b125c0985d6fa9465105af/tiktoken-0.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88", size = 993978, upload-time = "2025-10-06T20:22:20.702Z" }, + { url = "https://files.pythonhosted.org/packages/14/27/bf795595a2b897e271771cd31cb847d479073497344c637966bdf2853da1/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff", size = 1129271, upload-time = "2025-10-06T20:22:22.06Z" }, + { url = "https://files.pythonhosted.org/packages/f5/de/9341a6d7a8f1b448573bbf3425fa57669ac58258a667eb48a25dfe916d70/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830", size = 1151216, upload-time = "2025-10-06T20:22:23.085Z" }, + { url = "https://files.pythonhosted.org/packages/75/0d/881866647b8d1be4d67cb24e50d0c26f9f807f994aa1510cb9ba2fe5f612/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b", size = 1194860, upload-time = "2025-10-06T20:22:24.602Z" }, + { url = "https://files.pythonhosted.org/packages/b3/1e/b651ec3059474dab649b8d5b69f5c65cd8fcd8918568c1935bd4136c9392/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b", size = 1254567, upload-time = "2025-10-06T20:22:25.671Z" }, + { url = "https://files.pythonhosted.org/packages/80/57/ce64fd16ac390fafde001268c364d559447ba09b509181b2808622420eec/tiktoken-0.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3", size = 921067, upload-time = "2025-10-06T20:22:26.753Z" }, + { url = "https://files.pythonhosted.org/packages/ac/a4/72eed53e8976a099539cdd5eb36f241987212c29629d0a52c305173e0a68/tiktoken-0.12.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365", size = 1050473, upload-time = "2025-10-06T20:22:27.775Z" }, + { url = "https://files.pythonhosted.org/packages/e6/d7/0110b8f54c008466b19672c615f2168896b83706a6611ba6e47313dbc6e9/tiktoken-0.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e", size = 993855, upload-time = "2025-10-06T20:22:28.799Z" }, + { url = "https://files.pythonhosted.org/packages/5f/77/4f268c41a3957c418b084dd576ea2fad2e95da0d8e1ab705372892c2ca22/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63", size = 1129022, upload-time = "2025-10-06T20:22:29.981Z" }, + { url = "https://files.pythonhosted.org/packages/4e/2b/fc46c90fe5028bd094cd6ee25a7db321cb91d45dc87531e2bdbb26b4867a/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0", size = 1150736, upload-time = "2025-10-06T20:22:30.996Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/3c7a39ff68022ddfd7d93f3337ad90389a342f761c4d71de99a3ccc57857/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a", size = 1194908, upload-time = "2025-10-06T20:22:32.073Z" }, + { url = "https://files.pythonhosted.org/packages/ab/0d/c1ad6f4016a3968c048545f5d9b8ffebf577774b2ede3e2e352553b685fe/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0", size = 1253706, upload-time = "2025-10-06T20:22:33.385Z" }, + { url = "https://files.pythonhosted.org/packages/af/df/c7891ef9d2712ad774777271d39fdef63941ffba0a9d59b7ad1fd2765e57/tiktoken-0.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71", size = 920667, upload-time = "2025-10-06T20:22:34.444Z" }, +] + [[package]] name = "tinycss2" version = "1.4.0" @@ -4464,22 +4714,23 @@ wheels = [ [[package]] name = "transformers" -version = "5.2.0" +version = "4.57.6" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "filelock" }, { name = "huggingface-hub" }, { name = "numpy" }, { name = "packaging" }, { name = "pyyaml" }, { name = "regex" }, + { name = "requests" }, { name = "safetensors" }, { name = "tokenizers" }, { name = "tqdm" }, - { name = "typer-slim" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bd/7e/8a0c57d562015e5b16c97c1f0b8e0e92ead2c7c20513225dc12c2043ba9f/transformers-5.2.0.tar.gz", hash = "sha256:0088b8b46ccc9eff1a1dca72b5d618a5ee3b1befc3e418c9512b35dea9f9a650", size = 8618176, upload-time = "2026-02-16T18:54:02.867Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/35/67252acc1b929dc88b6602e8c4a982e64f31e733b804c14bc24b47da35e6/transformers-4.57.6.tar.gz", hash = "sha256:55e44126ece9dc0a291521b7e5492b572e6ef2766338a610b9ab5afbb70689d3", size = 10134912, upload-time = "2026-01-16T10:38:39.284Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/93/79754b0ca486e556c2b95d4f5afc66aaf4b260694f3d6e1b51da2d036691/transformers-5.2.0-py3-none-any.whl", hash = "sha256:9ecaf243dc45bee11a7d93f8caf03746accc0cb069181bbf4ad8566c53e854b4", size = 10403304, upload-time = "2026-02-16T18:53:59.699Z" }, + { url = "https://files.pythonhosted.org/packages/03/b8/e484ef633af3887baeeb4b6ad12743363af7cce68ae51e938e00aaa0529d/transformers-4.57.6-py3-none-any.whl", hash = "sha256:4c9e9de11333ddfe5114bc872c9f370509198acf0b87a832a0ab9458e2bd0550", size = 11993498, upload-time = "2026-01-16T10:38:31.289Z" }, ] [[package]] @@ -4510,18 +4761,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl", hash = "sha256:112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e", size = 56085, upload-time = "2026-02-21T16:54:41.616Z" }, ] -[[package]] -name = "typer-slim" -version = "0.24.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typer" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a7/a7/e6aecc4b4eb59598829a3b5076a93aff291b4fdaa2ded25efc4e1f4d219c/typer_slim-0.24.0.tar.gz", hash = "sha256:f0ed36127183f52ae6ced2ecb2521789995992c521a46083bfcdbb652d22ad34", size = 4776, upload-time = "2026-02-16T22:08:51.2Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl", hash = "sha256:d5d7ee1ee2834d5020c7c616ed5e0d0f29b9a4b1dd283bdebae198ec09778d0e", size = 3394, upload-time = "2026-02-16T22:08:49.92Z" }, -] - [[package]] name = "typing-extensions" version = "4.15.0"