[tool.poetry] name = "ziya" version = "0.9.0.1" description = "Self-hosted AI harness for technical work: chat UI and coding agent in one local tool. Bring any model (Bedrock, Anthropic, OpenAI, Gemini, Ollama), apply validated diffs to your real repo, and get diagrams rendered inline. Runs alongside your editor, not instead of it." authors = ["Dan Cohn ", "Vishnu Krishnaprasad "] license = "MIT" readme = "README.md" homepage = "https://github.com/ziya-ai/ziya" repository = "https://github.com/ziya-ai/ziya" keywords = ["ai", "llm", "coding-agent", "ai-agent", "coding", "architecture", "operations", "visualization", "diagrams", "self-hosted", "local-first", "bedrock", "claude", "openai", "gemini", "ollama", "local-llm", "mcp"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Topic :: Software Development", "License :: OSI Approved :: MIT License", ] packages = [ { include = "app", from = "." }, ] [tool.poetry.dependencies] python = ">=3.10,<3.15" uvicorn = {extras = ["standard"], version = "^0.38.0"} fastapi = "^0.124.2" jinja2 = "^3.1.0" whatthepatch = "^1.0.6" packaging = ">=24.0,<27.0" requests = "^2.32.0" pydantic = "^2.10.0" # Output contracts (app/utils/output_contracts.py): Draft 2020-12 plus the # offline `referencing` registry, which needs jsonschema >= 4.18. jsonschema = "^4.18" tiktoken = {version = "^0.8.0", optional = true} boto3 = "^1.35.0" cryptography = "^46.0.0" # New Google GenAI SDK for Gemini 3 support google-genai = "^1.7.0" langchain-google-genai = "^2.0.0" httpx = "^0.28.1" # Required by google-genai, overrides older version needed by mcp-server-fetch #langchain-core = "^0.4.0" langchain-aws = "^1.1.0" # Every OpenAI-compatible endpoint (openai, zai, meta, local) builds an # AsyncOpenAI client. It was never declared, so any install that did not # pull it transitively failed at first chat with "openai package is required". openai = "^1.50.0" langchain = "^1.0.0" langchain-community = "^0.4.1" # sentence-transformers pulls torch itself. torch was previously declared # directly (and numba alongside it) although nothing in app/ imports either; # `ziya[local]` installed ~2 GB that enabled nothing. sentence-transformers = {version = ">=3.0", optional = true} # Local analytics (design/local-analytics.md): `ziya[data]`, `ziya[stats]`. # Keep in step with PYTHON_EXTRAS in app/utils/install_extras.py. duckdb = {version = ">=1.1", optional = true} sqlglot = {version = ">=25", optional = true} pyarrow = {version = ">=15", optional = true} scipy = {version = ">=1.11", optional = true} statsmodels = {version = ">=0.14", optional = true} # macOS native drag helper (app/utils/drag_pasteboard_helper.py): `ziya[drag]`. # Keep in step with PYTHON_EXTRAS["--drag"] in app/utils/install_extras.py. pyobjc-framework-Cocoa = {version = ">=10", optional = true, markers = "sys_platform == 'darwin'"} setuptools = ">=75.8.0" cssutils = "^2.11.0" html5lib = "^1.1" tree-sitter = "^0.25.2" tree-sitter-language-pack = ">=0.6.0" beautifulsoup4 = "^4.12.0" pypdf = "^6.0.0" pdfplumber = "^0.11.0" python-docx = "^1.1.0" openpyxl = "^3.1.0" pandas = "^2.2.0" python-pptx = "^1.0.0" aiohttp = "^3.12.0" pillow = "^11.0.0" starlette = ">=0.49.1" watchdog = "^6.0.0" urllib3 = "^2.5.0" transformers = {version = "^4.0.0", optional = true} fonttools = "^4.60.2" # 1.x and 2.x both supported (app/utils/mcp_sdk_compat.py); resolves to 2.x. mcp = ">=1.23.0,<3" uv = "^0.9.6" filelock = ">=3.20.1" prompt-toolkit = "^3.0.48" rich = "^14.0.0" croniter = ">=3.0.0,<7.0.0" # Hard deps, not extras: both are small pure-Python packages. The heavy # parts pip cannot install -- the Chromium build, a TeX distribution -- are # handled by `ziya-install-extras`, which is why the package itself must # already be present for that command to have anything to drive. scapy # only needs libpcap for LIVE capture; Ziya reads capture FILES. playwright = "^1.52.0" scapy = ">=2.6.2" [tool.poetry.group.dev.dependencies] pytest = "^8.3.3" pytest-timeout = "^2.3.1" pytest-asyncio = ">=0.23,<1.0" pytest-playwright = {version = "^0.7.0", optional = true} psutil = "^7.2.2" [tool.poetry.extras] # `local` kept as an alias for anyone who typed it; it now installs the thing # that actually enables local (offline) PDF embedding search. local = ["sentence-transformers"] embeddings = ["sentence-transformers"] tokens = ["tiktoken"] data = ["duckdb", "sqlglot", "pyarrow", "scipy"] stats = ["statsmodels"] drag = ["pyobjc-framework-Cocoa"] # render/pcap are no longer extras -- playwright and scapy are hard deps. all = ["tiktoken", "transformers", "sentence-transformers"] [tool.poetry.scripts] ziya = 'app.ziya_exec:ziya' ziya-cli = "app.cli:main" ziya-approve = "app.utils.ziya_approve:main" ziya-install-extras = "app.utils.install_extras:main" ziya-jobwrap = "app.jobs.wrap:main" dev = 'app.ziya_exec:dev' finstall = "app.ziya_exec:frontend_install" fstart = "app.ziya_exec:frontend_start" fbuild = "app.ziya_exec:frontend_build" [build-system] requires = ["poetry-core>=1.0.0", "setuptools>=42", "wheel"] build-backend = "poetry.core.masonry.api"