ommlds 0.0.0.dev490__py3-none-any.whl → 0.0.0.dev491__py3-none-any.whl

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 (83) hide show
  1. ommlds/.omlish-manifests.json +3 -3
  2. ommlds/README.md +11 -0
  3. ommlds/__about__.py +1 -1
  4. ommlds/backends/ollama/_dataclasses.py +53 -23
  5. ommlds/backends/ollama/protocol.py +3 -0
  6. ommlds/cli/_dataclasses.py +439 -289
  7. ommlds/cli/main.py +40 -33
  8. ommlds/cli/rendering/types.py +6 -0
  9. ommlds/cli/sessions/chat/configs.py +2 -2
  10. ommlds/cli/sessions/chat/{agents → drivers}/ai/inject.py +3 -1
  11. ommlds/cli/sessions/chat/{agents → drivers}/configs.py +1 -1
  12. ommlds/cli/sessions/chat/{agents/agent.py → drivers/driver.py} +1 -1
  13. ommlds/cli/sessions/chat/{agents → drivers}/inject.py +13 -6
  14. ommlds/cli/sessions/chat/{agents → drivers}/tools/configs.py +0 -2
  15. ommlds/cli/sessions/chat/drivers/tools/confirmation.py +44 -0
  16. ommlds/cli/sessions/chat/{agents → drivers}/tools/execution.py +2 -3
  17. ommlds/cli/sessions/chat/{agents → drivers}/tools/inject.py +1 -13
  18. ommlds/cli/sessions/chat/{agents → drivers}/tools/rendering.py +1 -1
  19. ommlds/cli/sessions/chat/drivers/types.py +10 -0
  20. ommlds/cli/sessions/chat/{agents → drivers}/user/inject.py +3 -3
  21. ommlds/cli/sessions/chat/inject.py +2 -2
  22. ommlds/cli/sessions/chat/interfaces/bare/inject.py +23 -0
  23. ommlds/cli/sessions/chat/interfaces/bare/interactive.py +6 -6
  24. ommlds/cli/sessions/chat/interfaces/bare/oneshot.py +5 -5
  25. ommlds/cli/sessions/chat/{agents/tools/confirmation.py → interfaces/bare/tools.py} +2 -21
  26. ommlds/cli/sessions/chat/interfaces/bare/user.py +1 -1
  27. ommlds/cli/sessions/chat/interfaces/configs.py +8 -0
  28. ommlds/cli/sessions/chat/interfaces/textual/app.py +100 -94
  29. ommlds/cli/sessions/chat/interfaces/textual/inject.py +29 -5
  30. ommlds/cli/sessions/chat/interfaces/textual/styles/__init__.py +29 -0
  31. ommlds/cli/sessions/chat/interfaces/textual/styles/markdown.tcss +7 -0
  32. ommlds/cli/sessions/chat/interfaces/textual/styles/messages.tcss +72 -1
  33. ommlds/cli/sessions/chat/interfaces/textual/widgets/__init__.py +0 -0
  34. ommlds/cli/sessions/chat/interfaces/textual/widgets/input.py +36 -0
  35. ommlds/cli/sessions/chat/interfaces/textual/widgets/messages.py +114 -0
  36. ommlds/minichain/backends/impls/ollama/chat.py +24 -56
  37. ommlds/minichain/backends/impls/ollama/protocol.py +144 -0
  38. ommlds/nanochat/rustbpe/README.md +9 -0
  39. {ommlds-0.0.0.dev490.dist-info → ommlds-0.0.0.dev491.dist-info}/METADATA +6 -6
  40. {ommlds-0.0.0.dev490.dist-info → ommlds-0.0.0.dev491.dist-info}/RECORD +83 -74
  41. /ommlds/cli/sessions/chat/{agents → drivers}/__init__.py +0 -0
  42. /ommlds/cli/sessions/chat/{agents → drivers}/ai/__init__.py +0 -0
  43. /ommlds/cli/sessions/chat/{agents → drivers}/ai/configs.py +0 -0
  44. /ommlds/cli/sessions/chat/{agents → drivers}/ai/events.py +0 -0
  45. /ommlds/cli/sessions/chat/{agents → drivers}/ai/injection.py +0 -0
  46. /ommlds/cli/sessions/chat/{agents → drivers}/ai/rendering.py +0 -0
  47. /ommlds/cli/sessions/chat/{agents → drivers}/ai/services.py +0 -0
  48. /ommlds/cli/sessions/chat/{agents → drivers}/ai/tools.py +0 -0
  49. /ommlds/cli/sessions/chat/{agents → drivers}/ai/types.py +0 -0
  50. /ommlds/cli/sessions/chat/{agents → drivers}/events/__init__.py +0 -0
  51. /ommlds/cli/sessions/chat/{agents → drivers}/events/inject.py +0 -0
  52. /ommlds/cli/sessions/chat/{agents → drivers}/events/injection.py +0 -0
  53. /ommlds/cli/sessions/chat/{agents → drivers}/events/manager.py +0 -0
  54. /ommlds/cli/sessions/chat/{agents → drivers}/events/types.py +0 -0
  55. /ommlds/cli/sessions/chat/{agents → drivers}/phases/__init__.py +0 -0
  56. /ommlds/cli/sessions/chat/{agents → drivers}/phases/inject.py +0 -0
  57. /ommlds/cli/sessions/chat/{agents → drivers}/phases/injection.py +0 -0
  58. /ommlds/cli/sessions/chat/{agents → drivers}/phases/manager.py +0 -0
  59. /ommlds/cli/sessions/chat/{agents → drivers}/phases/types.py +0 -0
  60. /ommlds/cli/sessions/chat/{agents → drivers}/state/__init__.py +0 -0
  61. /ommlds/cli/sessions/chat/{agents → drivers}/state/configs.py +0 -0
  62. /ommlds/cli/sessions/chat/{agents → drivers}/state/inject.py +0 -0
  63. /ommlds/cli/sessions/chat/{agents → drivers}/state/inmemory.py +0 -0
  64. /ommlds/cli/sessions/chat/{agents → drivers}/state/storage.py +0 -0
  65. /ommlds/cli/sessions/chat/{agents → drivers}/state/types.py +0 -0
  66. /ommlds/cli/sessions/chat/{agents → drivers}/tools/__init__.py +0 -0
  67. /ommlds/cli/sessions/chat/{agents → drivers}/tools/fs/__init__.py +0 -0
  68. /ommlds/cli/sessions/chat/{agents → drivers}/tools/fs/configs.py +0 -0
  69. /ommlds/cli/sessions/chat/{agents → drivers}/tools/fs/inject.py +0 -0
  70. /ommlds/cli/sessions/chat/{agents → drivers}/tools/injection.py +0 -0
  71. /ommlds/cli/sessions/chat/{agents → drivers}/tools/todo/__init__.py +0 -0
  72. /ommlds/cli/sessions/chat/{agents → drivers}/tools/todo/configs.py +0 -0
  73. /ommlds/cli/sessions/chat/{agents → drivers}/tools/todo/inject.py +0 -0
  74. /ommlds/cli/sessions/chat/{agents → drivers}/tools/weather/__init__.py +0 -0
  75. /ommlds/cli/sessions/chat/{agents → drivers}/tools/weather/configs.py +0 -0
  76. /ommlds/cli/sessions/chat/{agents → drivers}/tools/weather/inject.py +0 -0
  77. /ommlds/cli/sessions/chat/{agents → drivers}/tools/weather/tools.py +0 -0
  78. /ommlds/cli/sessions/chat/{agents → drivers}/user/__init__.py +0 -0
  79. /ommlds/cli/sessions/chat/{agents → drivers}/user/configs.py +0 -0
  80. {ommlds-0.0.0.dev490.dist-info → ommlds-0.0.0.dev491.dist-info}/WHEEL +0 -0
  81. {ommlds-0.0.0.dev490.dist-info → ommlds-0.0.0.dev491.dist-info}/entry_points.txt +0 -0
  82. {ommlds-0.0.0.dev490.dist-info → ommlds-0.0.0.dev491.dist-info}/licenses/LICENSE +0 -0
  83. {ommlds-0.0.0.dev490.dist-info → ommlds-0.0.0.dev491.dist-info}/top_level.txt +0 -0
