dhisana 0.0.1.dev275__tar.gz → 0.0.1.dev277__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 (121) hide show
  1. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/PKG-INFO +1 -1
  2. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/setup.py +1 -1
  3. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/enrich_lead_information.py +32 -3
  4. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/generate_email.py +6 -0
  5. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana.egg-info/PKG-INFO +1 -1
  6. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/README.md +0 -0
  7. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/pyproject.toml +0 -0
  8. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/setup.cfg +0 -0
  9. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/__init__.py +0 -0
  10. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/cli/__init__.py +0 -0
  11. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/cli/cli.py +0 -0
  12. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/cli/datasets.py +0 -0
  13. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/cli/models.py +0 -0
  14. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/cli/predictions.py +0 -0
  15. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/schemas/__init__.py +0 -0
  16. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/schemas/common.py +0 -0
  17. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/schemas/sales.py +0 -0
  18. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/ui/__init__.py +0 -0
  19. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/ui/components.py +0 -0
  20. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/__init__.py +0 -0
  21. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/add_mapping.py +0 -0
  22. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/agent_tools.py +0 -0
  23. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/apollo_tools.py +0 -0
  24. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/assistant_tool_tag.py +0 -0
  25. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/built_with_api_tools.py +0 -0
  26. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/cache_output_tools.py +0 -0
  27. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/cache_output_tools_local.py +0 -0
  28. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/check_email_validity_tools.py +0 -0
  29. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/check_for_intent_signal.py +0 -0
  30. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/check_linkedin_url_validity.py +0 -0
  31. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/clay_tools.py +0 -0
  32. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/clean_properties.py +0 -0
  33. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/company_utils.py +0 -0
  34. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/compose_salesnav_query.py +0 -0
  35. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/compose_search_query.py +0 -0
  36. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/compose_three_step_workflow.py +0 -0
  37. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/composite_tools.py +0 -0
  38. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/dataframe_tools.py +0 -0
  39. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/domain_parser.py +0 -0
  40. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/email_body_utils.py +0 -0
  41. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/email_parse_helpers.py +0 -0
  42. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/email_provider.py +0 -0
  43. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/extract_email_content_for_llm.py +0 -0
  44. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/fetch_openai_config.py +0 -0
  45. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/field_validators.py +0 -0
  46. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/g2_tools.py +0 -0
  47. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/generate_content.py +0 -0
  48. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/generate_custom_message.py +0 -0
  49. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/generate_email_response.py +0 -0
  50. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/generate_flow.py +0 -0
  51. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/generate_leads_salesnav.py +0 -0
  52. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/generate_linkedin_connect_message.py +0 -0
  53. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/generate_linkedin_response_message.py +0 -0
  54. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/generate_structured_output_internal.py +0 -0
  55. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/google_custom_search.py +0 -0
  56. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/google_oauth_tools.py +0 -0
  57. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/google_workspace_tools.py +0 -0
  58. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/hubspot_clearbit.py +0 -0
  59. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/hubspot_crm_tools.py +0 -0
  60. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/instantly_tools.py +0 -0
  61. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/linkedin_crawler.py +0 -0
  62. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/lusha_tools.py +0 -0
  63. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/mailgun_tools.py +0 -0
  64. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/mailreach_tools.py +0 -0
  65. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/microsoft365_tools.py +0 -0
  66. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/openai_assistant_and_file_utils.py +0 -0
  67. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/openai_helpers.py +0 -0
  68. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/openapi_spec_to_tools.py +0 -0
  69. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/openapi_tool/__init__.py +0 -0
  70. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/openapi_tool/api_models.py +0 -0
  71. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/openapi_tool/convert_openai_spec_to_tool.py +0 -0
  72. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/openapi_tool/openapi_tool.py +0 -0
  73. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/parse_linkedin_messages_txt.py +0 -0
  74. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/profile.py +0 -0
  75. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/proxy_curl_tools.py +0 -0
  76. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/proxycurl_search_leads.py +0 -0
  77. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/python_function_to_tools.py +0 -0
  78. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/research_lead.py +0 -0
  79. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/sales_navigator_crawler.py +0 -0
  80. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/salesforce_crm_tools.py +0 -0
  81. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/search_router.py +0 -0
  82. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/search_router_jobs.py +0 -0
  83. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/sendgrid_tools.py +0 -0
  84. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/serarch_router_local_business.py +0 -0
  85. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/serpapi_additional_tools.py +0 -0
  86. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/serpapi_google_jobs.py +0 -0
  87. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/serpapi_google_search.py +0 -0
  88. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/serpapi_local_business_search.py +0 -0
  89. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/serpapi_search_tools.py +0 -0
  90. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/serperdev_google_jobs.py +0 -0
  91. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/serperdev_local_business.py +0 -0
  92. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/serperdev_search.py +0 -0
  93. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/smtp_email_tools.py +0 -0
  94. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/test_connect.py +0 -0
  95. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/trasform_json.py +0 -0
  96. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/web_download_parse_tools.py +0 -0
  97. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/workflow_code_model.py +0 -0
  98. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/utils/zoominfo_tools.py +0 -0
  99. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/workflow/__init__.py +0 -0
  100. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/workflow/agent.py +0 -0
  101. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/workflow/flow.py +0 -0
  102. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/workflow/task.py +0 -0
  103. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana/workflow/test.py +0 -0
  104. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana.egg-info/SOURCES.txt +0 -0
  105. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana.egg-info/dependency_links.txt +0 -0
  106. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana.egg-info/entry_points.txt +0 -0
  107. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana.egg-info/requires.txt +0 -0
  108. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/src/dhisana.egg-info/top_level.txt +0 -0
  109. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_agent_tools.py +0 -0
  110. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_apollo_company_search.py +0 -0
  111. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_apollo_lead_search.py +0 -0
  112. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_connectivity.py +0 -0
  113. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_email_body_utils.py +0 -0
  114. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_google_document.py +0 -0
  115. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_hubspot_call_logs.py +0 -0
  116. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_linkedin_serper.py +0 -0
  117. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_mailreach.py +0 -0
  118. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_mcp_connectivity.py +0 -0
  119. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_proxycurl_get_company_search_id.py +0 -0
  120. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/tests/test_proxycurl_job_count.py +0 -0
  121. {dhisana-0.0.1.dev275 → dhisana-0.0.1.dev277}/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.dev275
