versionhq 1.2.4.5__py3-none-any.whl → 1.2.4.6__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.
@@ -0,0 +1,163 @@
1
+ from typing import List, Dict, Any, Optional, Tuple
2
+
3
+ from versionhq.tool.gpt import openai_client
4
+ from versionhq.tool.gpt._enum import GPTFilterTypeEnum
5
+ from versionhq._utils import is_valid_enum, UsageMetrics, ErrorType
6
+
7
+
8
+ def is_valid_vector_store_id(id: str | list[str]) -> bool:
9
+ if isinstance(id, list):
10
+ for item in id:
11
+ if not id.startswith("vs_"):
12
+ return False
13
+ else:
14
+ return id.startswith("vs_")
15
+
16
+
17
+ class FilterSchema:
18
+ class Filter:
19
+ type: GPTFilterTypeEnum = GPTFilterTypeEnum.eq
20
+ property: str = None
21
+ value: str = None
22
+
23
+ def __init__(self, **kwargs):
24
+ for k, v in kwargs:
25
+ if hasattr(self, k):
26
+ setattr(self, k, v)
27
+
28
+ def _convert_to_schema(self) -> Dict[str, str] | None:
29
+ return { "type": self.type, "property": self.property, "value": self.value } if self.property and self.value else None
30
+
31
+ logic_type: str = "and" # or
32
+ filters: List[Filter] = list()
33
+ filter_params: Dict[str, Any] = None
34
+
35
+ def __init__(self, logic_type: str = None, filters: List[Filter] | Filter = None, filter_params: Dict[str, Any] = None, **kwargs):
36
+ if logic_type == "and" | "or":
37
+ self.logic_type = logic_type
38
+
39
+ if filter_params:
40
+ filter = FilterSchema.Filter()
41
+ for k, v in filter_params.items():
42
+ if k in FilterSchema.Filter.__dict__.keys():
43
+ if k == "type" and is_valid_enum(val=v, enum=GPTFilterTypeEnum):
44
+ setattr(filter, k, v if isinstance(v, str) else v.value)
45
+ else:
46
+ setattr(filter, k, v)
47
+ self.filters.append(filter)
48
+
49
+ if filters:
50
+ match filters:
51
+ case list():
52
+ if self.filters:
53
+ self.filters.extend(filters)
54
+ else:
55
+ self.filters = filters
56
+
57
+ case FilterSchema.Filter():
58
+ if self.filters:
59
+ self.filters.append(filters)
60
+ else:
61
+ self.filters = [filters]
62
+
63
+ case _:
64
+ pass
65
+
66
+ if kwargs:
67
+ for k, v in kwargs:
68
+ if hasattr(self, k): setattr(self, k, v)
69
+
70
+ @property
71
+ def schema(self) -> Dict[str, Any] | None:
72
+ if self.type and len(self.items) > 1:
73
+ return {
74
+ "type": self.type,
75
+ "filters": [item._convert_to_schema() for item in self.items if isinstance(item, FilterSchema.Filter)]
76
+ }
77
+ elif self.filters:
78
+ return self.filters[0]._convert_to_schema()
79
+ else:
80
+ return None
81
+
82
+
83
+ class GPTToolFileSearch:
84
+ model: str = "gpt-4o"
85
+ input: str = None
86
+ vector_store_ids: List[str] = list()
87
+ max_num_results: int = 2
88
+ include: List[str] = ["output[*].file_search_call.search_results"]
89
+ filters: Optional[FilterSchema] = None
90
+
91
+ def __init__(
92
+ self,
93
+ input: str,
94
+ vector_store_ids: str | List[str],
95
+ model: str = None,
96
+ max_num_results: int = None,
97
+ include: List[str] = None,
98
+ filters: FilterSchema | Dict[str, Any] = None,
99
+ **kwargs,
100
+ ):
101
+ if not input or not vector_store_ids:
102
+ return None
103
+
104
+ if not is_valid_vector_store_id(id=vector_store_ids):
105
+ return None
106
+
107
+ self.input = input
108
+ self.vector_store_ids = vector_store_ids if isinstance(vector_store_ids, list) else [vector_store_ids]
109
+ self.model = model if model else self.model
110
+ self.max_num_results = max_num_results if max_num_results else self.max_num_results
111
+ self.include = include if include else self.include
112
+ self.filters = filters if filters else None
113
+ if kwargs:
114
+ for k, v in kwargs.items():
115
+ if hasattr(self, k):
116
+ setattr(self, k, v)
117
+
118
+
119
+ def run(self) -> Tuple[str, List[Dict[str, Any]], UsageMetrics] | None:
120
+ raw_res = ""
121
+ annotations = list()
122
+ usage = UsageMetrics()
123
+
124
+ try:
125
+ res = openai_client.responses.create(**self.schema)
126
+ if not res:
127
+ usage.record_errors(ErrorType.TOOL)
128
+ else:
129
+ raw_res = res.output[1].content[0].text
130
+ annotations = [{ "index": item.index, "file_id": item.file_id, "filename": item.filename }
131
+ for item in res.output[1].content[0].annotations]
132
+ usage.record_token_usage(**res.usage.__dict__)
133
+ return raw_res, annotations, usage
134
+ except:
135
+ usage.record_errors(ErrorType.TOOL)
136
+ return raw_res, annotations, usage
137
+
138
+
139
+ @property
140
+ def tool_schema(self) -> Dict[str, Any]:
141
+ if self.filters:
142
+ return [
143
+ {
144
+ "type": "file_search",
145
+ "vector_store_ids": self.vector_store_ids,
146
+ "max_num_results": self.max_num_results,
147
+ "filters": self.filters.schema,
148
+ }
149
+ ]
150
+ else:
151
+ return [
152
+ {
153
+ "type": "file_search",
154
+ "vector_store_ids": self.vector_store_ids,
155
+ "max_num_results": self.max_num_results,
156
+ }
157
+ ]
158
+
159
+
160
+ @property
161
+ def schema(self) -> Dict[str, Any]:
162
+ schema = dict(model=self.model, tools=self.tool_schema, input=self.input)
163
+ return schema
@@ -0,0 +1,89 @@
1
+ from typing import Dict, Any, Optional, Tuple, List
2
+
3
+ from versionhq.tool.gpt import openai_client
4
+ from versionhq.tool.gpt._enum import GPTSizeEnum
5
+ from versionhq._utils import is_valid_enum, UsageMetrics, ErrorType
6
+
7
+
8
+ class GPTToolWebSearch:
9
+ """A class to manage Web Search tools by OpenAI."""
10
+
11
+ model: str = "gpt-4o"
12
+ input: str = None
13
+ location_type: str = None # "approximate"
14
+ country: str = None # "GB"
15
+ city: str = None # "London"
16
+ region: str = None # "London"
17
+ search_content_size: str = GPTSizeEnum.MEDIUM.value
18
+ _user_location: Optional[Dict[str, str]] = None
19
+
20
+
21
+ def __init__(
22
+ self,
23
+ model: str = None,
24
+ input: str = None,
25
+ location_type: str = None,
26
+ country: str = None,
27
+ city: str = None,
28
+ region: str = None,
29
+ search_content_size = str | GPTSizeEnum,
30
+ **kwargs,
31
+ ):
32
+ self.model = model if model else self.model
33
+ self.input = input if input else self.input
34
+ if country and city and region:
35
+ self.location_type = location_type if location_type else "approximate"
36
+ self.country = country
37
+ self.city = city
38
+ self.region = region
39
+ self._user_location = dict(type=self.location_type, country=self.country, city=self.city, region=self.region)
40
+
41
+ if is_valid_enum(val=search_content_size, enum=GPTSizeEnum):
42
+ self.search_content_size = search_content_size if isinstance(search_content_size, str) else search_content_size.value
43
+
44
+ if kwargs:
45
+ for k, v in kwargs.items():
46
+ if hasattr(self, k):
47
+ setattr(self, k, v)
48
+
49
+
50
+ def run(self) -> Tuple[str, List[Dict[str, str]], UsageMetrics]:
51
+ """Runs the tool and returns text response, annotations, and usage metrics."""
52
+
53
+ raw_res = ""
54
+ annotations = list()
55
+ usage = UsageMetrics()
56
+
57
+ try:
58
+ res = openai_client.responses.create(**self.schema)
59
+ if not res:
60
+ usage.record_errors(ErrorType.TOOL)
61
+ else:
62
+ raw_res = res.output[1].content[0].text
63
+ annotations = [{ "title": item.title, "url": item.url } for item in res.output[1].content[0].annotations]
64
+ usage.record_token_usage(**res.usage.__dict__)
65
+ return raw_res, annotations, usage
66
+ except:
67
+ usage.record_errors(ErrorType.TOOL)
68
+ return raw_res, annotations, usage
69
+
70
+
71
+ @property
72
+ def tool_schema(self) -> Dict[str, Any]:
73
+ if self._user_location:
74
+ return {
75
+ "type": "web_search_preview",
76
+ "user_location": self._user_location,
77
+ "search_context_size": self.search_content_size
78
+ }
79
+ else:
80
+ return {
81
+ "type": "web_search_preview",
82
+ "search_context_size": self.search_content_size
83
+ }
84
+
85
+
86
+ @property
87
+ def schema(self) -> Dict[str, Any]:
88
+ schema = dict(model=self.model, tools=[self.tool_schema,], input=self.input)
89
+ return schema
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: versionhq
3
- Version: 1.2.4.5
3
+ Version: 1.2.4.6
4
4
  Summary: Autonomous agent networks for task automation with multi-step reasoning.
