dhisana 0.0.1.dev85__py3-none-any.whl → 0.0.1.dev236__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.
Files changed (70) hide show
  1. dhisana/schemas/common.py +33 -0
  2. dhisana/schemas/sales.py +224 -23
  3. dhisana/utils/add_mapping.py +72 -63
  4. dhisana/utils/apollo_tools.py +739 -109
  5. dhisana/utils/built_with_api_tools.py +4 -2
  6. dhisana/utils/cache_output_tools.py +23 -23
  7. dhisana/utils/check_email_validity_tools.py +456 -458
  8. dhisana/utils/check_for_intent_signal.py +1 -2
  9. dhisana/utils/check_linkedin_url_validity.py +34 -8
  10. dhisana/utils/clay_tools.py +3 -2
  11. dhisana/utils/clean_properties.py +3 -1
  12. dhisana/utils/compose_salesnav_query.py +0 -1
  13. dhisana/utils/compose_search_query.py +7 -3
  14. dhisana/utils/composite_tools.py +0 -1
  15. dhisana/utils/dataframe_tools.py +2 -2
  16. dhisana/utils/email_body_utils.py +72 -0
  17. dhisana/utils/email_provider.py +375 -0
  18. dhisana/utils/enrich_lead_information.py +585 -85
  19. dhisana/utils/fetch_openai_config.py +129 -0
  20. dhisana/utils/field_validators.py +1 -1
  21. dhisana/utils/g2_tools.py +0 -1
  22. dhisana/utils/generate_content.py +0 -1
  23. dhisana/utils/generate_email.py +69 -16
  24. dhisana/utils/generate_email_response.py +298 -41
  25. dhisana/utils/generate_flow.py +0 -1
  26. dhisana/utils/generate_linkedin_connect_message.py +19 -6
  27. dhisana/utils/generate_linkedin_response_message.py +156 -65
  28. dhisana/utils/generate_structured_output_internal.py +351 -131
  29. dhisana/utils/google_custom_search.py +150 -44
  30. dhisana/utils/google_oauth_tools.py +721 -0
  31. dhisana/utils/google_workspace_tools.py +391 -25
  32. dhisana/utils/hubspot_clearbit.py +3 -1
  33. dhisana/utils/hubspot_crm_tools.py +771 -167
  34. dhisana/utils/instantly_tools.py +3 -1
  35. dhisana/utils/lusha_tools.py +10 -7
  36. dhisana/utils/mailgun_tools.py +150 -0
  37. dhisana/utils/microsoft365_tools.py +447 -0
  38. dhisana/utils/openai_assistant_and_file_utils.py +121 -177
  39. dhisana/utils/openai_helpers.py +19 -16
  40. dhisana/utils/parse_linkedin_messages_txt.py +2 -3
  41. dhisana/utils/profile.py +37 -0
  42. dhisana/utils/proxy_curl_tools.py +507 -206
  43. dhisana/utils/proxycurl_search_leads.py +426 -0
  44. dhisana/utils/research_lead.py +121 -68
  45. dhisana/utils/sales_navigator_crawler.py +1 -6
  46. dhisana/utils/salesforce_crm_tools.py +323 -50
  47. dhisana/utils/search_router.py +131 -0
  48. dhisana/utils/search_router_jobs.py +51 -0
  49. dhisana/utils/sendgrid_tools.py +126 -91
  50. dhisana/utils/serarch_router_local_business.py +75 -0
  51. dhisana/utils/serpapi_additional_tools.py +290 -0
  52. dhisana/utils/serpapi_google_jobs.py +117 -0
  53. dhisana/utils/serpapi_google_search.py +188 -0
  54. dhisana/utils/serpapi_local_business_search.py +129 -0
  55. dhisana/utils/serpapi_search_tools.py +363 -432
  56. dhisana/utils/serperdev_google_jobs.py +125 -0
  57. dhisana/utils/serperdev_local_business.py +154 -0
  58. dhisana/utils/serperdev_search.py +233 -0
  59. dhisana/utils/smtp_email_tools.py +576 -0
  60. dhisana/utils/test_connect.py +1765 -92
  61. dhisana/utils/trasform_json.py +95 -16
  62. dhisana/utils/web_download_parse_tools.py +0 -1
  63. dhisana/utils/zoominfo_tools.py +2 -3
  64. dhisana/workflow/test.py +1 -1
  65. {dhisana-0.0.1.dev85.dist-info → dhisana-0.0.1.dev236.dist-info}/METADATA +5 -2
  66. dhisana-0.0.1.dev236.dist-info/RECORD +100 -0
  67. {dhisana-0.0.1.dev85.dist-info → dhisana-0.0.1.dev236.dist-info}/WHEEL +1 -1
  68. dhisana-0.0.1.dev85.dist-info/RECORD +0 -81
  69. {dhisana-0.0.1.dev85.dist-info → dhisana-0.0.1.dev236.dist-info}/entry_points.txt +0 -0
  70. {dhisana-0.0.1.dev85.dist-info → dhisana-0.0.1.dev236.dist-info}/top_level.txt +0 -0
@@ -1,23 +1,26 @@
1
- # A Genric Transformation Function to transform JSON from format X to format Y.
2
- # This is auto-generated code using LLM (Large Language Model) and Assistant Tool.
3
- # As a part of ETL we dont need to write custom code for each transformation.
4
- # Auto-generated code is used to transform JSON from format X to format Y.
5
-
6
- import asyncio
7
1
  import json
2
+ from typing import Any, Dict, List, Optional, Type
3
+
8
4
  from pydantic import BaseModel
5
+
9
6
  from dhisana.utils.assistant_tool_tag import assistant_tool