3
+ Version: 0.0.1.dev277
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-dev275',
5
+ version='0.0.1-dev277',
6
6
  description='A Python SDK for Dhisana AI Platform',
7
7
  author='Admin',
8
8
  author_email='contact@dhisana.ai',
@@ -22,7 +22,7 @@ from dhisana.utils.field_validators import (
22
22
  validation_organization_domain,
23
23
  validate_website_url
24
24
  )
25
- from dhisana.utils.apollo_tools import enrich_user_info_with_apollo
25
+ from dhisana.utils.apollo_tools import enrich_user_info_with_apollo, enrich_person_info_from_apollo
26
26
  from dhisana.utils.assistant_tool_tag import assistant_tool
27
27
  from dhisana.utils.domain_parser import get_domain_from_website, is_excluded_domain
28
28
  from dhisana.utils.generate_structured_output_internal import get_structured_output_internal
@@ -520,6 +520,36 @@ async def enrich_user_info(
520
520
 
521
521
  # 1) If we do not have a user_linkedin_url, try getting it from GitHub
522
522
  if not user_linkedin_url:
523
+ email = (input_properties.get("email") or "").strip()
524
+
525
+ # 1a) If email is present, first try Apollo lookup by email for more robust matching
526
+ if email:
527
+ logger.debug("Attempting Apollo lookup by email: %s", email)
528
+ apollo_result = await enrich_person_info_from_apollo(
529
+ email=email,
530
+ tool_config=tool_config,
531
+ )
532
+ if apollo_result and not apollo_result.get("error"):
533
+ person_data = apollo_result.get("person", {})
534
+ if person_data:
535
+ apollo_linkedin_url = person_data.get("linkedin_url", "")
536
+ if apollo_linkedin_url:
537
+ user_linkedin_url = apollo_linkedin_url
538
+ input_properties["user_linkedin_url"] = user_linkedin_url
539
+ input_properties["linkedin_url_match"] = True
540
+ logger.debug("Found LinkedIn URL via Apollo email lookup: %s", user_linkedin_url)
541
+ # Also populate other fields from Apollo if not already present
542
+ if not input_properties.get("first_name"):
543
+ input_properties["first_name"] = person_data.get("first_name", "")
544
+ if not input_properties.get("last_name"):
545
+ input_properties["last_name"] = person_data.get("last_name", "")
546
+ if not input_properties.get("job_title"):
547
+ input_properties["job_title"] = person_data.get("title", "")
548
+ if not input_properties.get("lead_location"):
549
+ input_properties["lead_location"] = person_data.get("city", "")
550
+ return input_properties
551
+
552
+ # 1b) If still no LinkedIn URL, try getting it from GitHub
523
553
  if github_profile_id:
524
554
  response = await get_user_linkedin_url_from_github_profile(
525
555
  github_profile_id=github_profile_id,
@@ -551,7 +581,6 @@ async def enrich_user_info(
551
581
  location = input_properties.get("lead_location", "") or ""
552
582
  org_name = (input_properties.get("organization_name", "") or "").strip()
553
583
  org_domain = (input_properties.get("primary_domain_of_organization", "") or "").strip()
554
- email = (input_properties.get("email") or "").strip()
555
584
 
556
585
  if full_name and (org_name or org_domain or title):
557
586
  # This function does a google-based search for the user's LinkedIn
@@ -568,7 +597,7 @@ async def enrich_user_info(
568
597
  user_linkedin_url = found_linkedin_url
569
598
  input_properties["user_linkedin_url"] = user_linkedin_url
570
599
  if not user_linkedin_url and email:
571
- # If we have an email but no name, try searching by email
600
+ # If we have an email but no LinkedIn URL yet, try searching by email via Google
572
601
  email_lookup_result = await find_user_linkedin_url_by_email_google(
573
602
  email=email,
574
603
  user_name=full_name,
@@ -231,6 +231,10 @@ async def generate_email_from_instructions(
231
231
  - If there is a link provided, use it as is without wrapping in any HTML tags.
232
232
  """
233
233
 
234
+ html_template_note = ""
235
+ if allow_html and getattr(message_instructions, "html_template", None):
236
+ html_template_note = f"\nHTML Template to follow: {message_instructions.html_template}"
237
+
234
238
  email_prompt = f"""
235
239
  Generate a personalized business email based on these specifications:
236
240
 
@@ -258,6 +262,8 @@ CALL TO ACTION:
258
262
  FORMATTING REQUIREMENTS:
259
263
  {instructions.formatting_requirements}
260
264
 
265
+ {html_template_note}
266
+
261
267
  {output_requirements}
262
268
 
263
269
  ADDITIONAL REQUIREMENTS:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dhisana
3
- Version: 0.0.1.dev275
3
+ Version: 0.0.1.dev277
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