dhisana 0.0.1.dev306__tar.gz → 0.0.1.dev307__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.
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/PKG-INFO +1 -1
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/setup.py +1 -1
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_sms_whatsapp.py +10 -3
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana.egg-info/PKG-INFO +1 -1
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/README.md +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/pyproject.toml +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/setup.cfg +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/__init__.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/cli/__init__.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/cli/cli.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/cli/datasets.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/cli/models.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/cli/predictions.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/schemas/__init__.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/schemas/common.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/schemas/sales.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/ui/__init__.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/ui/components.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/__init__.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/add_mapping.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/agent_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/apollo_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/assistant_tool_tag.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/built_with_api_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/cache_output_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/cache_output_tools_local.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/check_email_validity_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/check_for_intent_signal.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/check_linkedin_url_validity.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/clay_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/clean_properties.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/company_utils.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/compose_salesnav_query.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/compose_search_query.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/compose_three_step_workflow.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/composite_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/dataframe_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/domain_parser.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/email_body_utils.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/email_parse_helpers.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/email_provider.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/enrich_lead_information.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/extract_email_content_for_llm.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/fetch_openai_config.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/field_validators.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/g2_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_content.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_custom_message.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_email.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_email_response.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_flow.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_leads_salesnav.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_linkedin_connect_message.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_linkedin_response_message.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_structured_output_internal.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/google_custom_search.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/google_oauth_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/google_workspace_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/hubspot_clearbit.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/hubspot_crm_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/instantly_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/linkedin_crawler.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/lusha_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/mailgun_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/mailreach_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/microsoft365_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/openai_assistant_and_file_utils.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/openai_helpers.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/openapi_spec_to_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/openapi_tool/__init__.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/openapi_tool/api_models.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/openapi_tool/convert_openai_spec_to_tool.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/openapi_tool/openapi_tool.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/parse_linkedin_messages_txt.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/profile.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/proxy_curl_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/proxycurl_search_leads.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/python_function_to_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/research_lead.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/sales_navigator_crawler.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/salesforce_crm_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/search_router.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/search_router_jobs.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/sendgrid_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serarch_router_local_business.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serpapi_additional_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serpapi_google_jobs.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serpapi_google_search.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serpapi_local_business_search.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serpapi_search_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serperdev_google_jobs.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serperdev_local_business.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serperdev_search.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/smtp_email_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/test_connect.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/trasform_json.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/web_download_parse_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/workflow_code_model.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/zoominfo_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/workflow/__init__.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/workflow/agent.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/workflow/flow.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/workflow/task.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/workflow/test.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana.egg-info/SOURCES.txt +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana.egg-info/dependency_links.txt +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana.egg-info/entry_points.txt +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana.egg-info/requires.txt +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana.egg-info/top_level.txt +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_agent_tools.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_apollo_company_search.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_apollo_lead_search.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_connectivity.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_email_body_utils.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_generate_email.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_generate_sms_whatsapp.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_google_document.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_hubspot_call_logs.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_linkedin_serper.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_mailreach.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_mcp_connectivity.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_normalize_graph_datetime.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_proxycurl_get_company_search_id.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_proxycurl_job_count.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_reply_thread_fallback.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_send_email_recipients.py +0 -0
- {dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/tests/test_structured_output_with_mcp.py +0 -0
|
@@ -101,7 +101,9 @@ async def generate_sms_whatsapp_copy(
|
|
|
101
101
|
usable_chars = char_limit - len(opt_out_suffix)
|
|
102
102
|
channel_label = "WhatsApp" if channel_type == ChannelType.WHATSAPP else "SMS"
|
|
103
103
|
|
|
104
|
-
prompt = f"""You are an AI sales copywriter.
|
|
104
|
+
prompt = f"""You are an AI sales copywriter. Your task is to write exactly one personalized outbound business {channel_label} text message on behalf of the sender to the lead described below.
|
|
105
|
+
|
|
106
|
+
This is a legitimate B2B sales outreach message. The sender has opted in to sending these messages through our platform.
|
|
105
107
|
|
|
106
108
|
## Channel Rules — {channel_label}
|
|
107
109
|
|
|
@@ -111,8 +113,9 @@ async def generate_sms_whatsapp_copy(
|
|
|
111
113
|
4. Be concise and conversational. Lead with value, not a greeting. Avoid filler.
|
|
112
114
|
5. Do NOT include any opt-out / STOP language — the system appends it automatically.
|
|
113
115
|
6. Do NOT include phone numbers, email addresses, or links unless the writing instructions explicitly request a specific provided URL.
|
|
114
|
-
7. Ground every claim in the provided context.
|
|
116
|
+
7. Ground every claim in the provided context. When information is missing, omit it — never guess or fabricate.
|
|
115
117
|
8. Do not use em dashes.
|
|
118
|
+
9. The "body" field must contain ONLY the message text. Never append JSON, metadata, or structured data to the body.
|
|
116
119
|
|
|
117
120
|
## Lead
|
|
118
121
|
|
|
@@ -187,8 +190,12 @@ Return JSON with a single field: "body" (string, plain text, max {usable_chars}
|
|
|
187
190
|
)
|
|
188
191
|
|
|
189
192
|
if status != "SUCCESS":
|
|
193
|
+
# Include the refusal/error detail if the model returned text
|
|
194
|
+
detail = ""
|
|
195
|
+
if isinstance(response, str) and response:
|
|
196
|
+
detail = f" Model response: {response[:200]}"
|
|
190
197
|
raise Exception(
|
|
191
|
-
f"Error: Could not generate {channel_label} message."
|
|
198
|
+
f"Error: Could not generate {channel_label} message.{detail}"
|
|
192
199
|
)
|
|
193
200
|
|
|
194
201
|
body = (response.body or "").strip()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/check_email_validity_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
{dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/check_linkedin_url_validity.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/compose_three_step_workflow.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/extract_email_content_for_llm.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/generate_linkedin_connect_message.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/openai_assistant_and_file_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/openapi_tool/openapi_tool.py
RENAMED
|
File without changes
|
{dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/parse_linkedin_messages_txt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serarch_router_local_business.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dhisana-0.0.1.dev306 → dhisana-0.0.1.dev307}/src/dhisana/utils/serpapi_local_business_search.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|