[project] authors = [ { name = "Jason Liu" }, { name = "Ivan Leo" }, ] maintainers = [ { email = "jason@jxnl.co" }, { email = "ivan@jxnl.co" }, ] license = { text = "MIT" } requires-python = "<4.0,>=3.9" dependencies = [ "openai>=2.0.0,<3.0.0", "pydantic<3.0.0,>=2.8.0", "eval-type-backport>=0.2.2 ; python_version < '3.10'", "docstring-parser<1.0,>=0.16", "typer<1.0.0,>=0.9.0", "rich<15.0.0,>=13.7.0", "aiohttp<4.0.0,>=3.9.1", "tenacity<10.0.0,>=8.2.3", "pydantic-core<3.0.0,>=2.18.0", "jiter>=0.6.1,<0.15", "jinja2<4.0.0,>=3.1.4", "requests<3.0.0,>=2.32.3", ] name = "instructor" version = "1.15.5" description = "structured outputs for llm" readme = "README.md" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.uv] package = true [project.urls] repository = "https://github.com/instructor-ai/instructor" [tool.pytest.ini_options] markers = [ "unit: marks tests as unit tests (fast, no external dependencies)", "integration: marks tests as integration tests (may require API keys)", "llm: marks tests that make LLM API calls", ] [project.optional-dependencies] dev = [ "pytest<9.0.0,>=8.3.3", "pytest-asyncio>=0.24.0,<2.0.0", "coverage<8.0.0,>=7.3.2", "jsonref<2.0.0,>=1.1.0", "pytest-examples>=0.0.15", "python-dotenv>=1.0.1", "pytest-xdist>=3.8.0", "pre-commit>=4.2.0", "ty==0.0.44", "anthropic==0.93.0", "xmltodict>=0.13,<1.1", ] docs = [ "mkdocs<2.0.0,>=1.6.1", "mkdocs-material[imaging]<10.0.0,>=9.5.9", "mkdocstrings>=0.27.1,<0.31.0", "mkdocstrings-python<2.0.0,>=1.12.2", "pytest-examples>=0.0.15", "mkdocs-jupyter>=0.24.6,<0.27.0", "mkdocs-rss-plugin<2.0.0,>=1.12.0", "mkdocs-minify-plugin<1.0.0,>=0.8.0", "mkdocs-redirects<2.0.0,>=1.2.1", "mkdocs-llmstxt>=0.5.0,<0.6.0; python_version >= '3.10'", "mkdocs-material-extensions>=1.3.1", "mkdocs-material>=9.6.14", ] test-docs = [ "fastapi>=0.109.2,<0.129.0", "redis>=5.0.1,<8.0.0", "diskcache<6.0.0,>=5.6.3", "pandas<3.0.0,>=2.2.0", "tabulate<1.0.0,>=0.9.0", "pydantic-extra-types<3.0.0,>=2.6.0", "litellm>=1.35.31,<=1.83.7", "mistralai<2.0.0,>=1.5.1", ] anthropic = ["anthropic==0.93.0", "xmltodict>=0.13,<1.1"] groq = ["groq>=0.4.2,<1.1.0"] cohere = ["cohere<6.0.0,>=5.1.8"] vertexai = ["google-cloud-aiplatform<2.0.0,>=1.53.0", "jsonref<2.0.0,>=1.1.0"] cerebras_cloud_sdk = ["cerebras-cloud-sdk<2.0.0,>=1.5.0"] fireworks-ai = ["fireworks-ai<1.0.0,>=0.15.4"] writer = ["writer-sdk<3.0.0,>=2.2.0"] bedrock = ["boto3<2.0.0,>=1.34.0"] mistral = ["mistralai<2.0.0,>=1.5.1"] perplexity = ["openai>=2.0.0,<3.0.0"] google-genai = ["google-genai>=1.5.0","jsonref<2.0.0,>=1.1.0"] litellm = ["litellm>=1.35.31,<=1.83.7"] xai = ["xai-sdk>=0.2.0 ; python_version >= '3.10'"] phonenumbers = ["phonenumbers>=8.13.33,<10.0.0"] graphviz = ["graphviz<1.0.0,>=0.20.3"] sqlmodel = ["sqlmodel<1.0.0,>=0.0.22"] diskcache = ["diskcache<6.0.0,>=5.6.3"] trafilatura = ["trafilatura<3.0.0,>=1.12.2"] pydub = ["pydub<1.0.0,>=0.25.1"] datasets = ["datasets>=3.0.1,<5.0.0"] [project.scripts] instructor = "instructor.cli.cli:app" [tool.mutmut] source_paths = ["instructor/"] only_mutate = ["instructor/v2/core/retry.py"] pytest_add_cli_args_test_selection = [ "tests/v2/test_retry_runtime.py", "tests/coverage/test_core_patch_retry_coverage.py", ] pytest_add_cli_args = ["--asyncio-mode=auto", "--tb=short"] max_stack_depth = 12