township-mcp-server / township_chatbot.py
puseletso55's picture
Create township_chatbot.py
2fa4169 verified
import subprocess
import gradio as gr
def chat_with_ollama(user_message, chat_history):
"""
Sends the full chat history + current user message to Ollama model,
captures the response, and appends it to the history.
"""
# Prepare prompt by joining past conversation + current message
prompt = ""
for i, (user, bot) in enumerate(chat_history):
prompt += f"User: {user}\nAssistant: {bot}\n"
prompt += f"User: {user_message}\nAssistant:"
# Call Ollama CLI to get model response
try:
result = subprocess.run(
["ollama", "run", "township_business_growth_coach", prompt],
capture_output=True,
text=True,
timeout=30
)
if result.returncode == 0:
bot_reply = result.stdout.strip()
else:
bot_reply = f"Error from Ollama: {result.stderr.strip()}"
except Exception as e:
bot_reply = f"Exception: {str(e)}"
# Update chat history
chat_history.append((user_message, bot_reply))
# Format output as list of dicts for chat UI
chat_formatted = [{"User": u, "Bot": b} for u, b in chat_history]
return chat_formatted, chat_history
with gr.Blocks(title="Township Business Growth Coach Chatbot") as demo:
gr.Markdown("## πŸ’¬ Township Business Growth Coach Chatbot")
chatbox = gr.Chatbot(label="Chat History")
msg = gr.Textbox(placeholder="Ask your township business growth question here...")
state = gr.State([]) # stores history as list of (user, bot) tuples
submit = gr.Button("Send")
submit.click(chat_with_ollama, inputs=[msg, state], outputs=[chatbox, state])
msg.submit(chat_with_ollama, inputs=[msg, state], outputs=[chatbox, state])
demo.launch(server_name="0.0.0.0", server_port=7860)