5
5
  Author-email: Kuriko Iwai <kuriko@versi0n.io>
6
6
  License: MIT License
@@ -1,33 +1,35 @@
1
- versionhq/__init__.py,sha256=8XLNCUY-3bjs8eI6mMUDBZLeY_Gj39QTut0tpzzyE3c,3026
2
- versionhq/_prompt/auto_feedback.py,sha256=QDYd8mKlluDaOjHIfL9B8Tr5tg40tsDVyBXqCuUdTCU,3800
1
+ versionhq/__init__.py,sha256=3MWBL0YKctLd8VquoiMDwpdvaJODfwF1LYm4Hf84zbk,3333
2
+ versionhq/_prompt/auto_feedback.py,sha256=bbj37yTa11lRHpx-sV_Wmpb4dVnDBB7_v8ageUobHXY,3780
3
3
  versionhq/_prompt/constants.py,sha256=DOwUFnVVObEFqgnaMCDnW8fnw1oPMgS8JAqOiTuqleI,932
4
- versionhq/_prompt/model.py,sha256=kokH7axDDPEZKPBmrOKi5L0aZLtApdVOJDKsMjkJmvw,8020
5
- versionhq/_utils/__init__.py,sha256=UggL2r-idlWDh0cIPFLyJ7AvO17NLzhjheW4IBFLBj4,300
4
+ versionhq/_prompt/model.py,sha256=wJlDM9yzrqlXWxyw4HkYQzPii2MPfqkgTF3qhXoJN2M,8038
5
+ versionhq/_utils/__init__.py,sha256=TOd3U_VCjvLzt0w-KV9cM1_ozEjzffhjyKX3F_JaqZg,418
6
+ versionhq/_utils/convert_img_url.py,sha256=BlINw4RQ632m9P4FJbqzqYlzTLESBTRkhkstAopnNNY,408
6
7
  versionhq/_utils/i18n.py,sha256=TwA_PnYfDLA6VqlUDPuybdV9lgi3Frh_ASsb_X8jJo8,1483
