selectools 0.25.1__tar.gz → 0.26.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {selectools-0.25.1/src/selectools.egg-info → selectools-0.26.0}/PKG-INFO +16 -3
- {selectools-0.25.1 → selectools-0.26.0}/README.md +15 -2
- {selectools-0.25.1 → selectools-0.26.0}/pyproject.toml +1 -1
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/__init__.py +1 -1
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/a2a/server.py +6 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/embeddings/gemini.py +35 -9
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/models.py +230 -515
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/pending.py +22 -1
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/pricing.py +41 -8
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/anthropic_provider.py +18 -10
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/_static/builder.js +17 -14
- {selectools-0.25.1 → selectools-0.26.0/src/selectools.egg-info}/PKG-INFO +16 -3
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools.egg-info/SOURCES.txt +1 -0
- selectools-0.26.0/tests/test_bake_window_hunt.py +115 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_token_estimation.py +3 -3
- {selectools-0.25.1 → selectools-0.26.0}/LICENSE +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/setup.cfg +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/_async_utils.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/_json_utils.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/a2a/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/a2a/client.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/a2a/types.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/agent/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/agent/_lifecycle.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/agent/_memory_manager.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/agent/_planning.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/agent/_provider_caller.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/agent/_tool_executor.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/agent/config.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/agent/config_groups.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/agent/core.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/analytics.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/audit.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/cache.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/cache_redis.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/cache_semantic.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/cancellation.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/checkpoint_postgres.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/coherence.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/compose.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/embeddings/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/embeddings/anthropic.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/embeddings/cohere.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/embeddings/openai.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/embeddings/provider.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/entity_memory.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/env.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/__main__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/badge.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/dataset.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/evaluators.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/generator.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/history.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/html.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/junit.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/llm_evaluators.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/pairwise.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/regression.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/report.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/serve.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/snapshot.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/suite.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/templates.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/evals/types.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/exceptions.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/guardrails/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/guardrails/base.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/guardrails/format.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/guardrails/length.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/guardrails/pii.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/guardrails/pipeline.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/guardrails/topic.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/guardrails/toxicity.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/knowledge.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/knowledge_backends.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/knowledge_graph.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/knowledge_sanitizers.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/knowledge_store_redis.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/knowledge_store_supabase.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/loop_detection.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/mcp/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/mcp/_loop.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/mcp/bridge.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/mcp/client.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/mcp/config.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/mcp/multi.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/mcp/server.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/memory.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/observe/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/observe/langfuse.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/observe/otel.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/observe/trace_store.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/observer.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/orchestration/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/orchestration/checkpoint.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/orchestration/graph.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/orchestration/node.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/orchestration/state.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/orchestration/supervisor.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/parser.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/patterns/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/patterns/debate.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/patterns/plan_and_execute.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/patterns/reflective.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/patterns/team_lead.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/pipeline.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/policy.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/prompt.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/_openai_compat.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/azure_openai_provider.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/base.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/fallback.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/gemini_provider.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/litellm_provider.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/ollama_provider.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/openai_provider.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/router.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/providers/stubs.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/bm25.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/chunking.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/hybrid.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/loaders.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/reranker.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/stores/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/stores/chroma.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/stores/faiss.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/stores/memory.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/stores/pgvector.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/stores/pinecone.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/stores/qdrant.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/stores/sqlite.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/rag/vector_store.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/results.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/security.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/_starlette_app.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/_static/builder.css +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/_static/builder.html +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/api.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/app.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/builder.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/cli.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/models.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/serve/playground.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/sessions.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/stability.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/structured.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/templates/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/templates/code_reviewer.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/templates/customer_support.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/templates/data_analyst.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/templates/rag_chatbot.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/templates/research_assistant.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/token_estimation.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/calculator_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/code_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/data_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/datetime_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/db_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/email_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/file_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/github_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/linear_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/memory_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/notion_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/pdf_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/search_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/slack_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/text_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/toolbox/web_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/tools/__init__.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/tools/base.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/tools/decorators.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/tools/loader.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/tools/registry.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/trace.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/types.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/unified_memory.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools/usage.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools.egg-info/dependency_links.txt +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools.egg-info/entry_points.txt +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools.egg-info/requires.txt +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/src/selectools.egg-info/top_level.txt +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_a2a.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_agent_api.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_agent_hitl.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_approval_gate.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_architecture.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_async_observers.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_audit.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_budget.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_bug_hunt_batch1_core.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_bug_hunt_batch1_security.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_bug_hunt_batch1_tools.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_bug_hunt_regression.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_cache.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_cache_redis.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_cancellation.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_checkpoint_postgres.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_coherence.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_concurrency_smoke.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_consolidation_regression.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_conversation_branching.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_coverage_orchestration.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_document_loaders_extended.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_e2e_langfuse_observer.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_e2e_multimodal.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_e2e_otel_observer.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_e2e_v0_21_0_apps.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_e2e_v0_21_0_simulations.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_entity_memory.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_env.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_advanced.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_cli.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_e2e.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_final.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_hardening.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_html_report.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_new_evaluators.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_ralph_bugs.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_release.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_serve.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_v017_features.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_evals_v0191.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_features_in_graph.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_final_coverage_a.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_final_coverage_b.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_guardrails.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_hardening.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_knowledge.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_knowledge_backend.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_knowledge_backend_redis.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_knowledge_backend_supabase.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_knowledge_graph.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_knowledge_sanitizers.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_knowledge_store_redis.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_knowledge_store_supabase.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_knowledge_stores.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_knowledge_stores_error_handling.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_langfuse_observer.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_loop_detection.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_mcp.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_mcp_coverage.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_memory.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_memory_async.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_memory_boundary.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_memory_integration.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_model_switching.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_multi_agent_edge_cases.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_multimodal.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_orchestration_checkpoint.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_orchestration_e2e.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_orchestration_evals.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_orchestration_graph.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_orchestration_integration.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_orchestration_primitives.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_orchestration_supervisor.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_otel_observer.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_parser.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_patterns.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_pending.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_pending_redis_smoke.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_phase1_design_patterns.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_pipeline.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_pipeline_coverage.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_policy.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_prompt.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_prompt_compression.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_property_based.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_reasoning_strategy.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_remaining_coverage.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_results.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_routing_mode.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_security.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_semantic_cache.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_serve_app_coverage.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_serve_cli.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_sessions.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_sessions_edge_cases.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_sessions_redis.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_sessions_supabase.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_simple_observer.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_simulation_evals.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_stability.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_starlette_app.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_structured.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_structured_config.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_structured_tool_results.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_summarize_on_trim.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_templates_coverage.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_terminal_actions.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_tool_caching.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_tool_result_compression.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_trace.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_trace_html.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_trace_store.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_unified_memory.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_v016_regression.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_v019_features.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_visual_builder.py +0 -0
- {selectools-0.25.1 → selectools-0.26.0}/tests/test_yaml_config.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: selectools
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.26.0
|
|
4
4
|
Summary: Production-ready Python framework for AI agents with multi-agent graphs, hybrid RAG, guardrails, audit logging, 50 evaluators, and a visual builder. Supports OpenAI, Anthropic, Gemini, Ollama. By NichevLabs.
|
|
5
5
|
Author-email: John Nichev <johnnichev@gmail.com>
|
|
6
6
|
Maintainer-email: NichevLabs <support@nichevlabs.com>
|
|
@@ -108,6 +108,19 @@ result = AgentGraph.chain(planner, writer, reviewer).run("Write a blog post")
|
|
|
108
108
|
# selectools serve agent.yaml
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
+
## What's New in v0.26
|
|
112
|
+
|
|
113
|
+
### v0.26.0 — Safety Patch & Verified Registry
|
|
114
|
+
|
|
115
|
+
A mid-bake safety patch plus a fully source-verified model registry.
|
|
116
|
+
|
|
117
|
+
- **Confirm parser safety fix** — `RegexConfirmParser` treated replies like "se você não pode apagar, tudo bem" / "tú no puedes borrar" as confirmations: the restated-verb branch matched the action verb without checking for negation elsewhere in the reply. A negation token anywhere now vetoes that branch; bare confirms are unaffected. **All `selectools.pending` consumers should upgrade immediately.**
|
|
118
|
+
- **Model registry refresh** — 152 → 115 models, every entry source-verified: claude-fable-5 / opus-4-8 / opus-4-7, the gpt-5.5 family, and the gemini-3.5 line added; retired and shut-down models removed (**BREAKING** if you referenced their registry constants — e.g. `AnthropicModels.CLAUDE_3_5_SONNET` — but those IDs 404 at their providers regardless); `claude-opus-4-1` mispricing corrected ($5/$25 → $15/$75); gpt-5 family context specs fixed (400k/128k); `GeminiEmbeddingProvider` default moved off the retired `text-embedding-004` to `gemini-embedding-001`.
|
|
119
|
+
- **Cache-aware cost calculation** — `calculate_cost(..., cache_read_input_tokens=..., cache_creation_input_tokens=...)` prices prompt-cache traffic at Anthropic's published rates (reads 0.1×, 5-min writes 1.25×); `AnthropicProvider`'s `UsageStats.cost_usd` is now cache-accurate.
|
|
120
|
+
- **Fixes** — A2A returns JSON-RPC -32602 (not HTTP 500) for non-dict `message.parts` elements; Gemini embedding dimension constant corrected to the actual 3072 for `gemini-embedding-001`/`-2` (vectors themselves unchanged); bake-hunt test module no longer requires optional extras in CI.
|
|
121
|
+
|
|
122
|
+
See `CHANGELOG.md` for the full entry (7,420 tests, 111 examples, 115 models).
|
|
123
|
+
|
|
111
124
|
## What's New in v0.25
|
|
112
125
|
|
|
113
126
|
### v0.25.0 — Hardening & v1.0 Prep
|
|
@@ -659,7 +672,7 @@ report.to_html("report.html")
|
|
|
659
672
|
- **Advanced Chunking**: Semantic + contextual chunking for better retrieval
|
|
660
673
|
- **Dynamic Tool Loading**: Plugin system with hot-reload support
|
|
661
674
|
- **Response Caching**: InMemoryCache and RedisCache with stats tracking
|
|
662
|
-
- **
|
|
675
|
+
- **115 Model Registry**: Type-safe constants with pricing and metadata
|
|
663
676
|
- **Pre-built Toolbox**: 48 tools for files, data, text, datetime, web, code, search, GitHub, DB, calculator, email, PDF, Slack, Notion, Linear
|
|
664
677
|
- **Persistent Sessions**: 4 backends (JSON file, SQLite, Redis, Supabase) with TTL and cross-session search
|
|
665
678
|
- **Entity Memory**: LLM-based named entity extraction and tracking
|
|
@@ -1035,7 +1048,7 @@ See [docs/modules/STREAMING.md](https://github.com/johnnichev/selectools/blob/ma
|
|
|
1035
1048
|
```python
|
|
1036
1049
|
from selectools.models import OpenAI, Anthropic, Gemini, Ollama
|
|
1037
1050
|
|
|
1038
|
-
# IDE autocomplete for all
|
|
1051
|
+
# IDE autocomplete for all 115 models with pricing metadata
|
|
1039
1052
|
model = OpenAI.GPT_4O_MINI
|
|
1040
1053
|
print(f"Cost: ${model.prompt_cost}/${model.completion_cost} per 1M tokens")
|
|
1041
1054
|
print(f"Context: {model.context_window:,} tokens")
|
|
@@ -30,6 +30,19 @@ result = AgentGraph.chain(planner, writer, reviewer).run("Write a blog post")
|
|
|
30
30
|
# selectools serve agent.yaml
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
## What's New in v0.26
|
|
34
|
+
|
|
35
|
+
### v0.26.0 — Safety Patch & Verified Registry
|
|
36
|
+
|
|
37
|
+
A mid-bake safety patch plus a fully source-verified model registry.
|
|
38
|
+
|
|
39
|
+
- **Confirm parser safety fix** — `RegexConfirmParser` treated replies like "se você não pode apagar, tudo bem" / "tú no puedes borrar" as confirmations: the restated-verb branch matched the action verb without checking for negation elsewhere in the reply. A negation token anywhere now vetoes that branch; bare confirms are unaffected. **All `selectools.pending` consumers should upgrade immediately.**
|
|
40
|
+
- **Model registry refresh** — 152 → 115 models, every entry source-verified: claude-fable-5 / opus-4-8 / opus-4-7, the gpt-5.5 family, and the gemini-3.5 line added; retired and shut-down models removed (**BREAKING** if you referenced their registry constants — e.g. `AnthropicModels.CLAUDE_3_5_SONNET` — but those IDs 404 at their providers regardless); `claude-opus-4-1` mispricing corrected ($5/$25 → $15/$75); gpt-5 family context specs fixed (400k/128k); `GeminiEmbeddingProvider` default moved off the retired `text-embedding-004` to `gemini-embedding-001`.
|
|
41
|
+
- **Cache-aware cost calculation** — `calculate_cost(..., cache_read_input_tokens=..., cache_creation_input_tokens=...)` prices prompt-cache traffic at Anthropic's published rates (reads 0.1×, 5-min writes 1.25×); `AnthropicProvider`'s `UsageStats.cost_usd` is now cache-accurate.
|
|
42
|
+
- **Fixes** — A2A returns JSON-RPC -32602 (not HTTP 500) for non-dict `message.parts` elements; Gemini embedding dimension constant corrected to the actual 3072 for `gemini-embedding-001`/`-2` (vectors themselves unchanged); bake-hunt test module no longer requires optional extras in CI.
|
|
43
|
+
|
|
44
|
+
See `CHANGELOG.md` for the full entry (7,420 tests, 111 examples, 115 models).
|
|
45
|
+
|
|
33
46
|
## What's New in v0.25
|
|
34
47
|
|
|
35
48
|
### v0.25.0 — Hardening & v1.0 Prep
|
|
@@ -581,7 +594,7 @@ report.to_html("report.html")
|
|
|
581
594
|
- **Advanced Chunking**: Semantic + contextual chunking for better retrieval
|
|
582
595
|
- **Dynamic Tool Loading**: Plugin system with hot-reload support
|
|
583
596
|
- **Response Caching**: InMemoryCache and RedisCache with stats tracking
|
|
584
|
-
- **
|
|
597
|
+
- **115 Model Registry**: Type-safe constants with pricing and metadata
|
|
585
598
|
- **Pre-built Toolbox**: 48 tools for files, data, text, datetime, web, code, search, GitHub, DB, calculator, email, PDF, Slack, Notion, Linear
|
|
586
599
|
- **Persistent Sessions**: 4 backends (JSON file, SQLite, Redis, Supabase) with TTL and cross-session search
|
|
587
600
|
- **Entity Memory**: LLM-based named entity extraction and tracking
|
|
@@ -957,7 +970,7 @@ See [docs/modules/STREAMING.md](https://github.com/johnnichev/selectools/blob/ma
|
|
|
957
970
|
```python
|
|
958
971
|
from selectools.models import OpenAI, Anthropic, Gemini, Ollama
|
|
959
972
|
|
|
960
|
-
# IDE autocomplete for all
|
|
973
|
+
# IDE autocomplete for all 115 models with pricing metadata
|
|
961
974
|
model = OpenAI.GPT_4O_MINI
|
|
962
975
|
print(f"Cost: ${model.prompt_cost}/${model.completion_cost} per 1M tokens")
|
|
963
976
|
print(f"Context: {model.context_window:,} tokens")
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "selectools"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.26.0"
|
|
8
8
|
description = "Production-ready Python framework for AI agents with multi-agent graphs, hybrid RAG, guardrails, audit logging, 50 evaluators, and a visual builder. Supports OpenAI, Anthropic, Gemini, Ollama. By NichevLabs."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -94,6 +94,10 @@ def _extract_prompt(parts: List[Dict[str, Any]]) -> str:
|
|
|
94
94
|
"""
|
|
95
95
|
chunks: List[str] = []
|
|
96
96
|
for part in parts:
|
|
97
|
+
if not isinstance(part, dict):
|
|
98
|
+
# Defensive: validation rejects non-dict parts up front, but a
|
|
99
|
+
# stray list element must never crash prompt assembly.
|
|
100
|
+
continue
|
|
97
101
|
kind = part.get("kind")
|
|
98
102
|
if kind == "text" and isinstance(part.get("text"), str):
|
|
99
103
|
chunks.append(part["text"])
|
|
@@ -300,6 +304,8 @@ class A2AServer:
|
|
|
300
304
|
parts = message.get("parts")
|
|
301
305
|
if not isinstance(parts, list) or not parts:
|
|
302
306
|
return None, "'message.parts' must be a non-empty array"
|
|
307
|
+
if not all(isinstance(p, dict) for p in parts):
|
|
308
|
+
return None, "every entry in 'message.parts' must be an object"
|
|
303
309
|
if not any(
|
|
304
310
|
isinstance(p, dict) and p.get("kind") == "text" and isinstance(p.get("text"), str)
|
|
305
311
|
for p in parts
|
|
@@ -16,14 +16,19 @@ class GeminiEmbeddingProvider(EmbeddingProvider):
|
|
|
16
16
|
"""
|
|
17
17
|
Google Gemini embedding provider.
|
|
18
18
|
|
|
19
|
-
Supports models:
|
|
19
|
+
Supports models: gemini-embedding-001, gemini-embedding-2
|
|
20
|
+
|
|
21
|
+
Requests do not set ``output_dimensionality``, so vectors come back at
|
|
22
|
+
each model's default dimensionality (3072 for gemini-embedding-001 and
|
|
23
|
+
gemini-embedding-2, which support MRL truncation but are not truncated
|
|
24
|
+
here). See ``_get_model_dimension`` for the full dimension/MRL story.
|
|
20
25
|
|
|
21
26
|
Example:
|
|
22
27
|
>>> from selectools.embeddings import GeminiEmbeddingProvider
|
|
23
28
|
>>> from selectools.models import Gemini
|
|
24
29
|
>>>
|
|
25
30
|
>>> embedder = GeminiEmbeddingProvider(
|
|
26
|
-
... model=Gemini.Embeddings.
|
|
31
|
+
... model=Gemini.Embeddings.EMBEDDING_001.id
|
|
27
32
|
... )
|
|
28
33
|
>>> embedding = embedder.embed_text("Hello, world!")
|
|
29
34
|
>>> print(f"Dimension: {len(embedding)}")
|
|
@@ -31,7 +36,9 @@ class GeminiEmbeddingProvider(EmbeddingProvider):
|
|
|
31
36
|
|
|
32
37
|
def __init__(
|
|
33
38
|
self,
|
|
34
|
-
|
|
39
|
+
# Default changed from text-embedding-004 (retired by Google) to its
|
|
40
|
+
# documented replacement gemini-embedding-001.
|
|
41
|
+
model: str = "gemini-embedding-001",
|
|
35
42
|
api_key: Optional[str] = None,
|
|
36
43
|
task_type: str = "retrieval_document",
|
|
37
44
|
):
|
|
@@ -39,7 +46,7 @@ class GeminiEmbeddingProvider(EmbeddingProvider):
|
|
|
39
46
|
Initialize Gemini embedding provider.
|
|
40
47
|
|
|
41
48
|
Args:
|
|
42
|
-
model: Model name (default:
|
|
49
|
+
model: Model name (default: gemini-embedding-001)
|
|
43
50
|
api_key: Google API key (defaults to GEMINI_API_KEY or GOOGLE_API_KEY env var)
|
|
44
51
|
task_type: Task type for embeddings (retrieval_document, retrieval_query,
|
|
45
52
|
semantic_similarity, classification, clustering)
|
|
@@ -64,12 +71,31 @@ class GeminiEmbeddingProvider(EmbeddingProvider):
|
|
|
64
71
|
self._dimension = self._get_model_dimension()
|
|
65
72
|
|
|
66
73
|
def _get_model_dimension(self) -> int:
|
|
67
|
-
"""Get the embedding dimension for the model.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
74
|
+
"""Get the embedding dimension for the model.
|
|
75
|
+
|
|
76
|
+
The declared dimension must match what the API actually returns. This
|
|
77
|
+
provider never passes ``output_dimensionality`` in its requests (see
|
|
78
|
+
``embed_text``/``embed_texts``/``embed_query``), so the API returns
|
|
79
|
+
each model's default, full-size vector:
|
|
80
|
+
|
|
81
|
+
- ``gemini-embedding-001`` and ``gemini-embedding-2``: 3072 by
|
|
82
|
+
default. Both are trained with Matryoshka Representation Learning
|
|
83
|
+
(MRL), so vectors *can* be truncated server-side (Google recommends
|
|
84
|
+
768, 1536, or 3072) by passing ``output_dimensionality`` — but this
|
|
85
|
+
provider does not request truncation, and existing vector store
|
|
86
|
+
indexes built with it hold 3072-dim vectors. Note that
|
|
87
|
+
``gemini-embedding-001`` only normalizes the full 3072-dim output;
|
|
88
|
+
truncated outputs would need manual re-normalization.
|
|
89
|
+
- ``text-embedding-004`` (retired by Google): natively 768.
|
|
90
|
+
|
|
91
|
+
Source: https://ai.google.dev/gemini-api/docs/embeddings
|
|
92
|
+
"""
|
|
93
|
+
if "embedding-004" in self.model:
|
|
72
94
|
return 768
|
|
95
|
+
if "embedding-001" in self.model or "embedding-2" in self.model:
|
|
96
|
+
return 3072
|
|
97
|
+
logger.warning(f"Unknown Gemini embedding model '{self.model}', assuming dimension 3072")
|
|
98
|
+
return 3072
|
|
73
99
|
|
|
74
100
|
def embed_text(self, text: str) -> List[float]:
|
|
75
101
|
"""
|