feat(ai): Rename package to @mariozechner/pi-ai and improve documentation

- Changed package name from @mariozechner/ai to @mariozechner/pi-ai
- Fixed generate-models.ts to fetch from models.dev API instead of local file
- Completely rewrote README with practical examples:
  - Image input with base64 encoding
  - Proper tool calling with context management
  - Streaming with completion indicators
  - Abort signal usage
  - Provider-specific options (reasoning/thinking)
  - Custom model definitions for local/self-hosted LLMs
  - Environment variables explanation
- Bumped version to 0.5.9 and published
This commit is contained in:
Mario Zechner 2025-08-30 21:41:22 +02:00
parent 796e48b80e
commit d46a98ec10
13 changed files with 388 additions and 210 deletions

View file

@ -1,4 +1,4 @@
// @mariozechner/ai - Unified API for OpenAI, Anthropic, and Google Gemini
// @mariozechner/pi-ai - Unified LLM API with automatic model discovery
// This package provides a common interface for working with multiple LLM providers
export const version = "0.5.8";

View file

@ -6,54 +6,6 @@ import type { Model } from "./types.js";
export const PROVIDERS = {
groq: {
models: {
"deepseek-r1-distill-llama-70b": {
id: "deepseek-r1-distill-llama-70b",
name: "DeepSeek R1 Distill Llama 70B",
provider: "groq",
baseUrl: "https://api.groq.com/openai/v1",
reasoning: true,
input: ["text"],
cost: {
input: 0.75,
output: 0.99,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 8192,
} satisfies Model,
"llama3-70b-8192": {
id: "llama3-70b-8192",
name: "Llama 3 70B",
provider: "groq",
baseUrl: "https://api.groq.com/openai/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.59,
output: 0.79,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 8192,
maxTokens: 8192,
} satisfies Model,
"llama-3.3-70b-versatile": {
id: "llama-3.3-70b-versatile",
name: "Llama 3.3 70B Versatile",
provider: "groq",
baseUrl: "https://api.groq.com/openai/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.59,
output: 0.79,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 32768,
} satisfies Model,
"llama-3.1-8b-instant": {
id: "llama-3.1-8b-instant",
name: "Llama 3.1 8B Instant",
@ -86,37 +38,37 @@ export const PROVIDERS = {
contextWindow: 131072,
maxTokens: 16384,
} satisfies Model,
"gemma2-9b-it": {
id: "gemma2-9b-it",
name: "Gemma 2 9B",
"llama3-70b-8192": {
id: "llama3-70b-8192",
name: "Llama 3 70B",
provider: "groq",
baseUrl: "https://api.groq.com/openai/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.2,
output: 0.2,
input: 0.59,
output: 0.79,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 8192,
maxTokens: 8192,
} satisfies Model,
"mistral-saba-24b": {
id: "mistral-saba-24b",
name: "Mistral Saba 24B",
"deepseek-r1-distill-llama-70b": {
id: "deepseek-r1-distill-llama-70b",
name: "DeepSeek R1 Distill Llama 70B",
provider: "groq",
baseUrl: "https://api.groq.com/openai/v1",
reasoning: false,
reasoning: true,
input: ["text"],
cost: {
input: 0.79,
output: 0.79,
input: 0.75,
output: 0.99,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 32768,
maxTokens: 32768,
contextWindow: 131072,
maxTokens: 8192,
} satisfies Model,
"llama3-8b-8192": {
id: "llama3-8b-8192",
@ -134,22 +86,54 @@ export const PROVIDERS = {
contextWindow: 8192,
maxTokens: 8192,
} satisfies Model,
"openai/gpt-oss-120b": {
id: "openai/gpt-oss-120b",
name: "GPT OSS 120B",
"gemma2-9b-it": {
id: "gemma2-9b-it",
name: "Gemma 2 9B",
provider: "groq",
baseUrl: "https://api.groq.com/openai/v1",
reasoning: true,
reasoning: false,
input: ["text"],
cost: {
input: 0.15,
output: 0.75,
input: 0.2,
output: 0.2,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 8192,
maxTokens: 8192,
} satisfies Model,
"llama-3.3-70b-versatile": {
id: "llama-3.3-70b-versatile",
name: "Llama 3.3 70B Versatile",
provider: "groq",
baseUrl: "https://api.groq.com/openai/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.59,
output: 0.79,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 32768,
} satisfies Model,
"mistral-saba-24b": {
id: "mistral-saba-24b",
name: "Mistral Saba 24B",
provider: "groq",
baseUrl: "https://api.groq.com/openai/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.79,
output: 0.79,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 32768,
maxTokens: 32768,
} satisfies Model,
"openai/gpt-oss-20b": {
id: "openai/gpt-oss-20b",
name: "GPT OSS 20B",
@ -166,6 +150,22 @@ export const PROVIDERS = {
contextWindow: 131072,
maxTokens: 32768,
} satisfies Model,
"openai/gpt-oss-120b": {
id: "openai/gpt-oss-120b",
name: "GPT OSS 120B",
provider: "groq",
baseUrl: "https://api.groq.com/openai/v1",
reasoning: true,
input: ["text"],
cost: {
input: 0.15,
output: 0.75,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 32768,
} satisfies Model,
"meta-llama/llama-4-maverick-17b-128e-instruct": {
id: "meta-llama/llama-4-maverick-17b-128e-instruct",
name: "Llama 4 Maverick 17B",
@ -1118,6 +1118,22 @@ export const PROVIDERS = {
contextWindow: 131072,
maxTokens: 96000,
} satisfies Model,
"qwen/qwq-32b": {
id: "qwen/qwq-32b",
name: "Qwen: QwQ 32B",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: true,
input: ["text"],
cost: {
input: 0.075,
output: 0.15,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 4096,
} satisfies Model,
"mistralai/mistral-saba": {
id: "mistralai/mistral-saba",
name: "Mistral: Saba",
@ -1582,22 +1598,6 @@ export const PROVIDERS = {
contextWindow: 131072,
maxTokens: 16384,
} satisfies Model,
"meta-llama/llama-3.1-70b-instruct": {
id: "meta-llama/llama-3.1-70b-instruct",
name: "Meta: Llama 3.1 70B Instruct",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.09999999999999999,
output: 0.28,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 16384,
} satisfies Model,
"meta-llama/llama-3.1-405b-instruct": {
id: "meta-llama/llama-3.1-405b-instruct",
name: "Meta: Llama 3.1 405B Instruct",
@ -1614,6 +1614,22 @@ export const PROVIDERS = {
contextWindow: 32768,
maxTokens: 16384,
} satisfies Model,
"meta-llama/llama-3.1-70b-instruct": {
id: "meta-llama/llama-3.1-70b-instruct",
name: "Meta: Llama 3.1 70B Instruct",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.09999999999999999,
output: 0.28,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 16384,
} satisfies Model,
"mistralai/mistral-nemo": {
id: "mistralai/mistral-nemo",
name: "Mistral: Mistral Nemo",
@ -1630,22 +1646,6 @@ export const PROVIDERS = {
contextWindow: 32000,
maxTokens: 4096,
} satisfies Model,
"mistralai/mistral-7b-instruct-v0.3": {
id: "mistralai/mistral-7b-instruct-v0.3",
name: "Mistral: Mistral 7B Instruct v0.3",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.028,
output: 0.054,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 32768,
maxTokens: 16384,
} satisfies Model,
"mistralai/mistral-7b-instruct:free": {
id: "mistralai/mistral-7b-instruct:free",
name: "Mistral: Mistral 7B Instruct (free)",
@ -1678,6 +1678,22 @@ export const PROVIDERS = {
contextWindow: 32768,
maxTokens: 16384,
} satisfies Model,
"mistralai/mistral-7b-instruct-v0.3": {
id: "mistralai/mistral-7b-instruct-v0.3",
name: "Mistral: Mistral 7B Instruct v0.3",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.028,
output: 0.054,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 32768,
maxTokens: 16384,
} satisfies Model,
"microsoft/phi-3-mini-128k-instruct": {
id: "microsoft/phi-3-mini-128k-instruct",
name: "Microsoft: Phi-3 Mini 128K Instruct",
@ -1710,22 +1726,6 @@ export const PROVIDERS = {
contextWindow: 128000,
maxTokens: 4096,
} satisfies Model,
"meta-llama/llama-3-70b-instruct": {
id: "meta-llama/llama-3-70b-instruct",
name: "Meta: Llama 3 70B Instruct",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.3,
output: 0.39999999999999997,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 8192,
maxTokens: 16384,
} satisfies Model,
"meta-llama/llama-3-8b-instruct": {
id: "meta-llama/llama-3-8b-instruct",
name: "Meta: Llama 3 8B Instruct",
@ -1742,6 +1742,22 @@ export const PROVIDERS = {
contextWindow: 8192,
maxTokens: 16384,
} satisfies Model,
"meta-llama/llama-3-70b-instruct": {
id: "meta-llama/llama-3-70b-instruct",
name: "Meta: Llama 3 70B Instruct",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.3,
output: 0.39999999999999997,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 8192,
maxTokens: 16384,
} satisfies Model,
"mistralai/mixtral-8x22b-instruct": {
id: "mistralai/mixtral-8x22b-instruct",
name: "Mistral: Mixtral 8x22B Instruct",
@ -1838,22 +1854,6 @@ export const PROVIDERS = {
contextWindow: 128000,
maxTokens: 4096,
} satisfies Model,
"mistralai/mistral-tiny": {
id: "mistralai/mistral-tiny",
name: "Mistral Tiny",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.25,
output: 0.25,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 32768,
maxTokens: 4096,
} satisfies Model,
"mistralai/mistral-small": {
id: "mistralai/mistral-small",
name: "Mistral Small",
@ -1870,6 +1870,22 @@ export const PROVIDERS = {
contextWindow: 32768,
maxTokens: 4096,
} satisfies Model,
"mistralai/mistral-tiny": {
id: "mistralai/mistral-tiny",
name: "Mistral Tiny",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.25,
output: 0.25,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 32768,
maxTokens: 4096,
} satisfies Model,
"mistralai/mixtral-8x7b-instruct": {
id: "mistralai/mixtral-8x7b-instruct",
name: "Mistral: Mixtral 8x7B Instruct",
@ -2457,6 +2473,21 @@ export const PROVIDERS = {
contextWindow: 16385,
maxTokens: 4096,
} satisfies Model,
"gpt-3.5-turbo": {
id: "gpt-3.5-turbo",
name: "OpenAI: GPT-3.5 Turbo",
provider: "openai",
reasoning: false,
input: ["text"],
cost: {
input: 0.5,
output: 1.5,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 16385,
maxTokens: 4096,
} satisfies Model,
"gpt-4": {
id: "gpt-4",
name: "OpenAI: GPT-4",
@ -2487,21 +2518,6 @@ export const PROVIDERS = {
contextWindow: 8191,
maxTokens: 4096,
} satisfies Model,
"gpt-3.5-turbo": {
id: "gpt-3.5-turbo",
name: "OpenAI: GPT-3.5 Turbo",
provider: "openai",
reasoning: false,
input: ["text"],
cost: {
input: 0.5,
output: 1.5,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 16385,
maxTokens: 4096,
} satisfies Model,
},
},
anthropic: {
@ -2581,9 +2597,9 @@ export const PROVIDERS = {
contextWindow: 200000,
maxTokens: 64000,
} satisfies Model,
"claude-3-5-haiku-20241022": {
id: "claude-3-5-haiku-20241022",
name: "Anthropic: Claude 3.5 Haiku (2024-10-22)",
"claude-3-5-haiku-latest": {
id: "claude-3-5-haiku-latest",
name: "Anthropic: Claude 3.5 Haiku",
provider: "anthropic",
reasoning: false,
input: ["text", "image"],
@ -2596,9 +2612,9 @@ export const PROVIDERS = {
contextWindow: 200000,
maxTokens: 8192,
} satisfies Model,
"claude-3-5-haiku-latest": {
id: "claude-3-5-haiku-latest",
name: "Anthropic: Claude 3.5 Haiku",
"claude-3-5-haiku-20241022": {
id: "claude-3-5-haiku-20241022",
name: "Anthropic: Claude 3.5 Haiku (2024-10-22)",
provider: "anthropic",
reasoning: false,
input: ["text", "image"],