versionhq 1.1.9.4__py3-none-any.whl → 1.1.9.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 +1 -1
- versionhq/agent/model.py +13 -22
- versionhq/clients/customer/__init__.py +6 -1
- versionhq/clients/customer/model.py +29 -13
- versionhq/clients/product/model.py +40 -3
- versionhq/clients/workflow/model.py +10 -4
- versionhq/task/model.py +19 -36
- versionhq/tool/model.py +0 -34
- {versionhq-1.1.9.4.dist-info → versionhq-1.1.9.9.dist-info}/METADATA +1 -1
- {versionhq-1.1.9.4.dist-info → versionhq-1.1.9.9.dist-info}/RECORD +13 -13
- {versionhq-1.1.9.4.dist-info → versionhq-1.1.9.9.dist-info}/LICENSE +0 -0
- {versionhq-1.1.9.4.dist-info → versionhq-1.1.9.9.dist-info}/WHEEL +0 -0
- {versionhq-1.1.9.4.dist-info → versionhq-1.1.9.9.dist-info}/top_level.txt +0 -0
versionhq/__init__.py
CHANGED
versionhq/agent/model.py
CHANGED
@@ -322,7 +322,7 @@ class Agent(BaseModel):
|
|
322
322
|
When encountering errors, we try the task execution up to `self.max_retry_limit` times.
|
323
323
|
"""
|
324
324
|
|
325
|
-
task_execution_counter = 0
|
325
|
+
task_execution_counter, raw_response = 0, None
|
326
326
|
|
327
327
|
messages = []
|
328
328
|
messages.append({"role": "user", "content": prompts}) #! REFINEME
|
@@ -331,31 +331,28 @@ class Agent(BaseModel):
|
|
331
331
|
|
332
332
|
callbacks = kwargs.get("callbacks", None)
|
333
333
|
|
334
|
-
|
335
|
-
messages=messages,
|
336
|
-
output_formats=output_formats,
|
337
|
-
field_list=response_fields,
|
338
|
-
callbacks=callbacks,
|
334
|
+
raw_response = self.llm.call(
|
335
|
+
messages=messages, output_formats=output_formats, field_list=response_fields, callbacks=callbacks
|
339
336
|
)
|
340
337
|
task_execution_counter += 1
|
341
|
-
self._logger.log(level="info", message=f"Agent's first response: {
|
338
|
+
self._logger.log(level="info", message=f"Agent's first response in {type(raw_response).__name__}: {raw_response}", color="blue")
|
342
339
|
|
343
|
-
if (
|
340
|
+
if (raw_response is None or raw_response == "") and task_execution_counter < self.max_retry_limit:
|
344
341
|
while task_execution_counter <= self.max_retry_limit:
|
345
|
-
|
342
|
+
raw_response = self.llm.call(
|
346
343
|
messages=messages,
|
347
344
|
output_formats=output_formats,
|
348
345
|
field_list=response_fields,
|
349
346
|
callbacks=callbacks,
|
350
347
|
)
|
351
348
|
task_execution_counter += 1
|
352
|
-
self._logger.log(level="info", message=f"Agent's next response: {
|
349
|
+
self._logger.log(level="info", message=f"Agent's next response in {type(raw_response).__name__}: {raw_response}", color="blue")
|
353
350
|
|
354
|
-
elif
|
351
|
+
elif raw_response is None or raw_response == "":
|
355
352
|
self._logger.log(level="error", message="Received None or empty response from the model", color="red")
|
356
353
|
raise ValueError("Invalid response from LLM call - None or empty.")
|
357
354
|
|
358
|
-
return
|
355
|
+
return raw_response
|
359
356
|
|
360
357
|
|
361
358
|
def execute_task(self, task, context: Optional[str] = None) -> str:
|
@@ -392,31 +389,25 @@ class Agent(BaseModel):
|
|
392
389
|
if task.take_tool_res_as_final:
|
393
390
|
return tool_results
|
394
391
|
|
395
|
-
|
396
|
-
|
397
392
|
# if self.team and self.team._train:
|
398
393
|
# task_prompt = self._training_handler(task_prompt=task_prompt)
|
399
394
|
# else:
|
400
395
|
# task_prompt = self._use_trained_data(task_prompt=task_prompt)
|
401
396
|
|
402
397
|
try:
|
403
|
-
|
398
|
+
raw_response = self.invoke(
|
404
399
|
prompts=task_prompt,
|
405
400
|
output_formats=task.expected_output_formats,
|
406
401
|
response_fields=task.output_field_list,
|
407
|
-
)
|
402
|
+
)
|
408
403
|
|
409
404
|
except Exception as e:
|
410
405
|
self._times_executed += 1
|
411
406
|
if self._times_executed > self.max_retry_limit:
|
412
407
|
raise e
|
413
|
-
|
408
|
+
raw_response = self.execute_task(task, context)
|
414
409
|
|
415
410
|
if self.max_rpm and self._rpm_controller:
|
416
411
|
self._rpm_controller.stop_rpm_counter()
|
417
412
|
|
418
|
-
|
419
|
-
# if tool_result.get("result_as_answer", False):
|
420
|
-
# result = tool_result["result"]
|
421
|
-
|
422
|
-
return result
|
413
|
+
return raw_response
|
@@ -10,14 +10,32 @@ from versionhq.clients.customer import Status
|
|
10
10
|
|
11
11
|
class BaseCustomer(ABC, BaseModel):
|
12
12
|
"""
|
13
|
-
Abstract base class for the base customer
|
13
|
+
Abstract base class for the base customer storing current status on the workflow and deployment method.
|
14
|
+
"""
|
15
|
+
status: Status = Field(default=Status.NOT_ASSIGNED)
|
16
|
+
|
17
|
+
@abstractmethod
|
18
|
+
def _deploy(self, *args, **kwargs) -> Any:
|
19
|
+
"""Any method to deploy targeting the customer"""
|
20
|
+
|
21
|
+
|
22
|
+
def deploy(self, *args, **kwargs) -> Any:
|
23
|
+
if self.status is Status.READY_TO_DEPLOY:
|
24
|
+
return self._deploy(self, **args, **kwargs)
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
class Customer(BaseCustomer):
|
29
|
+
"""
|
30
|
+
Customer class to store customer info and handle deployment methods.
|
14
31
|
"""
|
15
32
|
|
16
33
|
id: UUID4 = Field(default_factory=uuid.uuid4, frozen=True)
|
17
34
|
name: Optional[str] = Field(default=None, description="customer's name if any")
|
18
35
|
products: Optional[List[Product]] = Field(default=list, description="store products that the customer is associated with")
|
19
36
|
analysis: str = Field(default=None, description="store the latest analysis results on the customer")
|
20
|
-
|
37
|
+
function: Optional[Callable] = Field(default=None, descripition="store deploy function")
|
38
|
+
config: Optional[Dict[str, Any]] = Field(default=None, description="config to the function")
|
21
39
|
|
22
40
|
|
23
41
|
@field_validator("id", mode="before")
|
@@ -27,11 +45,10 @@ class BaseCustomer(ABC, BaseModel):
|
|
27
45
|
raise PydanticCustomError("may_not_set_field", "This field is not to be set by the user.", {})
|
28
46
|
|
29
47
|
|
30
|
-
def
|
48
|
+
def fetch_product_providers(self) -> List[ProductProvider] | None:
|
31
49
|
"""
|
32
50
|
Return list of ProductProvider if the customer has `product_list`
|
33
51
|
"""
|
34
|
-
|
35
52
|
res = []
|
36
53
|
if self.products:
|
37
54
|
for item in self.products:
|
@@ -39,15 +56,14 @@ class BaseCustomer(ABC, BaseModel):
|
|
39
56
|
res.appned(item.provider)
|
40
57
|
return res
|
41
58
|
|
59
|
+
def _deploy(self, *args, **kwargs):
|
60
|
+
return self.deploy(self, *args, **kwargs)
|
42
61
|
|
43
|
-
@abstractmethod
|
44
|
-
def _deploy(self, *args, **kwargs) -> Any:
|
45
|
-
"""Any method to deploy targeting the customer"""
|
46
62
|
|
63
|
+
def deploy(self, *args, **kwargs):
|
64
|
+
self.status = Status.ACTIVE_ON_WORKFLOW
|
47
65
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
analysis: str = Field(default=None, description="store the latest analysis results on the customer")
|
53
|
-
status: str = Field(default=Status.ON_WORKFLOW)
|
66
|
+
if self.function:
|
67
|
+
return self.function(**self.config)
|
68
|
+
|
69
|
+
return super().deploy(*args, **kwargs)
|
@@ -16,7 +16,7 @@ class ProductProvider(ABC, BaseModel):
|
|
16
16
|
id: UUID4 = Field(default_factory=uuid.uuid4, frozen=True)
|
17
17
|
name: Optional[str] = Field(default=None)
|
18
18
|
region: Optional[str] = Field(default=None, description="region of client's main business operation")
|
19
|
-
data_pipelines: Optional[List[ComposioAppName | str]] = Field(
|
19
|
+
data_pipelines: Optional[List[ComposioAppName | str]] = Field(default=None)
|
20
20
|
destination_services: Optional[List[ComposioAppName | str]] = Field(default=None)
|
21
21
|
|
22
22
|
@field_validator("id", mode="before")
|
@@ -26,12 +26,41 @@ class ProductProvider(ABC, BaseModel):
|
|
26
26
|
raise PydanticCustomError("may_not_set_field", "This field is not to be set by the user.", {})
|
27
27
|
|
28
28
|
|
29
|
+
@model_validator(mode="after")
|
30
|
+
def set_up_destinations(self):
|
31
|
+
"""
|
32
|
+
Set up the destination services and data pipeines using ComposioAppName class.
|
33
|
+
"""
|
34
|
+
if self.destination_services is not None:
|
35
|
+
results = []
|
36
|
+
for item in self.destination_services:
|
37
|
+
if isinstance(item, ComposioAppName):
|
38
|
+
results.append(item)
|
39
|
+
elif isinstance(item, str) and item in ComposioAppName:
|
40
|
+
results.append(ComposioAppName(item))
|
41
|
+
else:
|
42
|
+
results.append(item)
|
43
|
+
self.destination_services = results
|
44
|
+
|
45
|
+
if self.data_pipelines is not None:
|
46
|
+
results = []
|
47
|
+
for item in self.data_pipelines:
|
48
|
+
if isinstance(item, ComposioAppName):
|
49
|
+
results.append(item)
|
50
|
+
elif isinstance(item, str) and item in ComposioAppName:
|
51
|
+
results.append(ComposioAppName(item))
|
52
|
+
else:
|
53
|
+
results.append(item)
|
54
|
+
self.data_pipelines = results
|
55
|
+
|
56
|
+
return self
|
57
|
+
|
58
|
+
|
29
59
|
|
30
60
|
class Product(BaseModel):
|
31
61
|
"""
|
32
|
-
|
62
|
+
A class to store product information used to create outbound
|
33
63
|
"""
|
34
|
-
|
35
64
|
id: UUID4 = Field(default_factory=uuid.uuid4, frozen=True)
|
36
65
|
name: Optional[str] = Field(default=None, description="product name")
|
37
66
|
description: Optional[str] = Field(
|
@@ -44,6 +73,7 @@ class Product(BaseModel):
|
|
44
73
|
usp: Optional[str] = Field(default=None)
|
45
74
|
landing_url: Optional[str] = Field(default=None, description="marketing url of the product if any")
|
46
75
|
cohort_timeframe: Optional[int] = Field(default=30, description="ideal cohort timeframe of the product in days")
|
76
|
+
notes: Optional[str] = Field(default=None, description="any notes from the client to consider. cascade to the agent")
|
47
77
|
|
48
78
|
|
49
79
|
@field_validator("id", mode="before")
|
@@ -51,3 +81,10 @@ class Product(BaseModel):
|
|
51
81
|
def _deny_user_set_id(cls, v: Optional[UUID4]) -> None:
|
52
82
|
if v:
|
53
83
|
raise PydanticCustomError("may_not_set_field", "This field is not to be set by the user.", {})
|
84
|
+
|
85
|
+
|
86
|
+
@field_validator("cohort_timeframe", mode="before")
|
87
|
+
@classmethod
|
88
|
+
def _deny_non_int_input(cls, v: Optional[UUID4]) -> None:
|
89
|
+
if not isinstance(v, int):
|
90
|
+
raise PydanticCustomError("invalid_input", "This field only accepts inputs in integer.", {})
|
@@ -121,15 +121,21 @@ class MessagingWorkflow(ABC, BaseModel):
|
|
121
121
|
@model_validator(mode="after")
|
122
122
|
def set_up_destination(self):
|
123
123
|
"""
|
124
|
-
Set up the destination service
|
125
|
-
Prioritize customer's destination to the product provider's destination list.
|
124
|
+
Set up the destination service using ComposioAppName class.
|
126
125
|
"""
|
127
|
-
if self.destination
|
126
|
+
if isinstance(self.destination, ComposioAppName):
|
127
|
+
pass
|
128
|
+
|
129
|
+
elif isinstance(self.destination, str) and self.destination in ComposioAppName:
|
130
|
+
self.destination = ComposioAppName(self.destination)
|
131
|
+
|
132
|
+
elif self.destination is None:
|
128
133
|
# if self.customer is not None:
|
129
134
|
# self.destination = self.customer.on
|
130
135
|
|
131
136
|
if self.product.provider is not None and self.product.provider.destination_services:
|
132
|
-
|
137
|
+
applied_service = self.product.provider.destination_services[0]
|
138
|
+
self.destination = ComposioAppName(applied_service) if applied_service in ComposioAppName else applied_service
|
133
139
|
|
134
140
|
return self
|
135
141
|
|
versionhq/task/model.py
CHANGED
@@ -78,20 +78,11 @@ class TaskOutput(BaseModel):
|
|
78
78
|
return str(self.pydantic) if self.pydantic else str(self.json_dict) if self.json_dict else self.raw
|
79
79
|
|
80
80
|
|
81
|
-
def to_dict(self) -> Dict[str, Any]:
|
81
|
+
def to_dict(self) -> Dict[str, Any] | None:
|
82
82
|
"""
|
83
83
|
Convert pydantic / raw output into dict and return the dict.
|
84
|
-
When we only have `raw` output, return `{ output: raw }` to avoid an error
|
85
84
|
"""
|
86
|
-
|
87
|
-
output_dict = {}
|
88
|
-
if self.json_dict:
|
89
|
-
output_dict.update(self.json_dict)
|
90
|
-
elif self.pydantic:
|
91
|
-
output_dict.update(self.pydantic.model_dump())
|
92
|
-
else:
|
93
|
-
output_dict.upate({ "output": self.raw })
|
94
|
-
return output_dict
|
85
|
+
return self.json_dict if self.json_dict is not None else self.pydantic.model_dump() if self.pydantic else None
|
95
86
|
|
96
87
|
|
97
88
|
def context_prompting(self) -> str:
|
@@ -245,36 +236,28 @@ class Task(BaseModel):
|
|
245
236
|
return "\n".join(task_slices)
|
246
237
|
|
247
238
|
|
248
|
-
def
|
239
|
+
def _create_json_output(self, raw_result: str) -> Dict[str, Any]:
|
249
240
|
"""
|
250
241
|
Create json (dict) output from the raw result.
|
251
242
|
"""
|
243
|
+
import ast
|
252
244
|
|
253
|
-
output_json_dict:
|
245
|
+
output_json_dict: Dict[str, Any] = dict()
|
254
246
|
|
255
|
-
|
256
|
-
|
247
|
+
try:
|
248
|
+
r = json.dumps(eval(str(raw_result)))
|
249
|
+
output_json_dict = json.loads(r)
|
257
250
|
|
258
|
-
|
259
|
-
|
251
|
+
if isinstance(output_json_dict, str):
|
252
|
+
output_json_dict = ast.literal_eval(r)
|
260
253
|
|
261
|
-
|
262
|
-
|
263
|
-
output_json_dict = json.loads(raw_result)
|
264
|
-
except json.JSONDecodeError:
|
265
|
-
try:
|
266
|
-
output_json_dict = eval(raw_result)
|
267
|
-
except:
|
268
|
-
try:
|
269
|
-
import ast
|
270
|
-
output_json_dict = ast.literal_eval(raw_result)
|
271
|
-
except:
|
272
|
-
output_json_dict = { "output": raw_result }
|
254
|
+
except:
|
255
|
+
output_json_dict = { "output": raw_result }
|
273
256
|
|
274
257
|
return output_json_dict
|
275
258
|
|
276
259
|
|
277
|
-
def
|
260
|
+
def _create_pydantic_output(self, output_json_dict: Dict[str, Any], raw_result: Any = None) -> Optional[Any]:
|
278
261
|
"""
|
279
262
|
Create pydantic output from the `raw` result.
|
280
263
|
"""
|
@@ -379,18 +362,18 @@ class Task(BaseModel):
|
|
379
362
|
agent = agent_to_delegate
|
380
363
|
self.delegations += 1
|
381
364
|
|
382
|
-
if self.take_tool_res_as_final
|
365
|
+
if self.take_tool_res_as_final == True:
|
383
366
|
output = agent.execute_task(task=self, context=context)
|
384
367
|
task_output = TaskOutput(task_id=self.id, tool_output=output)
|
385
368
|
|
386
369
|
else:
|
387
370
|
output_raw, output_json_dict, output_pydantic = agent.execute_task(task=self, context=context), None, None
|
388
371
|
|
389
|
-
if self.expected_output_json:
|
390
|
-
output_json_dict = self.
|
372
|
+
if self.expected_output_json == True:
|
373
|
+
output_json_dict = self._create_json_output(raw_result=output_raw)
|
391
374
|
|
392
|
-
if self.expected_output_pydantic:
|
393
|
-
output_pydantic = self.
|
375
|
+
if self.expected_output_pydantic == True:
|
376
|
+
output_pydantic = self._create_pydantic_output(output_json_dict=output_json_dict)
|
394
377
|
|
395
378
|
task_output = TaskOutput(
|
396
379
|
task_id=self.id,
|
@@ -441,7 +424,7 @@ class Task(BaseModel):
|
|
441
424
|
output_formats_to_follow[item.title] = f"<Return your answer in {item.type.__name__}>"
|
442
425
|
|
443
426
|
output_prompt = f"""
|
444
|
-
|
427
|
+
Output only valid JSON conforming to the specified format. Use double quotes for keys and values:
|
445
428
|
{output_formats_to_follow}
|
446
429
|
"""
|
447
430
|
return output_prompt
|
versionhq/tool/model.py
CHANGED
@@ -174,40 +174,6 @@ class Tool(BaseTool):
|
|
174
174
|
return f"Tool Name: {self.name}\nTool Arguments: {args_schema}\nGoal: {self.goal}"
|
175
175
|
|
176
176
|
|
177
|
-
|
178
|
-
# @classmethod
|
179
|
-
# def from_composio(
|
180
|
-
# cls, func: Callable = None, tool_name: str = "Composio tool"
|
181
|
-
# ) -> "Tool":
|
182
|
-
# """
|
183
|
-
# Create Tool from the composio tool, ensuring the Tool instance has a func to be executed.
|
184
|
-
# Refer to the `args_schema` from the func signature if any. Else, create an `args_schema`.
|
185
|
-
# """
|
186
|
-
|
187
|
-
# if not func:
|
188
|
-
# raise ValueError("Params must have a callable 'function' attribute.")
|
189
|
-
|
190
|
-
# # args_schema = getattr(tool, "args_schema", None)
|
191
|
-
# args_fields = {}
|
192
|
-
# func_signature = signature(func)
|
193
|
-
# annotations = func_signature.parameters
|
194
|
-
# for name, param in annotations.items():
|
195
|
-
# if name != "self":
|
196
|
-
# param_annotation = (
|
197
|
-
# param.annotation if param.annotation != param.empty else Any
|
198
|
-
# )
|
199
|
-
# field_info = Field(default=..., description="")
|
200
|
-
# args_fields[name] = (param_annotation, field_info)
|
201
|
-
|
202
|
-
# args_schema = (
|
203
|
-
# create_model(f"{tool_name}Input", **args_fields)
|
204
|
-
# if args_fields
|
205
|
-
# else create_model(f"{tool_name}Input", __base__=BaseModel)
|
206
|
-
# )
|
207
|
-
|
208
|
-
# return cls(name=tool_name, func=func, args_schema=args_schema)
|
209
|
-
|
210
|
-
|
211
177
|
class ToolSet(BaseModel):
|
212
178
|
"""
|
213
179
|
Store the tool called and any kwargs used.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
versionhq/__init__.py,sha256=
|
1
|
+
versionhq/__init__.py,sha256=ZGRS2YP5ul7Db6d_WTYEKb6dBigL2P8t7iodPVUipQ0,950
|
2
2
|
versionhq/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
versionhq/_utils/cache_handler.py,sha256=3-lw_5ZMWC8hnPAkSQULJ2V1FvZZ-wg9mQaUJGSOjI8,403
|
4
4
|
versionhq/_utils/i18n.py,sha256=TwA_PnYfDLA6VqlUDPuybdV9lgi3Frh_ASsb_X8jJo8,1483
|
@@ -7,18 +7,18 @@ versionhq/_utils/process_config.py,sha256=UqoWD5IR4VLxEDGxIyVUylw_ppXwk8Wx1ynVuD
|
|
7
7
|
versionhq/_utils/rpm_controller.py,sha256=dUgFd6JtdjiLLTRmrjsBHdTaLn73XFuKpLbJh7thf2A,2289
|
8
8
|
versionhq/_utils/usage_metrics.py,sha256=hhq1OCW8Z4V93vwW2O2j528EyjOlF8wlTsX5IL-7asA,1106
|
9
9
|
versionhq/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
|
-
versionhq/agent/model.py,sha256=
|
10
|
+
versionhq/agent/model.py,sha256=LFkD00zIeIfntwvebomYX6zTqIMQVkQYFEKjxOtTaPQ,18598
|
11
11
|
versionhq/agent/parser.py,sha256=Z_swUPO3piJQuYU8oVYwXWeR2zjmNb4PxbXZeR-GlIg,4694
|
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
|
15
15
|
versionhq/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
|
-
versionhq/clients/customer/__init__.py,sha256
|
17
|
-
versionhq/clients/customer/model.py,sha256=
|
16
|
+
versionhq/clients/customer/__init__.py,sha256=-YXh1FQfvpfLacK8SUC7bD7Wx_eIEi4yrkCC_cUasFg,217
|
17
|
+
versionhq/clients/customer/model.py,sha256=_AtaVVMm9MgCwrQ-HTRQ2oXUMKrSCEfZwE2JdRz3xTw,2508
|
18
18
|
versionhq/clients/product/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
|
-
versionhq/clients/product/model.py,sha256=
|
19
|
+
versionhq/clients/product/model.py,sha256=c_watpIg-FzpJ2tMml6M1EbAckgGZOqTSc_GZ3Kb_r4,3676
|
20
20
|
versionhq/clients/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
|
-
versionhq/clients/workflow/model.py,sha256=
|
21
|
+
versionhq/clients/workflow/model.py,sha256=p7VFnLPWwb5b_rO9guvsz9JO4Ki2WsPm-lkHWBSsN0M,5971
|
22
22
|
versionhq/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
23
|
versionhq/llm/llm_vars.py,sha256=YZoXqFBW7XpclUZ14_AAz7WOjoyCXnGcI959GSpX2q0,5343
|
24
24
|
versionhq/llm/model.py,sha256=mXzSuf1s6MebGT7_yqgNppde0NIlAF8bjIXAp2MZ9Uw,8247
|
@@ -27,17 +27,17 @@ versionhq/storage/task_output_storage.py,sha256=xoBJHeqUyQt6iJoR1WQTghP-fyxXL66q
|
|
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=
|
30
|
+
versionhq/task/model.py,sha256=Y-OYJO3FWFqJ6MhHMJIaqU9sDG5BvQ7pyvHG6nwTB5c,19305
|
31
31
|
versionhq/team/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
32
32
|
versionhq/team/model.py,sha256=E52OUVzUtvR--51SFRJos3JdYKri1t2jbvvzoOvShQc,20181
|
33
33
|
versionhq/team/team_planner.py,sha256=uzX2yed7A7gNSs6qH5jIq2zXMVF5BwQQ4HPATsB9DSQ,3675
|
34
34
|
versionhq/tool/__init__.py,sha256=FvBuEXsOQUYnN7RTFxT20kAkiEYkxWKkiVtgpqOzKZQ,1843
|
35
35
|
versionhq/tool/composio_tool.py,sha256=BJqaA1NhV0BT9AdY7OLCGpsAI3VEuCKnOS6D9vuU4zQ,8630
|
36
36
|
versionhq/tool/decorator.py,sha256=W_WjzZy8y43AoiFjHLPUQfNipmpOPe-wQknCWloPwmY,1195
|
37
|
-
versionhq/tool/model.py,sha256=
|
37
|
+
versionhq/tool/model.py,sha256=yrvog9wh-cuIXRngwXOzPlHwBO3UhUFxCH3vQ5qRKBA,6823
|
38
38
|
versionhq/tool/tool_handler.py,sha256=A3zUkZkx4JEpFHI2uBkHDpzWfADw-bCYUQhgm6rpITM,1569
|
39
|
-
versionhq-1.1.9.
|
40
|
-
versionhq-1.1.9.
|
41
|
-
versionhq-1.1.9.
|
42
|
-
versionhq-1.1.9.
|
43
|
-
versionhq-1.1.9.
|
39
|
+
versionhq-1.1.9.9.dist-info/LICENSE,sha256=7CCXuMrAjPVsUvZrsBq9DsxI2rLDUSYXR_qj4yO_ZII,1077
|
40
|
+
versionhq-1.1.9.9.dist-info/METADATA,sha256=Xy6nPEpAyuTu6UwbL3yH_TamXyVnDJN4pyBePvngnsA,16070
|
41
|
+
versionhq-1.1.9.9.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
|
42
|
+
versionhq-1.1.9.9.dist-info/top_level.txt,sha256=DClQwxDWqIUGeRJkA8vBlgeNsYZs4_nJWMonzFt5Wj0,10
|
43
|
+
versionhq-1.1.9.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|