8
+ versionhq/_utils/is_valid_enum.py,sha256=vGGIuvhDnFU2fUyyFxJyjw-NfByK0vfFAu1ShaHBeZE,720
7
9
  versionhq/_utils/is_valid_url.py,sha256=m8Mswvb-90FJtx1Heq6hPFDbwGgrv_R3wSbZQmEPM9Q,379
8
- versionhq/_utils/llm_as_a_judge.py,sha256=RM0oYfoeanuUyUL3Ewl6_8Xn1F5Axd285UMH46kxG1I,2378
10
+ versionhq/_utils/llm_as_a_judge.py,sha256=2XcuFqEVb6P6vHxWQNv8XM2b4APyvEir5QI9TPgHt_U,2353
9
11
  versionhq/_utils/logger.py,sha256=iHxGjm3BvUo5dHKLU88_pc0Z45wzSHOjyJGQkb7OADk,3255
10
12
  versionhq/_utils/process_config.py,sha256=YTGY_erW335RfceQfzS18YAqq-AAb-iSvKSjN7noD2E,782
11
- versionhq/_utils/usage_metrics.py,sha256=zaoH6xjWX69UrQJmViBiX3sEUpnwSoHaapCPfWU2oM8,2632
13
+ versionhq/_utils/usage_metrics.py,sha256=gDK6fZgT1njX4iPIPFapWxfxIiz-zZYv72p0u6M055U,3387
12
14
  versionhq/_utils/vars.py,sha256=bZ5Dx_bFKlt3hi4-NNGXqdk7B23If_WaTIju2fiTyPQ,57
