dhisana 0.0.1.dev214__tar.gz → 0.0.1.dev216__tar.gz

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 (115) hide show
  1. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/PKG-INFO +1 -1
  2. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/setup.py +1 -1
  3. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/proxy_curl_tools.py +3 -3
  4. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/serperdev_search.py +54 -15
  5. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana.egg-info/PKG-INFO +1 -1
  6. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/README.md +0 -0
  7. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/pyproject.toml +0 -0
  8. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/setup.cfg +0 -0
  9. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/__init__.py +0 -0
  10. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/cli/__init__.py +0 -0
  11. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/cli/cli.py +0 -0
  12. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/cli/datasets.py +0 -0
  13. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/cli/models.py +0 -0
  14. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/cli/predictions.py +0 -0
  15. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/schemas/__init__.py +0 -0
  16. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/schemas/common.py +0 -0
  17. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/schemas/sales.py +0 -0
  18. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/ui/__init__.py +0 -0
  19. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/ui/components.py +0 -0
  20. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/__init__.py +0 -0
  21. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/add_mapping.py +0 -0
  22. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/agent_tools.py +0 -0
  23. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/apollo_tools.py +0 -0
  24. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/assistant_tool_tag.py +0 -0
  25. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/built_with_api_tools.py +0 -0
  26. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/cache_output_tools.py +0 -0
  27. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/cache_output_tools_local.py +0 -0
  28. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/check_email_validity_tools.py +0 -0
  29. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/check_for_intent_signal.py +0 -0
  30. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/check_linkedin_url_validity.py +0 -0
  31. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/clay_tools.py +0 -0
  32. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/clean_properties.py +0 -0
  33. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/company_utils.py +0 -0
  34. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/compose_salesnav_query.py +0 -0
  35. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/compose_search_query.py +0 -0
  36. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/compose_three_step_workflow.py +0 -0
  37. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/composite_tools.py +0 -0
  38. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/dataframe_tools.py +0 -0
  39. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/domain_parser.py +0 -0
  40. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/email_parse_helpers.py +0 -0
  41. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/email_provider.py +0 -0
  42. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/enrich_lead_information.py +0 -0
  43. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/extract_email_content_for_llm.py +0 -0
  44. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/fetch_openai_config.py +0 -0
  45. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/field_validators.py +0 -0
  46. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/g2_tools.py +0 -0
  47. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/generate_content.py +0 -0
  48. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/generate_email.py +0 -0
  49. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/generate_email_response.py +0 -0
  50. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/generate_flow.py +0 -0
  51. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/generate_leads_salesnav.py +0 -0
  52. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/generate_linkedin_connect_message.py +0 -0
  53. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/generate_linkedin_response_message.py +0 -0
  54. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/generate_structured_output_internal.py +0 -0
  55. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/google_custom_search.py +0 -0
  56. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/google_oauth_tools.py +0 -0
  57. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/google_workspace_tools.py +0 -0
  58. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/hubspot_clearbit.py +0 -0
  59. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/hubspot_crm_tools.py +0 -0
  60. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/instantly_tools.py +0 -0
  61. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/linkedin_crawler.py +0 -0
  62. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/lusha_tools.py +0 -0
  63. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/mailgun_tools.py +0 -0
  64. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/microsoft365_tools.py +0 -0
  65. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/openai_assistant_and_file_utils.py +0 -0
  66. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/openai_helpers.py +0 -0
  67. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/openapi_spec_to_tools.py +0 -0
  68. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/openapi_tool/__init__.py +0 -0
  69. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/openapi_tool/api_models.py +0 -0
  70. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/openapi_tool/convert_openai_spec_to_tool.py +0 -0
  71. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/openapi_tool/openapi_tool.py +0 -0
  72. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/parse_linkedin_messages_txt.py +0 -0
  73. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/profile.py +0 -0
  74. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/proxycurl_search_leads.py +0 -0
  75. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/python_function_to_tools.py +0 -0
  76. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/research_lead.py +0 -0
  77. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/sales_navigator_crawler.py +0 -0
  78. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/salesforce_crm_tools.py +0 -0
  79. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/search_router.py +0 -0
  80. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/search_router_jobs.py +0 -0
  81. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/sendgrid_tools.py +0 -0
  82. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/serarch_router_local_business.py +0 -0
  83. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/serpapi_additional_tools.py +0 -0
  84. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/serpapi_google_jobs.py +0 -0
  85. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/serpapi_google_search.py +0 -0
  86. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/serpapi_local_business_search.py +0 -0
  87. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/serpapi_search_tools.py +0 -0
  88. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/serperdev_google_jobs.py +0 -0
  89. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/serperdev_local_business.py +0 -0
  90. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/smtp_email_tools.py +0 -0
  91. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/test_connect.py +0 -0
  92. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/trasform_json.py +0 -0
  93. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/web_download_parse_tools.py +0 -0
  94. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/workflow_code_model.py +0 -0
  95. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/utils/zoominfo_tools.py +0 -0
  96. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/workflow/__init__.py +0 -0
  97. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/workflow/agent.py +0 -0
  98. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/workflow/flow.py +0 -0
  99. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/workflow/task.py +0 -0
  100. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana/workflow/test.py +0 -0
  101. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana.egg-info/SOURCES.txt +0 -0
  102. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana.egg-info/dependency_links.txt +0 -0
  103. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana.egg-info/entry_points.txt +0 -0
  104. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana.egg-info/requires.txt +0 -0
  105. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/src/dhisana.egg-info/top_level.txt +0 -0
  106. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/tests/test_agent_tools.py +0 -0
  107. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/tests/test_apollo_company_search.py +0 -0
  108. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/tests/test_connectivity.py +0 -0
  109. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/tests/test_google_document.py +0 -0
  110. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/tests/test_hubspot_call_logs.py +0 -0
  111. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/tests/test_linkedin_serper.py +0 -0
  112. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/tests/test_mcp_connectivity.py +0 -0
  113. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/tests/test_proxycurl_get_company_search_id.py +0 -0
  114. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/tests/test_proxycurl_job_count.py +0 -0
  115. {dhisana-0.0.1.dev214 → dhisana-0.0.1.dev216}/tests/test_structured_output_with_mcp.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dhisana
