# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

[build-system]
requires = ["flit_core >=3.2,<4"]
build-backend = "flit_core.buildapi"

[project]
name = "apache-burr"
version = "0.42.0"
dependencies = [] # yes, there are none
requires-python = ">=3.9"
authors = [
  {name = "Elijah ben Izzy", email = "elijah@apache.org"},
  {name = "Stefan Krawczyk", email = "stefan@apache.org"},
]
maintainers = [
  {name = "Elijah ben Izzy", email = "elijah@apache.org"},
  {name = "Stefan Krawczyk", email = "stefan@apache.org"},
]
description = "Apache Burr (incubating) makes it easy to develop applications that make decisions (chatbots, agents, simulations, etc...) from simple python building blocks."
readme = "README.md"
license-files = ["LICENSE-wheel", "NOTICE", "DISCLAIMER"]
keywords = ["mlops", "data", "state-machine", "llmops"]
classifiers = [
  "Development Status :: 4 - Beta",
  "Programming Language :: Python"
]

[project.optional-dependencies]
streamlit = [
  "streamlit",
  "graphviz",
  "matplotlib",
  "sf-hamilton",
]

hamilton = [
  "sf-hamilton"
]

graphviz = [
  "graphviz"
]

aiosqlite = [
  "aiosqlite"
]

asyncpg = [
  "asyncpg"
]

postgresql = [
  "psycopg2-binary"
] # leaving it here for backwards compatibility

psycopg2 = [
  "psycopg2-binary"
]

pymongo = [
  "pymongo"
]

redis = [
  "redis"
]

release = [
  "jinja2",
]

tests = [
  "pytest",
  "pytest-asyncio",
  "apache-burr[hamilton]",
  "langchain_core",
  "langchain_community",
  "pandas",
  "pydantic[email]>=2.0",
  "pyarrow",
  "apache-burr[aiosqlite]",
  "apache-burr[asyncpg]",
  "apache-burr[psycopg2]",
  "apache-burr[pymongo]",
  "apache-burr[redis]",
  "apache-burr[opentelemetry]",
  "apache-burr[langfuse]",
  "apache-burr[haystack]",
  "apache-burr[ray]"
]

documentation = [
  "apache-burr[tests]",
  "apache-burr[bedrock]",
  "sphinx<9",
  "sphinx-autobuild",
  "myst-nb",
  "furo",
  "sphinx-sitemap",
  "sphinx-toolbox",
  "apache-burr[aiosqlite]",
  "apache-burr[asyncpg]",
  "apache-burr[psycopg2]",
  "apache-burr[pymongo]",
  "apache-burr[redis]",
  "apache-burr[ray]",
  "apache-burr[streamlit]",
  "sphinxcontrib-googleanalytics"
]

tracking-client = [
  "pydantic>=2.0"
]

tracking-client-s3 = [
  "apache-burr[tracking-client]",
  "boto3"
]

bedrock = [
  "boto3"
]

tracking-server-s3 = [
  "aerich",
  "aiobotocore",
  "fastapi",
  "tortoise-orm[accel, asyncmy]",
  "apache-burr[tracking-server]",
  "typing-inspect"
]

tracking-server = [
  "click",
  "fastapi",
  "uvicorn",
  "pydantic>=2.0",
  "pydantic-settings",
  "fastapi-pagination",
  "fastapi-utils",
  "aiofiles",
  "requests",
  "jinja2",
  "openai", # temporary for the demo, we will likely remove
  "typing-inspect",
]

pydantic = [
  "pydantic>=2.0"
]

haystack = [
  "haystack-ai"
]

cli = [
  "loguru",
  "click",
  "requests"
]

tracking = [
  "apache-burr[tracking-client]",
  "apache-burr[tracking-server]",
]

learn = [
  "apache-burr[tracking,streamlit,graphviz,hamilton,cli,inappexamples]"
]

start = [
  "apache-burr[learn]"
]
inappexamples  = [
  "opentelemetry-api",
  "opentelemetry-sdk",
  'opentelemetry-instrumentation-openai',
  'tavily-python',
]

# All the bloatware from various LLM demos
# In the future most people will be relying on simple APIs, not this
# But its good for demos!
# TODO -- fill this up with whatever is needed for the demos, it's not complete
examples = [
  "langchain",
  "langchain-community",
  "langchain-openai",
  "apache-burr[inappexamples]"
]