13
15
  versionhq/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
16
  versionhq/agent/inhouse_agents.py,sha256=D2WAiXCYsnQK3_Fe7CbbtvXsHWOaN6vde6m_QoW7fH4,2629
15
- versionhq/agent/model.py,sha256=auIrSWqt4NnANgA2YOCS2l9kxPCWkZG7YUD22NjrkAA,24810
17
+ versionhq/agent/model.py,sha256=kEsJri5RWSAzQ4jNYhS3WYSJTNyTT1huqyTlqjSK62E,26969
16
18
  versionhq/agent/parser.py,sha256=riG0dkdQCxH7uJ0AbdVdg7WvL0BXhUgJht0VtQvxJBc,4082
17
19
  versionhq/agent/rpm_controller.py,sha256=grezIxyBci_lDlwAlgWFRyR5KOocXeOhYkgN02dNFNE,2360
18
20
  versionhq/agent/TEMPLATES/Backstory.py,sha256=dkfuATUQ2g2WoUKkmgAIch-RB--bektGoQaUlsDOn0g,529
19
21
  versionhq/agent/TEMPLATES/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
22
  versionhq/agent_network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- versionhq/agent_network/formation.py,sha256=jXCc9dS9gOgjNoPNoqKaqKPrHqmcFIvR2JwKYTgiQW0,7505
22
- versionhq/agent_network/model.py,sha256=CYkIU1W1Ijh5DQD18vRcD1g8myZWmqAYNS0PlRnEX-o,15899
23
+ versionhq/agent_network/formation.py,sha256=P5YEVAVwxiAUQ5J4mW3sK-WTd0nuXLo_LOFiKz1Kqik,7313
24
+ versionhq/agent_network/model.py,sha256=eDZCr628mVYRGKtcyDVWHlszW8wmq7A6DpKIhxCn6Vo,15860
23
25
  versionhq/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
26
  versionhq/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- versionhq/clients/customer/__init__.py,sha256=-YXh1FQfvpfLacK8SUC7bD7Wx_eIEi4yrkCC_cUasFg,217
27
+ versionhq/clients/customer/__init__.py,sha256=2hDrX3xyEMgrH1E3SjZVkd4V8cR3HWUjhDt7lpThJsM,218
26
28
  versionhq/clients/customer/model.py,sha256=_AtaVVMm9MgCwrQ-HTRQ2oXUMKrSCEfZwE2JdRz3xTw,2508
27
29
  versionhq/clients/product/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- versionhq/clients/product/model.py,sha256=3w__pug9XRe4LIm9wX8C8WKqi40r081Eb1q2vWk9UaU,3694
30
+ versionhq/clients/product/model.py,sha256=Beb95U4XfdvCbSi5mT6j3-P8D_dforF-H04M9bnUWlE,3588
29
31
  versionhq/clients/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- versionhq/clients/workflow/model.py,sha256=_yCbmwzexjQqEGli7XX0vFG6yFnAOe9QDoMWQaU_qZE,3920
32
+ versionhq/clients/workflow/model.py,sha256=AI8pAO2MW-ysxC2TDgPPQ-5O4HrhSBG9QjfuaJb9Rw4,3917
31
33
  versionhq/knowledge/__init__.py,sha256=qW7IgssTA4_bFFV9ziOcYRfGjlq1c8bkb-HnfWknpuQ,567
32
34
  versionhq/knowledge/_utils.py,sha256=YWRF8U533cfZes_gZqUvdj-K24MD2ri1R0gjc_aPYyc,402
