summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 5af5291c1a635b1f214c858d87d530bedcdc3112 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# Maintainer: Mohamed Amine Zghal (medaminezghal) <medaminezghal at outlook dot com>

_name4=graph
_name3=slim
_name2=evals
_name1=examples
_name0=pydantic-ai
pkgbase=python-${_name0}
pkgname=(python-${_name0//-ai/}-${_name4} python-${_name0//-ai/}-${_name2} python-${_name0}-${_name3} python-${_name0}-${_name1} python-${_name0})
pkgver=0.1.1
pkgrel=1
arch=('x86_64' 'aarch64')
url='https://github.com/pydantic/pydantic-ai'
license=('MIT')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
source_x86_64=("https://github.com/denoland/deno/releases/latest/download/deno-x86_64-unknown-linux-gnu.zip")
source_aarch64=("https://github.com/denoland/deno/releases/latest/download/deno-aarch64-unknown-linux-gnu.zip")
sha256sums=('6db21423d8fe115f5100b94dd00daff491e63690137c550e97bd589b25a1f1fc')
sha256sums_x86_64=('SKIP')
sha256sums_aarch64=('SKIP')
depends=('python>=3.9')
makedepends=('python-hatchling' 'python-build' 'python-installer' 'python-wheel')
checkdepends=('python-anyio' 'python-devtools' 'python-dirty-equals' 'python-inline-snapshot' 'python-pytest' 'python-pytest-examples' 'python-pytest-mock' 'python-pytest-recording' 'python-diff-cover')

prepare(){
  # Remove uv-dynamic-versioning dependency as it is not needed
  cd "${srcdir}"/${_name0}-${pkgver}
  sed -i 's/requires = \["hatchling", "uv-dynamic-versioning>=0.7.0"\]/requires = ["hatchling"]/' ${_name0//-ai/_}${_name4}/pyproject.toml
  sed -i '/\[tool\.hatch\.version\]/,+1d' ${_name0//-ai/_}${_name4}/pyproject.toml
  sed -i "s/^dynamic.*/version = \"${pkgver}\"/" ${_name0//-ai/_}${_name4}/pyproject.toml
  sed -i 's/requires = \["hatchling", "uv-dynamic-versioning>=0.7.0"\]/requires = ["hatchling"]/' ${_name0//-/_}_${_name3}/pyproject.toml
  sed -i '/\[tool\.hatch\.version\]/,+1d' ${_name0//-/_}_${_name3}/pyproject.toml
  sed -i "s/^dynamic.*/version = \"${pkgver}\"/" ${_name0//-/_}_${_name3}/pyproject.toml
  sed -i 's/\[tool.hatch.metadata.hooks.uv-dynamic-versioning\]//' ${_name0//-/_}_${_name3}/pyproject.toml
  sed -i "s/{{ version }}/${pkgver}/g" ${_name0//-/_}_${_name3}/pyproject.toml
  sed -i 's/\[tool.hatch.metadata.hooks.uv-dynamic-versioning.optional-dependencies\]/[project.optional-dependencies]/' ${_name0//-/_}_${_name3}/pyproject.toml
  sed -i 's/requires = \["hatchling", "uv-dynamic-versioning>=0.7.0"\]/requires = ["hatchling"]/' ${_name0//-ai/_}${_name2}/pyproject.toml
  sed -i '/\[tool\.hatch\.version\]/,+1d' ${_name0//-ai/_}${_name2}/pyproject.toml
  sed -i "s/^dynamic.*/version = \"${pkgver}\"/" ${_name0//-ai/_}${_name2}/pyproject.toml
  sed -i "s/{{ version }}/${pkgver}/g" ${_name0//-ai/_}${_name2}/pyproject.toml
  sed -i 's/\[tool.hatch.metadata.hooks.uv-dynamic-versioning\]//' ${_name0//-ai/_}${_name2}/pyproject.toml
  sed -i 's/requires = \["hatchling", "uv-dynamic-versioning>=0.7.0"\]/requires = ["hatchling"]/' ${_name1}/pyproject.toml
  sed -i '/\[tool\.hatch\.version\]/,+1d' ${_name1}/pyproject.toml
  sed -i "s/^dynamic.*/version = \"${pkgver}\"/" ${_name1}/pyproject.toml
  sed -i 's/\[tool.hatch.metadata.hooks.uv-dynamic-versioning\]//' ${_name1}/pyproject.toml
  sed -i "s/{{ version }}/${pkgver}/g" ${_name1}/pyproject.toml
  sed -i 's/requires = \["hatchling", "uv-dynamic-versioning>=0.7.0"\]/requires = ["hatchling"]/' pyproject.toml
  sed -i '/\[tool\.hatch\.version\]/,+1d' pyproject.toml
  sed -i "s/^dynamic.*/version = \"${pkgver}\"/" pyproject.toml
  sed -i 's/\[tool.hatch.metadata.hooks.uv-dynamic-versioning\]//' pyproject.toml
  sed -i 's/\[tool.hatch.metadata.hooks.uv-dynamic-versioning.optional-dependencies\]/[project.optional-dependencies]/' pyproject.toml
  sed -i "s/{{ version }}/${pkgver}/g" pyproject.toml
  # Update the file to use the installed one in system
  echo $(python --version | cut -d' ' -f2 | cut -d'.' -f1,2) > .python-version
}

build() {
  cd "${srcdir}"/${_name0}-${pkgver}
  python -m build --wheel --no-isolation ${_name0//-ai/_}${_name4}
  python -m build --wheel --no-isolation ${_name0//-/_}_${_name3}
  python -m build --wheel --no-isolation ${_name0//-ai/_}${_name2}
  python -m build --wheel --no-isolation ${_name1}
  python -m build --wheel --no-isolation
}

check() {
  local pytest_options=(
    -vv
    --override-ini="addopts="
    -k "not evals.md and not test_known_model_names and not test_stop_settings[mistral]"
  )
  cd "${srcdir}"/${_name0}-${pkgver}
  python -m venv --system-site-packages test-env
  ln -sf /usr/bin/ruff test-env/bin/ruff
  test-env/bin/python -m installer ${_name0//-ai/_}${_name4}/dist/*.whl
  test-env/bin/python -m installer ${_name0//-/_}_${_name3}/dist/*.whl
  test-env/bin/python -m installer ${_name0//-ai/_}${_name2}/dist/*.whl
  rm -rf test-env/bin/pai
  test-env/bin/python -m installer ${_name1}/dist/*.whl
  test-env/bin/python -m installer dist/*.whl
  env PATH="${srcdir}":$PATH test-env/bin/python -m pytest "${pytest_options[@]}" tests
}

package_python-pydantic-graph() {
  pkgdesc='Graph and state machine librarys.'
  depends+=('python-httpx' 'python-logfire-api' 'python-pydantic' 'python-typing-inspection')
  url='https://github.com/pydantic/pydantic-ai/tree/main/pydantic_graph'
  cd "${srcdir}"/${_name0}-${pkgver}
  python -m installer --destdir="$pkgdir" ${_name0//-ai/_}${_name4}/dist/*.whl
}

package_python-pydantic-ai-slim() {
  pkgdesc='Agent Framework / shim to use Pydantic with LLMs, slim package.'
  depends+=('python-eval-type-backport' 'python-griffe' 'python-httpx' 'python-pydantic' 'python-pydantic-graph' 'python-opentelemetry-api' 'python-typing-inspection')
  optdepends=('python-logfire: logfire' 'python-openai: openai' 'python-cohere: cohere' 'python-google-auth: vertexai' 'python-requests: vertexai' 'python-anthropic: anthropic' 'python-groq: groq' 'python-mistralai: mistral' 'python-boto3: bedrock' 'python-duckduckgo-search: duckduckgo' 'python-tavily: tavily' 'python-rich: cli' 'python-prompt-toolkit: cli' 'python-argcomplete: cli' 'python-mcp: mcp' 'python-pydantic-evals: evals')
  url='https://github.com/pydantic/pydantic-ai/tree/main/pydantic_ai_slim'
  cd "${srcdir}"/${_name0}-${pkgver}
  python -m installer --destdir="$pkgdir" ${_name0//-/_}_${_name3}/dist/*.whl
}

package_python-pydantic-evals() {
  pkgdesc='Framework for evaluating stochastic code execution, especially code making use of LLMs.'
  depends+=('python-rich' 'python-logfire-api' 'python-pydantic' 'python-pydantic-ai-slim' 'python-anyio' 'python-pyyaml')
  optdepends=('python-logfire: logfire')
  url='https://github.com/pydantic/pydantic-ai/tree/main/pydantic_evals'
  cd "${srcdir}"/${_name0}-${pkgver}
  python -m installer --destdir="$pkgdir" ${_name0//-ai/_}${_name2}/dist/*.whl
}

package_python-pydantic-ai-examples() {
  pkgdesc='Examples of how to use PydanticAI and what it can do.'
  depends+=('python-pydantic-ai-slim' 'python-openai' 'python-google-auth' 'python-requests' 'python-groq' 'python-anthropic' 'python-pydantic-evals' 'python-asyncpg' 'python-fastapi' 'python-logfire' 'python-opentelemetry-instrumentation-asyncpg' 'python-opentelemetry-instrumentation-fastapi' 'python-opentelemetry-instrumentation-sqlite3' 'python-python-multipart' 'python-rich' 'uvicorn' 'python-devtools' 'python-gradio' 'python-mcp' 'python-typer' 'python-dotenv')
  url='https://github.com/pydantic/pydantic-ai/tree/main/examples'
  cd "${srcdir}"/${_name0}-${pkgver}
  python -m installer --destdir="$pkgdir" ${_name1}/dist/*.whl
}

package_python-pydantic-ai() {
  pkgdesc='Agent Framework / shim to use Pydantic with LLMs.'
  depends+=('python-pydantic-ai-slim' 'python-openai' 'python-google-auth' 'python-requests' 'python-groq' 'python-anthropic' 'python-mistralai' 'python-cohere' 'python-boto3' 'python-rich' 'python-prompt-toolkit' 'python-argcomplete' 'python-mcp' 'python-pydantic-evals')
  optdepends=('python-pydantic-ai-examples: examples' 'python-logfire: logfire')
  url='https://github.com/pydantic/pydantic-ai/'
  cd "${srcdir}"/${_name0}-${pkgver}
  python -m installer --destdir="$pkgdir" dist/*.whl
}