optexity 0.1.5__py3-none-any.whl → 0.1.5.1__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.
- optexity/__init__.py +6 -0
- optexity/examples/extract_price_stockanalysis.py +3 -2
- optexity/inference/child_process.py +5 -2
- optexity/inference/core/interaction/handle_click.py +1 -1
- optexity/inference/core/interaction/handle_command.py +3 -1
- optexity/inference/core/interaction/handle_input.py +6 -3
- optexity/inference/core/interaction/handle_select.py +1 -1
- optexity/inference/core/interaction/handle_upload.py +3 -3
- optexity/inference/core/interaction/utils.py +4 -2
- optexity/inference/core/run_assertion.py +8 -4
- optexity/inference/core/run_automation.py +6 -2
- optexity/inference/core/run_extraction.py +13 -4
- optexity/inference/core/run_interaction.py +3 -1
- optexity/schema/automation.py +1 -0
- {optexity-0.1.5.dist-info → optexity-0.1.5.1.dist-info}/METADATA +3 -9
- {optexity-0.1.5.dist-info → optexity-0.1.5.1.dist-info}/RECORD +20 -20
- {optexity-0.1.5.dist-info → optexity-0.1.5.1.dist-info}/WHEEL +0 -0
- {optexity-0.1.5.dist-info → optexity-0.1.5.1.dist-info}/entry_points.txt +0 -0
- {optexity-0.1.5.dist-info → optexity-0.1.5.1.dist-info}/licenses/LICENSE +0 -0
- {optexity-0.1.5.dist-info → optexity-0.1.5.1.dist-info}/top_level.txt +0 -0
optexity/__init__.py
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import sys
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
3
4
|
from pathlib import Path
|
|
4
5
|
|
|
6
|
+
try:
|
|
7
|
+
__version__ = version("optexity")
|
|
8
|
+
except PackageNotFoundError:
|
|
9
|
+
__version__ = "0.0.0"
|
|
10
|
+
|
|
5
11
|
logging.basicConfig(
|
|
6
12
|
level=logging.WARNING, # Default level for root logger
|
|
7
13
|
format="%(asctime)s [%(levelname)s] %(name)s.%(funcName)s: %(message)s",
|
|
@@ -23,12 +23,13 @@ automation_json = {
|
|
|
23
23
|
"click_element": {
|
|
24
24
|
"prompt_instructions": "Click on the link with the name of the stock equivalent for {stock_ticker[0]}."
|
|
25
25
|
}
|
|
26
|
-
}
|
|
26
|
+
},
|
|
27
|
+
"before_sleep_time": 1,
|
|
27
28
|
},
|
|
28
29
|
{
|
|
29
30
|
"extraction_action": {
|
|
30
31
|
"llm": {
|
|
31
|
-
"source": ["screenshot"],
|
|
32
|
+
"source": ["screenshot", "axtree"],
|
|
32
33
|
"extraction_format": {
|
|
33
34
|
"stock_name": "str",
|
|
34
35
|
"stock_price": "str",
|
|
@@ -154,7 +154,10 @@ def get_app_with_endpoints(is_aws: bool, child_id: int):
|
|
|
154
154
|
|
|
155
155
|
await task_queue.put(task)
|
|
156
156
|
return JSONResponse(
|
|
157
|
-
content={
|
|
157
|
+
content={
|
|
158
|
+
"success": True,
|
|
159
|
+
"message": "Task has been allocated. Check its status and output at https://dashboard.optexity.com/tasks",
|
|
160
|
+
},
|
|
158
161
|
status_code=202,
|
|
159
162
|
)
|
|
160
163
|
except Exception as e:
|
|
@@ -192,7 +195,7 @@ def get_app_with_endpoints(is_aws: bool, child_id: int):
|
|
|
192
195
|
return JSONResponse(
|
|
193
196
|
content={
|
|
194
197
|
"success": True,
|
|
195
|
-
"message": "Task has been allocated",
|
|
198
|
+
"message": "Task has been allocated. Check its status and output at https://dashboard.optexity.com/tasks",
|
|
196
199
|
"task_id": task.task_id,
|
|
197
200
|
},
|
|
198
201
|
status_code=202,
|
|
@@ -67,7 +67,9 @@ async def command_based_action_with_retry(
|
|
|
67
67
|
url=browser_state_summary.url,
|
|
68
68
|
screenshot=browser_state_summary.screenshot,
|
|
69
69
|
title=browser_state_summary.title,
|
|
70
|
-
axtree=browser_state_summary.dom_state.llm_representation(
|
|
70
|
+
axtree=browser_state_summary.dom_state.llm_representation(
|
|
71
|
+
remove_empty_nodes=task.automation.remove_empty_nodes_in_axtree
|
|
72
|
+
),
|
|
71
73
|
)
|
|
72
74
|
|
|
73
75
|
if isinstance(action, ClickElementAction):
|
|
@@ -48,15 +48,18 @@ async def handle_input_text(
|
|
|
48
48
|
logger.debug(
|
|
49
49
|
f"Executing prompt-based action: {input_text_action.__class__.__name__}"
|
|
50
50
|
)
|
|
51
|
-
await input_text_index(input_text_action, browser, memory)
|
|
51
|
+
await input_text_index(input_text_action, browser, memory, task)
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
async def input_text_index(
|
|
55
|
-
input_text_action: InputTextAction, browser: Browser, memory: Memory
|
|
55
|
+
input_text_action: InputTextAction, browser: Browser, memory: Memory, task: Task
|
|
56
56
|
):
|
|
57
57
|
try:
|
|
58
58
|
index = await get_index_from_prompt(
|
|
59
|
-
memory,
|
|
59
|
+
memory,
|
|
60
|
+
input_text_action.prompt_instructions,
|
|
61
|
+
browser,
|
|
62
|
+
task,
|
|
60
63
|
)
|
|
61
64
|
if index is None:
|
|
62
65
|
return
|
|
@@ -36,16 +36,16 @@ async def handle_upload_file(
|
|
|
36
36
|
logger.debug(
|
|
37
37
|
f"Executing prompt-based action: {upload_file_action.__class__.__name__}"
|
|
38
38
|
)
|
|
39
|
-
await upload_file_index(upload_file_action, browser, memory)
|
|
39
|
+
await upload_file_index(upload_file_action, browser, memory, task)
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
async def upload_file_index(
|
|
43
|
-
upload_file_action: UploadFileAction, browser: Browser, memory: Memory
|
|
43
|
+
upload_file_action: UploadFileAction, browser: Browser, memory: Memory, task: Task
|
|
44
44
|
):
|
|
45
45
|
|
|
46
46
|
try:
|
|
47
47
|
index = await get_index_from_prompt(
|
|
48
|
-
memory, upload_file_action.prompt_instructions, browser
|
|
48
|
+
memory, upload_file_action.prompt_instructions, browser, task
|
|
49
49
|
)
|
|
50
50
|
if index is None:
|
|
51
51
|
return
|
|
@@ -18,14 +18,16 @@ index_prediction_agent = ActionPredictionLocatorAxtree()
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
async def get_index_from_prompt(
|
|
21
|
-
memory: Memory, prompt_instructions: str, browser: Browser
|
|
21
|
+
memory: Memory, prompt_instructions: str, browser: Browser, task: Task
|
|
22
22
|
):
|
|
23
23
|
browser_state_summary = await browser.get_browser_state_summary()
|
|
24
24
|
memory.browser_states[-1] = BrowserState(
|
|
25
25
|
url=browser_state_summary.url,
|
|
26
26
|
screenshot=browser_state_summary.screenshot,
|
|
27
27
|
title=browser_state_summary.title,
|
|
28
|
-
axtree=browser_state_summary.dom_state.llm_representation(
|
|
28
|
+
axtree=browser_state_summary.dom_state.llm_representation(
|
|
29
|
+
remove_empty_nodes=task.automation.remove_empty_nodes_in_axtree
|
|
30
|
+
),
|
|
29
31
|
)
|
|
30
32
|
|
|
31
33
|
try:
|
|
@@ -6,6 +6,7 @@ from optexity.inference.infra.browser import Browser
|
|
|
6
6
|
from optexity.inference.models import GeminiModels, get_llm_model
|
|
7
7
|
from optexity.schema.actions.assertion_action import AssertionAction, LLMAssertion
|
|
8
8
|
from optexity.schema.memory import Memory
|
|
9
|
+
from optexity.schema.task import Task
|
|
9
10
|
|
|
10
11
|
logger = logging.getLogger(__name__)
|
|
11
12
|
|
|
@@ -13,14 +14,17 @@ llm_model = get_llm_model(GeminiModels.GEMINI_2_5_FLASH, True)
|
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
async def run_assertion_action(
|
|
16
|
-
assertion_action: AssertionAction,
|
|
17
|
+
assertion_action: AssertionAction,
|
|
18
|
+
memory: Memory,
|
|
19
|
+
browser: Browser,
|
|
20
|
+
task: Task,
|
|
17
21
|
):
|
|
18
22
|
logger.debug(
|
|
19
23
|
f"---------Running assertion action {assertion_action.model_dump_json()}---------"
|
|
20
24
|
)
|
|
21
25
|
|
|
22
26
|
if assertion_action.llm:
|
|
23
|
-
await handle_llm_assertion(assertion_action.llm, memory, browser)
|
|
27
|
+
await handle_llm_assertion(assertion_action.llm, memory, browser, task)
|
|
24
28
|
elif assertion_action.network_call:
|
|
25
29
|
raise ValueError("Network call assertions are not supported yet")
|
|
26
30
|
# await handle_network_call_assertion(
|
|
@@ -34,7 +38,7 @@ async def run_assertion_action(
|
|
|
34
38
|
|
|
35
39
|
|
|
36
40
|
async def handle_llm_assertion(
|
|
37
|
-
llm_assertion: LLMAssertion, memory: Memory, browser: Browser
|
|
41
|
+
llm_assertion: LLMAssertion, memory: Memory, browser: Browser, task: Task
|
|
38
42
|
):
|
|
39
43
|
extra_instruction = """You are a helpful assistant that verifies if the condition is met.
|
|
40
44
|
Use the info supplied below to verify the condition.
|
|
@@ -45,7 +49,7 @@ async def handle_llm_assertion(
|
|
|
45
49
|
llm_assertion_new.extraction_instructions = (
|
|
46
50
|
extra_instruction + "\n" + llm_assertion_new.extraction_instructions
|
|
47
51
|
)
|
|
48
|
-
output_data = await handle_llm_extraction(llm_assertion_new, memory, browser)
|
|
52
|
+
output_data = await handle_llm_extraction(llm_assertion_new, memory, browser, task)
|
|
49
53
|
|
|
50
54
|
if output_data.json_data["assertion_result"]:
|
|
51
55
|
return True
|
|
@@ -209,7 +209,9 @@ async def run_final_logging(
|
|
|
209
209
|
url=browser_state_summary.url,
|
|
210
210
|
screenshot=browser_state_summary.screenshot,
|
|
211
211
|
title=browser_state_summary.title,
|
|
212
|
-
axtree=browser_state_summary.dom_state.llm_representation(
|
|
212
|
+
axtree=browser_state_summary.dom_state.llm_representation(
|
|
213
|
+
remove_empty_nodes=task.automation.remove_empty_nodes_in_axtree
|
|
214
|
+
),
|
|
213
215
|
)
|
|
214
216
|
)
|
|
215
217
|
|
|
@@ -279,7 +281,9 @@ async def run_action_node(
|
|
|
279
281
|
action_node.python_script_action, memory, browser
|
|
280
282
|
)
|
|
281
283
|
elif action_node.assertion_action:
|
|
282
|
-
await run_assertion_action(
|
|
284
|
+
await run_assertion_action(
|
|
285
|
+
action_node.assertion_action, memory, browser, task
|
|
286
|
+
)
|
|
283
287
|
|
|
284
288
|
except Exception as e:
|
|
285
289
|
logger.error(f"Error running node {memory.automation_state.step_index}: {e}")
|
|
@@ -37,7 +37,11 @@ async def run_extraction_action(
|
|
|
37
37
|
|
|
38
38
|
if extraction_action.llm:
|
|
39
39
|
await handle_llm_extraction(
|
|
40
|
-
extraction_action.llm,
|
|
40
|
+
extraction_action.llm,
|
|
41
|
+
memory,
|
|
42
|
+
browser,
|
|
43
|
+
task,
|
|
44
|
+
extraction_action.unique_identifier,
|
|
41
45
|
)
|
|
42
46
|
elif extraction_action.network_call:
|
|
43
47
|
await handle_network_call_extraction(
|
|
@@ -108,6 +112,7 @@ async def handle_llm_extraction(
|
|
|
108
112
|
llm_extraction: LLMExtraction,
|
|
109
113
|
memory: Memory,
|
|
110
114
|
browser: Browser,
|
|
115
|
+
task: Task,
|
|
111
116
|
unique_identifier: str | None = None,
|
|
112
117
|
):
|
|
113
118
|
browser_state_summary = await browser.get_browser_state_summary()
|
|
@@ -115,7 +120,9 @@ async def handle_llm_extraction(
|
|
|
115
120
|
url=browser_state_summary.url,
|
|
116
121
|
screenshot=browser_state_summary.screenshot,
|
|
117
122
|
title=browser_state_summary.title,
|
|
118
|
-
axtree=browser_state_summary.dom_state.llm_representation(
|
|
123
|
+
axtree=browser_state_summary.dom_state.llm_representation(
|
|
124
|
+
remove_empty_nodes=task.automation.remove_empty_nodes_in_axtree
|
|
125
|
+
),
|
|
119
126
|
)
|
|
120
127
|
|
|
121
128
|
# TODO: fix this double calling of screenshot and axtree
|
|
@@ -131,8 +138,8 @@ async def handle_llm_extraction(
|
|
|
131
138
|
|
|
132
139
|
system_instruction = f"""
|
|
133
140
|
You are an expert in extracting information from a website. You will be given an axtree of a webpage.
|
|
134
|
-
Your task is to extract the information from the webpage and return it in the format specified by the instructions.
|
|
135
|
-
{llm_extraction.extraction_instructions}
|
|
141
|
+
Your task is to extract the information from the webpage and return it in the format specified by the instructions. You will be first provided the instructions and then the axtree.
|
|
142
|
+
Instructions: {llm_extraction.extraction_instructions}
|
|
136
143
|
"""
|
|
137
144
|
|
|
138
145
|
prompt = f"""
|
|
@@ -163,6 +170,8 @@ async def handle_llm_extraction(
|
|
|
163
170
|
memory.token_usage += token_usage
|
|
164
171
|
memory.variables.output_data.append(output_data)
|
|
165
172
|
|
|
173
|
+
memory.browser_states[-1].final_prompt = f"{system_instruction}\n{prompt}"
|
|
174
|
+
|
|
166
175
|
if llm_extraction.output_variable_names is not None:
|
|
167
176
|
for output_variable_name in llm_extraction.output_variable_names:
|
|
168
177
|
v = response_dict[output_variable_name]
|
|
@@ -219,7 +219,9 @@ async def handle_assert_locator_presence_error(
|
|
|
219
219
|
url=browser_state_summary.url,
|
|
220
220
|
screenshot=browser_state_summary.screenshot,
|
|
221
221
|
title=browser_state_summary.title,
|
|
222
|
-
axtree=browser_state_summary.dom_state.llm_representation(
|
|
222
|
+
axtree=browser_state_summary.dom_state.llm_representation(
|
|
223
|
+
remove_empty_nodes=task.automation.remove_empty_nodes_in_axtree
|
|
224
|
+
),
|
|
223
225
|
)
|
|
224
226
|
final_prompt, response, token_usage = error_handler_agent.classify_error(
|
|
225
227
|
error.command, memory.browser_states[-1].screenshot
|
optexity/schema/automation.py
CHANGED
|
@@ -311,6 +311,7 @@ class Parameters(BaseModel):
|
|
|
311
311
|
class Automation(BaseModel):
|
|
312
312
|
browser_channel: Literal["chromium", "chrome"] = "chromium"
|
|
313
313
|
expected_downloads: int = 0
|
|
314
|
+
remove_empty_nodes_in_axtree: bool = True
|
|
314
315
|
url: str
|
|
315
316
|
parameters: Parameters
|
|
316
317
|
nodes: list[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: optexity
|
|
3
|
-
Version: 0.1.5
|
|
3
|
+
Version: 0.1.5.1
|
|
4
4
|
Summary: Optexity is a platform for building and running browser and computer agents.
|
|
5
5
|
Author-email: Optexity <founders@optexity.com>
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -83,6 +83,7 @@ Install Optexity directly from PyPI:
|
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
85
|
pip install optexity
|
|
86
|
+
optexity install-browsers
|
|
86
87
|
```
|
|
87
88
|
|
|
88
89
|
**OR**
|
|
@@ -95,6 +96,7 @@ If you want to clone and edit from source:
|
|
|
95
96
|
git clone git@github.com:Optexity/optexity.git
|
|
96
97
|
cd optexity
|
|
97
98
|
pip install -e .
|
|
99
|
+
optexity install-browsers
|
|
98
100
|
```
|
|
99
101
|
|
|
100
102
|
## Set required environment variables:
|
|
@@ -107,14 +109,6 @@ DEPLOYMENT=dev # or "prod" in production
|
|
|
107
109
|
|
|
108
110
|
You can get your free Google Gemini API key from the [Google AI Studio Console](https://aistudio.google.com).
|
|
109
111
|
|
|
110
|
-
## Install required browsers:
|
|
111
|
-
|
|
112
|
-
Install playwright and patchright browsers:
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
optexity install-browsers
|
|
116
|
-
```
|
|
117
|
-
|
|
118
112
|
## Recording Your First Automation
|
|
119
113
|
|
|
120
114
|
The fastest way to create an automation is by recording your actions directly in the browser.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
optexity/__init__.py,sha256=
|
|
1
|
+
optexity/__init__.py,sha256=rQAAQJLgccSNz-w3RTaFK8qdVlHHfcKyRNAQsqhz6l0,619
|
|
2
2
|
optexity/cli.py,sha256=2g_p2Qh7jzFFG5T0aTDiZ7Celh-KycEMJ873whiXFXE,2237
|
|
3
3
|
optexity/exceptions.py,sha256=j4QxbcnAl5RmEJPJ0MWZ0iM38HvW-r8xmxtDxZ1ceSY,269
|
|
4
4
|
optexity/onepassword_integration.py,sha256=_1sQ8sRGVdDnA7384FXiXYRVntPB-ZQAu8W7ICX7_VQ,1047
|
|
@@ -6,14 +6,14 @@ optexity/test.py,sha256=pMSZwwA8tj6jAfFUJ3OUHGnTPriqkv4eDGGHqdAdrsA,2797
|
|
|
6
6
|
optexity/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
optexity/examples/add_example.py,sha256=jVPd2pQ9lnmdwsVsld52CkRafYcF60SrQyDU3QFKTwY,2474
|
|
8
8
|
optexity/examples/download_pdf_url.py,sha256=mB1Kp0UC4AuHeIiyxMt5tlNK5urNPUosHjmUvV67qdM,829
|
|
9
|
-
optexity/examples/extract_price_stockanalysis.py,sha256=
|
|
9
|
+
optexity/examples/extract_price_stockanalysis.py,sha256=RGc71h3xpKPpShTHwYDy-jz50jBtKiada-EvSbijiRc,1567
|
|
10
10
|
optexity/examples/file_upload.py,sha256=Ep9wxjZFjlcWVufkhLt_RufZMbC8BJ8amASFO7uKGCk,2030
|
|
11
11
|
optexity/examples/i94.py,sha256=QB-Vo6jB03wOovsNh6_TsdxvdJf3MbnxVeUlEoVtUhA,4534
|
|
12
12
|
optexity/examples/i94_travel_history.py,sha256=PbU-xg3xVoEgRPaZQfC5JPNcHA6ClTu8X7650TK1_dc,4573
|
|
13
13
|
optexity/examples/peachstate_medicaid.py,sha256=0PQN3SI5NGw0m95ODm-bHYgF0xwpA83_9xflnN8P4mM,8290
|
|
14
14
|
optexity/examples/supabase_login.py,sha256=_j5VZi0HkqpWl0xguMoHc3gfkf3FiJWnQPs8D_QARN4,2349
|
|
15
15
|
optexity/inference/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
-
optexity/inference/child_process.py,sha256=
|
|
16
|
+
optexity/inference/child_process.py,sha256=0trTwuE9cr0hIaLS_1tKnfCVMWwbNTI2XsDKiXya9lY,8295
|
|
17
17
|
optexity/inference/run_local.py,sha256=P-ghDcNhHESuG7Q6Qp6xdl6r0g2lAyDkIhKsyaLBcPs,6743
|
|
18
18
|
optexity/inference/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
19
|
optexity/inference/agents/error_handler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -30,23 +30,23 @@ optexity/inference/agents/two_fa_extraction/prompt.py,sha256=eAqz_InZeyTnFqPMeYm
|
|
|
30
30
|
optexity/inference/agents/two_fa_extraction/two_fa_extraction.py,sha256=UcBo_Iyx6Kqas-fUZpJgos5R-t2hQ2PZUFjtHmO9Rh0,1444
|
|
31
31
|
optexity/inference/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
32
|
optexity/inference/core/logging.py,sha256=Zq2KL6XWlPIgsJjprxv-BLsnP5MAAKS2ciNMNkQrfBU,13870
|
|
33
|
-
optexity/inference/core/run_assertion.py,sha256=
|
|
34
|
-
optexity/inference/core/run_automation.py,sha256=
|
|
35
|
-
optexity/inference/core/run_extraction.py,sha256=
|
|
36
|
-
optexity/inference/core/run_interaction.py,sha256=
|
|
33
|
+
optexity/inference/core/run_assertion.py,sha256=cHI_A_ffe-T7XeTfTqiF3i_KIRe9ioYKSEM1rKZmq0o,2311
|
|
34
|
+
optexity/inference/core/run_automation.py,sha256=8X8IEBplOjiCqv7SsUWEMEUPfwDdgUgx1eY2WWx9zms,16853
|
|
35
|
+
optexity/inference/core/run_extraction.py,sha256=aA51UMU9gYMa0YD03KVf26fM5bYCrcpbf5lnmMGgjfY,7891
|
|
36
|
+
optexity/inference/core/run_interaction.py,sha256=nUmlq4OfUQuTjDklngQ--EbrRZ0xSCzdbrkpLFak1R0,9341
|
|
37
37
|
optexity/inference/core/run_python_script.py,sha256=WjnCmckZz7YmoLTGBLZeFWhhS1s_x0-kgyKYTM17JHI,547
|
|
38
38
|
optexity/inference/core/run_two_fa.py,sha256=m1lxPefJHtXqMYBB0oONxd5f7XX8AI5eUkjjjs5y0Z0,4010
|
|
39
39
|
optexity/inference/core/interaction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
40
|
optexity/inference/core/interaction/handle_agentic_task.py,sha256=MSURLDM-2Hw37sipa3lqUBh1NNFrGmx2DPGJsBGYTDg,2617
|
|
41
41
|
optexity/inference/core/interaction/handle_check.py,sha256=_LEA5V6h4x8fozAvPsGrFUZUaO0uU34z2R9VzGIOdio,1489
|
|
42
|
-
optexity/inference/core/interaction/handle_click.py,sha256=
|
|
43
|
-
optexity/inference/core/interaction/handle_command.py,sha256=
|
|
44
|
-
optexity/inference/core/interaction/handle_input.py,sha256
|
|
42
|
+
optexity/inference/core/interaction/handle_click.py,sha256=G9ZYylql5YjHQHSuRQYXMZRK_6RI0iUwKPSTPfmXNXo,2255
|
|
43
|
+
optexity/inference/core/interaction/handle_command.py,sha256=Xj7eWYoVi60tFcjseAHD33EByStiKoMsuKXaAmyVPxs,8450
|
|
44
|
+
optexity/inference/core/interaction/handle_input.py,sha256=-Yug3fBWumCp0xQt1UVX8dqCHKs_535VheMjOHMlv2Q,2317
|
|
45
45
|
optexity/inference/core/interaction/handle_keypress.py,sha256=Ig-U7qoMQ1GIaxeS2TnSTe4N3Jj64WcVc1rwl7Z-0So,466
|
|
46
|
-
optexity/inference/core/interaction/handle_select.py,sha256=
|
|
46
|
+
optexity/inference/core/interaction/handle_select.py,sha256=z-HoFqcuvsfW_fxJrmsz9RASlqef8HA7zJUErBs-9_o,3242
|
|
47
47
|
optexity/inference/core/interaction/handle_select_utils.py,sha256=gJnIvBNPFwIkFjYiaVSB-91k95leahrSnlq8fgDcWbQ,4114
|
|
48
|
-
optexity/inference/core/interaction/handle_upload.py,sha256=
|
|
49
|
-
optexity/inference/core/interaction/utils.py,sha256=
|
|
48
|
+
optexity/inference/core/interaction/handle_upload.py,sha256=Yrt9KZ-rmgJ-DK5IntIXWG-jcw7mbVYs5iSrZUMkRvc,1842
|
|
49
|
+
optexity/inference/core/interaction/utils.py,sha256=_TMt0XBIIJi2K7nVQGf4PMZ-c9SCDehcMIEGPQx1GS8,2842
|
|
50
50
|
optexity/inference/core/two_factor_auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
51
|
optexity/inference/infra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
52
|
optexity/inference/infra/browser.py,sha256=GpECOdxhpe5AbwU2FnRmR7jevKUiHHEZCq7PgpMI8t0,15955
|
|
@@ -56,7 +56,7 @@ optexity/inference/models/gemini.py,sha256=ToncY6Ft4kOgIm6qREBVsScT8FG-JCrdWsBxY
|
|
|
56
56
|
optexity/inference/models/human.py,sha256=K2X6Ohg7xeTWDYkJY6lOAwS9T3nX7YST-cvd8nL1Ydw,394
|
|
57
57
|
optexity/inference/models/llm_model.py,sha256=nZvcrQs4XDI07ckFUf6o-TzvyqW-I4WIbos7WEo4hz8,7211
|
|
58
58
|
optexity/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
|
-
optexity/schema/automation.py,sha256=
|
|
59
|
+
optexity/schema/automation.py,sha256=b-Suy9ro_bxZCIv6LU7Hnzht_DCQq-NzANqXoiuavRs,16167
|
|
60
60
|
optexity/schema/callback.py,sha256=MlN41A6oKG7QX01_w0tsxyAFKWnoCVsu_mjpWzPMYuE,519
|
|
61
61
|
optexity/schema/inference.py,sha256=8mP49IRU-cRxbsC4NnoGZhd5isvdocCuMVspPBOQV9o,2864
|
|
62
62
|
optexity/schema/memory.py,sha256=e3AMDAivCF_KnKbeDugqVLib8UN_6dr3ksUCiWaeIGM,3072
|
|
@@ -72,9 +72,9 @@ optexity/schema/actions/two_fa_action.py,sha256=OzzTDX3fZObWJiw8hvNgr96PBcvpDh1u
|
|
|
72
72
|
optexity/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
73
|
optexity/utils/settings.py,sha256=h6StXzYslRgZf0c8k43-kOxoa77dOgDvSOvfQUi5yI8,1864
|
|
74
74
|
optexity/utils/utils.py,sha256=QgVeKK3jAq-TLgP_RYiCXRAOEbuypFox0RxYEjruoTA,2565
|
|
75
|
-
optexity-0.1.5.dist-info/licenses/LICENSE,sha256=WpSBqSAcwd68PmS3zRsfACJOz-u-UfTzftsEnzp4ZCY,1065
|
|
76
|
-
optexity-0.1.5.dist-info/METADATA,sha256=
|
|
77
|
-
optexity-0.1.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
78
|
-
optexity-0.1.5.dist-info/entry_points.txt,sha256=hcn77ooRr6a_N8fo0vij3Fpo6waqc9ijpaScQ7Kj35k,47
|
|
79
|
-
optexity-0.1.5.dist-info/top_level.txt,sha256=OZEtBX8IabC8EnBrNW98z7NzdGQsjFhHleSthhjjEMM,9
|
|
80
|
-
optexity-0.1.5.dist-info/RECORD,,
|
|
75
|
+
optexity-0.1.5.1.dist-info/licenses/LICENSE,sha256=WpSBqSAcwd68PmS3zRsfACJOz-u-UfTzftsEnzp4ZCY,1065
|
|
76
|
+
optexity-0.1.5.1.dist-info/METADATA,sha256=ahKdSBPKViREzUaF_ufITJoaq8yytad_uKZe2kjIQ9I,9826
|
|
77
|
+
optexity-0.1.5.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
78
|
+
optexity-0.1.5.1.dist-info/entry_points.txt,sha256=hcn77ooRr6a_N8fo0vij3Fpo6waqc9ijpaScQ7Kj35k,47
|
|
79
|
+
optexity-0.1.5.1.dist-info/top_level.txt,sha256=OZEtBX8IabC8EnBrNW98z7NzdGQsjFhHleSthhjjEMM,9
|
|
80
|
+
optexity-0.1.5.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|