truss 0.11.10rc3__py3-none-any.whl → 0.11.10rc5__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.

Potentially problematic release.


This version of truss might be problematic. Click here for more details.

@@ -577,6 +577,7 @@ class TRTLLMConfigurationV2(PydanticTrTBaseModel):
577
577
  "quantization_type",
578
578
  "quantization_config",
579
579
  "skip_build_result",
580
+ "num_builder_gpus",
580
581
  ]
581
582
 
582
583
  build_settings = self.build.model_dump(exclude_unset=True)
truss/cli/train/core.py CHANGED
@@ -16,7 +16,11 @@ from rich.text import Text
16
16
 
17
17
  from truss.cli.train import common, deploy_checkpoints
18
18
  from truss.cli.train.metrics_watcher import MetricsWatcher
19
- from truss.cli.train.types import DeployCheckpointArgs, DeployCheckpointsConfigComplete
19
+ from truss.cli.train.types import (
20
+ DeployCheckpointArgs,
21
+ DeployCheckpointsConfigComplete,
22
+ DeploySuccessResult,
23
+ )
20
24
  from truss.cli.utils import common as cli_common
21
25
  from truss.cli.utils.output import console
22
26
  from truss.remote.baseten.custom_types import (
@@ -244,17 +248,25 @@ def view_training_job_metrics(
244
248
 
245
249
  def create_model_version_from_inference_template(
246
250
  remote_provider: BasetenRemote, args: DeployCheckpointArgs
247
- ) -> DeployCheckpointsConfigComplete:
251
+ ) -> DeploySuccessResult:
248
252
  if not args.deploy_config_path:
249
253
  return deploy_checkpoints.create_model_version_from_inference_template(
250
- remote_provider, DeployCheckpointsConfig(), args.project_id, args.job_id
254
+ remote_provider,
255
+ DeployCheckpointsConfig(),
256
+ args.project_id,
257
+ args.job_id,
258
+ args.dry_run,
251
259
  )
252
260
  #### User provided a checkpoint deploy config file
253
261
  with loader.import_deploy_checkpoints_config(
254
262
  Path(args.deploy_config_path)
255
263
  ) as checkpoint_deploy:
256
264
  return deploy_checkpoints.create_model_version_from_inference_template(
257
- remote_provider, checkpoint_deploy, args.project_id, args.job_id
265
+ remote_provider,
266
+ checkpoint_deploy,
267
+ args.project_id,
268
+ args.job_id,
269
+ args.dry_run,
258
270
  )
259
271
 
260
272
 
@@ -1,3 +1,4 @@
1
+ import json
1
2
  import re
2
3
  from collections import OrderedDict
3
4
  from typing import List, Optional, Union
@@ -7,7 +8,11 @@ from InquirerPy import inquirer
7
8
 
8
9
  from truss.base import truss_config
9
10
  from truss.cli.train import common
10
- from truss.cli.train.types import DeployCheckpointsConfigComplete
11
+ from truss.cli.train.types import (
12
+ DeployCheckpointsConfigComplete,
13
+ DeploySuccessModelVersion,
14
+ DeploySuccessResult,
15
+ )
11
16
  from truss.cli.utils.output import console
12
17
  from truss.remote.baseten.remote import BasetenRemote
13
18
  from truss_train.definitions import (
@@ -35,13 +40,16 @@ def create_model_version_from_inference_template(
35
40
  checkpoint_deploy_config: DeployCheckpointsConfig,
36
41
  project_id: Optional[str],
37
42
  job_id: Optional[str],
38
- ) -> DeployCheckpointsConfigComplete:
43
+ dry_run: bool,
44
+ ) -> DeploySuccessResult:
39
45
  checkpoint_deploy_config = _hydrate_deploy_config(
40
46
  checkpoint_deploy_config, remote_provider, project_id, job_id
41
47
  )
42
48
 
43
49
  request_data = _build_inference_template_request(
44
- checkpoint_deploy_config, remote_provider
50
+ checkpoint_deploy_config=checkpoint_deploy_config,
51
+ remote_provider=remote_provider,
52
+ dry_run=dry_run,
45
53
  )
46
54
 
47
55
  # Call the GraphQL mutation to create model version from inference template
@@ -49,7 +57,9 @@ def create_model_version_from_inference_template(
49
57
  result = remote_provider.api.create_model_version_from_inference_template(
50
58
  request_data
51
59
  )
60
+ truss_config_result = _get_truss_config_from_result(result)
52
61
 
62
+ model_version = None
53
63
  if result and result.get("model_version"):
54
64
  console.print(
55
65
  f"Successfully created model version: {result['model_version']['name']}",
@@ -58,7 +68,10 @@ def create_model_version_from_inference_template(
58
68
  console.print(
59
69
  f"Model version ID: {result['model_version']['id']}", style="yellow"
60
70
  )
61
- else:
71
+ model_version = DeploySuccessModelVersion.model_validate(
72
+ result["model_version"]
73
+ )
74
+ elif not dry_run:
62
75
  console.print(
63
76
  "Warning: Unexpected response format from server", style="yellow"
64
77
  )
@@ -68,12 +81,31 @@ def create_model_version_from_inference_template(
68
81
  console.print(f"Error creating model version: {e}", style="red")
69
82
  raise
70
83
 
71
- return checkpoint_deploy_config
84
+ return DeploySuccessResult(
85
+ deploy_config=checkpoint_deploy_config,
86
+ truss_config=truss_config_result,
87
+ model_version=model_version,
88
+ )
89
+
90
+
91
+ def _get_truss_config_from_result(result: dict) -> Optional[truss_config.TrussConfig]:
92
+ if result and result.get("truss_config"):
93
+ truss_config_dict = json.loads(result["truss_config"])
94
+ return truss_config.TrussConfig.from_dict(truss_config_dict)
95
+ # Although this should never happen, we defensively allow ourselves to return None
96
+ # because we need a failure to handle the truss config doesn't necessarily mean we failed to deploy
97
+ # the model version.
98
+ console.print(
99
+ "No truss config returned. Reach out to Baseten for support if this persists.",
100
+ style="red",
101
+ )
102
+ return None
72
103
 
73
104
 
74
105
  def _build_inference_template_request(
75
106
  checkpoint_deploy_config: DeployCheckpointsConfigComplete,
76
107
  remote_provider: BasetenRemote,
108
+ dry_run: bool,
77
109
  ) -> dict:
78
110
  """
79
111
  Build the GraphQL request data structure for createModelVersionFromInferenceTemplate mutation.
@@ -126,6 +158,7 @@ def _build_inference_template_request(
126
158
  "weights_sources": weights_sources,
127
159
  "inference_stack": inference_stack,
128
160
  "instance_type_id": instance_type_id,
161
+ "dry_run": dry_run,
129
162
  }
130
163
 
131
164
  return request_data
truss/cli/train/types.py CHANGED
@@ -1,6 +1,9 @@
1
1
  from dataclasses import dataclass
2
2
  from typing import Optional
3
3
 
4
+ from pydantic import BaseModel
5
+
6
+ from truss.base import truss_config
4
7
  from truss_train.definitions import (
5
8
  CheckpointList,
6
9
  Compute,
@@ -11,6 +14,7 @@ from truss_train.definitions import (
11
14
 
12
15
  @dataclass
13
16
  class DeployCheckpointArgs:
17
+ dry_run: bool
14
18
  project_id: Optional[str]
15
19
  job_id: Optional[str]
16
20
  deploy_config_path: Optional[str]
@@ -26,3 +30,18 @@ class DeployCheckpointsConfigComplete(DeployCheckpointsConfig):
26
30
  model_name: str
27
31
  runtime: DeployCheckpointsRuntime
28
32
  compute: Compute
33
+
34
+
35
+ class DeploySuccessModelVersion(BaseModel):
36
+ # allow extra fields to be forwards compatible with server
37
+ class Config:
38
+ extra = "allow"
39
+
40
+ name: str
41
+ id: str
42
+
43
+
44
+ class DeploySuccessResult(BaseModel):
45
+ deploy_config: DeployCheckpointsConfigComplete
46
+ truss_config: Optional[truss_config.TrussConfig]
47
+ model_version: Optional[DeploySuccessModelVersion]
@@ -1,5 +1,6 @@
1
1
  import os
2
2
  import sys
3
+ from datetime import datetime
3
4
  from pathlib import Path
4
5
  from typing import Optional, cast
5
6
 
@@ -22,6 +23,7 @@ from truss.cli.train.core import (
22
23
  SORT_ORDER_ASC,
23
24
  SORT_ORDER_DESC,
24
25
  )
26
+ from truss.cli.train.types import DeploySuccessResult
25
27
  from truss.cli.utils import common
26
28
  from truss.cli.utils.output import console, error_console
27
29
  from truss.remote.baseten.core import get_training_job_logs_with_pagination
@@ -306,6 +308,12 @@ def get_job_metrics(
306
308
  @click.option(
307
309
  "--dry-run", is_flag=True, help="Generate a truss config without deploying"
308
310
  )
311
+ @click.option(
312
+ "--truss-config-output-dir",
313
+ type=str,
314
+ required=False,
315
+ help="Path to output the truss config to. If not provided, will output to truss_configs/<model_version_name>_<model_version_id> or truss_configs/dry_run_<timestamp> if dry run.",
316
+ )
309
317
  @click.option("--remote", type=str, required=False, help="Remote to use")
310
318
  @common.common_options()
311
319
  def deploy_checkpoints(
@@ -315,6 +323,7 @@ def deploy_checkpoints(
315
323
  config: Optional[str],
316
324
  remote: Optional[str],
317
325
  dry_run: bool,
326
+ truss_config_output_dir: Optional[str],
318
327
  ):
319
328
  """
320
329
  Deploy a LoRA checkpoint via vLLM.
@@ -332,13 +341,46 @@ def deploy_checkpoints(
332
341
  result = train_cli.create_model_version_from_inference_template(
333
342
  remote_provider,
334
343
  train_cli.DeployCheckpointArgs(
335
- project_id=project_id, job_id=job_id, deploy_config_path=config
344
+ project_id=project_id,
345
+ job_id=job_id,
346
+ deploy_config_path=config,
347
+ dry_run=dry_run,
336
348
  ),
337
349
  )
338
350
 
339
351
  if dry_run:
340
- console.print("--dry-run flag provided, did not deploy", style="yellow")
341
- train_cli.print_deploy_checkpoints_success_message(result)
352
+ console.print("did not deploy because --dry-run flag provided", style="yellow")
353
+
354
+ _write_truss_config(result, truss_config_output_dir, dry_run)
355
+
356
+ if not dry_run:
357
+ train_cli.print_deploy_checkpoints_success_message(result.deploy_config)
358
+
359
+
360
+ def _write_truss_config(
361
+ result: DeploySuccessResult, truss_config_output_dir: Optional[str], dry_run: bool
362
+ ) -> None:
363
+ if not result.truss_config:
364
+ return
365
+ # format: 20251006_123456
366
+ datestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
367
+ folder_name = (
368
+ f"{result.model_version.name}_{result.model_version.id}"
369
+ if result.model_version
370
+ else f"dry_run_{datestamp}"
371
+ )
372
+ output_dir_str = truss_config_output_dir or f"truss_configs/{folder_name}"
373
+ output_dir = Path(output_dir_str)
374
+ output_path = output_dir / "config.yaml"
375
+ os.makedirs(output_dir, exist_ok=True)
376
+ console.print(f"Writing truss config to {output_path}", style="yellow")
377
+ console.print(f"👀 Run `cat {output_path}` to view the truss config", style="green")
378
+ if dry_run:
379
+ console.print(
380
+ f"🚀 Run `cd {output_dir} && truss push --publish` to deploy the truss",
381
+ style="green",
382
+ )
383
+ result.truss_config.write_to_yaml_file(output_path)
342
384
 
343
385
 
344
386
  @train.command(name="download")
@@ -800,6 +800,7 @@ class BasetenApi:
800
800
  id
801
801
  name
802
802
  }
803
+ truss_config
803
804
  }
804
805
  }
805
806
  """
@@ -38,15 +38,17 @@ class SanitizedExceptionMiddleware(BaseHTTPMiddleware):
38
38
  try:
39
39
  return await call_next(request)
40
40
  except Exception as exc:
41
- sanitized_traceback = self._create_sanitized_traceback(exc)
42
- request.app.state.logger.error(sanitized_traceback)
43
- request.app.state.logger.error(f"Request path: {request.url.path}")
44
-
41
+ # NB(nikhil): Intentionally bypass error logging for ModelLoadFailed, since health checks
42
+ # are noisy. The underlying model logs for why the load failed will still be visible.
45
43
  if isinstance(exc, ModelLoadFailed):
46
44
  return JSONResponse(
47
45
  {"error": str(exc)}, status_code=http.HTTPStatus.BAD_GATEWAY.value
48
46
  )
49
- elif isinstance(exc, PatchApplicatonError):
47
+
48
+ sanitized_traceback = self._create_sanitized_traceback(exc)
49
+ request.app.state.logger.error(sanitized_traceback)
50
+
51
+ if isinstance(exc, PatchApplicatonError):
50
52
  error_type = _camel_to_snake_case(type(exc).__name__)
51
53
  return JSONResponse({"error": {"type": error_type, "msg": str(exc)}})
52
54
  else:
truss/util/__init__.py ADDED
File without changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: truss
3
- Version: 0.11.10rc3
3
+ Version: 0.11.10rc5
4
4
  Summary: A seamless bridge from model development to model delivery
5
5
  Project-URL: Repository, https://github.com/basetenlabs/truss
6
6
  Project-URL: Homepage, https://truss.baseten.co
@@ -37,7 +37,7 @@ Requires-Dist: rich<14,>=13.4.2
37
37
  Requires-Dist: ruff>=0.4.8
38
38
  Requires-Dist: tenacity>=8.0.1
39
39
  Requires-Dist: tomlkit>=0.13.2
40
- Requires-Dist: truss-transfer<0.0.35,>=0.0.30
40
+ Requires-Dist: truss-transfer<0.0.36,>=0.0.32
41
41
  Requires-Dist: watchfiles<0.20,>=0.19.0
42
42
  Description-Content-Type: text/markdown
43
43
 
@@ -5,26 +5,26 @@ truss/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  truss/base/constants.py,sha256=sExArdnuGg83z83XMgaQ4b8SS3V_j_bJEpOATDGJzpE,3600
6
6
  truss/base/custom_types.py,sha256=FUSIT2lPOQb6gfg6IzT63YBV8r8L6NIZ0D74Fp3e_jQ,2835
7
7
  truss/base/errors.py,sha256=zDVLEvseTChdPP0oNhBBQCtQUtZJUaof5zeWMIjqz6o,691
8
- truss/base/trt_llm_config.py,sha256=-hRpRsbxnfDaKS-5112yT0iP6R0evOtoTvnn557cwvc,32926
8
+ truss/base/trt_llm_config.py,sha256=81ZZxRQF3o29HLCX6nlXtPwALejcdns6c4mbrExwASk,32958
9
9
  truss/base/truss_config.py,sha256=7CtiJIwMHtDU8Wzn8UTJUVVunD0pWFl4QUVycK2aIpY,28055
10
10
  truss/base/truss_spec.py,sha256=jFVF79CXoEEspl2kXBAPyi-rwISReIGTdobGpaIhwJw,5979
11
11
  truss/cli/chains_commands.py,sha256=Kpa5mCg6URAJQE2ZmZfVQFhjBHEitKT28tKiW0H6XAI,17406
12
12
  truss/cli/cli.py,sha256=PaMkuwXZflkU7sa1tEoT_Zmy-iBkEZs1m4IVqcieaeo,30367
13
13
  truss/cli/remote_cli.py,sha256=G_xCKRXzgkCmkiZJhUFfsv5YSVgde1jLA5LPQitpZgI,1905
14
- truss/cli/train_commands.py,sha256=Cfr9-TDE-esQI_R8az5OpLoQyz3Qv38mLsSNwy9znmI,18873
14
+ truss/cli/train_commands.py,sha256=CrVqWsdkmSxgi3i2sSEyiE4QdfD0Z96F2Ib-PMZJjm8,20444
15
15
  truss/cli/logs/base_watcher.py,sha256=vuqteoaMVGX34cgKcETf4X_gOkvnSnDaWz1_pbeFhqs,3343
16
16
  truss/cli/logs/model_log_watcher.py,sha256=38vQCcNItfDrTKucvdJ10ZYLOcbGa5ZAKUqUnV4nH34,1971
17
17
  truss/cli/logs/training_log_watcher.py,sha256=r6HRqrLnz-PiKTUXiDYYxg4ZnP8vYcXlEX1YmgHhzlo,1173
18
18
  truss/cli/logs/utils.py,sha256=z-U_FG4BUzdZLbE3BnXb4DZQ0zt3LSZ3PiQpLaDuc3o,1031
19
19
  truss/cli/train/common.py,sha256=xTR41U5FeSndXfNBBHF9wF5XwZH1sOIVFlv-XHjsKIU,1547
20
- truss/cli/train/core.py,sha256=bJ40Jr4oXsG-blr3LGwd02KlYds6YbOS2x5twj_nyiI,26344
20
+ truss/cli/train/core.py,sha256=Tiflb7aqonFl93QLCs7WO1nsnl3LjfiUHSfUcllBuT0,26496
21
21
  truss/cli/train/deploy_from_checkpoint_config.yml,sha256=mktaVrfhN8Kjx1UveC4xr-gTW-kjwbHvq6bx_LpO-Wg,371
22
22
  truss/cli/train/deploy_from_checkpoint_config_whisper.yml,sha256=6GbOorYC8ml0UyOUvuBpFO_fuYtYE646JqsalR-D4oY,406
23
23
  truss/cli/train/metrics_watcher.py,sha256=smz-zrEsBj_-wJHI0pAZ-EAPrvfCWzq1eQjGiFNM-Mk,12755
24
24
  truss/cli/train/poller.py,sha256=TGRzELxsicga0bEXewSX1ujw6lfPmDnHd6nr8zvOFO8,3550
25
- truss/cli/train/types.py,sha256=aGqZ5yOLv5WZL5_rmhl3s9NoXhjXOkeSsHD3QEH0en4,700
25
+ truss/cli/train/types.py,sha256=0tfgInTm1Dmq7p8Gh_0RwxGViN6Tpp0YjsiYeMUNiPE,1163
26
26
  truss/cli/train/deploy_checkpoints/__init__.py,sha256=HuiDD6-qfwJ7fbRVX4s9Fxn6rmO6nwTLb0fVxwcMKls,137
27
- truss/cli/train/deploy_checkpoints/deploy_checkpoints.py,sha256=T3ss6qZE7iwbxXcHrNRCmt1e7VwOyVnWwwFZGv6222I,21398
27
+ truss/cli/train/deploy_checkpoints/deploy_checkpoints.py,sha256=WSv2olpsnXCEcutqFszCKU36fMo3MZ-zIVM6ihVYF_w,22599
28
28
  truss/cli/train/deploy_checkpoints/deploy_checkpoints_helpers.py,sha256=r_IKMlqejMwIU6gsfxDIRzfmltfDf6Sz9-vnKrP_10s,83
29
29
  truss/cli/train/deploy_checkpoints/deploy_full_checkpoints.py,sha256=BEgn0p-LUE_enXJKrbHtuwEkLi3B1qcNJVzExB60Fzg,1199
30
30
  truss/cli/train/deploy_checkpoints/deploy_lora_checkpoints.py,sha256=xP403ny-7YGPZCkEFRqi-Awt3hYVteGMBnZNWyY_8Pc,1138
@@ -52,7 +52,7 @@ truss/patch/truss_dir_patch_applier.py,sha256=ALnaVnu96g0kF2UmGuBFTua3lrXpwAy4sG
52
52
  truss/remote/remote_factory.py,sha256=-0gLh_yIyNDgD48Q6sR8Yo5dOMQg84lrHRvn_XR0n4s,3585
53
53
  truss/remote/truss_remote.py,sha256=TEe6h6by5-JLy7PMFsDN2QxIY5FmdIYN3bKvHHl02xM,8440
54
54
  truss/remote/baseten/__init__.py,sha256=XNqJW1zyp143XQc6-7XVwsUA_Q_ZJv_ausn1_Ohtw9Y,176
55
- truss/remote/baseten/api.py,sha256=SJHy1JWD7-dlXJRuN9fxFsGzUk-Irtt_KOnBi7f7_4s,28235
55
+ truss/remote/baseten/api.py,sha256=UxDjs0VOu_E_mDM6fa63HXE3TjTOjBR--aaHOwp11pQ,28264
56
56
  truss/remote/baseten/auth.py,sha256=tI7s6cI2EZgzpMIzrdbILHyGwiHDnmoKf_JBhJXT55E,776
57
57
  truss/remote/baseten/core.py,sha256=uxtmBI9RAVHu1glIEJb5Q4ccJYLeZM1Cp5Svb9W68Yw,21965
58
58
  truss/remote/baseten/custom_types.py,sha256=bYrfTzGgYr6FDoya0omyadCLSTcTc-83U2scQORyUj0,4715
@@ -73,7 +73,7 @@ truss/templates/copy_cache_files.Dockerfile.jinja,sha256=Os5zFdYLZ_AfCRGq4RcpVTO
73
73
  truss/templates/docker_server_requirements.txt,sha256=PyhOPKAmKW1N2vLvTfLMwsEtuGpoRrbWuNo7tT6v2Mc,18
74
74
  truss/templates/server.Dockerfile.jinja,sha256=CUYnF_hgxPGq2re7__0UPWlwzOHMoFkxp6NVKi3U16s,7071
75
75
  truss/templates/control/requirements.txt,sha256=nqqNmlTwFeV8sV4fqwItwzzd_egADBP_e-cEopXBJ4k,358
76
- truss/templates/control/control/application.py,sha256=_xcJR-s1AEP_l6lQaTJ6JUNXLw_ZxMB13bmoOs82zZ0,5202
76
+ truss/templates/control/control/application.py,sha256=5Kam6M-XtfKGaXQz8cc3d0bwDkB80o2MskABWROx1gk,5321
77
77
  truss/templates/control/control/endpoints.py,sha256=KzqsLVNJE6r6TCPW8D5FMCtsfHadTwR15A3z_viGxmM,11782
78
78
  truss/templates/control/control/server.py,sha256=R4Y219i1dcz0kkksN8obLoX-YXWGo9iW1igindyG50c,3128
79
79
  truss/templates/control/control/helpers/context_managers.py,sha256=W6dyFgLBhPa5meqrOb3w_phMtKfaJI-GhwUfpiycDc8,413
@@ -335,6 +335,7 @@ truss/truss_handle/patch/local_truss_patch_applier.py,sha256=fOHWKt3teYnbqeRsF63
335
335
  truss/truss_handle/patch/signature.py,sha256=8eas8gy6Japd1hrgdmtHmKTTxQmWsbmgKRQQGL2PVuA,858
336
336
  truss/truss_handle/patch/truss_dir_patch_applier.py,sha256=uhhHvKYHn_dpfz0xp4jwO9_qAej5sO3f8of_h-21PP4,3666
337
337
  truss/util/.truss_ignore,sha256=jpQA9ou-r_JEIcEHsUqGLHhir_m3d4IPGNyzKXtS-2g,3131
338
+ truss/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
338
339
  truss/util/docker.py,sha256=6PD7kMBBrOjsdvgkuSv7JMgZbe3NoJIeGasljMm2SwA,3934
339
340
  truss/util/download.py,sha256=1lfBwzyaNLEp7SAVrBd9BX5inZpkCVp8sBnS9RNoiJA,2521
340
341
  truss/util/env_vars.py,sha256=7Bv686eER71Barrs6fNamk_TrTJGmu9yV2TxaVmupn0,1232
@@ -369,8 +370,8 @@ truss_train/deployment.py,sha256=lWWANSuzBWu2M4oK4qD7n-oVR1JKdmw2Pn5BJQHg-Ck,307
369
370
  truss_train/loader.py,sha256=0o66EjBaHc2YY4syxxHVR4ordJWs13lNXnKjKq2wq0U,1630
370
371
  truss_train/public_api.py,sha256=9N_NstiUlmBuLUwH_fNG_1x7OhGCytZLNvqKXBlStrM,1220
371
372
  truss_train/restore_from_checkpoint.py,sha256=8hdPm-WSgkt74HDPjvCjZMBpvA9MwtoYsxVjOoa7BaM,1176
372
- truss-0.11.10rc3.dist-info/METADATA,sha256=UjBDuNvCsQnKDM5sKkeJL27F51Ldl-AdXNGhOK8usTk,6681
373
- truss-0.11.10rc3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
374
- truss-0.11.10rc3.dist-info/entry_points.txt,sha256=-MwKfHHQHQ6j0HqIgvxrz3CehCmczDLTD-OsRHnjjuU,130
375
- truss-0.11.10rc3.dist-info/licenses/LICENSE,sha256=FTqGzu85i-uw1Gi8E_o0oD60bH9yQ_XIGtZbA1QUYiw,1064
376
- truss-0.11.10rc3.dist-info/RECORD,,
373
+ truss-0.11.10rc5.dist-info/METADATA,sha256=a_HXEXPbO3cg_SRpfjPUops_cJT4ArcED_amm8TRXvI,6681
374
+ truss-0.11.10rc5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
375
+ truss-0.11.10rc5.dist-info/entry_points.txt,sha256=-MwKfHHQHQ6j0HqIgvxrz3CehCmczDLTD-OsRHnjjuU,130
376
+ truss-0.11.10rc5.dist-info/licenses/LICENSE,sha256=FTqGzu85i-uw1Gi8E_o0oD60bH9yQ_XIGtZbA1QUYiw,1064
377
+ truss-0.11.10rc5.dist-info/RECORD,,