npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

cencori

v1.1.0

Published

Cencori - The unified infrastructure layer for AI applications. One SDK for AI Gateway, Compute, Workflow, and Storage.

Readme

Cencori

The unified infrastructure layer for AI applications.

One SDK. Every AI primitive. Always secure. Always logged.

npm install cencori

Quick Start

import { Cencori } from 'cencori';

const cencori = new Cencori({ 
  apiKey: process.env.CENCORI_API_KEY 
});

// AI Gateway - Chat with any model
const response = await cencori.ai.chat({
  model: 'gpt-4o',
  messages: [{ role: 'user', content: 'Hello!' }]
});

console.log(response.content);

Products

| Product | Status | Description | |---------|--------|-------------| | AI Gateway | ✅ Available | Multi-provider routing, security, observability | | Compute | 🚧 Coming Soon | Serverless functions, GPU access | | Workflow | 🚧 Coming Soon | Visual AI pipelines, orchestration | | Storage | 🚧 Coming Soon | Vector database, knowledge base, RAG | | Integration | ✅ Available | SDKs, Vercel AI, TanStack |

AI Gateway

Chat Completions

const response = await cencori.ai.chat({
  model: 'gpt-4o', // or 'claude-3-opus', 'gemini-1.5-pro', etc.
  messages: [
    { role: 'system', content: 'You are a helpful assistant.' },
    { role: 'user', content: 'What is the capital of France?' }
  ],
  temperature: 0.7,
  maxTokens: 1000
});

console.log(response.content);
console.log(response.usage); // { promptTokens, completionTokens, totalTokens }

Multimodal (Image Input)

const response = await cencori.ai.chat({
  model: 'gpt-4o',
  messages: [{
    role: 'user',
    content: [
      { type: 'text', text: 'What is in this image?' },
      { type: 'image_url', image_url: { url: 'https://example.com/image.jpg' } }
    ]
  }]
});

Tool Usage (Function Calling)

const response = await cencori.ai.chat({
  model: 'gpt-4o',
  messages: [{ role: 'user', content: 'What is the weather in Tokyo?' }],
  tools: [{
    type: 'function',
    function: {
      name: 'get_weather',
      description: 'Get the current weather for a location',
      parameters: {
        type: 'object',
        properties: { location: { type: 'string' } },
        required: ['location']
      }
    }
  }]
});

if (response.toolCalls) {
  console.log(response.toolCalls); // [{ function: { name: 'get_weather', arguments: '{"location":"Tokyo"}' } }]
}

Structured Output (Object Generation)

interface UserProfile {
  name: string;
  age: number;
  interests: string[];
}

const response = await cencori.ai.generateObject<UserProfile>({
  model: 'gpt-4o',
  prompt: 'Generate a fictional user profile',
  schema: {
    type: 'object',
    properties: {
      name: { type: 'string' },
      age: { type: 'number' },
      interests: { type: 'array', items: { type: 'string' } }
    },
    required: ['name', 'age', 'interests']
  }
});

console.log(response.object); // { name: 'Alice', age: 28, interests: ['hiking'] }

Embeddings

const response = await cencori.ai.embeddings({
  model: 'text-embedding-3-small',
  input: 'Hello world'
});

console.log(response.embeddings[0]); // [0.1, 0.2, ...]

Image Generation

Generate images from text prompts using multiple providers:

const response = await cencori.ai.generateImage({
  prompt: 'A futuristic city at sunset with flying cars',
  model: 'gpt-image-1.5',  // Best text rendering, top ELO rating
  size: '1024x1024',
  quality: 'hd'
});

console.log(response.images[0].url); // https://...

Supported Models: | Provider | Models | Description | |----------|--------|-------------| | OpenAI | gpt-image-1.5, gpt-image-1, dall-e-3, dall-e-2 | Text rendering, creative | | Google | gemini-3-pro-image, imagen-3 | High photorealism |

Framework Integrations

Vercel AI SDK

import { cencori } from 'cencori/vercel';
import { streamText } from 'ai';

const result = await streamText({
  model: cencori('gpt-4o'),
  messages: [{ role: 'user', content: 'Hello!' }]
});

for await (const chunk of result.textStream) {
  console.log(chunk);
}

With React/Next.js

import { cencori } from 'cencori/vercel';
import { useChat } from 'ai/react';

export default function Chat() {
  const { messages, input, handleInputChange, handleSubmit } = useChat({
    api: '/api/chat'
  });
  
  return (
    <div>
      {messages.map(m => <div key={m.id}>{m.content}</div>)}
      <form onSubmit={handleSubmit}>
        <input value={input} onChange={handleInputChange} />
      </form>
    </div>
  );
}

Coming Soon

Compute

// 🚧 Coming Soon
await cencori.compute.run('my-function', { 
  input: { data: 'hello' } 
});

Workflow

// 🚧 Coming Soon
await cencori.workflow.trigger('data-enrichment', { 
  data: { userId: '123' } 
});

Memory (Context Store)

// Store a memory with auto-embedding
await cencori.memory.store({
  namespace: 'docs',
  content: 'Refund policy allows returns within 30 days',
  metadata: { category: 'policy' }
});

// Semantic search
const results = await cencori.memory.search({
  namespace: 'docs',
  query: 'what is the refund policy?',
  limit: 5
});

// RAG helper
const response = await cencori.ai.rag({
  model: 'gpt-4o',
  messages: [{ role: 'user', content: 'What is our refund policy?' }],
  namespace: 'docs'
});

Why Cencori?

  • 🛡️ Security Built-in: PII detection, content filtering, jailbreak protection
  • 📊 Observability: Every request logged, every token tracked
  • 💰 Cost Control: Budget alerts, spend caps, per-request costing
  • 🔄 Multi-Provider: Switch between OpenAI, Anthropic, Google, etc.
  • ⚡ One SDK: AI, compute, storage, workflows - unified

Links

License

MIT