33
35
  versionhq/knowledge/embedding.py,sha256=KfHc__1THxb5jrg1EMrF-v944RDuIr2hE0l-MtM3Bp0,6826
@@ -36,7 +38,7 @@ versionhq/knowledge/source.py,sha256=-hEUPtJUHHMx4rUKtiHl19J8xAMw-WVBw34zwa2jZ08
36
38
  versionhq/knowledge/source_docling.py,sha256=XpavmLvh4dLcuTikj8MCE9KG52oQMafy7_wBneliMK0,4994
37
39
  versionhq/knowledge/storage.py,sha256=Kd-4r6aWM5EDaoXrzKXbgi1hY6tysSQARPGXM95qMmU,8266
38
40
  versionhq/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- versionhq/llm/llm_vars.py,sha256=fl9MOjPzBEIymp99BNLD39VmB7rQ9L4YDnfLNXbUZws,5896
41
+ versionhq/llm/llm_vars.py,sha256=gc3igJdjhY4osnN75STEeELuWiPwlA1S-4JCqK5RQkE,5894
40
42
  versionhq/llm/model.py,sha256=m4OaFgGWKCZjmfN-OY3KoqG1K4T31UF7QVkYUcnpjdg,17273
41
43
  versionhq/memory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
44
  versionhq/memory/contextual_memory.py,sha256=QEMVvHuEXxY7M6-12S8HhyFKf108KfX8Zzt7paPW048,3882
@@ -46,28 +48,34 @@ versionhq/storage/base.py,sha256=p-Jas0fXQan_qotnRD6seQxrT2lj-uw9-SmHQhdppcs,355
46
48
  versionhq/storage/ltm_sqlite_storage.py,sha256=LeJE4ZPUWjyY1E5nNCHoKujTHFDR2BO_LAMvAOX-WHg,3957
47
49
  versionhq/storage/mem0_storage.py,sha256=ZY8MELBWaINRv9YuRW5MxH7dj2cII-L0i3xSD6o1-2M,3781
48
50
  versionhq/storage/rag_storage.py,sha256=bS2eE874obarYl-4hT6ZWYWTRsqtfuGpKgKzERmM6Uo,7433
49
- versionhq/storage/task_output_storage.py,sha256=nkBNmBbrQeEgds3lAyKl4ugDWLtWRoCQUO6KiOmCIMU,5362
51
+ versionhq/storage/task_output_storage.py,sha256=9x76i_9nXuapujX4Fj1Jz1h-bF9w7DzUbzdJIPx9pPo,5374
50
52
  versionhq/storage/utils.py,sha256=r5ghA_ktdR2IuzlzKqZYCjsNxztEMzyhWLneA4cFuWY,748
51
53
  versionhq/task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
54
  versionhq/task/evaluation.py,sha256=qQSA5ZWTWA3he54ystsYpTKXJWv68gBL6DCq8ZW1bl8,3813
53
55
  versionhq/task/formatter.py,sha256=N8Kmk9vtrMtBdgJ8J7RmlKNMdZWSmV8O1bDexmCWgU0,643
54
- versionhq/task/model.py,sha256=C5QttgJrfhx0UL82845ZBIhhc8oLiQkAWz2i6UkskMM,29023
56
+ versionhq/task/model.py,sha256=lTpog4ERVlcl95ku-ZCVbi7htT7hnI-YGM_JFZJ27k8,29462
55
57
  versionhq/task/structured_response.py,sha256=tqOHpch8CVmMj0aZXjdDWtPNcVmBW8DVZnBvPBwS4PM,5053
56
58
  versionhq/task/TEMPLATES/Description.py,sha256=hKhpbz0ztbkUMXz9KiL-P40fis9OB5ICOdL9jCtgAhU,864
57
59
  versionhq/task_graph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
60
  versionhq/task_graph/colors.py,sha256=naJCx4Vho4iuJtbW8USUXb-M5uYvd5ds2p8qbjUfRus,669
59
61
  versionhq/task_graph/draft.py,sha256=mVhCHDH-7N-SQRssE50KGIAgd9gdvdeWjt8ofm-SYI4,4943