# just install everything for developers
developer = [
  "apache-burr[streamlit]",
  "apache-burr[graphviz]",
  "apache-burr[tracking]",
  "apache-burr[tests]",
  "apache-burr[documentation]",
  "apache-burr[examples]",
  "build",
  "twine",
  "pre-commit",
  "tomli; python_version < '3.11'",
]

opentelemetry = [
  "opentelemetry-api",
  "opentelemetry-sdk",
]

langfuse = [
  "langfuse>=3.0.0",
  "apache-burr[opentelemetry]",
]

ray = [
  "ray[default]"
]

[tool.aerich]
tortoise_orm = "burr.tracking.server.s3.settings.TORTOISE_ORM"
location = "./burr/tracking/server/s3/migrations"
src_folder = "./."
[project.urls]
Homepage = "https://github.com/apache/burr"
Documentation = "https://github.com/apache/burr"
Repository = "https://github.com/apache/burr"
"Bug Tracker" = "https://github.com/apache/burr"

[project.scripts]
burr = "burr.cli.__main__:cli_run_server"
burr-demo = "burr.cli.__main__:cli_demo_server"
burr-admin-server = "burr.cli.__main__:cli_run_server"
burr-admin-publish = "burr.cli.__main__:cli_build_and_publish"
burr-admin-build-ui = "burr.cli.__main__:cli_build_ui"
burr-admin-generate-demo-data = "burr.cli.__main__:cli_generate_demo_data"
burr-test-case = "burr.cli.__main__:cli_test_case"

[dependency-groups]
dev = [
  "apache-burr[cli]",
  "flit",
]

[tool.flit.module]
name = "burr"


[tool.flit.sdist]
include = [
  "LICENSE",
  "NOTICE",
  "DISCLAIMER",
  "LICENSE-wheel",
  "scripts/**",
  "telemetry/ui/**",
  "examples/__init__.py",
  "examples/email-assistant/**",
  "examples/multi-modal-chatbot/**",
  "examples/streaming-fastapi/**",
  "examples/deep-researcher/**",
  "examples/hello-world-counter/**",
]
exclude = [
  # burr-redirect: non-ASF PyPI redirect package, not part of the ASF source release.
  "burr-redirect/**",
  "telemetry/ui/node_modules/**",
  "telemetry/ui/build/**",
  "telemetry/ui/dist/**",
  "telemetry/ui/.cache/**",
  "telemetry/ui/.next/**",
  "**/__pycache__/**",
  "**/*.pyc",
  ".git/**",
  ".github/**",
  "docs/**",
  "website/**",
  # Exclude VCS and system files
  ".gitignore",
  ".gitmodules",
  "**/.gitignore",
  "**/.DS_Store",
  # Exclude unwanted examples - flit auto-includes examples/ as a package because of __init__.py,
  # and exclude patterns take precedence over include patterns. We must explicitly exclude each
  # unwanted example directory. Only email-assistant, multi-modal-chatbot, streaming-fastapi,
  # and deep-researcher should be included (see include list above).
  # NOTE: If you add/remove examples, update this list AND tests/test_release_config.py
  "examples/README.md",
  "examples/validate_examples.py",
  "examples/fastapi_mount_example.py",
  "examples/adaptive-crag/**",
  "examples/conversational-rag/**",
  "examples/custom-serde/**",
  "examples/deployment/**",
  "examples/hamilton-integration/**",
  "examples/haystack-integration/**",
  "examples/image-telephone/**",
  "examples/instructor-gemini-flash/**",
  "examples/integrations/**",
  "examples/llm-adventure-game/**",
  "examples/ml-training/**",
  "examples/multi-agent-collaboration/**",
  "examples/openai-compatible-agent/**",
  "examples/opentelemetry/**",
  "examples/other-examples/**",
  "examples/parallelism/**",
  "examples/pytest/**",
  "examples/rag-lancedb-ingestion/**",
  "examples/ray/**",
  "examples/recursive/**",
  "examples/simple-chatbot-intro/**",
  "examples/simulation/**",
  "examples/streaming-overview/**",
  "examples/talks/**",
  "examples/templates/**",
  "examples/test-case-creation/**",
  "examples/tool-calling/**",
  "examples/tracing-and-spans/**",
  "examples/typed-state/**",
  "examples/web-server/**",
  "examples/youtube-to-social-media-post/**",
]
