sakeef commited on
Commit
f9430a6
·
verified ·
1 Parent(s): 4286de4

Upload demo_app.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. demo_app.py +125 -0
demo_app.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Web Demo — Bengali Public Service Dialog System
3
+ =================================================
4
+ Simple Gradio-based chat interface for demonstrating the dialog system.
5
+ Can be run on Colab or locally.
6
+
7
+ Usage (Colab):
8
+ !pip install -q gradio
9
+ !python demo_app.py \
10
+ --nlu_model_dir /content/models/joint_intent_ner \
11
+ --gen_model_dir /content/models/response_gen/best_model \
12
+ --labels_dir /content/data/processed/labels
13
+
14
+ Usage (local):
15
+ python demo_app.py --nlu_model_dir ... --gen_model_dir ... --labels_dir ...
16
+ """
17
+
18
+ import argparse
19
+ import json
20
+ import os
21
+ import sys
22
+ import uuid
23
+
24
+ import torch
25
+
26
+ # Ensure project modules are importable
27
+ script_dir = os.path.dirname(os.path.abspath(__file__))
28
+ project_dir = os.path.dirname(script_dir)
29
+ sys.path.insert(0, project_dir)
30
+ sys.path.insert(0, os.path.join(project_dir, "model"))
31
+ sys.path.insert(0, script_dir)
32
+
33
+ from pipeline import DialogPipeline
34
+
35
+
36
+ def create_demo(pipeline: DialogPipeline):
37
+ """Build the Gradio chat interface."""
38
+ import gradio as gr
39
+
40
+ # Track conversations per session
41
+ conversations = {}
42
+
43
+ def chat(message, history, domain):
44
+ # Get or create conversation ID
45
+ conv_id = "demo_" + str(id(history)) if history else "demo_" + uuid.uuid4().hex[:8]
46
+
47
+ if not history:
48
+ pipeline.start_conversation(conv_id, domain)
49
+
50
+ result = pipeline.respond(conv_id, message, domain_hint=domain)
51
+
52
+ # Build info string
53
+ info = (
54
+ f"Intent: {result['intent']} ({result['confidence']:.2f}) | "
55
+ f"Domain: {result['domain']} | "
56
+ f"State: {result['state']}"
57
+ )
58
+ if result["entities"]:
59
+ info += f" | Entities: {result['entities']}"
60
+ if result["should_escalate"]:
61
+ info += " | ⚠️ ESCALATION SUGGESTED"
62
+
63
+ response = result["response"]
64
+ if result["filled_slots"]:
65
+ response += f"\n\n---\n🔍 {info}"
66
+ else:
67
+ response += f"\n\n---\n🔍 {info}"
68
+
69
+ return response
70
+
71
+ demo = gr.ChatInterface(
72
+ fn=chat,
73
+ additional_inputs=[
74
+ gr.Dropdown(
75
+ choices=["general", "passport", "nid", "utilities", "welfare"],
76
+ value="general",
77
+ label="Service Domain / সেবার ধরন",
78
+ ),
79
+ ],
80
+ title="🇧🇩 Bengali Public Service Dialog System",
81
+ description=(
82
+ "বাংলাদেশ সরকারি সেবা সহায়তা ব্যবস্থা\n\n"
83
+ "Ask questions about passport, NID, utilities, welfare services "
84
+ "in Bengali (Standard, Sylheti, or Chittagonian dialect)."
85
+ ),
86
+ examples=[
87
+ ["আমি পাসপোর্ট করতে চাই।", "passport"],
88
+ ["বিদ্যুৎ বিল কীভাবে দেব?", "utilities"],
89
+ ["বয়স্ক ভাতার জন্য আবেদন করতে চাই।", "welfare"],
90
+ ["হামি এনআইডি কার্ড বানাইতে চাই।", "nid"],
91
+ ["আঁই পাসপোর্ট বানাইত্তে সাই।", "passport"],
92
+ ],
93
+ theme=gr.themes.Soft(),
94
+ )
95
+
96
+ return demo
97
+
98
+
99
+ def main():
100
+ parser = argparse.ArgumentParser()
101
+ parser.add_argument("--nlu_model_dir", type=str, required=True)
102
+ parser.add_argument("--gen_model_dir", type=str, required=True)
103
+ parser.add_argument("--labels_dir", type=str, required=True)
104
+ parser.add_argument("--bert_model", type=str,
105
+ default="sagorsarker/bangla-bert-base")
106
+ parser.add_argument("--port", type=int, default=7860)
107
+ parser.add_argument("--share", action="store_true",
108
+ help="Create public Gradio link")
109
+ args = parser.parse_args()
110
+
111
+ # Load pipeline
112
+ pipeline = DialogPipeline(
113
+ nlu_model_path=args.nlu_model_dir,
114
+ gen_model_path=args.gen_model_dir,
115
+ labels_dir=args.labels_dir,
116
+ bert_model=args.bert_model,
117
+ )
118
+
119
+ # Create and launch demo
120
+ demo = create_demo(pipeline)
121
+ demo.launch(server_port=args.port, share=args.share)
122
+
123
+
124
+ if __name__ == "__main__":
125
+ main()