senti-beta / senti /backend /api /compute_layer.py
joseph njoroge kariuki
Deploy Senti AI to Hugging Face Spaces
021e065
Raw
History Blame Contribute Delete
4.3 kB
from core.domain_classifier import domain_classifier
from core.legal_intelligence import legal_intelligence
from layers.layer_4_logic.smart_money import smart_money
from layers.layer_4_logic.pos_engine import pos_engine
import re
def analyze(user_query: str, context: dict, domain_info: dict):
domain = domain_info['primary_domain']
jurisdiction = context['country_code']
# 1. Response Strategy
strategy = domain_classifier.get_response_strategy(
domain, jurisdiction, legal_intelligence
)
# 2. Financial Logic
analysis = {
"domain": domain,
"strategy": strategy,
"actions_requested": []
}
# Check for specific actions (POS, payment requests, etc.)
if domain == "PAYMENTS" or domain == "BUSINESS_FINANCE":
sale_record = pos_engine.parse_sale(user_query)
if sale_record:
analysis['actions_requested'].append({
"type": "record_sale",
"data": sale_record
})
# Check for SMS receipt/payment request
phone_match = re.search(
r'(?:tuma|send|receipt to|risiti|omba malipo)\s+(?:kwa\s+)?(\+?0?[17]\d{8})',
user_query,
re.IGNORECASE
)
if phone_match:
phone = phone_match.group(1)
payment_trigger = any(
trigger in user_query.lower()
for trigger in ['charge', 'collect', 'omba malipo', 'request payment']
)
if payment_trigger:
analysis['actions_requested'].append({
"type": "request_payment",
"data": {"phone": phone, "amount": sale_record['revenue']}
})
else:
analysis['actions_requested'].append({
"type": "send_receipt",
"data": {"phone": phone, "sale_record": sale_record}
})
# 3. Calculations
if domain == "TAXATION":
# Simplified: identify if it's PAYE or Turnover
if "paye" in user_query.lower() or "salary" in user_query.lower():
analysis['calculation_type'] = "PAYE"
elif "turnover" in user_query.lower() or "business" in user_query.lower():
analysis['calculation_type'] = "TURNOVER_TAX"
return analysis
def run_calculators(calculators: list, query: str, jurisdiction: str, currency: str):
from core.financial_calculator import calculator
# Extract numbers
numbers = [float(n.replace(',', '')) for n in re.findall(r'\b\d+(?:,\d+)*(?:\.\d+)?\b', query)]
val = numbers[0] if numbers else 0
results = []
for c in calculators:
if c == 'paye':
res = calculator.run(c, monthly_salary=val, currency=currency)
elif c == 'turnover_tax':
res = calculator.run(c, annual_revenue=val * 12, currency=currency)
elif c == 'fuliza_cost':
res = calculator.run(c, amount=val, days=30, currency=currency)
else:
res = {}
if res and res.get("formatted"):
results.append(res.get("formatted"))
return "\n\n".join(results) if results else None
def check_fraud(transactions, user_hash):
return {"aml_flagged": False, "flags": []}
def apply_legal_rules(rules, domain, jurisdiction):
return {"disclaimer": None, "rules_used": [], "refer_professional": False}
def detect_stress(query):
return False
def query_user_data(query, transactions, profile, language, currency):
from core.data_conversation import data_conversation
data_query = data_conversation.classify_query(query)
if data_query.get('is_data_query'):
result = data_conversation.execute_query(
query_classification=data_query,
transactions=transactions,
user_goals=[],
language=language
)
if result and 'error' not in result:
return data_conversation.format_response(
result=result,
original_query=query,
language=language,
currency=currency
)
return None
def assess_risk(profile, query):
return None