3
- Version: 0.0.1.dev214
3
+ Version: 0.0.1.dev216
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
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='dhisana',
5
- version='0.0.1-dev214',
5
+ version='0.0.1-dev216',
6
6
  description='A Python SDK for Dhisana AI Platform',
7
7
  author='Admin',
8
8
  author_email='contact@dhisana.ai',
@@ -87,9 +87,9 @@ async def enrich_person_info_from_proxycurl(
87
87
  'Content-Type': 'application/json'
88
88
  }
89
89
 
90
- if not linkedin_url and not email and not phone:
91
- logger.warning("No linkedin_url, email, or phone provided. At least one is required.")
92
- return {'error': "At least one of linkedin_url, email, or phone must be provided"}
90
+ if not linkedin_url:
91
+ logger.warning("No linkedin_url provided.")
92
+ return {'error': "linkedin_url must be provided"}
93
93
 
94
94
  # Check cache if linkedin_url is provided
95
95
  if linkedin_url:
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  import json
2
3
  import os
3
4
  from typing import Any, Dict, List, Optional
@@ -129,7 +130,8 @@ async def search_google_serper(
129
130
  all_results: List[Dict[str, Any]] = []
130
131
 
131
132
  # We'll collect results from "organic", converting each to a SerpAPI-like format.
132
- async with aiohttp.ClientSession() as session:
133
+ timeout = aiohttp.ClientTimeout(total=30, connect=10)
134
+ async with aiohttp.ClientSession(timeout=timeout) as session:
133
135
  while len(all_results) < number_of_results:
134
136
  payload = {
135
137
  "q": full_query,
@@ -142,20 +144,57 @@ async def search_google_serper(
142
144
  }
143
145
 
144
146
  logger.debug(f"Requesting Serper.dev page {page} for query '{full_query}'.")
145
- try:
146
- async with session.post(url, headers=headers, json=payload) as response:
147
- if response.status != 200:
148
- try:
149
- error_content = await response.json()
150
- except Exception:
151
- error_content = await response.text()
152
- logger.warning(f"Non-200 response from Serper.dev: {error_content}")
153
- return [json.dumps({"error": error_content})]
154
-
155
- result_json = await response.json()
156
- except Exception as e:
157
- logger.exception("Exception during Serper.dev request.")
158
- return [json.dumps({"error": str(e)})]
147
+ for attempt in range(3):
148
+ try:
149
+ async with session.post(url, headers=headers, json=payload) as response:
150
+ if response.status != 200:
151
+ try:
152
+ error_content = await response.json()
153
+ except Exception:
154
+ error_content = await response.text()
155
+ logger.warning(
156
+ "Non-200 response from Serper.dev: %s (status=%s)",
157
+ error_content,
158
+ response.status,
159
+ )
160
+ return [json.dumps({"error": error_content})]
161
+
162
+ result_json = await response.json()
163
+ break
164
+ except asyncio.TimeoutError:
165
+ logger.warning(
166
+ "Timeout contacting Serper.dev (attempt %s/3) for query '%s'",
167
+ attempt + 1,
168
+ full_query,
169
+ )
170
+ except aiohttp.ClientError as exc:
171
+ logger.warning(
172
+ "Client error contacting Serper.dev (attempt %s/3): %s",
173
+ attempt + 1,
174
+ exc,
175
+ )
176
+ if attempt == 2:
177
+ logger.exception("Exception during Serper.dev request.")
178
+ return [json.dumps({"error": str(exc)})]
179
+ except Exception as e:
180
+ logger.exception("Unexpected exception during Serper.dev request.")
181
+ return [json.dumps({"error": str(e)})]
182
+ else:
183
+ # Successful request, exit retry loop
184
+ break
185
+ await asyncio.sleep(2 ** attempt)
186
+ else:
187
+ logger.error(
188
+ "Failed to retrieve data from Serper.dev after multiple attempts for query '%s'",
189
+ full_query,
190
+ )
191
+ return [
192
+ json.dumps(
193
+ {
194
+ "error": "Serper.dev request timed out after multiple attempts.",
195
+ }
196
+ )
197
+ ]
159
198
 
160
199
  organic_results = result_json.get("organic", [])
161
200
  if not organic_results:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dhisana
3
- Version: 0.0.1.dev214
3
+ Version: 0.0.1.dev216
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
File without changes
File without changes