fastapi-injected 0.1.0__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/PKG-INFO +1 -1
  2. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/__init__.py +2 -2
  3. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/sign.py +2 -2
  4. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/types.py +3 -3
  5. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/pyproject.toml +3 -2
  6. fastapi_injected-0.1.2/tests/ext/__init__.py +0 -0
  7. fastapi_injected-0.1.2/tests/ext/test_pydantic_ai.py +41 -0
  8. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/tests/test_inject.py +7 -7
  9. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/tests/test_typing.py +2 -2
  10. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/uv.lock +167 -1
  11. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.github/dependabot.yml +0 -0
  12. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.github/workflows/automerge.yml +0 -0
  13. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.github/workflows/lint.yml +0 -0
  14. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.github/workflows/publish.yml +0 -0
  15. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.github/workflows/test.yml +0 -0
  16. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.gitignore +0 -0
  17. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.pre-commit-config.yaml +0 -0
  18. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/LICENSE +0 -0
  19. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/README.md +0 -0
  20. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/deps.py +0 -0
  21. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/inject.py +1 -1
  22. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/scope.py +0 -0
  23. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/solve.py +0 -0
  24. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/tests/__init__.py +0 -0
  25. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/tests/deps.py +0 -0
  26. {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/tests/test_solve.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-injected
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Yet another library to reuse fastapi dependency injection
5
5
  Project-URL: Repository, https://github.com/uriyyo/fastapi-injected
6
6
  Author-email: Yurii Karabas <1998uriyyo@gmail.com>
@@ -1,12 +1,12 @@
1
1
  from .inject import inject
2
2
  from .scope import push_inject_scope
3
3
  from .solve import solve
4
- from .types import Dep, DepFactory, Inejected
4
+ from .types import Dep, DepFactory, Injected
5
5
 
6
6
  __all__ = [
7
7
  "Dep",
8
8
  "DepFactory",
9
- "Inejected",
9
+ "Injected",
10
10
  "inject",
11
11
  "push_inject_scope",
12
12
  "solve",
@@ -4,7 +4,7 @@ from typing import cast
4
4
  from fastapi.dependencies.models import Dependant
5
5
  from fastapi.dependencies.utils import analyze_param
6
6
 
7
- from .types import Decorator, Func, HasSignature, Inejected
7
+ from .types import Decorator, Func, HasSignature, Injected
8
8
 
9
9
 
10
10
  def update_func_sign[**P, R](func: Func[P, R], sign: inspect.Signature) -> Func[P, R]:
@@ -14,7 +14,7 @@ def update_func_sign[**P, R](func: Func[P, R], sign: inspect.Signature) -> Func[
14
14
 
15
15
  def prepare_sign(sign: inspect.Signature) -> inspect.Signature:
16
16
  def _update_param(param: inspect.Parameter) -> inspect.Parameter:
17
- if param.default is Inejected:
17
+ if param.default is Injected:
18
18
  param = param.replace(default=inspect.Parameter.empty)
19
19
 
20
20
  return param
@@ -7,9 +7,9 @@ from fastapi.types import DependencyCacheKey
7
7
  from typing_extensions import sentinel
8
8
 
9
9
  if TYPE_CHECKING:
10
- Inejected: Any = object()
10
+ Injected: Any = object()
11
11
  else:
12
- Inejected = sentinel("Injected")
12
+ Injected = sentinel("Injected")
13
13
 
14
14
  if TYPE_CHECKING:
15
15
  type Dep[T] = Annotated[T, Depends()]
@@ -58,5 +58,5 @@ __all__ = [
58
58
  "DependencyCache",
59
59
  "Func",
60
60
  "HasSignature",
61
- "Inejected",
61
+ "Injected",
62
62
  ]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fastapi-injected"
3
- version = "0.1.0"
3
+ version = "0.1.2"
4
4
  description = "Yet another library to reuse fastapi dependency injection"
5
5
  authors = [
6
6
  { name = "Yurii Karabas", email = "1998uriyyo@gmail.com" },
@@ -29,6 +29,7 @@ dev = [
29
29
  "ruff>=0.15.22",
30
30
  "ty>=0.0.62",
31
31
  "pre-commit>=4.6.1",
32
+ "pydantic-ai-slim>=2.15.0",
32
33
  ]
33
34
 
34
35
  [project.urls]
@@ -103,4 +104,4 @@ exclude_lines = [
103
104
  "@abstractmethod",
104
105
  "@overload",
105
106
  "if TYPE_CHECKING:",
106
- ]
107
+ ]
File without changes
@@ -0,0 +1,41 @@
1
+ from typing import Any
2
+
3
+ import pytest
4
+ from pydantic_ai import Agent, RunContext
5
+ from pydantic_ai.models.test import TestModel
6
+
7
+ from fastapi_injected import Dep, Injected, inject
8
+ from tests.deps import Container
9
+
10
+ pytestmark = pytest.mark.asyncio
11
+
12
+ agent = Agent()
13
+
14
+
15
+ @agent.tool
16
+ @inject
17
+ async def tool1(
18
+ ctx: RunContext[Any],
19
+ a: int,
20
+ *,
21
+ container: Dep[Container] = Injected,
22
+ ) -> int:
23
+ assert isinstance(container, Container)
24
+
25
+ return a * 2
26
+
27
+
28
+ @agent.tool_plain
29
+ @inject
30
+ async def tool2(
31
+ a: int,
32
+ *,
33
+ container: Dep[Container] = Injected,
34
+ ) -> int:
35
+ assert isinstance(container, Container)
36
+ return a * 2
37
+
38
+
39
+ async def test_agent_integration():
40
+ with agent.override(model=TestModel()):
41
+ await agent.run("test")
@@ -1,6 +1,6 @@
1
1
  import pytest
2
2
 
3
- from fastapi_injected import Dep, Inejected, inject, push_inject_scope
3
+ from fastapi_injected import Dep, Injected, inject, push_inject_scope
4
4
 
5
5
  from .deps import Child, Container, ContextState
6
6
 
@@ -12,7 +12,7 @@ async def test_inject():
12
12
  @inject
13
13
  async def func(
14
14
  *,
15
- bar: Dep[Container] = Inejected,
15
+ bar: Dep[Container] = Injected,
16
16
  ) -> None:
17
17
  assert isinstance(bar, Container)
18
18
  assert isinstance(bar.child, Child)
@@ -25,7 +25,7 @@ async def test_inject_reuse_cache():
25
25
  @inject
26
26
  async def func(
27
27
  *,
28
- bar: Dep[Container] = Inejected,
28
+ bar: Dep[Container] = Injected,
29
29
  ) -> Container:
30
30
  return bar
31
31
 
@@ -40,7 +40,7 @@ async def test_inject_new_scope_use_different_cache():
40
40
  @inject(new_scope=True)
41
41
  async def func(
42
42
  *,
43
- bar: Dep[Container] = Inejected,
43
+ bar: Dep[Container] = Injected,
44
44
  ) -> Container:
45
45
  return bar
46
46
 
@@ -57,7 +57,7 @@ async def test_inject_func_with_args():
57
57
  a: int,
58
58
  b: int,
59
59
  *,
60
- bar: Dep[Container] = Inejected,
60
+ bar: Dep[Container] = Injected,
61
61
  ) -> int:
62
62
  assert isinstance(bar, Container)
63
63
  assert isinstance(bar.child, Child)
@@ -73,7 +73,7 @@ async def test_inject_teardown():
73
73
  @inject
74
74
  async def func(
75
75
  *,
76
- bar: Dep[Container] = Inejected,
76
+ bar: Dep[Container] = Injected,
77
77
  ) -> ContextState:
78
78
  assert not bar.ctx.closed
79
79
  return bar.ctx
@@ -86,7 +86,7 @@ async def test_inject_teardown_in_scope():
86
86
  @inject
87
87
  async def func(
88
88
  *,
89
- bar: Dep[Container] = Inejected,
89
+ bar: Dep[Container] = Injected,
90
90
  ) -> ContextState:
91
91
  assert not bar.ctx.closed
92
92
  return bar.ctx
@@ -1,6 +1,6 @@
1
1
  from typing import TYPE_CHECKING
2
2
 
3
- from fastapi_injected import Dep, DepFactory, Inejected, inject, solve
3
+ from fastapi_injected import Dep, DepFactory, Injected, inject, solve
4
4
 
5
5
  from .deps import Child, Container, ContextState, ctx_dep
6
6
 
@@ -13,7 +13,7 @@ if TYPE_CHECKING:
13
13
  async def func(
14
14
  a: int,
15
15
  *,
16
- container: Dep[Container] = Inejected,
16
+ container: Dep[Container] = Injected,
17
17
  ) -> int:
18
18
  static_assert(is_equivalent_to(TypeOf[container], Container))
19
19
  static_assert(is_equivalent_to(TypeOf[container.child], Child))
@@ -1,6 +1,10 @@
1
1
  version = 1
2
2
  revision = 3
3
3
  requires-python = ">=3.12"
4
+ resolution-markers = [
5
+ "python_full_version >= '3.14'",
6
+ "python_full_version < '3.14'",
7
+ ]
4
8
 
5
9
  [[package]]
6
10
  name = "annotated-doc"
@@ -33,6 +37,15 @@ wheels = [
33
37
  { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" },
34
38
  ]
35
39
 
40
+ [[package]]
41
+ name = "certifi"
42
+ version = "2026.7.22"
43
+ source = { registry = "https://pypi.org/simple" }
44
+ sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" }
45
+ wheels = [
46
+ { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" },
47
+ ]
48
+
36
49
  [[package]]
37
50
  name = "cfgv"
38
51
  version = "3.5.0"
@@ -147,7 +160,7 @@ wheels = [
147
160
 
148
161
  [[package]]
149
162
  name = "fastapi-injected"
150
- version = "0.1.0"
163
+ version = "0.1.2"
151
164
  source = { editable = "." }
152
165
  dependencies = [
153
166
  { name = "fastapi" },
@@ -156,6 +169,7 @@ dependencies = [
156
169
  [package.dev-dependencies]
157
170
  dev = [
158
171
  { name = "pre-commit" },
172
+ { name = "pydantic-ai-slim" },
159
173
  { name = "pytest" },
160
174
  { name = "pytest-asyncio" },
161
175
  { name = "pytest-cov" },
@@ -169,6 +183,7 @@ requires-dist = [{ name = "fastapi", specifier = ">=0.139.2" }]
169
183
  [package.metadata.requires-dev]
170
184
  dev = [
171
185
  { name = "pre-commit", specifier = ">=4.6.1" },
186
+ { name = "pydantic-ai-slim", specifier = ">=2.15.0" },
172
187
  { name = "pytest", specifier = ">=9.1.1" },
173
188
  { name = "pytest-asyncio", specifier = ">=1.4.0" },
174
189
  { name = "pytest-cov", specifier = ">=7.1.0" },
@@ -185,6 +200,94 @@ wheels = [
185
200
  { url = "https://files.pythonhosted.org/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl", hash = "sha256:d396bea984af47333ef05e50eae7eff88c84256de6112aea0ec48a233c064fe3", size = 97732, upload-time = "2026-07-21T13:17:41.55Z" },
186
201
  ]
187
202
 
203
+ [[package]]
204
+ name = "genai-prices"
205
+ version = "0.0.71"
206
+ source = { registry = "https://pypi.org/simple" }
207
+ dependencies = [
208
+ { name = "httpx2" },
209
+ { name = "pydantic" },
210
+ ]
211
+ sdist = { url = "https://files.pythonhosted.org/packages/1d/e4/5072862613fba039da2b7c981a8649c6c6bbcb2863bd8bc81617c09ce5ee/genai_prices-0.0.71.tar.gz", hash = "sha256:de4db34ec38404f9ef383cb1ab29e204d16ccf27071af0b16d5747ee7affe36b", size = 82105, upload-time = "2026-07-10T00:38:30.491Z" }
212
+ wheels = [
213
+ { url = "https://files.pythonhosted.org/packages/0d/98/c06c1318f6834a26268a2d4280e4183f60c5ea92152aea841feff29826ff/genai_prices-0.0.71-py3-none-any.whl", hash = "sha256:1d13111563af2b1ce43ccfacf77b7ac3216ad704c644408a56e11b181fe0d128", size = 84586, upload-time = "2026-07-10T00:38:29.252Z" },
214
+ ]
215
+
216
+ [[package]]
217
+ name = "griffelib"
218
+ version = "2.1.0"
219
+ source = { registry = "https://pypi.org/simple" }
220
+ sdist = { url = "https://files.pythonhosted.org/packages/33/e4/8d187ea29c2e30b3a09505c567513077d6117861bde1fbd997a167f262ec/griffelib-2.1.0.tar.gz", hash = "sha256:762a186d2c6fd6794d4ea20d428d597ffb857cb56b66421651cbba15bdd5e813", size = 216234, upload-time = "2026-06-19T12:05:42.278Z" }
221
+ wheels = [
222
+ { url = "https://files.pythonhosted.org/packages/e4/d3/5268aeabf2ad82658c4e2ff3a060648d0f02f3926cb53247c0e4d0dab49e/griffelib-2.1.0-py3-none-any.whl", hash = "sha256:cc7b3d2d2865ad0b909fcc38086e3f554b5ea7acbaa7bbb7ecaa3f5dfb7d9f00", size = 142560, upload-time = "2026-06-19T12:05:38.742Z" },
223
+ ]
224
+
225
+ [[package]]
226
+ name = "h11"
227
+ version = "0.16.0"
228
+ source = { registry = "https://pypi.org/simple" }
229
+ sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" }
230
+ wheels = [
231
+ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
232
+ ]
233
+
234
+ [[package]]
235
+ name = "httpcore"
236
+ version = "1.0.9"
237
+ source = { registry = "https://pypi.org/simple" }
238
+ dependencies = [
239
+ { name = "certifi" },
240
+ { name = "h11" },
241
+ ]
242
+ sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" }
243
+ wheels = [
244
+ { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
245
+ ]
246
+
247
+ [[package]]
248
+ name = "httpcore2"
249
+ version = "2.7.0"
250
+ source = { registry = "https://pypi.org/simple" }
251
+ dependencies = [
252
+ { name = "h11" },
253
+ { name = "truststore" },
254
+ ]
255
+ sdist = { url = "https://files.pythonhosted.org/packages/d5/fe/6a3f9f1a8bb8733326140737446aaf72fddb8b54b8f202302f5c84960613/httpcore2-2.7.0.tar.gz", hash = "sha256:6dc0fedf329a52a990930a5579edfebaea81118ea700ea0dd7de2b5e5be49efc", size = 65593, upload-time = "2026-07-14T20:40:01.111Z" }
256
+ wheels = [
257
+ { url = "https://files.pythonhosted.org/packages/6f/6c/62e2e279e63fc4f7a5ee841ef13175a8bbc613f258e9dcc186e9de803a42/httpcore2-2.7.0-py3-none-any.whl", hash = "sha256:1452f589fe23f55b44546cd884294c41a29330af902bc0b71a761fd52d18f92b", size = 81506, upload-time = "2026-07-14T20:39:58.053Z" },
258
+ ]
259
+
260
+ [[package]]
261
+ name = "httpx"
262
+ version = "0.28.1"
263
+ source = { registry = "https://pypi.org/simple" }
264
+ dependencies = [
265
+ { name = "anyio" },
266
+ { name = "certifi" },
267
+ { name = "httpcore" },
268
+ { name = "idna" },
269
+ ]
270
+ sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" }
271
+ wheels = [
272
+ { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
273
+ ]
274
+
275
+ [[package]]
276
+ name = "httpx2"
277
+ version = "2.7.0"
278
+ source = { registry = "https://pypi.org/simple" }
279
+ dependencies = [
280
+ { name = "anyio" },
281
+ { name = "httpcore2" },
282
+ { name = "idna" },
283
+ { name = "truststore" },
284
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
285
+ ]
286
+ sdist = { url = "https://files.pythonhosted.org/packages/a3/4a/129b2e21b90ac2985d3928d96792bccc39bc6dfe796c5eee2d8ec06d4105/httpx2-2.7.0.tar.gz", hash = "sha256:8b30709aed5c8465b0dd3b95c09ce301c8f79e7e7a2d00ab0af551e0d0375b07", size = 94487, upload-time = "2026-07-14T20:40:02.318Z" }
287
+ wheels = [
288
+ { url = "https://files.pythonhosted.org/packages/1d/b8/c341bba6411bdfda786020343c47a75ef472f6085caf82391b142b1a3ad9/httpx2-2.7.0-py3-none-any.whl", hash = "sha256:ed2a2719c696789e09493bd8e2bec3d8bd925cc6e26b68389ec25ade132f7bf4", size = 90234, upload-time = "2026-07-14T20:39:59.531Z" },
289
+ ]
290
+
188
291
  [[package]]
189
292
  name = "identify"
190
293
  version = "2.6.19"
@@ -212,6 +315,15 @@ wheels = [
212
315
  { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
213
316
  ]
214
317
 
318
+ [[package]]
319
+ name = "logfire-api"
320
+ version = "4.38.0"
321
+ source = { registry = "https://pypi.org/simple" }
322
+ sdist = { url = "https://files.pythonhosted.org/packages/10/1a/17af258260cf8378fabd10bacef0c585e19697eab1deea25f8e4f4fb6462/logfire_api-4.38.0.tar.gz", hash = "sha256:e773cd4a26edb48ef4ec6f88661d1c670bb68c303a71c7043a236d64a9699cd2", size = 90364, upload-time = "2026-07-20T12:15:34.913Z" }
323
+ wheels = [
324
+ { url = "https://files.pythonhosted.org/packages/26/22/598f988f293ce391e88baddeeaa1acaea625822653193935301e7149b5c6/logfire_api-4.38.0-py3-none-any.whl", hash = "sha256:6c0612d9200727b64b42eba6068d0d6afd45308f4b844ffd6290c2d33aa6a6f6", size = 140109, upload-time = "2026-07-20T12:15:31.973Z" },
325
+ ]
326
+
215
327
  [[package]]
216
328
  name = "nodeenv"
217
329
  version = "1.10.0"
@@ -221,6 +333,18 @@ wheels = [
221
333
  { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" },
222
334
  ]
223
335
 
336
+ [[package]]
337
+ name = "opentelemetry-api"
338
+ version = "1.43.0"
339
+ source = { registry = "https://pypi.org/simple" }
340
+ dependencies = [
341
+ { name = "typing-extensions" },
342
+ ]
343
+ sdist = { url = "https://files.pythonhosted.org/packages/ae/cc/e4c9584181f86494df0f6bdec1a4f3280c50db44704dc2a407e994fc87bb/opentelemetry_api-1.43.0.tar.gz", hash = "sha256:107d0d03857ea8fc7c5fcbbbd83f800c281f0d560553d61c1d675fccfd1761c1", size = 73476, upload-time = "2026-06-24T15:19:55.323Z" }
344
+ wheels = [
345
+ { url = "https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl", hash = "sha256:20acf45e9b21851926835292e4045d290acade1edd2ff3de86d2f069687ba1fd", size = 61912, upload-time = "2026-06-24T15:19:35.434Z" },
346
+ ]
347
+
224
348
  [[package]]
225
349
  name = "packaging"
226
350
  version = "26.2"
@@ -279,6 +403,24 @@ wheels = [
279
403
  { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" },
280
404
  ]
281
405
 
406
+ [[package]]
407
+ name = "pydantic-ai-slim"
408
+ version = "2.15.0"
409
+ source = { registry = "https://pypi.org/simple" }
410
+ dependencies = [
411
+ { name = "genai-prices" },
412
+ { name = "griffelib" },
413
+ { name = "httpx" },
414
+ { name = "opentelemetry-api" },
415
+ { name = "pydantic" },
416
+ { name = "pydantic-graph" },
417
+ { name = "typing-inspection" },
418
+ ]
419
+ sdist = { url = "https://files.pythonhosted.org/packages/54/bc/65fabea030e6b40c04b25b7069b559ff5cabea6e7cadf640839ceeb08af6/pydantic_ai_slim-2.15.0.tar.gz", hash = "sha256:29d804b6caf582337f4e99f98ba4f4bf0b9e164761429daa87c392a176315e20", size = 879375, upload-time = "2026-07-22T03:59:19.447Z" }
420
+ wheels = [
421
+ { url = "https://files.pythonhosted.org/packages/66/d9/28a6010b1d1937fc5c0fa1516d8a7e05d871920269e1dedd28db3c138195/pydantic_ai_slim-2.15.0-py3-none-any.whl", hash = "sha256:758f9cf5bf1c7e83bf4e7459e71006a3d5da46443416f71281fea202365ce7a7", size = 1066704, upload-time = "2026-07-22T03:59:12.047Z" },
422
+ ]
423
+
282
424
  [[package]]
283
425
  name = "pydantic-core"
284
426
  version = "2.46.4"
@@ -354,6 +496,21 @@ wheels = [
354
496
  { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" },
355
497
  ]
356
498
 
499
+ [[package]]
500
+ name = "pydantic-graph"
501
+ version = "2.15.0"
502
+ source = { registry = "https://pypi.org/simple" }
503
+ dependencies = [
504
+ { name = "httpx" },
505
+ { name = "logfire-api" },
506
+ { name = "pydantic" },
507
+ { name = "typing-inspection" },
508
+ ]
509
+ sdist = { url = "https://files.pythonhosted.org/packages/6a/39/f56cfeb84754b07470c4149bdc2f242308c057975d51ca1d1695a58f36c3/pydantic_graph-2.15.0.tar.gz", hash = "sha256:3cc82597ed9bfff4806e5c5105bc64e6e627924a21933962e4d8a3aebe25bc6d", size = 43934, upload-time = "2026-07-22T03:59:21.684Z" }
510
+ wheels = [
511
+ { url = "https://files.pythonhosted.org/packages/a0/b6/6d6360afbc91b9430abe7f50266f2f0b78fcfc55a88b5681618948d60ab1/pydantic_graph-2.15.0-py3-none-any.whl", hash = "sha256:ed5b3fa18dccea9cef95a09fbbf087e49d9e244f11376ee0454d8f89059a95e6", size = 51660, upload-time = "2026-07-22T03:59:15.108Z" },
512
+ ]
513
+
357
514
  [[package]]
358
515
  name = "pygments"
359
516
  version = "2.20.0"
@@ -503,6 +660,15 @@ wheels = [
503
660
  { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" },
504
661
  ]
505
662
 
663
+ [[package]]
664
+ name = "truststore"
665
+ version = "0.10.4"
666
+ source = { registry = "https://pypi.org/simple" }
667
+ sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e8102c22482f6060c7a6ea0322b63e026372e6dcefcfd6/truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301", size = 26169, upload-time = "2025-08-12T18:49:02.73Z" }
668
+ wheels = [
669
+ { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" },
670
+ ]
671
+
506
672
  [[package]]
507
673
  name = "ty"
508
674
  version = "0.0.62"
@@ -34,8 +34,8 @@ def inject[**P, R](
34
34
 
35
35
  dependant = create_dependant(func)
36
36
 
37
- @wraps(func)
38
37
  @strip_sign(dependant)
38
+ @wraps(func)
39
39
  async def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
40
40
  async with inside_inject_scope(
41
41
  new_scope=new_scope,