JerameeUC
12 Commit PyTest Working But Failing for some. The individual sections need to be completed to fix.
0c4f0e3
# /intergrations/botframework/bot.py
"""
Simple MBF bot:
- 'help' / 'capabilities' shows features
- 'reverse <text>' returns reversed text
- otherwise delegates to AgenticCore ChatBot (sentiment) if available
"""
from typing import List, Optional, Dict, Any
# from botbuilder.core import ActivityHandler, TurnContext
# from botbuilder.schema import ChannelAccount, ActivityTypes
from skills import normalize, reverse_text, capabilities, is_empty
# Try to import AgenticCore; if unavailable, provide a tiny fallback.
try:
from agenticcore.chatbot.services import ChatBot # real provider-backed bot
except Exception:
class ChatBot: # fallback shim for offline/dev
def reply(self, message: str) -> Dict[str, Any]:
return {
"reply": "Noted. (local fallback reply)",
"sentiment": "neutral",
"confidence": 0.5,
}
def _format_sentiment(res: Dict[str, Any]) -> str:
"""Compose a user-facing string from ChatBot reply payload."""
reply = (res.get("reply") or "").strip()
label: Optional[str] = res.get("sentiment")
conf = res.get("confidence")
if label is not None and conf is not None:
return f"{reply} (sentiment: {label}, confidence: {float(conf):.2f})"
return reply or "I'm not sure what to say."
def _help_text() -> str:
"""Single source of truth for the help/capability text."""
feats = "\n".join(f"- {c}" for c in capabilities())
return (
"I can reverse text and provide concise replies with sentiment.\n"
"Commands:\n"
"- help | capabilities\n"
"- reverse <text>\n"
"General text will be handled by the ChatBot service.\n\n"
f"My capabilities:\n{feats}"
)
class SimpleBot(ActivityHandler):
"""Minimal ActivityHandler with local commands + ChatBot fallback."""
def __init__(self, chatbot: Optional[ChatBot] = None):
self._chatbot = chatbot or ChatBot()
async def on_members_added_activity(
self, members_added: List[ChannelAccount], turn_context: TurnContext
):
for member in members_added:
if member.id != turn_context.activity.recipient.id:
await turn_context.send_activity("Hello! Type 'help' to see what I can do.")
async def on_message_activity(self, turn_context: TurnContext):
if turn_context.activity.type != ActivityTypes.message:
return
text = (turn_context.activity.text or "").strip()
if is_empty(text):
await turn_context.send_activity("Please enter a message (try 'help').")
return
cmd = normalize(text)
if cmd in {"help", "capabilities"}:
await turn_context.send_activity(_help_text())
return
if cmd.startswith("reverse "):
original = text.split(" ", 1)[1] if " " in text else ""
await turn_context.send_activity(reverse_text(original))
return
# ChatBot fallback (provider-agnostic sentiment/reply)
try:
result = self._chatbot.reply(text)
await turn_context.send_activity(_format_sentiment(result))
except Exception:
await turn_context.send_activity(f"You said: {text}")