Archived
This project has been archived by its maintainers, and is no longer receiving any updates.
Sonika LangChain Bot 
A Python library that implements a conversational agent using LangChain with tool execution capabilities and text classification.
Installation
pip install sonika-langchain-bot
Prerequisites
You'll need the following API keys:
- OpenAI API Key
Create a .env file in the root of your project with the following variables:
OPENAI_API_KEY=your_api_key_here
Key Features
- Conversational agent with tool execution capabilities
- Text classification with structured output
- Custom tool integration
- Streaming responses
- Conversation history management
- Flexible instruction-based behavior
Basic Usage
Agent with Tools Example
import os
from dotenv import load_dotenv
from langchain_openai import OpenAIEmbeddings
from sonika_langchain_bot.langchain_tools import EmailTool
from sonika_langchain_bot.langchain_bot_agent import LangChainBot
from sonika_langchain_bot.langchain_class import Message, ResponseModel
from sonika_langchain_bot.langchain_models import OpenAILanguageModel
# Load environment variables
load_dotenv()
# Get API key from .env file
api_key = os.getenv("OPENAI_API_KEY")
# Initialize language model and embeddings
language_model = OpenAILanguageModel(api_key, model_name='gpt-4o-mini-2024-07-18', temperature=1)
embeddings = OpenAIEmbeddings(api_key=api_key)
# Configure tools
tools = [EmailTool()]
# Create agent instance
bot = LangChainBot(language_model, embeddings, instructions="You are an agent", tools=tools)
# Load conversation history
bot.load_conversation_history([Message(content="My name is Erley", is_bot=False)])
# Get response
user_message = 'Send an email with the tool to erley@gmail.com with subject Hello and message Hello Erley'
response_model: ResponseModel = bot.get_response(user_message)
print(response_model)
Streaming Response Example
import os
from dotenv import load_dotenv
from langchain_openai import OpenAIEmbeddings
from sonika_langchain_bot.langchain_bot_agent import LangChainBot
from sonika_langchain_bot.langchain_class import Message
from sonika_langchain_bot.langchain_models import OpenAILanguageModel
# Load environment variables
load_dotenv()
# Get API key from .env file
api_key = os.getenv("OPENAI_API_KEY")
# Initialize language model and embeddings
language_model = OpenAILanguageModel(api_key, model_name='gpt-4o-mini-2024-07-18', temperature=1)
embeddings = OpenAIEmbeddings(api_key=api_key)
# Create agent instance
bot = LangChainBot(language_model, embeddings, instructions="Only answers in english", tools=[])
# Load conversation history
bot.load_conversation_history([Message(content="My name is Erley", is_bot=False)])
# Get streaming response
user_message = 'Hello, what is my name?'
for chunk in bot.get_response_stream(user_message):
print(chunk)
Text Classification Example
import os
from dotenv import load_dotenv
from sonika_langchain_bot.langchain_clasificator import TextClassifier
from sonika_langchain_bot.langchain_models import OpenAILanguageModel
from pydantic import BaseModel, Field
# Load environment variables
load_dotenv()
# Define classification structure with Pydantic
class Classification(BaseModel):
intention: str = Field()
sentiment: str = Field(..., enum=["happy", "neutral", "sad", "excited"])
aggressiveness: int = Field(
...,
description="describes how aggressive the statement is, the higher the number the more aggressive",
enum=[1, 2, 3, 4, 5],
)
language: str = Field(
..., enum=["spanish", "english", "french", "german", "italian"]
)
# Initialize classifier
api_key = os.getenv("OPENAI_API_KEY")
model = OpenAILanguageModel(api_key=api_key)
classifier = TextClassifier(llm=model, validation_class=Classification)
# Classify text
result = classifier.classify("how are you?")
print(result)
Available Classes and Components
Core Classes
- LangChainBot: Main conversational agent for task execution with tools
- OpenAILanguageModel: Wrapper for OpenAI language models
- TextClassifier: Text classification using structured output
- Message: Message structure for conversation history
- ResponseModel: Response structure from agent interactions
Tools
- EmailTool: Tool for sending emails through the agent
Project Structure
your_project/
├── .env # Environment variables
├── src/
│ └── sonika_langchain_bot/
│ ├── langchain_bot_agent.py
│ ├── langchain_clasificator.py
│ ├── langchain_class.py
│ ├── langchain_models.py
│ └── langchain_tools.py
└── tests/
└── test_bot.py
Contributing
Contributions are welcome. Please open an issue to discuss major changes you'd like to make.
License
This project is licensed under the MIT License.
Metadata
Release files for sonika-langchain-bot 0.0.61
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sonika_langchain_bot-0.0.61.tar.gz | 80.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sonika_langchain_bot-0.0.61-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 185.8 kB
Release files / sonika_langchain_bot-0.0.61.tar.gz
| Download URL | sonika_langchain_bot-0.0.61.tar.gz |
|---|---|
| Size | 80.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
077f48ba6e493a9464e109e43e2b88ecf893b422f0fecaa828f3474ba95ec20c
|
|
BLAKE2b-256 checksum How to use checksums |
b35da83eacc4c949d32cf17258c9e00e9807b6bdc7323feb177f502cb8d68114
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.2
|
Release files / sonika_langchain_bot-0.0.61-py3-none-any.whl
| Download URL | sonika_langchain_bot-0.0.61-py3-none-any.whl |
|---|---|
| Size | 105.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
89a166df0ff7ddab98f0a80e179d44d35d1ffcc0f337437cb68137df42d0acbe
|
|
BLAKE2b-256 checksum How to use checksums |
ed496f5c6504575a864fbd3f5f08914898c563c828cdf801fb9e256074d2ec27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.2
|