Skip to content

Commit 2c0708c

Browse files
committed
Updated
Updated
1 parent 781cf91 commit 2c0708c

File tree

12 files changed

+1522
-12
lines changed

12 files changed

+1522
-12
lines changed

frontend/app.py

Lines changed: 193 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,196 @@ def show_about_page():
628628
""")
629629

630630

631+
def show_ai_chat_page():
632+
"""Display AI Chat Assistant page"""
633+
st.markdown('<h1 class="main-header">🤖 AI Chat Assistant</h1>', unsafe_allow_html=True)
634+
st.markdown("**Conversational AI for Invoice Processing & Analytics**")
635+
636+
# Check agent status
637+
AGENT_URL = "http://localhost:8001" # Our test agent
638+
639+
col1, col2 = st.columns([4, 1])
640+
641+
with col2:
642+
try:
643+
response = requests.get(f"{AGENT_URL}/agent/status", timeout=5)
644+
if response.status_code == 200:
645+
status_data = response.json()
646+
st.success("✅ AI Agent Ready")
647+
648+
with st.expander("🛠️ Agent Info"):
649+
st.write(f"**Status:** {status_data.get('status', 'unknown').title()}")
650+
st.write(f"**Uptime:** {status_data.get('uptime', 'unknown')}")
651+
st.write(f"**Conversations:** {status_data.get('conversation_length', 0)}")
652+
653+
tools = status_data.get('available_tools', [])
654+
st.write("**Available Tools:**")
655+
for tool in tools:
656+
st.write(f"• {tool.replace('_', ' ').title()}")
657+
else:
658+
st.error("❌ Agent Offline")
659+
st.info("Start the AI agent: `python tests/test_agent.py` in port 8001")
660+
return
661+
except:
662+
st.error("❌ Cannot connect to AI Agent")
663+
st.info("💡 Make sure test_agent.py is running on port 8001")
664+
return
665+
666+
# Initialize chat history
667+
if "chat_messages" not in st.session_state:
668+
st.session_state.chat_messages = []
669+
670+
# Chat container
671+
with col1:
672+
st.markdown("### 💬 Chat with AI Assistant")
673+
674+
# Display chat messages
675+
for message in st.session_state.chat_messages:
676+
with st.chat_message(message["role"]):
677+
st.write(message["content"])
678+
679+
# Chat input
680+
if prompt := st.chat_input("Ask me about invoice processing, search, or analytics..."):
681+
# Add user message
682+
st.session_state.chat_messages.append({"role": "user", "content": prompt})
683+
684+
# Display user message
685+
with st.chat_message("user"):
686+
st.write(prompt)
687+
688+
# Get agent response
689+
with st.spinner("🤖 Processing your request..."):
690+
try:
691+
response = requests.post(
692+
f"{AGENT_URL}/agent/chat",
693+
json={"message": prompt},
694+
timeout=30
695+
)
696+
if response.status_code == 200:
697+
agent_response = response.json()["response"]
698+
st.session_state.chat_messages.append({
699+
"role": "assistant",
700+
"content": agent_response
701+
})
702+
703+
# Display agent response
704+
with st.chat_message("assistant"):
705+
st.write(agent_response)
706+
else:
707+
st.error("Failed to get response from AI assistant")
708+
except Exception as e:
709+
st.error(f"Error: {str(e)}")
710+
711+
st.rerun()
712+
713+
# Quick action buttons
714+
st.markdown("---")
715+
st.subheader("⚡ Quick Actions")
716+
717+
col1, col2, col3, col4 = st.columns(4)
718+
719+
def send_quick_message(message):
720+
"""Helper function to send quick messages"""
721+
st.session_state.chat_messages.append({"role": "user", "content": message})
722+
try:
723+
response = requests.post(
724+
f"{AGENT_URL}/agent/chat",
725+
json={"message": message},
726+
timeout=30
727+
)
728+
if response.status_code == 200:
729+
agent_response = response.json()["response"]
730+
st.session_state.chat_messages.append({
731+
"role": "assistant",
732+
"content": agent_response
733+
})
734+
except:
735+
pass
736+
st.rerun()
737+
738+
with col1:
739+
if st.button("💡 What can you help with?"):
740+
send_quick_message("What can you help me with?")
741+
742+
with col2:
743+
if st.button("📄 How to process invoices?"):
744+
send_quick_message("How do I process an invoice?")
745+
746+
with col3:
747+
if st.button("🔍 Search examples"):
748+
send_quick_message("Show me search examples")
749+
750+
with col4:
751+
if st.button("📊 Analytics insights"):
752+
send_quick_message("What analytics can you provide?")
753+
754+
# Chat controls
755+
st.markdown("---")
756+
col1, col2, col3 = st.columns([1, 1, 2])
757+
758+
with col1:
759+
if st.button("🗑️ Clear Chat"):
760+
st.session_state.chat_messages = []
761+
st.rerun()
762+
763+
with col2:
764+
if st.button("💾 Export Chat"):
765+
if st.session_state.chat_messages:
766+
chat_export = {
767+
"timestamp": datetime.now().isoformat(),
768+
"messages": st.session_state.chat_messages
769+
}
770+
json_data = json.dumps(chat_export, indent=2)
771+
st.download_button(
772+
label="📥 Download Chat History",
773+
data=json_data,
774+
file_name=f"chat_history_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json",
775+
mime="application/json"
776+
)
777+
778+
with col3:
779+
if st.session_state.chat_messages:
780+
st.info(f"💬 {len(st.session_state.chat_messages)} messages in this conversation")
781+
782+
# Example questions
783+
with st.expander("💡 Example Questions to Try"):
784+
col1, col2 = st.columns(2)
785+
786+
with col1:
787+
st.markdown("""
788+
**Processing & Upload:**
789+
- "How do I process an invoice?"
790+
- "What file formats do you support?"
791+
- "How accurate is the extraction?"
792+
793+
**Search & Query:**
794+
- "Find invoices from Microsoft"
795+
- "Show invoices over $5000"
796+
- "List recent vendor invoices"
797+
""")
798+
799+
with col2:
800+
st.markdown("""
801+
**Analytics & Insights:**
802+
- "What spending insights can you provide?"
803+
- "Analyze my vendor relationships"
804+
- "Flag any unusual patterns"
805+
806+
**Help & Examples:**
807+
- "What can you help me with?"
808+
- "Show me demo examples"
809+
- "How does this system work?"
810+
""")
811+
812+
# Footer
813+
st.markdown("---")
814+
st.markdown("""
815+
<div style="text-align: center; color: #666;">
816+
<p>🤖 <strong>AI Chat Assistant</strong> - Powered by Advanced Language Models</p>
817+
<p>Ask questions in natural language | Get instant insights</p>
818+
</div>
819+
""", unsafe_allow_html=True)
820+
631821
# Navigation
632822
def main_navigation():
633823
"""Handle navigation between different pages"""
@@ -637,12 +827,14 @@ def main_navigation():
637827

638828
page = st.sidebar.selectbox(
639829
"Choose a page",
640-
["🏠 Home", "⚙️ Settings", "ℹ️ About"],
830+
["🏠 Home", "🤖 AI Chat Assistant", "⚙️ Settings", "ℹ️ About"],
641831
index=0
642832
)
643833

644834
if page == "🏠 Home":
645835
main()
836+
elif page == "🤖 AI Chat Assistant":
837+
show_ai_chat_page()
646838
elif page == "⚙️ Settings":
647839
show_settings_page()
648840
elif page == "ℹ️ About":

requirements.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,12 @@ httpx==0.25.2
3030

3131
# Frontend
3232
streamlit==1.28.2
33-
pillow==10.1.0
33+
pillow==10.1.0
34+
35+
# Add these to your existing requirements.txt
36+
langchain==0.1.0
37+
langchain-google-vertexai==0.1.0
38+
langchain-community==0.0.10
39+
chromadb==0.4.22
40+
sqlalchemy==2.0.25
41+
sentence-transformers==2.2.2

src/agents/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)