10
- from dhisana.utils.dataframe_tools import get_structured_output
11
- from pydantic import BaseModel
12
- from typing import Type
7
+ from dhisana.utils.generate_structured_output_internal import get_structured_output_internal
13
8
 
14
9
  GLOBAL_GENERATED_PYTHON_CODE = {}
10
+ import logging
11
+ logger = logging.getLogger(__name__)
15
12
 
16
13
  class GeneratedPythonCode(BaseModel):
17
14
  python_code: str
18
15
 
16
+
19
17
  @assistant_tool
20
- async def transform_json_code(input_json: str, output_json: str, function_name: str) -> str:
18
+ async def transform_json_code(
19
+ input_json: str,
20
+ output_json: str,
21
+ function_name: str,
22
+ tool_config: Optional[List[Dict]] = None
23
+ ) -> str:
21
24
  """
22
25
  Use LLM to generate python code to transform JSON from format X to format Y.
23
26
  Save that to a GLOBAL variable.
@@ -26,6 +29,7 @@ async def transform_json_code(input_json: str, output_json: str, function_name:
26
29
  input_json (str): Example input JSON.
27
30
  output_json (str): Example output JSON.
28
31
  function_name (str): The generated python function should be saved as.
32
+ tool_config (Optional[List[Dict]]): Optional tool configuration.
29
33
 
30
34
  Returns:
31
35
  str: Function name that was saved to the global scope.
@@ -43,15 +47,19 @@ async def transform_json_code(input_json: str, output_json: str, function_name:
43
47
  {output_json}
44
48
  Name the function as:
45
49
  {function_name}
46
- Check for NoneType in code before any concatination and make sure error does not happen lie "unsupported operand type(s) for +: 'NoneType' and 'str'"
47
- Preserve the output type to be of the type in output JSON. Convert input field to string and assign to output field if types dont match.
48
- Return the function code in 'python_code'. Do not include any imports or explanations; only provide the '{function_name}' code that takes 'input_json' as input and returns the transformed 'output_json' as output.
50
+ Check for NoneType in code before any concatenation and make sure errors do not happen like
51
+ "unsupported operand type(s) for +: 'NoneType' and 'str'".
52
+ Preserve the output type to be of the type in output JSON. Convert input field to string and
53
+ assign to output field if types don't match.
54
+ Return the function code in 'python_code'. Do not include any imports or explanations; only
55
+ provide the '{function_name}' code that takes 'input_json' as input and returns the transformed
56
+ 'output_json' as output.
49
57
  """
50
58
  if error_message:
51
59
  message += f"\nThe previous attempt returned the following error:\n{error_message}\nPlease fix the function."
52
60
 
53
61
  # Get structured output
54
- generated_python_code, status = await get_structured_output(message, GeneratedPythonCode)
62
+ generated_python_code, status = await get_structured_output_internal(message, GeneratedPythonCode, tool_config=tool_config)
55
63
  if status == 'SUCCESS' and generated_python_code and generated_python_code.python_code:
56
64
  function_string = generated_python_code.python_code
57
65
  # Execute the generated function
