DEV Community

Akan
Akan

Posted on

Creating a chatbot with contextual retrieval using Cohere command-r and Streamlit

Streamlit page

Project Overview

Chatish is an innovative Streamlit web application that demonstrates the power of contextual retrieval using large language models, specifically Cohere's Command R model. This project showcases how modern AI can transform document interaction through intelligent, context-aware conversations.

Architectural Components

The application is structured around four primary Python modules:

  1. app.py: Main application entry point
  2. chat_manager.py: Manages chat interactions
  3. cohere_client.py: Handles AI interactions
  4. file_handler.py: Processes uploaded documents

Application Architecture Diagram

graph TD
    A[User Interface - Streamlit] --> B[File Upload]
    A --> C[Chat Input]
    B --> D[File Handler]
    C --> E[Chat Manager]
    D --> F[Cohere Client]
    E --> F
    F --> G[AI Response Generation]
    G --> A
Enter fullscreen mode Exit fullscreen mode

Key Implementation Details

File Handling Strategy

The FileHandler class demonstrates a flexible approach to document processing:

def process_file(self, uploaded_file):
    if uploaded_file.type == "application/pdf":
        return self.extract_text_from_pdf(uploaded_file)
    else:
        # Extensible for future file type support
        return uploaded_file.read().decode()
Enter fullscreen mode Exit fullscreen mode

Intelligent Prompt Engineering

The CohereClient builds context-aware prompts:

def build_prompt(self, user_input, context=None):
    context_str = f"{context}\n\n" if context else ""
    return (
        f"{context_str}"
        f"Question: {user_input}\n"
        f"Provide straight to the point response except when told "
        f"to elaborate using available metrics and historical data"
    )
Enter fullscreen mode Exit fullscreen mode

Conversation Management

The chat management includes intelligent history tracking:

def chat(self, user_input, context=None):
    # Maintain conversation history
    self.conversation_history.append({"role": "user", "content": user_input})

    # Limit history to prevent context overflow
    if len(self.conversation_history) > 10:
        self.conversation_history = self.conversation_history[-10:]
Enter fullscreen mode Exit fullscreen mode

Technical Challenges Addressed

  1. Context Retrieval: Dynamically incorporating uploaded document context
  2. Conversation Persistence: Maintaining conversational state
  3. Streaming Response: Implementing real-time AI response generation

Technology Stack

  • Web Framework: Streamlit
  • AI Integration: Cohere Command R
  • Document Processing: PyPDF2
  • Language: Python 3.9+

Performance Considerations

  • Token Limits: Configurable with max_tokens parameter
  • Temperature Control: Adjustable response creativity via temperature
  • Model Flexibility: Easy model swapping in configuration

Future Roadmap

  1. Enhanced error handling
  2. Support for additional file types
  3. Advanced context chunking
  4. Sentiment analysis integration

Deployment Considerations

Requirements

cohere==5.13.11
streamlit==1.41.1
PyPDF2==3.0.1
Enter fullscreen mode Exit fullscreen mode

Quick Start

# Create virtual environment
python3 -m venv chatish_env

# Activate environment
source chatish_env/bin/activate

# Install dependencies
pip install -r requirements.txt

# Run application
streamlit run app.py
Enter fullscreen mode Exit fullscreen mode

Security and Ethical Considerations

  • API key protection
  • Explicit user warnings about AI hallucinations
  • Transparent context management

Conclusion

Chatish represents a pragmatic implementation of contextual AI interaction, bridging advanced language models with user-friendly document analysis.

Key Takeaways

  • Modular, extensible architecture
  • Intelligent context incorporation
  • Streamlined user experience

Explore, Experiment, Extend!

GitHub Repository

Top comments (0)