60
- versionhq/task_graph/model.py,sha256=l4Alvdtdl-fwYG7eMo655HF0zx1HkKRiPiST_Ra7hzg,29305
62
+ versionhq/task_graph/model.py,sha256=2FsZj6v7BGwUgf1RAp2oohz9tf91swIij0j6l0CEe6E,29364
61
63
  versionhq/tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
64
  versionhq/tool/cache_handler.py,sha256=iL8FH7X0G-cdT0uhJwzuhLDaadTXOdfybZcDy151-es,1085
63
- versionhq/tool/composio_tool.py,sha256=IATfsEnF_1RPJyGtPBmAtEJh5XPcgDHpyG3SUR461Og,8572
64
- versionhq/tool/composio_tool_vars.py,sha256=FvBuEXsOQUYnN7RTFxT20kAkiEYkxWKkiVtgpqOzKZQ,1843
65
65
  versionhq/tool/decorator.py,sha256=C4ZM7Xi2gwtEMaSeRo-geo_g_MAkY77WkSLkAuY0AyI,1205
66
66
  versionhq/tool/model.py,sha256=ve9C4WyiRjQigOU0hRWVxtSUWAQNntlmeW-_DL0_lJY,12328
67
67
  versionhq/tool/rag_tool.py,sha256=dW5o-83V4bMFFJEj3PUm7XjblwrYJGmZVBlCpPj6CeM,3852
68
68
  versionhq/tool/tool_handler.py,sha256=2m41K8qo5bGCCbwMFferEjT-XZ-mE9F0mDUOBkgivOI,1416
69
- versionhq-1.2.4.5.dist-info/LICENSE,sha256=cRoGGdM73IiDs6nDWKqPlgSv7aR4n-qBXYnJlCMHCeE,1082
70
- versionhq-1.2.4.5.dist-info/METADATA,sha256=gwFpoEsZC3Jfo5k2bvpZBPix_pWZCJ0h_UDDgRfrsBw,21146
71
- versionhq-1.2.4.5.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
72
- versionhq-1.2.4.5.dist-info/top_level.txt,sha256=DClQwxDWqIUGeRJkA8vBlgeNsYZs4_nJWMonzFt5Wj0,10
73
- versionhq-1.2.4.5.dist-info/RECORD,,
69
+ versionhq/tool/composio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
+ versionhq/tool/composio/model.py,sha256=GIFKso_e_4a3BdaulqU_i6Y9JFAExNBjzHUHR_zZeSI,8577
71
+ versionhq/tool/composio/params.py,sha256=FvBuEXsOQUYnN7RTFxT20kAkiEYkxWKkiVtgpqOzKZQ,1843
72
+ versionhq/tool/gpt/__init__.py,sha256=A6xCuf_GUBs7wfx904J_Vd2t1GJCcf0lMKOL7MbZce4,160
73
+ versionhq/tool/gpt/_enum.py,sha256=fw31aYeQBY8vfRwzjvwa1IVhhpAAQt9m1jqQTjTBpLk,500
74
+ versionhq/tool/gpt/cup.py,sha256=Vz7VmTQV0IvUZcyN9znH7d7XUvLzm2SlSXJ5NoJFk3Q,5048
75
+ versionhq/tool/gpt/file_search.py,sha256=CoPwNNoGF4U-0OuUMixqjdt5YoO0tqWbdbR_7UE-dMk,5597
76
+ versionhq/tool/gpt/web_search.py,sha256=NoeW7m_YxhUp8NanTjBt3GX6nAU6G8bi_jfpLfWyx90,3127
77
+ versionhq-1.2.4.6.dist-info/LICENSE,sha256=cRoGGdM73IiDs6nDWKqPlgSv7aR4n-qBXYnJlCMHCeE,1082
78
+ versionhq-1.2.4.6.dist-info/METADATA,sha256=clqmU4LOEF01NFhvqX6NQTB8poWzPYDKrTzbgImprV0,21146
79
+ versionhq-1.2.4.6.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
80
+ versionhq-1.2.4.6.dist-info/top_level.txt,sha256=DClQwxDWqIUGeRJkA8vBlgeNsYZs4_nJWMonzFt5Wj0,10
81
+ versionhq-1.2.4.6.dist-info/RECORD,,