mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
ca810076e8
* Setting up * Readme * Add redis tests path to all-tests * First pass integration * Keep provider convention * First pass integration * add redis integration tests * update README.md * Add basic sample for redis integration * Add partitioning, add partition-aware tests, improve sample script * Fix code quality check * Try to resolve pytest check * Try to identify if pytest is the cause of failed checks * Re-enable tests * Rename redis test file * Removing some tests to narrow down issue * Revert, no difference * Delete temp files * Starting refactor of RedisProvider * Build dynamic schema builder, still need to do dynamic embedding model config * Add scope control * Complete first pass functionality with OpenAI + HF vectors -> Tests, Samples, Demo to follow * Fix code quality * attempt to identify rootcause of failed test * attempt to identify rootcause of failed test * Attempt to resolve code quality fail * Update pyproject.toml for foundry to pin azure-ai-projects == 1.1.0b3,azure-ai-agents == 1.2.0b3 * Add tests for redisprovider * Remove invalid tests * Add API key handling for openai vectorizer * Update uv.locl * Use master uv.lock * Begin sample file, add lazy index creation, fix faulty override * Index drop and reinit depends on drop_redis_index not overwrite * Add samples, threading included, escaped queries, verify threading works, sample README.md * Refactor filters * Opinionated vars * Allow filter expression combination * Try inline stubs for mypy * Address mypy errors * Better docstrings, tweaks for feedback * Tweak example 3 in redis_threads.py sample * adjust confusing name * Enrich docstrings * Add descriptions and comments to samples, externalize vectorizer choice, remove nltk and sentencetransformers dependnecy * Add descriptions and comments to samples, externalize vectorizer choice, remove nltk and sentencetransformers dependnecy * Incorporate initial feedback from dmytrostruk * Fix uv.lock * Attempt to resolve conflict * Use remote .tomls * Sanity check * fix tests * Remove hardcoded API key from samples * Fix incorrect env var * Make add and redis_search private * Fix tests relying on private funcs * Expand tests * Explainer comments to each test * Add a 'get_conversation_history' function to RedisProvider - This just returns messages in sequential order. Added 'created_at_*' timestamps to facilitate sequential recovery. function has to be manually invoked by user * Add agent-framework-redis to python/pyproject.toml * Remove get_conversation_history * improve redis context provider with pydantic techniques and safe index handling patterns * add RedisChatMessageStore * remove integration test :( * fix mypy error * Remove unused params * Redo schema validation to be order-invariant, handle attrs (previously throwing errors due to strict ==) * Expand explanation * Add ChatMessageStore example * Fix comments in redis_conversation.py * Resolving uv.lock conflict, update to match main * Fix test in redis provider * Apply suggestion from @ekzhu * Update python/packages/main/pyproject.toml --------- Co-authored-by: Tyler Hutcherson <tyler.hutcherson@redis.com> Co-authored-by: Eric Zhu <ekzhu@users.noreply.github.com>
230 lines
6.9 KiB
TOML
230 lines
6.9 KiB
TOML
[project]
|
|
name = "agent-framework-project"
|
|
description = "Microsoft Agent Framework for building AI Agents with Python."
|
|
version = "0.0.0"
|
|
requires-python = ">=3.10"
|
|
dependencies = [
|
|
"agent-framework",
|
|
"agent-framework-azure",
|
|
"agent-framework-copilotstudio",
|
|
"agent-framework-foundry",
|
|
"agent-framework-mem0",
|
|
"agent-framework-redis",
|
|
"agent-framework-devui",
|
|
"agent-framework-lab-gaia",
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"uv>=0.8.2,<0.9.0",
|
|
"pre-commit >= 3.7",
|
|
"ruff>=0.11.8",
|
|
"pytest>=8.4.1",
|
|
"pytest-asyncio>=1.0.0",
|
|
"pytest-cov>=6.2.1",
|
|
"pytest-env>=1.1.5",
|
|
"pytest-xdist[psutil]>=3.8.0",
|
|
"pytest-timeout>=2.3.1",
|
|
"mypy>=1.16.1",
|
|
"pyright>=1.1.402",
|
|
#tasks
|
|
"poethepoet>=0.36.0",
|
|
"rich",
|
|
"tomli",
|
|
"tomli-w",
|
|
]
|
|
docs = [
|
|
# Documentation
|
|
"debugpy>=1.8.16",
|
|
"py2docfx>=0.1.20",
|
|
"pip",
|
|
]
|
|
|
|
[tool.uv]
|
|
package = false
|
|
prerelease = "if-necessary-or-explicit"
|
|
environments = [
|
|
"sys_platform == 'darwin'",
|
|
"sys_platform == 'linux'",
|
|
"sys_platform == 'win32'"
|
|
]
|
|
|
|
[tool.uv.workspace]
|
|
members = [ "packages/*", "packages/lab/*" ]
|
|
exclude = [ "packages/agent_framework_project.egg-info", "packages/lab", "packages/lab/cookiecutter-agent-framework-lab", "packages/lab/README.md" ]
|
|
|
|
[tool.uv.sources]
|
|
agent-framework = { workspace = true }
|
|
agent-framework-azure = { workspace = true }
|
|
agent-framework-copilotstudio = { workspace = true }
|
|
agent-framework-foundry = { workspace = true }
|
|
agent-framework-lab-gaia = { workspace = true }
|
|
agent-framework-mem0 = { workspace = true }
|
|
agent-framework-redis = { workspace = true }
|
|
agent-framework-runtime = { workspace = true }
|
|
agent-framework-devui = { workspace = true }
|
|
|
|
[tool.ruff]
|
|
line-length = 120
|
|
target-version = "py310"
|
|
fix = true
|
|
include = ["*.py", "*.pyi", "**/pyproject.toml", "*.ipynb"]
|
|
exclude = ["docs/*", "run_tasks_in_packages_if_exists.py", "check_md_code_blocks.py"]
|
|
preview = true
|
|
|
|
[tool.ruff.lint]
|
|
fixable = ["ALL"]
|
|
unfixable = []
|
|
select = [
|
|
"ASYNC", # async checks
|
|
"B", # bugbear checks
|
|
"CPY", # copyright
|
|
"D", # pydocstyle checks
|
|
"E", # pycodestyle error checks
|
|
"ERA", # remove connected out code
|
|
"F", # pyflakes checks
|
|
"FIX", # fixme checks
|
|
"I", # isort
|
|
"INP", # implicit namespace package
|
|
"ISC", # implicit string concat
|
|
"Q", # flake8-quotes checks
|
|
"RET", # flake8-return check
|
|
"RSE", # raise exception parantheses check
|
|
"RUF", # RUF specific rules
|
|
"SIM", # flake8-simplify check
|
|
"T20", # typing checks
|
|
"TD", # todos
|
|
"W", # pycodestyle warning checks
|
|
"T100", # Debugger,
|
|
"S", # Bandit checks
|
|
]
|
|
ignore = [
|
|
"D100", # allow missing docstring in public module
|
|
"D104", # allow missing docstring in public package
|
|
"D418", # allow overload to have a docstring
|
|
"TD003", # allow missing link to todo issue
|
|
"FIX002" # allow todo
|
|
]
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
# Ignore all directories named `tests` and `samples`.
|
|
"**/tests/**" = ["D", "INP", "TD", "ERA001", "RUF", "S"]
|
|
"samples/**" = ["D", "INP", "ERA001", "RUF", "S", "T201"]
|
|
"*.ipynb" = ["CPY", "E501"]
|
|
|
|
[tool.ruff.format]
|
|
docstring-code-format = true
|
|
|
|
[tool.ruff.lint.pydocstyle]
|
|
convention = "google"
|
|
|
|
[tool.ruff.lint.flake8-copyright]
|
|
notice-rgx = "^# Copyright \\(c\\) Microsoft\\. All rights reserved\\."
|
|
min-file-size = 1
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = '**/tests'
|
|
addopts = "-ra -q -r fEX"
|
|
asyncio_mode = "auto"
|
|
asyncio_default_fixture_loop_scope = "function"
|
|
filterwarnings = []
|
|
timeout = 120
|
|
markers = [
|
|
"azure: marks tests as Azure provider specific",
|
|
"foundry: marks tests as Foundry provider specific",
|
|
"openai: marks tests as OpenAI provider specific",
|
|
]
|
|
|
|
[tool.coverage.run]
|
|
omit = [
|
|
"**/__init__.py"
|
|
]
|
|
|
|
[tool.pyright]
|
|
include = ["agent_framework", "samples"]
|
|
exclude = ["**/tests/**", "docs", "**/.venv/**"]
|
|
typeCheckingMode = "strict"
|
|
reportUnnecessaryIsInstance = false
|
|
reportMissingTypeStubs = false
|
|
|
|
[tool.mypy]
|
|
plugins = ['pydantic.mypy']
|
|
strict = true
|
|
python_version = "3.10"
|
|
ignore_missing_imports = true
|
|
disallow_untyped_defs = true
|
|
no_implicit_optional = true
|
|
check_untyped_defs = true
|
|
warn_return_any = true
|
|
show_error_codes = true
|
|
warn_unused_ignores = false
|
|
disallow_incomplete_defs = true
|
|
disallow_untyped_decorators = true
|
|
|
|
[tool.bandit]
|
|
targets = ["agent_framework"]
|
|
exclude_dirs = ["tests", "./run_tasks_in_packages_if_exists.py", "./check_md_code_blocks.py", "docs", "samples"]
|
|
|
|
[tool.poe]
|
|
executor.type = "uv"
|
|
|
|
[tool.poe.tasks]
|
|
markdown-code-lint = """uv run python check_md_code_blocks.py README.md ./packages/**/README.md ./samples/**/*.md --exclude cookiecutter-agent-framework-lab --exclude tau2"""
|
|
samples-code-check = """pyright ./samples"""
|
|
docs-install = "uv sync --all-packages --all-extras --dev -U --prerelease=if-necessary-or-explicit --group=docs"
|
|
docs-clean = "rm -rf docs/build"
|
|
docs-build = "uv run python ./docs/generate_docs.py"
|
|
docs-debug = "uv run python -m debugpy --listen 5678 ./docs/generate_docs.py"
|
|
pre-commit-install = "uv run pre-commit install --install-hooks --overwrite"
|
|
install = "uv sync --all-packages --all-extras --dev -U --prerelease=if-necessary-or-explicit --no-group=docs"
|
|
test = "python run_tasks_in_packages_if_exists.py test"
|
|
fmt = "python run_tasks_in_packages_if_exists.py fmt"
|
|
format.ref = "fmt"
|
|
lint = "python run_tasks_in_packages_if_exists.py lint"
|
|
pyright = "python run_tasks_in_packages_if_exists.py pyright"
|
|
mypy = "python run_tasks_in_packages_if_exists.py mypy"
|
|
build = "python run_tasks_in_packages_if_exists.py build"
|
|
# combined checks
|
|
check = ["fmt", "lint", "pyright", "mypy", "test", "markdown-code-lint", "samples-code-check"]
|
|
pre-commit-check = ["fmt", "lint", "pyright", "markdown-code-lint", "samples-code-check"]
|
|
all-tests = "pytest --import-mode=importlib --cov=agent_framework --cov=agent_framework_azure --cov=agent_framework_copilotstudio --cov=agent_framework_foundry --cov=agent_framework_mem0 --cov-report=term-missing:skip-covered packages/azure/tests packages/copilotstudio/tests packages/foundry/tests packages/main/tests packages/mem0/tests packages/redis/tests"
|
|
|
|
|
|
[tool.poe.tasks.venv]
|
|
cmd = "uv venv --clear --python $python"
|
|
args = [{ name = "python", default = "3.13", options = ['-p', '--python'] }]
|
|
[tool.poe.tasks.setup]
|
|
sequence = [
|
|
{ ref = "venv --python $python"},
|
|
{ ref = "install" },
|
|
{ ref = "pre-commit-install" }
|
|
]
|
|
args = [{ name = "python", default = "3.13", options = ['-p', '--python'] }]
|
|
[tool.poe.tasks.docs-full]
|
|
sequence = [
|
|
{ ref = 'build' },
|
|
{ ref = "docs-clean" },
|
|
{ ref = "docs-build" }
|
|
]
|
|
[tool.poe.tasks.docs-full-install]
|
|
sequence = [
|
|
{ ref = "docs-install" },
|
|
{ ref = 'build' },
|
|
{ ref = "docs-clean" },
|
|
{ ref = "docs-build" }
|
|
]
|
|
[tool.poe.tasks.docs-rebuild]
|
|
sequence = [
|
|
{ ref = "docs-clean" },
|
|
{ ref = "docs-build" }
|
|
]
|
|
[tool.poe.tasks.docs-rebuild-debug]
|
|
sequence = [
|
|
{ ref = "docs-clean" },
|
|
{ ref = "docs-debug" }
|
|
]
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["packages"]
|
|
include = ["agent_framework**"]
|
|
namespaces = true |