@@ -70,12 +78,18 @@ async def transform_json_code(input_json: str, output_json: str, function_name:
70
78
  error_message = str(e)
71
79
  else:
72
80
  error_message = "Failed to generate valid Python code."
81
+
73
82
  if attempt == max_retries - 1:
74
83
  raise RuntimeError(f"Error executing generated function after {max_retries} attempts: {error_message}")
75
84
 
76
85
 
77
86
  @assistant_tool
78
- async def transform_json_with_type(input_json_str: str, response_type: Type[BaseModel], function_name: str):
87
+ async def transform_json_with_type(
88
+ input_json_str: str,
89
+ response_type: Type[BaseModel],
90
+ function_name: str,
91
+ tool_config: Optional[List[Dict]] = None
92
+ ):
79
93
  """
80
94
  Transforms the input JSON into the format specified by the given Pydantic response type.
81
95
 
@@ -83,6 +97,7 @@ async def transform_json_with_type(input_json_str: str, response_type: Type[Base
83
97
  input_json_str (str): The input JSON string to be transformed.
84
98
  response_type (Type[BaseModel]): The Pydantic model defining the desired output format.
85
99
  function_name (str): The name of the function to generate and execute.
100
+ tool_config (Optional[List[Dict]]): Optional tool configuration.
86
101
 
87
102
  Returns:
88
103
  The transformed JSON string matching the response_type format.
@@ -91,4 +106,68 @@ async def transform_json_with_type(input_json_str: str, response_type: Type[Base
91
106
  sample_instance = response_type.construct()
92
107
  # Convert the instance to JSON
93
108
  response_type_json_str = sample_instance.json()
94
- return await transform_json_code(input_json_str, response_type_json_str, function_name)
109
+ return await transform_json_code(input_json_str, response_type_json_str, function_name, tool_config=tool_config)
110
+
111
+
112
+ # ----------------------------------------------------
113
+ # Property Mapping (LLM-based)
114
+ # ----------------------------------------------------
115
+ class PropertyMapping(BaseModel):
116
+ input_property_name: str
117
+ mapped_property_name: str
118
+
119
+
120
+ class PropertyMappingList(BaseModel):
121
+ properties: List[PropertyMapping]
122
+
123
+
124
+ async def create_property_mapping(
125
+ sample_input: Dict[str, Any],
126
+ required_fields: List[str],
127
+ entity_type: str,
128
+ tool_config: Optional[List[Dict[str, Any]]] = None
129
+ ) -> Dict[str, str]:
130
+ """
131
+ Generate a property mapping from the input fields to the required fields for either a
132
+ Lead or an Account (Company). Calls an LLM to produce a JSON dictionary of field mappings.
133
+
134
+ :param sample_input: A sample dictionary from the input data.
135
+ :param required_fields: A list of fields we want to map to (e.g. ["organization_name", "first_name"]).
136
+ :param entity_type: "lead" or "account", used in the prompt to clarify context for the LLM.
137
+ :param tool_config: Optional LLM config.
138
+
139
+ :return: Dict of {"existingField": "requiredFieldName", ...}
140
+ """
141
+ # We'll only show the top-level of sample_input in the prompt for brevity
142
+ truncated_sample = {k: str(sample_input[k])[:128] for k in list(sample_input.keys())}
143
+
144
+ # Prepare a textual prompt for the LLM
145
+ user_prompt = f"""
146
+ The user has data representing a {entity_type} but the fields may not match the required format.
147
+ Required fields are: {required_fields}.
148
+ A sample of the input is: {json.dumps(truncated_sample, indent=2)}
149
+
150
+ Please output a JSON output mapping input_property_name to mapped_property_name.
151
+ You MUST map only one input property to one output property.
152
+ If a input property does not match any required field, you can skip mapping it. Map the best match.
153
+ DO NOT map the same input property to multiple output properties.
154
+ """
155
+
156
+ logger.info(f"Asking LLM to create property mapping for entity_type='{entity_type}'...")
157
+
158
+ response, status = await get_structured_output_internal(
159
+ prompt=user_prompt,
160
+ response_format=PropertyMappingList,
161
+ effort="high",
162
+ model="gpt-5.1-chat",
163
+ tool_config=tool_config
164
+ )
165
+ if status == "SUCCESS" and response and response.properties:
166
+ mapping = {}
167
+ for prop in response.properties:
168
+ mapping[prop.input_property_name] = prop.mapped_property_name
169
+ return mapping
170
+ else:
171
+ logger.warning("Could not generate property mapping from LLM. Returning empty mapping.")
172
+ return {}
173
+
@@ -91,7 +91,6 @@ async def process_files_in_folder_for_leads(folder_path: str, file_extension: st
91
91
  Returns:
92
92
  - str: The file path of the generated CSV file.
93
93
  """
94
- seen = set()
95
94
 
96
95
  # Ensure the parent directory of output_file exists
97
96
  os.makedirs(os.path.dirname(output_file), exist_ok=True)
@@ -1,4 +1,3 @@
1
- import asyncio
2
1
  import os
3
2
  import json
4
3
  import logging
@@ -68,7 +67,7 @@ async def get_zoominfo_access_token(
68
67
  tool_config (List[Dict], optional): Configuration list that may contain ZoomInfo credentials.
69
68
 
70
69
  Raises:
71
- EnvironmentError: If the necessary credentials are missing.
70
+ EnvironmentError: If the ZoomInfo integration has not been configured.
72
71
  Exception: If the ZoomInfo API authentication fails.
73
72
 
74
73
  Returns:
@@ -78,7 +77,7 @@ async def get_zoominfo_access_token(
78
77
 
79
78
  if not zoominfo_api_key or not zoominfo_api_secret:
80
79
  raise EnvironmentError(
81
- "ZoomInfo API key and secret not found in tool_config or environment variables."
80
+ "ZoomInfo integration is not configured. Please configure the connection to ZoomInfo in Integrations."
82
81
  )
83
82
 
84
83
  headers = {"Content-Type": "application/json"}
dhisana/workflow/test.py CHANGED
@@ -21,7 +21,7 @@ async def call_openai_api(system_content: str, user_content: str, max_tokens: in
21
21
  try:
22
22
  # Call the OpenAI API using the new client method
23
23
  response = client.chat.completions.create(
24
- model="gpt-4",
24
+ model="gpt-5.1-chat",
25
25
  messages=[
26
26
  {"role": "system", "content": system_content},
27
27
  {"role": "user", "content": user_content}
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: dhisana
3
- Version: 0.0.1.dev85
3
+ Version: 0.0.1.dev236
4
4
  Summary: A Python SDK for Dhisana AI Platform
5
5
  Home-page: https://github.com/dhisana-ai/dhisana-python-sdk
6
6
  Author: Admin
@@ -30,6 +30,9 @@ Requires-Dist: hubspot-api-client
30
30
  Requires-Dist: tldextract
31
31
  Requires-Dist: pyperclip
32
32
  Requires-Dist: azure-storage-blob
33
+ Requires-Dist: email_validator
34
+ Requires-Dist: fqdn
35
+ Requires-Dist: json_repair
33
36
  Dynamic: author
34
37
  Dynamic: author-email
35
38
  Dynamic: classifier
@@ -0,0 +1,100 @@
1
+ dhisana/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
2
+ dhisana/cli/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
3
+ dhisana/cli/cli.py,sha256=mYoY2KjgDCOV2n1Wdx0yt7HrielK9eWvKsxDFrnZPT8,385
4
+ dhisana/cli/datasets.py,sha256=OwzoCrVQqmh0pKpUAKAg_w9uGYncbWU7ZrAL_QukxAk,839
5
+ dhisana/cli/models.py,sha256=IzUFZW_X32mL3fpM1_j4q8AF7v5nrxJcxBoqvG-TTgA,706
6
+ dhisana/cli/predictions.py,sha256=VYgoLK1Ksv6MFImoYZqjQJkds7e5Hso65dHwbxTNNzE,646
7
+ dhisana/schemas/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
8
+ dhisana/schemas/common.py,sha256=rt1ho4nzVhTwTQ_1Kx5TI-xZSbnyDpYN0fQ8Fgf8z6k,9332
9
+ dhisana/schemas/sales.py,sha256=k-ZTB-DaQbjvI882L6443H4gspWBFY-VrY2_1xlLn74,33587
10
+ dhisana/ui/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
11
+ dhisana/ui/components.py,sha256=4NXrAyl9tx2wWwoVYyABO-EOGnreGMvql1AkXWajIIo,14316
12
+ dhisana/utils/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
13
+ dhisana/utils/add_mapping.py,sha256=oq_QNqag86DhgdwINBRRXNx7SOb8Q9M-V0QLP6pTzr8,13837
14
+ dhisana/utils/agent_tools.py,sha256=pzBFvfhU4wfSB4zv1eiRzjmnteJnfhC5V32r_v1m38Y,2321
15
+ dhisana/utils/apollo_tools.py,sha256=DUg9HQBHwD9ZjqbdLP2QPWxbPSAN7aN2d_Brq4svSg0,64297
16
+ dhisana/utils/assistant_tool_tag.py,sha256=rYRl8ubLI7fUUIjg30XTefHBkFgRqNEVC12lF6U6Z-8,119
17
+ dhisana/utils/built_with_api_tools.py,sha256=TFNGhnPb2vFdveVCpjiCvE1WKe_eK95UPpR0Ha5NgMQ,10260
18
+ dhisana/utils/cache_output_tools.py,sha256=sSAruvUZn-WAJQ0lB9T1QjSmkm-_14AuxC9xKmcCQ0k,3428
19
+ dhisana/utils/cache_output_tools_local.py,sha256=okVIY54Xs5avTLu5Sv8neEPsPBce501m-6E_UhQkCAg,2447
20
+ dhisana/utils/check_email_validity_tools.py,sha256=s2x1O3U97C4JcxIVuVh3sbgYTZzG7eGJCJT1s3NmApY,26609
21
+ dhisana/utils/check_for_intent_signal.py,sha256=pC9k1_2fuUXBUxmikfxmoILlqhGMsJDVxrX0m73XQzA,4517
22
+ dhisana/utils/check_linkedin_url_validity.py,sha256=HoniUZ0BrtuvUmo4xLnKbxfiDBxVhatj2fJGNADtRlU,8365
23
+ dhisana/utils/clay_tools.py,sha256=Pi3UMcxSDz2pd2Xq_tn9G8Zot5DUQM_cYNgWI2478EM,1282
24
+ dhisana/utils/clean_properties.py,sha256=D3GHL9grpe6baV7JyS9ZdHboESk1-ddcfLXHOLoFRws,4372
25
+ dhisana/utils/company_utils.py,sha256=6icf3MuCzBp7iSoiq6LkQHg8A9hOqKuFyUwv0og1vBg,2038
26
+ dhisana/utils/compose_salesnav_query.py,sha256=dPf23JEr_9i7E91EU6h4jd2IGHf4Rhma5WgGdlAockY,16486
27
+ dhisana/utils/compose_search_query.py,sha256=bqx7PyIgubRn_qd3pxgquQrofkqIyuEclzuwFNgo5GE,29435
28
+ dhisana/utils/compose_three_step_workflow.py,sha256=-I-8Mr6k_fjRM5qciziwZ5L_mBYjW81vEsgHeahy-Sk,10512
29
+ dhisana/utils/composite_tools.py,sha256=ZlwHCp7PXjYFUWUEeR_fTF0Z4Wg-4F6eBi1reE3FfUA,6092
30
+ dhisana/utils/dataframe_tools.py,sha256=R6eUXjwR5SG6_K87rWjj4T5PT2w6xvVF2EKBajIv-RE,9242
31
+ dhisana/utils/domain_parser.py,sha256=Kw5MPP06wK2azWQzuSiOE-DffOezLqDyF-L9JEBsMSU,1206
32
+ dhisana/utils/email_body_utils.py,sha256=rlCVjdBlqNnEiUberJGXGcrYY1GQOkW0-aB6AEpS3L4,2302
33
+ dhisana/utils/email_parse_helpers.py,sha256=LIdm1B1IyGSW50y8EkxOk6YRjvxO2SJTgTKPLxYls_o,4613
34
+ dhisana/utils/email_provider.py,sha256=spjbNdnaVfCZEUw62EEHKijuXjI7vTVNqsftxJ15Erw,14352
35
+ dhisana/utils/enrich_lead_information.py,sha256=Z4knDUSV0DlaX-mnmTPCR2CLjN32qUPPc0AW2N0Dr74,39402
36
+ dhisana/utils/extract_email_content_for_llm.py,sha256=SQmMZ3YJtm3ZI44XiWEVAItcAwrsSSy1QzDne7LTu_Q,3713
37
+ dhisana/utils/fetch_openai_config.py,sha256=LjWdFuUeTNeAW106pb7DLXZNElos2PlmXRe6bHZJ2hw,5159
38
+ dhisana/utils/field_validators.py,sha256=BZgNCpBG264aRqNUu_J67c6zfr15zlAaIw2XRy8J7DY,11809
39
+ dhisana/utils/g2_tools.py,sha256=a4vmBYCBvLae5CdpOhMN1oNlvO8v9J1B5Sd8T5PzuU8,3346
40
+ dhisana/utils/generate_content.py,sha256=1ycqHhxuxXnsX_5CNp5M6zW40VsM6toYMCwJU9jf__4,2111
41
+ dhisana/utils/generate_email.py,sha256=YUhrku9meo3ee5Ft2ybtLTUTAfUf4quPmJp9hmSkdzM,12895
42
+ dhisana/utils/generate_email_response.py,sha256=3pggNoJKwZ0bAZ3aKaelw7Qip7AsySh16Qw_36Q0Mh4,21212
43
+ dhisana/utils/generate_flow.py,sha256=QMn6bWo0nH0fBvy2Ebub1XfH5udnVAqsPsbIqCtQPXU,4728
44
+ dhisana/utils/generate_leads_salesnav.py,sha256=AONP1KXDJdg95JQBmKx5PQXUD2BHctc-MZOMuRfuK9U,12156
45
+ dhisana/utils/generate_linkedin_connect_message.py,sha256=WZThEun-DMuAOqlzMI--hGmrDuQUYEb4Hl2DoMv3s80,9885
46
+ dhisana/utils/generate_linkedin_response_message.py,sha256=-jg-u5Ipf4-cn9q0yjEHsEBe1eJhYLCLrjZDtOXnCyQ,14464
47
+ dhisana/utils/generate_structured_output_internal.py,sha256=DmZ5QzW-79Jo3JL5nDCZQ-Fjl8Nz7FHK6S0rZxXbKyg,20705
48
+ dhisana/utils/google_custom_search.py,sha256=5rQ4uAF-hjFpd9ooJkd6CjRvSmhZHhqM0jfHItsbpzk,10071
49
+ dhisana/utils/google_oauth_tools.py,sha256=RbZvmjnueb8At35_kJOfFwDR36PN3ofh3iVV8ugJMwM,28307
50
+ dhisana/utils/google_workspace_tools.py,sha256=6z2PngTumEwtS9L9zXEpdtpAoD2sFYfpc7md6z7_p_o,48869
51
+ dhisana/utils/hubspot_clearbit.py,sha256=keNX1F_RnDl9AOPxYEOTMdukV_A9g8v9j1fZyT4tuP4,3440
52
+ dhisana/utils/hubspot_crm_tools.py,sha256=lbXFCeq690_TDLjDG8Gm5E-2f1P5EuDqNf5j8PYpMm8,99298
53
+ dhisana/utils/instantly_tools.py,sha256=hhqjDPyLE6o0dzzuvryszbK3ipnoGU2eBm6NlsUGJjY,4771
54
+ dhisana/utils/linkedin_crawler.py,sha256=6fMQTY5lTw2kc65SFHgOAM6YfezAS0Yhg-jkiX8LGHo,6533
55
+ dhisana/utils/lusha_tools.py,sha256=MdiWlxBBjSNpSKz8rhNOyLPtbeh-YWHgGiUq54vN_gM,12734
56
+ dhisana/utils/mailgun_tools.py,sha256=qUD-jFMZpmkkkKtyihVSe9tgFzYe-UiiBDHQKtsLq0M,5284
57
+ dhisana/utils/microsoft365_tools.py,sha256=aNIUBBz56HhvnEd0ZMy5EGAtsXcBJ_VOMO5Yy4dyojQ,18289
58
+ dhisana/utils/openai_assistant_and_file_utils.py,sha256=-eyPcxFvtS-DDtYQGle1SU6C6CuxjulVIojFy27HeWc,8957
59
+ dhisana/utils/openai_helpers.py,sha256=ZK9S5-jcLCpiiD6XBLkCqYcNz-AGYmO9xh4e2H-FDLo,40155
60
+ dhisana/utils/openapi_spec_to_tools.py,sha256=oBLVq3WeDWvW9O02NCvY8bxQURQdKwHJHGcX8bC_b2I,1926
61
+ dhisana/utils/parse_linkedin_messages_txt.py,sha256=g3N_ac70mAEuDDQ7Ott6mkOaBwI3ZvcsJD3R9RlYwPQ,3320
62
+ dhisana/utils/profile.py,sha256=12IhefaLp3j74zzBzVRe50_KWqtWZ_cdzUKlYNy9T2Y,1192
63
+ dhisana/utils/proxy_curl_tools.py,sha256=skjL92kbhLLaBHRyL4udyM9KehK6EYphLvoLc5gQQV8,52763
64
+ dhisana/utils/proxycurl_search_leads.py,sha256=6PlraPNYQ4fIDzTYnY-T2g_ip5fPkqHigbGoPD8ZosQ,16131
65
+ dhisana/utils/python_function_to_tools.py,sha256=jypddM6WTlIQmRWnqAugYJXvaPYaXaMgWAZRYeeGlj4,2682
66
+ dhisana/utils/research_lead.py,sha256=L6w2fK5in8z2xmWnXBjbkvTdrwPf8ZfvAXq3gb7-S6s,7009
67
+ dhisana/utils/sales_navigator_crawler.py,sha256=z8yurwUTLXdM71xWPDSAFNuDyA_SlanTpTncayG8YP8,44670
68
+ dhisana/utils/salesforce_crm_tools.py,sha256=r6tROej4PtfcRN2AViPD7tV24oxBNm6QCE7uwhDH5Hc,17169
69
+ dhisana/utils/search_router.py,sha256=p_1MPHbjalBM8gZuU4LADbmqSLNtZ4zll6CbPOc0POU,4610
70
+ dhisana/utils/search_router_jobs.py,sha256=LgCHNGLMSv-ovgzF32muprfaDTdTpIKgrP5F7swAqhk,1721
71
+ dhisana/utils/sendgrid_tools.py,sha256=Q3Mr7mF0iM_zoF-Vhb1lH5r8AyqkVGgYXaCMR2i7zLQ,5157
72
+ dhisana/utils/serarch_router_local_business.py,sha256=n9yZjeXKOSgBnr0lCSQomP1nN3ucbC9ZTTSmSHQLeVo,2920
73
+ dhisana/utils/serpapi_additional_tools.py,sha256=Xb1tc_oK-IjI9ZrEruYhFg8UJMLHQDaO9B51YiNbeBs,10569
74
+ dhisana/utils/serpapi_google_jobs.py,sha256=HUJFZEW8UvYqsW0sWlEDXgI_IUomh5fTkzRJzEgsDGc,4509
75
+ dhisana/utils/serpapi_google_search.py,sha256=B3sVq2OXdrYmPbH7cjQN4RFoek96qgKzXIayKXn0HLU,7318
76
+ dhisana/utils/serpapi_local_business_search.py,sha256=vinmuXLaQ_0BpEdwnONZ2vLTq5xnRh6ICmPbnpckSN4,5775
77
+ dhisana/utils/serpapi_search_tools.py,sha256=xiiYi6Rd6Mqn94mjSKEs5nNZk1l2-PW_hTL4grvxUpI,31722
78
+ dhisana/utils/serperdev_google_jobs.py,sha256=m5_2f_5y79FOFZz1A_go6m0hIUfbbAoZ0YTjUMO2BSI,4508
79
+ dhisana/utils/serperdev_local_business.py,sha256=JoZfTg58Hojv61cyuwA2lcnPdLT1lawnWaBNrUYWnuQ,6447
80
+ dhisana/utils/serperdev_search.py,sha256=_iBKIfHMq4gFv5StYz58eArriygoi1zW6VnLlux8vto,9363
81
+ dhisana/utils/smtp_email_tools.py,sha256=_1FoN6e-rgkjAKnCVym_IvihJFKz_dOo-43iM6CVqhA,21855
82
+ dhisana/utils/test_connect.py,sha256=aQjPIKevMF_c-wd4Te2UtPpaY-dEa9PVp6MsNCjQ7q8,83667
83
+ dhisana/utils/trasform_json.py,sha256=7V72XNDpuxUX0GHN5D83z4anj_gIf5zabaHeQm7b1_E,6979
84
+ dhisana/utils/web_download_parse_tools.py,sha256=ouXwH7CmjcRjoBfP5BWat86MvcGO-8rLCmWQe_eZKjc,7810
85
+ dhisana/utils/workflow_code_model.py,sha256=YPWse5vBb3O6Km2PvKh1Q3AB8qBkzLt1CrR5xOL9Mro,99
86
+ dhisana/utils/zoominfo_tools.py,sha256=8RwOuhnfABWvrJAjDHvC32JsG1vgVfgckpRuoU6BvEU,13409
87
+ dhisana/utils/openapi_tool/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
88
+ dhisana/utils/openapi_tool/api_models.py,sha256=uPaYpUDsEcsSQX3aL0AUiWfUJP-xIPksTwb9YqK1pAs,21294
89
+ dhisana/utils/openapi_tool/convert_openai_spec_to_tool.py,sha256=r2fhCRN3SJL0xjcBY3OuE6nuOA0h1iTsMtRqyJCnhfQ,10360
90
+ dhisana/utils/openapi_tool/openapi_tool.py,sha256=aqJMLB6XUjUEUtA8UnY1qDVNzQz026_JCJVt6ZObOm8,11233
91
+ dhisana/workflow/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
92
+ dhisana/workflow/agent.py,sha256=esv7_i_XuMkV2j1nz_UlsHov_m6X5WZZiZm_tG4OBHU,565
93
+ dhisana/workflow/flow.py,sha256=xWE3qQbM7j2B3FH8XnY3zOL_QXX4LbTW4ArndnEYJE0,1638
94
+ dhisana/workflow/task.py,sha256=HlWz9mtrwLYByoSnePOemBUBrMEcj7KbgNjEE1oF5wo,1830
95
+ dhisana/workflow/test.py,sha256=E7lRnXK0PguTNzyasHytLzTJdkqIPxG5_4qk4hMEeKc,3399
96
+ dhisana-0.0.1.dev236.dist-info/METADATA,sha256=BLaVx5ZdL-O8x_SQ6Y-_Pix32XKO4x49uyzczRYJ7kI,1190
97
+ dhisana-0.0.1.dev236.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
98
+ dhisana-0.0.1.dev236.dist-info/entry_points.txt,sha256=jujxteZmNI9EkEaK-pOCoWuBujU8TCevdkfl9ZcKHek,49
99
+ dhisana-0.0.1.dev236.dist-info/top_level.txt,sha256=NETTHt6YifG_P7XtRHbQiXZlgSFk9Qh9aR-ng1XTf4s,8
100
+ dhisana-0.0.1.dev236.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,81 +0,0 @@
1
- dhisana/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
2
- dhisana/cli/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
3
- dhisana/cli/cli.py,sha256=mYoY2KjgDCOV2n1Wdx0yt7HrielK9eWvKsxDFrnZPT8,385
4
- dhisana/cli/datasets.py,sha256=OwzoCrVQqmh0pKpUAKAg_w9uGYncbWU7ZrAL_QukxAk,839
5
- dhisana/cli/models.py,sha256=IzUFZW_X32mL3fpM1_j4q8AF7v5nrxJcxBoqvG-TTgA,706
6
- dhisana/cli/predictions.py,sha256=VYgoLK1Ksv6MFImoYZqjQJkds7e5Hso65dHwbxTNNzE,646
7
- dhisana/schemas/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
8
- dhisana/schemas/common.py,sha256=YAbRaXJnAqhu-IeL_2QFBbX9kXpnjDmEef0Y-u9bnbA,8575
9
- dhisana/schemas/sales.py,sha256=voGN-5PAGE-2laX60Fyki7ZQmNamNdhTS1I1BfP_3fE,26770
10
- dhisana/ui/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
11
- dhisana/ui/components.py,sha256=4NXrAyl9tx2wWwoVYyABO-EOGnreGMvql1AkXWajIIo,14316
12
- dhisana/utils/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
13
- dhisana/utils/add_mapping.py,sha256=UOKGN6eoUNmg4FDMZ75vh--VHf6-b-ANqEQ6O3Sb7lc,12850
14
- dhisana/utils/agent_tools.py,sha256=pzBFvfhU4wfSB4zv1eiRzjmnteJnfhC5V32r_v1m38Y,2321
15
- dhisana/utils/apollo_tools.py,sha256=3Lm20ST_SAlMG8lYZYLp7N99jZYOM3XD50MqJY1GP-M,38906
16
- dhisana/utils/assistant_tool_tag.py,sha256=rYRl8ubLI7fUUIjg30XTefHBkFgRqNEVC12lF6U6Z-8,119
17
- dhisana/utils/built_with_api_tools.py,sha256=LQ8ty_aJdsOf7pXAYQ-MKpX3lTfYUa8bWmwHfmCqQ3s,10245
18
- dhisana/utils/cache_output_tools.py,sha256=xSXsFvFvBEwvs_3QxKXtkPcLhW0F3aYXkKddSTxPJ9Y,3512
19
- dhisana/utils/cache_output_tools_local.py,sha256=okVIY54Xs5avTLu5Sv8neEPsPBce501m-6E_UhQkCAg,2447
20
- dhisana/utils/check_email_validity_tools.py,sha256=YcMgi660W_CdmhTGI-PkA9nVcJYXqZraNRulAeqnlLs,26873
21
- dhisana/utils/check_for_intent_signal.py,sha256=y8z2HNlOjAJw2KPk5Nh7QoX_FY1csT2g4p7ZEtRUL10,4572
22
- dhisana/utils/check_linkedin_url_validity.py,sha256=XMbA-oYhsjRFGeLzsAAGzAcLiEnd8o2578XoRtfCJew,7083
23
- dhisana/utils/clay_tools.py,sha256=lI4Gl4GnjfEEiFvM5txVqIj9i3P8JapGGayYT7WV3Ew,1203
24
- dhisana/utils/clean_properties.py,sha256=6bmbbtA_-eYY1uDSENyeFm01tK9XMxfgvtiCwKxPT5g,4377
25
- dhisana/utils/company_utils.py,sha256=6icf3MuCzBp7iSoiq6LkQHg8A9hOqKuFyUwv0og1vBg,2038
26
- dhisana/utils/compose_salesnav_query.py,sha256=XdTys8CNWY9a4YVqL2q9g82rrBszzT4JdTYDwp7RVHQ,16496
27
- dhisana/utils/compose_search_query.py,sha256=CaM5RZ-UUDLVUoA1py51vRW6bg8OhKFokDeiU4DMUlM,29283
28
- dhisana/utils/compose_three_step_workflow.py,sha256=-I-8Mr6k_fjRM5qciziwZ5L_mBYjW81vEsgHeahy-Sk,10512
29
- dhisana/utils/composite_tools.py,sha256=zndZ7m1BBIzi1fYU9L_-YPRemdhoGIqoLD8n86RRY3o,6153
30
- dhisana/utils/dataframe_tools.py,sha256=5ap5ffw9DIuNDTFfrucX0fQ5Y4kkDmoxOsRyGE5YZzY,9232
31
- dhisana/utils/domain_parser.py,sha256=Kw5MPP06wK2azWQzuSiOE-DffOezLqDyF-L9JEBsMSU,1206
32
- dhisana/utils/email_parse_helpers.py,sha256=LIdm1B1IyGSW50y8EkxOk6YRjvxO2SJTgTKPLxYls_o,4613
33
- dhisana/utils/enrich_lead_information.py,sha256=1MqnImQtFi-62pqOxk_CtVs6C4tJTMHfcnytk2ttnJs,17120
34
- dhisana/utils/extract_email_content_for_llm.py,sha256=SQmMZ3YJtm3ZI44XiWEVAItcAwrsSSy1QzDne7LTu_Q,3713
35
- dhisana/utils/field_validators.py,sha256=-zJWeDo9ME3tBssyZVmA-VXexdSim-5dMZRma9YNYz0,11821
36
- dhisana/utils/g2_tools.py,sha256=qX1FITP1C9mnojN_aS4R1JjlYQo4livpXd9xrMKyRdM,3358
37
- dhisana/utils/generate_content.py,sha256=k14vyYglqk44zkd36JSwFkDfqCjNilpOrAdENtL4qX0,2133
38
- dhisana/utils/generate_email.py,sha256=sOACxOZtprxmqIcnRlgiVaAcQ39QeFrsrreODfWsfms,9733
39
- dhisana/utils/generate_email_response.py,sha256=jkCYaEFPyh3XyEdgDWc37u_mA0Bk-029futUTX8JQW8,9021
40
- dhisana/utils/generate_flow.py,sha256=oYeG3v2LSeycGRqX-k2pYpUyYv6T0fE3tzyMGt4hyvI,4743
41
- dhisana/utils/generate_leads_salesnav.py,sha256=AONP1KXDJdg95JQBmKx5PQXUD2BHctc-MZOMuRfuK9U,12156
42
- dhisana/utils/generate_linkedin_connect_message.py,sha256=2CZPn2ovmUJ_uYeqJrhCUpT93eCJk6uknU9A1yLZFVE,8787
43
- dhisana/utils/generate_linkedin_response_message.py,sha256=RoqmYk6uH_-Tf2BSiQ0oWszTapWlV7djYvOKar-1fv4,9890
44
- dhisana/utils/generate_structured_output_internal.py,sha256=t1N6JzVNKmjsfv4UZEpX6PDPkSW_OZ8j71S7vzrrBtQ,9164
45
- dhisana/utils/google_custom_search.py,sha256=iNj08NpG5xHJZTT4YyPz7M6PE67CKHx7uG8oEQD_Otc,6587
46
- dhisana/utils/google_workspace_tools.py,sha256=Mdx6VyVoOsHJl41g71ML24LVf8Y6oy4ljzcwjOlKPYo,34842
47
- dhisana/utils/hubspot_clearbit.py,sha256=OKp3euxXKQNiaV-479XcvJ9_vOecL7GiUgmMp-mEqoI,3370
48
- dhisana/utils/hubspot_crm_tools.py,sha256=CvdCGeFmb_di3ICCf_XbiwH4I9_32j3n34ZBXV_JHO4,74634
49
- dhisana/utils/instantly_tools.py,sha256=YwLGm7j0NG-yvlfkQWscED2o04lCtpHOjokC9-Y6Y5Y,4699
50
- dhisana/utils/linkedin_crawler.py,sha256=6fMQTY5lTw2kc65SFHgOAM6YfezAS0Yhg-jkiX8LGHo,6533
51
- dhisana/utils/lusha_tools.py,sha256=2ACZMFgenZUY8rtzvpfTmJkTmYaVu_ofBCPEoVUjAOo,12647
52
- dhisana/utils/openai_assistant_and_file_utils.py,sha256=Qy582dqtEP-fR7ucacai6UsViMj8HGGCNcUpbfx-sTM,11401
53
- dhisana/utils/openai_helpers.py,sha256=i6Z8x8VcHpynJcVady6MK1frRosXCvHslLEV3mAMcDk,40139
54
- dhisana/utils/openapi_spec_to_tools.py,sha256=oBLVq3WeDWvW9O02NCvY8bxQURQdKwHJHGcX8bC_b2I,1926
55
- dhisana/utils/parse_linkedin_messages_txt.py,sha256=s12S30c8MQfCoK3G7dWzH7ITpRlTGEI2K4tT3jhTayQ,3343
56
- dhisana/utils/proxy_curl_tools.py,sha256=nbhcTRCcQrkIQiFlEzFsPTiQUwtnoo2AEqd9U0wClrQ,39888
57
- dhisana/utils/python_function_to_tools.py,sha256=jypddM6WTlIQmRWnqAugYJXvaPYaXaMgWAZRYeeGlj4,2682
58
- dhisana/utils/research_lead.py,sha256=GOgVlGlKIBhzeehuJ5662IqrvgkrYbcJSD_SmKSTuvw,5272
59
- dhisana/utils/sales_navigator_crawler.py,sha256=8IpVzcnjiCvsoKn5oYZ9hdlUXeuwYKRbwnZ6AHk0qvk,44941
60
- dhisana/utils/salesforce_crm_tools.py,sha256=tg6tNCYRuytJEsmqxGvtO_Je_NAfGHiHbG0bkDzYZBc,7670
61
- dhisana/utils/sendgrid_tools.py,sha256=SYk0KJf78LJHz5jaR4mO63U-5ARtX-KxrrytQeklis4,4526
62
- dhisana/utils/serpapi_search_tools.py,sha256=HLWP4ZXszwsRIYKQaBdhMNqR0ZgOa5vCzvi8bJVw5uI,34710
63
- dhisana/utils/test_connect.py,sha256=L7TrHCWEz_2MOTlK9n8o44zKgiVD5hXkCBpzyBfx024,14731
64
- dhisana/utils/trasform_json.py,sha256=BXbmSJgZWOXPrOvZZIV9BjZSJOHfXBWo9V78Mlu5yLQ,4309
65
- dhisana/utils/web_download_parse_tools.py,sha256=IDqnz_Ff0TthTriS7QYWOmjnJQoEt8VXMRhRsvVuoq4,7827
66
- dhisana/utils/workflow_code_model.py,sha256=YPWse5vBb3O6Km2PvKh1Q3AB8qBkzLt1CrR5xOL9Mro,99
67
- dhisana/utils/zoominfo_tools.py,sha256=VI2lCcs4DTGEAH8B0Z937bOeo2GVPr3EsRWqGPqZLS4,13391
68
- dhisana/utils/openapi_tool/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
69
- dhisana/utils/openapi_tool/api_models.py,sha256=uPaYpUDsEcsSQX3aL0AUiWfUJP-xIPksTwb9YqK1pAs,21294
70
- dhisana/utils/openapi_tool/convert_openai_spec_to_tool.py,sha256=r2fhCRN3SJL0xjcBY3OuE6nuOA0h1iTsMtRqyJCnhfQ,10360
71
- dhisana/utils/openapi_tool/openapi_tool.py,sha256=aqJMLB6XUjUEUtA8UnY1qDVNzQz026_JCJVt6ZObOm8,11233
72
- dhisana/workflow/__init__.py,sha256=jv2YF__bseklT3OWEzlqJ5qE24c4aWd5F4r0TTjOrWQ,65
73
- dhisana/workflow/agent.py,sha256=esv7_i_XuMkV2j1nz_UlsHov_m6X5WZZiZm_tG4OBHU,565
74
- dhisana/workflow/flow.py,sha256=xWE3qQbM7j2B3FH8XnY3zOL_QXX4LbTW4ArndnEYJE0,1638
75
- dhisana/workflow/task.py,sha256=HlWz9mtrwLYByoSnePOemBUBrMEcj7KbgNjEE1oF5wo,1830
76
- dhisana/workflow/test.py,sha256=DLlZQ11u0tUtmnC8Cfk6503aMdqD8ziEi9ecqaAHP-Q,3392
77
- dhisana-0.0.1.dev85.dist-info/METADATA,sha256=f3qNgiSgyhG43uZXubyOZWeccK2S2O8_NWa2KKPmzxI,1111
78
- dhisana-0.0.1.dev85.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
79
- dhisana-0.0.1.dev85.dist-info/entry_points.txt,sha256=jujxteZmNI9EkEaK-pOCoWuBujU8TCevdkfl9ZcKHek,49
80
- dhisana-0.0.1.dev85.dist-info/top_level.txt,sha256=NETTHt6YifG_P7XtRHbQiXZlgSFk9Qh9aR-ng1XTf4s,8
81
- dhisana-0.0.1.dev85.dist-info/RECORD,,