Today, I'm introducing an OpenAI Assistants API Wrapper that I've developed to streamline the integration of OpenAI's Assistants API into your projects. This wrapper provides a straightforward interface to interact with the full range of OpenAI's Assistant capabilities, built on the pure OpenAI Assistants API without any third-party dependencies.
Key Features
- Complete API Coverage: Includes all options from the Assistants API, providing full functionality.
- Simple Streaming: Implements streaming capabilities without relying on external libraries.
- Robust Error Handling: Designed to manage and report errors effectively.
- Easy Setup: Minimal configuration required to get started.
Getting Started
Setting up the wrapper is straightforward:
git clone https://github.com/RaheesAhmed/openai-assistants-api-v2.git
cd openai-assistants-api-v2
npm install
Configure your environment by setting up a .env
file:
OPENAI_API_KEY=your_openai_api_key
Core Functionalities
Creating an Assistant
const createAssistant = async () => {
const response = await fetch('http://localhost:3000/create-assistant', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: "Data Analyst",
instructions: "You are a data analysis assistant.",
model: "gpt-4-1106-preview"
})
});
const data = await response.json();
console.log('Assistant created:', data);
};
Managing Threads and Messages
const createThreadAndMessage = async () => {
// Create a thread
const threadResponse = await fetch('http://localhost:3000/create-thread', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
messages: [{ role: "user", content: "I need help analyzing this dataset." }]
})
});
const thread = await threadResponse.json();
// Add a message to the thread
const messageResponse = await fetch(`http://localhost:3000/create-message/${thread.id}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
role: "user",
content: "Can you identify any trends in this data?"
})
});
const message = await messageResponse.json();
console.log('Thread and message created:', { thread, message });
};
Running an Assistant
const runAssistant = async (threadId, assistantId) => {
const response = await fetch(`http://localhost:3000/create-run/${threadId}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ assistant_id: assistantId })
});
const run = await response.json();
console.log('Run created:', run);
};
Implementing Streaming
One of the key features of this wrapper is its built-in streaming capability:
const streamRun = async (threadId, runId) => {
const response = await fetch(`http://localhost:3000/stream-run/${threadId}/${runId}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ stream: true })
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { value, done } = await reader.read();
if (done) break;
console.log('Streamed data:', decoder.decode(value));
}
};
Error Handling
The wrapper includes a global error handling middleware that catches and processes errors, returning them in a consistent format:
{
"error": {
"message": "Specific error message"
}
}
This approach simplifies debugging and improves the overall reliability of your application.
Additional Features
- File Operations: Upload, list, retrieve, and delete files associated with assistants.
- Vector Stores: Manage vector stores for efficient information retrieval.
- Configuration Management: Easily update rate limits, file size restrictions, and API keys.
Practical Applications
This wrapper is suitable for various applications, including:
- Chatbots for customer service
- Data analysis assistants
- Educational tools and tutoring systems
- Content generation platforms
Conclusion
This OpenAI Assistants API Wrapper offers a practical solution for developers looking to integrate OpenAI's capabilities into their projects. Its straightforward design, comprehensive coverage of the Assistants API, and built-in streaming support make it a valuable tool for AI-powered application development.
For more information, usage examples, or to contribute to the project, visit the GitHub repository.
Your feedback and contributions are welcome as we continue to improve and expand this tool.
Top comments (0)