@mantey/saia-ai-sdk
v0.1.0
Published
Vercel AI SDK provider for GWDG's SAIA (Scalable Artificial Intelligence Accelerator) API
Maintainers
Readme
@mantey/saia-ai-sdk
Vercel AI SDK provider for GWDG's SAIA (Scalable Artificial Intelligence Accelerator) API. This package provides an OpenAI-compatible interface for the SAIA API, allowing seamless integration with the Vercel AI SDK.
Installation
npm install @mantey/saia-ai-sdkpnpm add @mantey/saia-ai-sdkyarn add @mantey/saia-ai-sdkSetup
1. Get your SAIA API Key
To use SAIA, you need access to the GWDG SAIA service:
- Visit the GWDG SAIA Documentation
- Request access to the SAIA service if you're affiliated with a GWDG member institution
- Obtain your API key
2. Install Dependencies
This package requires the Vercel AI SDK:
npm install ai @mantey/saia-ai-sdkNote:
ai- The Vercel AI SDK (required for using any of vercel's core AI SDK)@ai-sdk/openai-compatible,@ai-sdk/provider, and@ai-sdk/provider-utilsare regular dependencies and will be installed automatically
Usage
Basic Setup
import { createSaia } from '@mantey/saia-ai-sdk';
import { generateText } from 'ai';
const saia = createSaia({
apiKey: process.env.SAIA_API_KEY,
});
const { text } = await generateText({
model: saia('meta-llama-3.1-8b-instruct'),
prompt: 'Explain quantum computing in simple terms',
});
console.log(text);Using the Default Instance
import { saia } from '@mantey/saia-ai-sdk';
import { generateText } from 'ai';
// Uses SAIA_API_KEY environment variable
const { text } = await generateText({
model: saia('meta-llama-3.1-8b-instruct'),
prompt: 'Write a haiku about TypeScript',
});Streaming Responses
import { createSaia } from '@mantey/saia-ai-sdk';
import { streamText } from 'ai';
const saia = createSaia({
apiKey: process.env.SAIA_API_KEY,
});
const { textStream } = await streamText({
model: saia('meta-llama-3.1-8b-instruct'),
prompt: 'Count from 1 to 10',
});
for await (const chunk of textStream) {
process.stdout.write(chunk);
}Chat Completions
import { createSaia } from '@mantey/saia-ai-sdk';
import { generateText } from 'ai';
const saia = createSaia({
apiKey: process.env.SAIA_API_KEY,
});
const { text } = await generateText({
model: saia('meta-llama-3.1-8b-instruct'),
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'What is the capital of France?' },
],
});Vision Models (Image Understanding)
import { createSaia } from '@mantey/saia-ai-sdk';
import { generateText } from 'ai';
import fs from 'fs';
const saia = createSaia({
apiKey: process.env.SAIA_API_KEY,
});
// Read image and convert to base64
const imageBuffer = fs.readFileSync('./path/to/image.jpg');
const base64Image = imageBuffer.toString('base64');
const { text } = await generateText({
model: saia('gemma-3-27b-it'),
messages: [
{
role: 'user',
content: [
{ type: 'text', text: 'What is in this image?' },
{
type: 'image',
image: `data:image/jpeg;base64,${base64Image}`
},
],
},
],
});
console.log(text);Note: SAIA requires images to be uploaded as base64-encoded data or file uploads. Fetching images from URLs is not supported.
Embeddings
import { createSaia } from '@mantey/saia-ai-sdk';
import { embed } from 'ai';
const saia = createSaia({
apiKey: process.env.SAIA_API_KEY,
});
const { embedding } = await embed({
model: saia.textEmbeddingModel('multilingual-e5-large-instruct'),
value: 'Hello, world!',
});
console.log(embedding);Configuration
Provider Options
import { createSaia } from '@mantey/saia-ai-sdk';
const saia = createSaia({
// Your SAIA API key (can also use SAIA_API_KEY environment variable)
apiKey: 'your-api-key',
// Custom base URL (optional)
baseURL: 'https://chat-ai.academiccloud.de/v1',
// Custom headers (optional)
headers: {
'X-Custom-Header': 'value',
},
// Custom fetch implementation (optional)
fetch: customFetch,
});Available Models (From SAIA Documentation)
Chat Models
General purpose text generation models:
meta-llama-3.1-8b-instructllama-3.3-70b-instructopenai-gpt-oss-120bmistral-large-instructteuken-7b-instruct-research
Code Generation:
qwen2.5-coder-32b-instructcodestral-22b
Reasoning Models:
deepseek-r1qwen3-235b-a22bqwq-32bqwen3-32b
RAG-Enabled Models:
meta-llama-3.1-8b-ragllama-3.1-sauerkrautlm-70b-instruct
Vision Models (Multimodal)
Models that can analyze images and videos:
gemma-3-27b-itqwen2.5-vl-72b-instructmedgemma-27b-it- Medical image analysis (Text + Image)internvl2.5-8bqwen2.5-omni-7b
Note: Images must be uploaded as part of requests (base64 or file upload). Fetching images from URLs is not supported.
Embedding Models
Text embedding models for semantic search and similarity:
e5-mistral-7b-instructmultilingual-e5-large-instruct- Multilingual supportqwen3-embedding-4b
Environment Variables
You can set your SAIA API key via environment variable:
export SAIA_API_KEY=your-api-keyOr use a .env file:
SAIA_API_KEY=your-api-keyTypeScript Support
This package is written in TypeScript and provides full type definitions. All model IDs, settings, and options are properly typed.
import type {
SAIAChatModelId,
SAIAEmbeddingModelId,
SAIAProviderOptions
} from '@mantey/saia-ai-sdk';
const modelId: SAIAChatModelId = 'meta-llama-3.1-8b-instruct';API Reference
createSaia(options?)
Creates a new SAIA provider instance.
Parameters:
options(optional): Provider configuration optionsapiKey: Your SAIA API keybaseURL: Custom base URL (default:https://chat-ai.academiccloud.de/v1)headers: Custom headers to include in requestsfetch: Custom fetch implementation
Returns: SAIA provider instance compatible with Vercel AI SDK
saia
Default SAIA provider instance that uses the SAIA_API_KEY environment variable.
Examples
Check out the examples directory for more usage examples.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT
Links
Support
For issues and questions:
- Open an issue on GitHub
- Check the Vercel AI SDK documentation