@@ -459,7 +459,7 @@
459
459
  "module": ".minichain.backends.impls.ollama.chat",
460
460
  "attr": null,
461
461
  "file": "ommlds/minichain/backends/impls/ollama/chat.py",
462
- "line": 38,
462
+ "line": 35,
463
463
  "value": {
464
464
  "!.minichain.backends.strings.manifests.BackendStringsManifest": {
465
465
  "service_cls_names": [
@@ -475,7 +475,7 @@
475
475
  "module": ".minichain.backends.impls.ollama.chat",
476
476
  "attr": null,
477
477
  "file": "ommlds/minichain/backends/impls/ollama/chat.py",
478
- "line": 96,
478
+ "line": 68,
479
479
  "value": {
480
480
  "!.minichain.registries.manifests.RegistryManifest": {
481
481
  "module": "ommlds.minichain.backends.impls.ollama.chat",
@@ -490,7 +490,7 @@
490
490
  "module": ".minichain.backends.impls.ollama.chat",
491
491
  "attr": null,
492
492
  "file": "ommlds/minichain/backends/impls/ollama/chat.py",
493
- "line": 143,
493
+ "line": 111,
494
494
  "value": {
495
495
  "!.minichain.registries.manifests.RegistryManifest": {
496
496
  "module": "ommlds.minichain.backends.impls.ollama.chat",
ommlds/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # Overview
2
+
3
+ ML / AI code.
4
+
5
+ # Notable packages
6
+
7
+ - **[cli](https://github.com/wrmsr/omlish/blob/master/ommlds/cli)** (cli: `om mc`) - A general purpose ai cli, inspired
8
+ and in the spirit of [simonw's](https://github.com/simonw/llm) and others.
9
+
10
+ - **[minichain](https://github.com/wrmsr/omlish/blob/master/ommlds/minichain)** - *A thing that does the things
11
+ langchain people use langchain to do.*
ommlds/__about__.py CHANGED
@@ -22,7 +22,7 @@ class Project(ProjectBase):
22
22
  'llama-cpp-python ~= 0.3',
23
23
 
24
24
  'mlx ~= 0.30; sys_platform == "darwin"',
25
- 'mlx-lm ~= 0.28; sys_platform == "darwin"',
25
+ 'mlx-lm ~= 0.29; sys_platform == "darwin"',
26
26
 
27
27
  # 'sentencepiece ~= 0.2', # FIXME: https://github.com/google/sentencepiece/issues/1121
28
28
 
@@ -2230,27 +2230,34 @@ def _process_dataclass__5ed26fc5132f873daeaffa682785bd1b47768acb():
2230
2230
 
2231
2231
  @_register(
2232
2232
  plan_repr=(
2233
- "Plans(tup=(CopyPlan(fields=('function',)), EqPlan(fields=('function',)), FrozenPlan(fields=('function',), allo"
2234
- "w_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('function',), cache=False), InitPlan(fields=(Ini"
2235
- "tPlan.Field(name='function', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory="
2236
- "None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),)"
2237
- ", self_param='self', std_params=(), kw_only_params=('function',), frozen=True, slots=False, post_init_params=N"
2238
- "one, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='function', kw_only=True, fn=None),),"
2239
- " id=False, terse=False, default_fn=None)))"
2233
+ "Plans(tup=(CopyPlan(fields=('id', 'function')), EqPlan(fields=('id', 'function')), FrozenPlan(fields=('id', 'f"
2234
+ "unction'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('id', 'function'), cache=False), "
2235
+ "InitPlan(fields=(InitPlan.Field(name='id', annotation=OpRef(name='init.fields.0.annotation'), default=OpRef(na"
2236
+ "me='init.fields.0.default'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, c"
2237
+ "oerce=None, validate=None, check_type=None), InitPlan.Field(name='function', annotation=OpRef(name='init.field"
2238
+ "s.1.annotation'), default=None, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE"
2239
+ ", coerce=None, validate=None, check_type=None)), self_param='self', std_params=(), kw_only_params=('id', 'func"
2240
+ "tion'), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprP"
2241
+ "lan.Field(name='id', kw_only=True, fn=None), ReprPlan.Field(name='function', kw_only=True, fn=None)), id=False"
2242
+ ", terse=False, default_fn=None)))"
2240
2243
  ),
2241
- plan_repr_sha1='28bc958fe5292af1c044c0092dc3974a3184df3d',
2244
+ plan_repr_sha1='7d5771c082d3ad6a1d478102e83deb352ad93e34',
2242
2245
  op_ref_idents=(
2243
2246
  '__dataclass__init__fields__0__annotation',
2247
+ '__dataclass__init__fields__0__default',
2248
+ '__dataclass__init__fields__1__annotation',
2244
2249
  ),
2245
2250
  cls_names=(
2246
2251
  ('ommlds.backends.ollama.protocol', 'Message.ToolCall'),
2247
2252
  ),
2248
2253
  )
2249
- def _process_dataclass__28bc958fe5292af1c044c0092dc3974a3184df3d():
2254
+ def _process_dataclass__7d5771c082d3ad6a1d478102e83deb352ad93e34():
2250
2255
  def _process_dataclass(
2251
2256
  *,
2252
2257
  __dataclass__cls,
2253
2258
  __dataclass__init__fields__0__annotation,
2259
+ __dataclass__init__fields__0__default,
2260
+ __dataclass__init__fields__1__annotation,
2254
2261
  __dataclass__FieldFnValidationError, # noqa
2255
2262
  __dataclass__FieldTypeValidationError, # noqa
2256
2263
  __dataclass__FnValidationError, # noqa
@@ -2269,6 +2276,7 @@ def _process_dataclass__28bc958fe5292af1c044c0092dc3974a3184df3d():
2269
2276
  if self.__class__ is not __dataclass__cls:
2270
2277
  raise TypeError(self)
2271
2278
  return __dataclass__cls( # noqa
2279
+ id=self.id,
2272
2280
  function=self.function,
2273
2281
  )
2274
2282
 
@@ -2283,6 +2291,7 @@ def _process_dataclass__28bc958fe5292af1c044c0092dc3974a3184df3d():
2283
2291
  if self.__class__ is not other.__class__:
2284
2292
  return NotImplemented
2285
2293
  return (
2294
+ self.id == other.id and
2286
2295
  self.function == other.function
2287
2296
  )
2288
2297
 
@@ -2292,6 +2301,7 @@ def _process_dataclass__28bc958fe5292af1c044c0092dc3974a3184df3d():
2292
2301
  setattr(__dataclass__cls, '__eq__', __eq__)
2293
2302
 
2294
2303
  __dataclass___setattr_frozen_fields = {
2304
+ 'id',
2295
2305
  'function',
2296
2306
  }
2297
2307
 
@@ -2309,6 +2319,7 @@ def _process_dataclass__28bc958fe5292af1c044c0092dc3974a3184df3d():
2309
2319
  setattr(__dataclass__cls, '__setattr__', __setattr__)
2310
2320
 
2311
2321
  __dataclass___delattr_frozen_fields = {
2322
+ 'id',
2312
2323
  'function',
2313
2324
  }
2314
2325
 
@@ -2327,6 +2338,7 @@ def _process_dataclass__28bc958fe5292af1c044c0092dc3974a3184df3d():
2327
2338
 
2328
2339
  def __hash__(self):
2329
2340
  return hash((
2341
+ self.id,
2330
2342
  self.function,
2331
2343
  ))
2332
2344
 
@@ -2336,8 +2348,10 @@ def _process_dataclass__28bc958fe5292af1c044c0092dc3974a3184df3d():
2336
2348
  def __init__(
2337
2349
  self,
2338
2350
  *,
2339
- function: __dataclass__init__fields__0__annotation,
2351
+ id: __dataclass__init__fields__0__annotation = __dataclass__init__fields__0__default,
2352
+ function: __dataclass__init__fields__1__annotation,
2340
2353
  ) -> __dataclass__None:
2354
+ __dataclass__object_setattr(self, 'id', id)
2341
2355
  __dataclass__object_setattr(self, 'function', function)
2342
2356
 
2343
2357
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
@@ -2348,6 +2362,7 @@ def _process_dataclass__28bc958fe5292af1c044c0092dc3974a3184df3d():
2348
2362
  @__dataclass___recursive_repr()
2349
2363
  def __repr__(self):
2350
2364
  parts = []
2365
+ parts.append(f"id={self.id!r}")
2351
2366
  parts.append(f"function={self.function!r}")
2352
2367
  return (
2353
2368
  f"{self.__class__.__qualname__}("
@@ -2365,32 +2380,39 @@ def _process_dataclass__28bc958fe5292af1c044c0092dc3974a3184df3d():
2365
2380
 
2366
2381
  @_register(
2367
2382
  plan_repr=(
2368
- "Plans(tup=(CopyPlan(fields=('name', 'arguments')), EqPlan(fields=('name', 'arguments')), FrozenPlan(fields=('n"
2369
- "ame', 'arguments'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('name', 'arguments'), ca"
2370
- "che=False), InitPlan(fields=(InitPlan.Field(name='name', annotation=OpRef(name='init.fields.0.annotation'), de"
2371
- "fault=None, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, valid"
2372
- "ate=None, check_type=None), InitPlan.Field(name='arguments', annotation=OpRef(name='init.fields.1.annotation')"
2373
- ", default=None, default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, v"
2374
- "alidate=None, check_type=None)), self_param='self', std_params=(), kw_only_params=('name', 'arguments'), froze"
2375
- "n=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(nam"
2376
- "e='name', kw_only=True, fn=None), ReprPlan.Field(name='arguments', kw_only=True, fn=None)), id=False, terse=Fa"
2377
- "lse, default_fn=None)))"
2383
+ "Plans(tup=(CopyPlan(fields=('name', 'arguments', 'index')), EqPlan(fields=('name', 'arguments', 'index')), Fro"
2384
+ "zenPlan(fields=('name', 'arguments', 'index'), allow_dynamic_dunder_attrs=False), HashPlan(action='add', field"
2385
+ "s=('name', 'arguments', 'index'), cache=False), InitPlan(fields=(InitPlan.Field(name='name', annotation=OpRef("
2386
+ "name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, field_type=Fi"
2387
+ "eldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='arguments', annotation=Op"
2388
+ "Ref(name='init.fields.1.annotation'), default=None, default_factory=None, init=True, override=False, field_typ"
2389
+ "e=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.Field(name='index', annotation=Op"
2390
+ "Ref(name='init.fields.2.annotation'), default=OpRef(name='init.fields.2.default'), default_factory=None, init="
2391
+ "True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None)), self_param"
2392
+ "='self', std_params=(), kw_only_params=('name', 'arguments', 'index'), frozen=True, slots=False, post_init_par"
2393
+ "ams=None, init_fns=(), validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='name', kw_only=True, fn=None), "
2394
+ "ReprPlan.Field(name='arguments', kw_only=True, fn=None), ReprPlan.Field(name='index', kw_only=True, fn=None)),"
2395
+ " id=False, terse=False, default_fn=None)))"
2378
2396
  ),
2379
- plan_repr_sha1='117a4dfaa89634a6031af8480bfa22336edf606d',
2397
+ plan_repr_sha1='c679b8dd972a245826381e3200fe81df0cd736c1',
2380
2398
  op_ref_idents=(
2381
2399
  '__dataclass__init__fields__0__annotation',
2382
2400
  '__dataclass__init__fields__1__annotation',
2401
+ '__dataclass__init__fields__2__annotation',
2402
+ '__dataclass__init__fields__2__default',
2383
2403
  ),
2384
2404
  cls_names=(
2385
2405
  ('ommlds.backends.ollama.protocol', 'Message.ToolCall.Function'),
2386
2406
  ),
2387
2407
  )
2388
- def _process_dataclass__117a4dfaa89634a6031af8480bfa22336edf606d():
2408
+ def _process_dataclass__c679b8dd972a245826381e3200fe81df0cd736c1():
2389
2409
  def _process_dataclass(
2390
2410
  *,
2391
2411
  __dataclass__cls,
2392
2412
  __dataclass__init__fields__0__annotation,
2393
2413
  __dataclass__init__fields__1__annotation,
2414
+ __dataclass__init__fields__2__annotation,
2415
+ __dataclass__init__fields__2__default,
2394
2416
  __dataclass__FieldFnValidationError, # noqa
2395
2417
  __dataclass__FieldTypeValidationError, # noqa
2396
2418
  __dataclass__FnValidationError, # noqa
@@ -2411,6 +2433,7 @@ def _process_dataclass__117a4dfaa89634a6031af8480bfa22336edf606d():
2411
2433
  return __dataclass__cls( # noqa
2412
2434
  name=self.name,
2413
2435
  arguments=self.arguments,
2436
+ index=self.index,
2414
2437
  )
2415
2438
 
2416
2439
  __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
@@ -2425,7 +2448,8 @@ def _process_dataclass__117a4dfaa89634a6031af8480bfa22336edf606d():
2425
2448
  return NotImplemented
2426
2449
  return (
2427
2450
  self.name == other.name and
2428
- self.arguments == other.arguments
2451
+ self.arguments == other.arguments and
2452
+ self.index == other.index
2429
2453
  )
2430
2454
 
2431
2455
  __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
@@ -2436,6 +2460,7 @@ def _process_dataclass__117a4dfaa89634a6031af8480bfa22336edf606d():
2436
2460
  __dataclass___setattr_frozen_fields = {
2437
2461
  'name',
2438
2462
  'arguments',
2463
+ 'index',
2439
2464
  }
2440
2465
 
2441
2466
  def __setattr__(self, name, value):
@@ -2454,6 +2479,7 @@ def _process_dataclass__117a4dfaa89634a6031af8480bfa22336edf606d():
2454
2479
  __dataclass___delattr_frozen_fields = {
2455
2480
  'name',
2456
2481
  'arguments',
2482
+ 'index',
2457
2483
  }
2458
2484
 
2459
2485
  def __delattr__(self, name):
@@ -2473,6 +2499,7 @@ def _process_dataclass__117a4dfaa89634a6031af8480bfa22336edf606d():
2473
2499
  return hash((
2474
2500
  self.name,
2475
2501
  self.arguments,
2502
+ self.index,
2476
2503
  ))
2477
2504
 
2478
2505
  __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
@@ -2483,9 +2510,11 @@ def _process_dataclass__117a4dfaa89634a6031af8480bfa22336edf606d():
2483
2510
  *,
2484
2511
  name: __dataclass__init__fields__0__annotation,
2485
2512
  arguments: __dataclass__init__fields__1__annotation,
2513
+ index: __dataclass__init__fields__2__annotation = __dataclass__init__fields__2__default,
2486
2514
  ) -> __dataclass__None:
2487
2515
  __dataclass__object_setattr(self, 'name', name)
2488
2516
  __dataclass__object_setattr(self, 'arguments', arguments)
2517
+ __dataclass__object_setattr(self, 'index', index)
2489
2518
 
2490
2519
  __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
2491
2520
  if '__init__' in __dataclass__cls.__dict__:
@@ -2497,6 +2526,7 @@ def _process_dataclass__117a4dfaa89634a6031af8480bfa22336edf606d():
2497
2526
  parts = []
2498
2527
  parts.append(f"name={self.name!r}")
2499
2528
  parts.append(f"arguments={self.arguments!r}")
2529
+ parts.append(f"index={self.index!r}")
2500
2530
  return (
2501
2531
  f"{self.__class__.__qualname__}("
2502
2532
  f"{', '.join(parts)}"
@@ -131,10 +131,13 @@ class Message:
131
131
 
132
132
  @dc.dataclass(frozen=True, kw_only=True)
133
133
  class ToolCall:
134
+ id: str | None = None
135
+
134
136
  @dc.dataclass(frozen=True, kw_only=True)
135
137
  class Function:
136
138
  name: str
137
139
  arguments: ta.Mapping[str, ta.Any]
140
+ index: int | None = None
138
141
 
139
142
  function: Function
140
143