Spaces:
Sleeping
Sleeping
File size: 2,654 Bytes
fbdfc24 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
from typing import Dict, Any
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage, SystemMessage
def dict_to_message_obj(d: Dict[str, Any]) -> BaseMessage:
"""Convert dictionary to LangChain message object"""
role = d.get("role", "").lower()
content = d.get("content", "")
meta = d.get("meta", {}) or {}
if role in ("user", "human", "humanmessage"):
return HumanMessage(content=content, metadata=meta)
if role in ("assistant", "ai", "aimessage"):
return AIMessage(content=content, metadata=meta)
return SystemMessage(content=content, metadata=meta)
def message_obj_to_dict(msg: Any) -> Dict[str, Any]:
"""Convert LangChain message object to dictionary"""
content = getattr(msg, "content", str(msg))
meta = getattr(msg, "metadata", {}) or {}
if isinstance(msg, HumanMessage):
role = "user"
elif isinstance(msg, AIMessage):
role = "assistant"
elif isinstance(msg, SystemMessage):
role = "system"
else:
role = meta.get("role", "assistant")
return {"role": role, "content": content, "meta": meta}
def validate_country_code(country: str) -> str:
"""Validate and normalize country code"""
country = country.lower().strip()
if country in ["benin", "bj", "bénin"]:
return "benin"
elif country in ["madagascar", "mg", "madagasikara"]:
return "madagascar"
else:
return "unclear"
def format_legal_citation(article_number: str, law_title: str, country: str) -> str:
"""Format legal citation in standard format"""
country_formats = {
"benin": f"Article {article_number} du {law_title} (Bénin)",
"madagascar": f"Article {article_number} du {law_title} (Madagascar)"
}
return country_formats.get(country, f"Article {article_number} du {law_title}")
def safe_get(dictionary: Dict, key: str, default: Any = None) -> Any:
"""Safely get value from dictionary with default"""
if isinstance(dictionary, dict):
return dictionary.get(key, default)
return default
def truncate_text(text: str, max_length: int = 500) -> str:
"""Truncate text to specified length"""
if len(text) <= max_length:
return text
return text[:max_length] + "..."
def calculate_confidence_score(patterns_found: int, llm_confidence: str) -> float:
"""Calculate a numerical confidence score"""
pattern_score = min(patterns_found * 0.3, 0.6) # Max 0.6 from patterns
llm_scores = {"high": 0.8, "medium": 0.5, "low": 0.2}
llm_score = llm_scores.get(llm_confidence, 0.2)
return min(pattern_score + llm_score, 1.0) |