versionhq 1.1.7.7__py3-none-any.whl → 1.1.7.9__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.
versionhq/__init__.py CHANGED
@@ -17,7 +17,7 @@ from versionhq.team.model import Team, TeamOutput
17
17
  from versionhq.tool.model import Tool
18
18
 
19
19
 
20
- __version__ = "1.1.7.7"
20
+ __version__ = "1.1.7.9"
21
21
  __all__ = [
22
22
  "Agent",
23
23
  "Customer",
@@ -2,9 +2,7 @@ from typing import Any, Dict, Type
2
2
  from pydantic import BaseModel
3
3
 
4
4
 
5
- def process_config(
6
- values_to_update: Dict[str, Any], model_class: Type[BaseModel]
7
- ) -> Dict[str, Any]:
5
+ def process_config(values_to_update: Dict[str, Any], model_class: Type[BaseModel]) -> Dict[str, Any]:
8
6
  """
9
7
  Process the config dictionary and update the values accordingly.
10
8
  Refer to the Pydantic model class for field validation.
@@ -15,7 +13,7 @@ def process_config(
15
13
  else:
16
14
  return values_to_update
17
15
 
18
- # copy values from config to the model's attributes if the attribute isn't already set.
16
+
19
17
  for key, value in config.items():
20
18
  if key not in model_class.model_fields or values_to_update.get(key) is not None:
21
19
  continue
versionhq/agent/model.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import uuid
3
3
  from abc import ABC
4
- from typing import Any, Dict, List, Optional, TypeVar, Union
4
+ from typing import Any, Dict, List, Optional, TypeVar
5
5
  from dotenv import load_dotenv
6
6
  from pydantic import UUID4, BaseModel, Field, InstanceOf, PrivateAttr, model_validator, field_validator
7
7
  from pydantic_core import PydanticCustomError
@@ -22,7 +22,7 @@ load_dotenv(override=True)
22
22
  T = TypeVar("T", bound="Agent")
23
23
 
24
24
 
25
- # def _format_answer(agent, answer: str) -> Union[AgentAction, AgentFinish]:
25
+ # def _format_answer(agent, answer: str) -> AgentAction | AgentFinish:
26
26
  # return AgentParser(agent=agent).parse(answer)
27
27
 
28
28
  # def mock_agent_ops_provider():
@@ -111,8 +111,8 @@ class Agent(ABC, BaseModel):
111
111
  step_callback: Optional[Any] = Field(default=None,description="Callback to be executed after each step of the agent execution")
112
112
 
113
113
  # llm settings cascaded to the LLM model
114
- llm: Union[str, InstanceOf[LLM], Any] = Field(default=None)
115
- function_calling_llm: Union[str, InstanceOf[LLM], Any] = Field(default=None)
114
+ llm: str | InstanceOf[LLM] | Any = Field(default=None)
115
+ function_calling_llm: str | InstanceOf[LLM] | Any = Field(default=None)
116
116
  respect_context_window: bool = Field(default=True,description="Keep messages under the context window size by summarizing content")
117
117
  max_tokens: Optional[int] = Field(default=None, description="max. number of tokens for the agent's execution")
118
118
  max_execution_time: Optional[int] = Field(default=None, description="max. execution time for an agent to execute a task")
versionhq/agent/parser.py CHANGED
@@ -1,5 +1,5 @@
1
1
  import re
2
- from typing import Any, Union
2
+ from typing import Any
3
3
  from json_repair import repair_json
4
4
 
5
5
  from versionhq._utils.i18n import I18N
@@ -70,7 +70,7 @@ class AgentParser:
70
70
  def __init__(self, agent: Any):
71
71
  self.agent = agent
72
72
 
73
- def parse(self, text: str) -> Union[AgentAction, AgentFinish]:
73
+ def parse(self, text: str) -> AgentAction | AgentFinish:
74
74
  thought = self._extract_thought(text)
75
75
  includes_answer = FINAL_ANSWER_ACTION in text
76
76
  regex = (
@@ -34,7 +34,10 @@ class Product(BaseModel):
34
34
  id: UUID4 = Field(default_factory=uuid.uuid4, frozen=True)
35
35
  name: Optional[str] = Field(default=None, description="product name")
36
36
  description: Optional[str] = Field(
37
- default=None,max_length=256,description="product description scraped from landing url or client input. cascade to the agent")
37
+ default=None,
38
+ max_length=256,
39
+ description="product description scraped from landing url or client input. cascade to the agent"
40
+ )
38
41
  provider: Optional[ProductProvider] = Field(default=None)
39
42
  audience: Optional[str] = Field(default=None, description="target audience")
40
43
  usp: Optional[str] = Field(default=None)
@@ -1,8 +1,8 @@
1
1
  import uuid
2
2
  from abc import ABC
3
3
  from datetime import date, datetime, time, timedelta
4
- from typing import Any, Dict, List, Union, Callable, Type, Optional, get_args, get_origin
5
- from pydantic import UUID4, InstanceOf, BaseModel, ConfigDict, Field, create_model, field_validator, model_validator
4
+ from typing import Any, Dict, List, Callable, Type, Optional, get_args, get_origin
5
+ from pydantic import UUID4, InstanceOf, BaseModel, ConfigDict, Field, field_validator, model_validator
6
6
  from pydantic_core import PydanticCustomError
7
7
 
8
8
  from versionhq.clients.product.model import Product
@@ -12,7 +12,7 @@ from versionhq.team.model import Team
12
12
 
13
13
 
14
14
  class ScoreFormat:
15
- def __init__(self, rate: Union[float, int] = 0, weight: int = 1):
15
+ def __init__(self, rate: float | int = 0, weight: int = 1):
16
16
  self.rate = rate
17
17
  self.weight = weight
18
18
  self.aggregate = rate * weight
@@ -39,7 +39,7 @@ class Score:
39
39
 
40
40
 
41
41
  def result(self) -> int:
42
- aggregate_score = self.brand_tone.aggregate + self.audience.aggregate + self.track_record.aggregate
42
+ aggregate_score = int(self.brand_tone.aggregate) + int(self.audience.aggregate) + int(self.track_record.aggregate)
43
43
  denominator = self.brand_tone.weight + self.audience.weight + self.track_record.weight
44
44
 
45
45
  for k, v in self.kwargs.items():
@@ -57,11 +57,13 @@ class MessagingComponent(ABC, BaseModel):
57
57
  layer_id: int = Field(default=0, description="add id of the layer: 0, 1, 2")
58
58
  message: str = Field(default=None, max_length=1024, description="text message content to be sent")
59
59
  interval: Optional[str] = Field(
60
- default=None,description="interval to move on to the next layer. if this is the last layer, set as `None`")
61
- score: Union[float, InstanceOf[Score]] = Field(default=None)
60
+ default=None, description="interval to move on to the next layer. if this is the last layer, set as `None`"
61
+ )
62
+ score: float | InstanceOf[Score] = Field(default=None)
63
+ condition: str = Field(default=None, max_length=128, description="condition to execute the next messaging component")
62
64
 
63
65
 
64
- def store_scoring_result(self, scoring_subject: str, score_raw: Union[int, Score, ScoreFormat] = None):
66
+ def store_scoring_result(self, scoring_subject: str, score_raw: int | Score | ScoreFormat = None):
65
67
  """
66
68
  Set up the `score` field
67
69
  """
@@ -105,12 +107,15 @@ class MessagingWorkflow(ABC, BaseModel):
105
107
  default=None, description="store `Agent` instances responsible for autopiloting this workflow. if the team exsits, this field remains as `None`")
106
108
 
107
109
  # metrics
108
- destination: Optional[str] = Field( default=None, description="destination service to launch this workflow")
110
+ destination: Optional[str | None] = Field(default=None, description="destination service to launch this workflow")
109
111
  product: InstanceOf[Product] = Field(default=None)
110
112
  customer: InstanceOf[Customer] = Field(default=None)
111
113
 
112
- metrics: Union[List[Dict[str, Any]], List[str]] = Field(
113
- default=None, max_length=256, description="store metrics that used to predict and track the performance of this workflow.")
114
+ metrics: List[Dict[str, Any]] | List[str] = Field(
115
+ default=None,
116
+ max_length=256,
117
+ description="store metrics that used to predict and track the performance of this workflow."
118
+ )
114
119
 
115
120
 
116
121
  @property
@@ -138,10 +143,9 @@ class MessagingWorkflow(ABC, BaseModel):
138
143
  if self.customer is not None:
139
144
  self.destination = self.customer.on
140
145
 
141
- else:
142
- destination_list = self.product.provider.destinations
143
- if destination_list:
144
- self.destination = destination_list[0]
146
+ elif self.product.provider is not None and self.product.provider.destinations:
147
+ self.destination = self.product.provider.destinations[0]
148
+
145
149
  return self
146
150
 
147
151
 
versionhq/llm/model.py CHANGED
@@ -7,7 +7,7 @@ import litellm
7
7
  from dotenv import load_dotenv
8
8
  from litellm import get_supported_openai_params
9
9
  from contextlib import contextmanager
10
- from typing import Any, Dict, List, Optional, Union
10
+ from typing import Any, Dict, List, Optional
11
11
 
12
12
  from versionhq.llm.llm_vars import LLM_CONTEXT_WINDOW_SIZES
13
13
  from versionhq.task import TaskOutputFormat
@@ -103,7 +103,7 @@ class LLM:
103
103
  def __init__(
104
104
  self,
105
105
  model: str,
106
- timeout: Optional[Union[float, int]] = None,
106
+ timeout: Optional[float | int] = None,
107
107
  max_tokens: Optional[int] = None,
108
108
  max_completion_tokens: Optional[int] = None,
109
109
  context_window_size: Optional[int] = DEFAULT_CONTEXT_WINDOW,
@@ -111,7 +111,7 @@ class LLM:
111
111
  temperature: Optional[float] = None,
112
112
  top_p: Optional[float] = None,
113
113
  n: Optional[int] = None,
114
- stop: Optional[Union[str, List[str]]] = None,
114
+ stop: Optional[str | List[str]] = None,
115
115
  presence_penalty: Optional[float] = None,
116
116
  frequency_penalty: Optional[float] = None,
117
117
  logit_bias: Optional[Dict[int, float]] = None,
versionhq/task/model.py CHANGED
@@ -3,10 +3,10 @@ import threading
3
3
  import uuid
4
4
  from concurrent.futures import Future
5
5
  from hashlib import md5
6
- from typing import Any, Dict, List, Set, Optional, Tuple, Callable, Union, Type
6
+ from typing import Any, Dict, List, Set, Optional, Tuple, Callable, Type
7
7
  from typing_extensions import Annotated
8
8
 
9
- from pydantic import UUID4, BaseModel, Field, PrivateAttr, field_validator, model_validator, create_model
9
+ from pydantic import UUID4, BaseModel, Field, PrivateAttr, field_validator, model_validator, create_model, InstanceOf
10
10
  from pydantic_core import PydanticCustomError
11
11
 
12
12
  from versionhq._utils.process_config import process_config
@@ -49,7 +49,7 @@ class ResponseField(BaseModel):
49
49
  return value
50
50
 
51
51
 
52
- def create_pydantic_model(self, result: Dict, base_model: Union[BaseModel | Any]) -> Any:
52
+ def create_pydantic_model(self, result: Dict, base_model: InstanceOf[BaseModel] | Any) -> Any:
53
53
  for k, v in result.items():
54
54
  if k is not self.title:
55
55
  pass
@@ -70,7 +70,7 @@ class TaskOutput(BaseModel):
70
70
 
71
71
  task_id: UUID4 = Field(default_factory=uuid.uuid4, frozen=True, description="store Task ID")
72
72
  raw: str = Field(default="", description="Raw output of the task")
73
- json_dict: Union[Dict[str, Any]] = Field(default=None, description="`raw` converted to dictionary")
73
+ json_dict: Dict[str, Any] = Field(default=None, description="`raw` converted to dictionary")
74
74
  pydantic: Optional[Any] = Field(default=None, description="`raw` converted to the abs. pydantic model")
75
75
 
76
76
  def __str__(self) -> str:
versionhq/team/model.py CHANGED
@@ -6,7 +6,7 @@ from enum import Enum
6
6
  from dotenv import load_dotenv
7
7
  from concurrent.futures import Future
8
8
  from hashlib import md5
9
- from typing import Any, Dict, List, TYPE_CHECKING, Callable, Optional, Tuple, Union
9
+ from typing import Any, Dict, List, TYPE_CHECKING, Callable, Optional, Tuple
10
10
  from pydantic import UUID4, InstanceOf, Json, BaseModel, Field, PrivateAttr, field_validator, model_validator
11
11
  from pydantic._internal._generate_schema import GenerateSchema
12
12
  from pydantic_core import PydanticCustomError, core_schema
@@ -61,7 +61,7 @@ class TeamOutput(BaseModel):
61
61
  team_id: UUID4 = Field(default_factory=uuid.uuid4, frozen=True, description="store the team ID that generate the TeamOutput")
62
62
  raw: str = Field(default="", description="raw output of the team lead task handled by the team leader")
63
63
  pydantic: Optional[Any] = Field(default=None, description="`raw` converted to the abs. pydantic model")
64
- json_dict: Union[Dict[str, Any]] = Field(default=None, description="`raw` converted to dictionary")
64
+ json_dict: Dict[str, Any] = Field(default=None, description="`raw` converted to dictionary")
65
65
  task_output_list: list[TaskOutput] = Field(default=list, description="store output of all the tasks that the team has executed")
66
66
  token_usage: UsageMetrics = Field(default=dict, description="processed token summary")
67
67
 
@@ -200,10 +200,6 @@ class Team(BaseModel):
200
200
  if v:
201
201
  raise PydanticCustomError("may_not_set_field", "The 'id' field cannot be set by the user.", {})
202
202
 
203
- # @field_validator("config", mode="before")
204
- # @classmethod
205
- # def check_config_type(cls, v: Union[Json, Dict[str, Any]]) -> Union[Json, Dict[str, Any]]:
206
- # return json.loads(v) if isinstance(v, Json) else v
207
203
 
208
204
  @model_validator(mode="after")
209
205
  def check_manager_llm(self):
versionhq/tool/model.py CHANGED
@@ -1,15 +1,7 @@
1
1
  from abc import ABC
2
2
  from inspect import signature
3
3
  from typing import Any, Dict, Callable, Type, Optional, get_args, get_origin
4
- from pydantic import (
5
- InstanceOf,
6
- BaseModel,
7
- ConfigDict,
8
- Field,
9
- create_model,
10
- field_validator,
11
- model_validator,
12
- )
4
+ from pydantic import InstanceOf, BaseModel, ConfigDict, Field, create_model, field_validator, model_validator
13
5
 
14
6
  from versionhq._utils.cache_handler import CacheHandler
15
7
 
@@ -135,6 +127,7 @@ class Tool(ABC, BaseModel):
135
127
 
136
128
  return cls(name=tool_name, func=func, args_schema=args_schema)
137
129
 
130
+
138
131
  def run(self, *args, **kwargs) -> Any:
139
132
  """
140
133
  Use the tool.
@@ -1,4 +1,5 @@
1
- from typing import Any, Optional, Union
1
+ from typing import Any, Optional
2
+ from pydantic import InstanceOf
2
3
  from versionhq.tool.model import ToolCalled, InstructorToolCalled, CacheTool
3
4
  from versionhq._utils.cache_handler import CacheHandler
4
5
 
@@ -23,7 +24,7 @@ class ToolHandler:
23
24
 
24
25
  def record_last_tool_used(
25
26
  self,
26
- last_used_tool: Union[ToolCalled, InstructorToolCalled],
27
+ last_used_tool: InstanceOf[ToolCalled] | InstanceOf[InstructorToolCalled],
27
28
  output: str,
28
29
  should_cache: bool = True,
29
30
  ) -> Any:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: versionhq
3
- Version: 1.1.7.7
3
+ Version: 1.1.7.9
4
4
  Summary: LLM orchestration frameworks for model-agnostic AI agents that handle complex outbound workflows
5
5
  Author-email: Kuriko Iwai <kuriko@versi0n.io>
6
6
  License: MIT License
@@ -57,7 +57,7 @@ Requires-Dist: appdirs>=1.4.4
57
57
 
58
58
  ![MIT license](https://img.shields.io/badge/License-MIT-green)
59
59
  [![Publisher](https://github.com/versionHQ/multi-agent-system/actions/workflows/publish.yml/badge.svg)](https://github.com/versionHQ/multi-agent-system/actions/workflows/publish.yml)
60
- ![PyPI](https://img.shields.io/badge/PyPI-v1.1.7.5-blue)
60
+ ![PyPI](https://img.shields.io/badge/PyPI-v1.1.7.9-blue)
61
61
  ![python ver](https://img.shields.io/badge/Python-3.12/3.13-purple)
62
62
  ![pyenv ver](https://img.shields.io/badge/pyenv-2.5.0-orange)
63
63
 
@@ -1,14 +1,14 @@
1
- versionhq/__init__.py,sha256=UNk3K1Icj6U6bX4hmcE-7PSzT3mYI9f_i_gXybscmWc,871
1
+ versionhq/__init__.py,sha256=bz4C48jhCjkQjethRmtw4_Ha_3OUdDDytk6PBCemiZU,871
2
2
  versionhq/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  versionhq/_utils/cache_handler.py,sha256=zDQKzIn7vp-M2-uepHFxgJstjfftZS5mzXKL_-4uVvI,370
4
4
  versionhq/_utils/i18n.py,sha256=TwA_PnYfDLA6VqlUDPuybdV9lgi3Frh_ASsb_X8jJo8,1483
5
5
  versionhq/_utils/logger.py,sha256=lqRYH45KHMQ4mwE1woa5xNmngYu4O749AYECsnWWpmA,1851
6
- versionhq/_utils/process_config.py,sha256=ogrhovLbwe0ocQlcohRgBBRtww7C3pk9hikjvgDzT5U,919
6
+ versionhq/_utils/process_config.py,sha256=UqoWD5IR4VLxEDGxIyVUylw_ppXwk8Wx1ynVuD-pUSg,822
7
7
  versionhq/_utils/rpm_controller.py,sha256=T7waIGeblu5K58erY4lqVLcPsWM7W9UFdU3DG9Dsk0w,2214
8
8
  versionhq/_utils/usage_metrics.py,sha256=c33a_28y8ECUgflsKN3mkNm0fNkWgZmXwybMwIqoKXA,1098
9
9
  versionhq/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- versionhq/agent/model.py,sha256=fK7rb10IFrgDDCD78owNRdMsIQ_aj7nmIQdp1WbWJc8,18621
11
- versionhq/agent/parser.py,sha256=GhoNQo4WloVM3vGnAmt9lnEOTARX7nWMhJE55rF_5Rs,5500
10
+ versionhq/agent/model.py,sha256=tv14XkjrgsFsryFWzaw0w2h0X1T0ffipVK9l4kYbpIE,18598
11
+ versionhq/agent/parser.py,sha256=db5kfk-lR1Ph9-rsTvSeW1NjR6GJ00iaqTNYxJy3N8o,5487
12
12
  versionhq/agent/TEMPLATES/Backstory.py,sha256=cdngBx1GEv7nroR46FEhnysnBJ9mEVL763_9np6Skkc,395
13
13
  versionhq/agent/TEMPLATES/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  versionhq/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -16,27 +16,27 @@ versionhq/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
16
16
  versionhq/clients/customer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  versionhq/clients/customer/model.py,sha256=rQnCv_wdCdrYAsUjyB6X6ULiuWfqcBBoarXcQT5kj88,1762
18
18
  versionhq/clients/product/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- versionhq/clients/product/model.py,sha256=Us3UnzYlub6ipBislMN-JrvxZx0ocl9PtQJINJ8XtBA,2385
19
+ versionhq/clients/product/model.py,sha256=HxiSv8zq5L0H210jXWfjX_Yg1oyWhi2YASR68JEtmDY,2408
20
20
  versionhq/clients/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- versionhq/clients/workflow/model.py,sha256=qpRCDwULhSLWDFkSYrvXW5m07bKDrwttTmqsYA9ZVP4,5727
21
+ versionhq/clients/workflow/model.py,sha256=YI6sNpdbizUOqPPXrTCtdmVt619uQ5hQgGS0BcA0njI,5834
22
22
  versionhq/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  versionhq/llm/llm_vars.py,sha256=YZoXqFBW7XpclUZ14_AAz7WOjoyCXnGcI959GSpX2q0,5343
24
- versionhq/llm/model.py,sha256=PdwisrlrsDqd6gXwXCyGbGTRTeGZ8SXpt_gfua8qunk,8266
24
+ versionhq/llm/model.py,sha256=mXzSuf1s6MebGT7_yqgNppde0NIlAF8bjIXAp2MZ9Uw,8247
25
25
  versionhq/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  versionhq/storage/task_output_storage.py,sha256=RxvF_lSRUuo2Af3zMAuc1aOymx1e6e_5VJ2y757_Hu0,4910
27
27
  versionhq/task/__init__.py,sha256=g4mCATnn1mUXxsfQ5p6IpPawr8O421wVIT8kMKEcxQw,180
28
28
  versionhq/task/formatter.py,sha256=N8Kmk9vtrMtBdgJ8J7RmlKNMdZWSmV8O1bDexmCWgU0,643
29
29
  versionhq/task/log_handler.py,sha256=KJRrcNZgFSKhlNzvtYFnvtp6xukaF1s7ifX9u4zWrN8,1683
30
- versionhq/task/model.py,sha256=QCNRHulD4RdOVZAUWft4rAqlTIqcbZTqSA-lDUoSfpQ,19314
30
+ versionhq/task/model.py,sha256=bUmERE6AZfs8qh2Hb9LES5BLUlXrkrOUyWxCU27M1ic,19317
31
31
  versionhq/team/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- versionhq/team/model.py,sha256=M99sMAlKyS9jQsufH2xoGrv2dDIvaJWsmIQgW-0pT0M,18305
32
+ versionhq/team/model.py,sha256=T_71FarXEzAxrTn_8yYVWMwLS9p-UxSovexZtHYnYn0,18066
33
33
  versionhq/team/team_planner.py,sha256=B1UOn_DYVVterUn2CAd80jfO4sViJCCXPJA3abSSugg,2143
34
34
  versionhq/tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  versionhq/tool/decorator.py,sha256=Y-j4jkoujD5LUvpe8uf3p5Zagk2XVaRKC9rkIE-2geo,1189
36
- versionhq/tool/model.py,sha256=JZOEcZRIEfcrjL8DgrFYDt4YNgMF8rXS26RK6D2x9mc,6906
37
- versionhq/tool/tool_handler.py,sha256=e-2VfG9zFpfPG_oMoPXye93GDovs7FuUASWQwUTLrJ0,1498
38
- versionhq-1.1.7.7.dist-info/LICENSE,sha256=7CCXuMrAjPVsUvZrsBq9DsxI2rLDUSYXR_qj4yO_ZII,1077
39
- versionhq-1.1.7.7.dist-info/METADATA,sha256=tHhEWrbEEt-NyUVKKQwMImjFByi5LJiCBVLzZc86L_E,15919
40
- versionhq-1.1.7.7.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
41
- versionhq-1.1.7.7.dist-info/top_level.txt,sha256=DClQwxDWqIUGeRJkA8vBlgeNsYZs4_nJWMonzFt5Wj0,10
42
- versionhq-1.1.7.7.dist-info/RECORD,,
36
+ versionhq/tool/model.py,sha256=s-y8323ikd5m5U2HG59ATgFW6L7yIFiPLLdOpeXQ8RI,6874
37
+ versionhq/tool/tool_handler.py,sha256=esUqGp8HoREesai8fmh2klAf04Sjpsacmb03C7F6sNQ,1541
38
+ versionhq-1.1.7.9.dist-info/LICENSE,sha256=7CCXuMrAjPVsUvZrsBq9DsxI2rLDUSYXR_qj4yO_ZII,1077
39
+ versionhq-1.1.7.9.dist-info/METADATA,sha256=xv6DizWz6aDv59VePfs4pUnRClJK9WHuy-2T_4-_52g,15919
40
+ versionhq-1.1.7.9.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
41
+ versionhq-1.1.7.9.dist-info/top_level.txt,sha256=DClQwxDWqIUGeRJkA8vBlgeNsYZs4_nJWMonzFt5Wj0,10
42
+ versionhq-1.1.7.9.dist-info/RECORD,,