krebsiti-ai
v0.1.0
Published
Official JavaScript client for Krebsiti Developer API
Readme
krebsiti-ai
Official JavaScript client for the Krebsiti Developer API.
Install
npm install krebsiti-aiEnvironment variables
export KREBSITI_API_KEY="your_api_key"
# optional:
export KREBSITI_BASE_URL="http://127.0.0.1:5001"
export KREBSITI_COLLECTION_ID="krb-your-collection-id"Quick start
import { KrebsitiClient } from "krebsiti-ai";
const client = new KrebsitiClient({
apiKey: process.env.KREBSITI_API_KEY!,
baseURL: process.env.KREBSITI_BASE_URL, // optional
});
const completion = await client.chat.completions.create({
model: "krebsiti-fast",
messages: [{ role: "user", content: "გამარჯობა" }],
});
console.log(completion?.choices?.[0]?.message?.content || "");Basic examples
1) Collections (KB-only)
const completion = await client.chat.completions.create({
model: "krebsiti-fast",
web_search: false,
kb_collection_ids: [process.env.KREBSITI_COLLECTION_ID!],
messages: [{ role: "user", content: "Summarize key points from the collection." }],
});2) Web search
const completion = await client.chat.completions.create({
model: "krebsiti-fast",
web_search: {
enabled: true,
allowed_domains: ["matsne.gov.ge", "parliament.ge"],
},
messages: [{ role: "user", content: "რა არის უახლესი ცვლილებები შრომის კოდექსში?" }],
});3) File search with Krebsiti collections
const collectionId = process.env.KREBSITI_COLLECTION_ID!;
const completion = await client.chat.completions.create({
model: "krebsiti-fast",
kb_collection_ids: [collectionId],
file_search: {
collection_id: collectionId,
max_num_results: 5,
},
messages: [{ role: "user", content: "Find the section about deadlines and explain it." }],
});4) Streaming
const stream = await client.chat.completions.create({
model: "krebsiti-fast",
stream: true,
messages: [{ role: "user", content: "Give me a short summary." }],
});
for await (const chunk of stream as AsyncGenerator<any>) {
const token = chunk?.choices?.[0]?.delta?.content;
if (token) process.stdout.write(token);
}5) Instructions (system behavior per request)
const completion = await client.chat.completions.create({
model: "krebsiti-fast",
instructions: [
"You are Krebsiti.",
"Always answer in Georgian (ka-GE).",
"Keep answers short and practical.",
].join("\n"),
messages: [{ role: "user", content: "Explain GDPR in 3 short bullets." }],
});6) Streaming + web search + collections (with abort support)
const controller = new AbortController();
const stream = await client.chat.completions.create(
{
model: "krebsiti-fast",
stream: true,
kb_collection_ids: [process.env.KREBSITI_COLLECTION_ID!],
web_search: { enabled: true },
file_search: { collection_id: process.env.KREBSITI_COLLECTION_ID!, max_num_results: 5 },
messages: [{ role: "user", content: "KB-first answer, then web sources if needed." }],
},
{ signal: controller.signal },
);Run local example files
node ./examples/01-collections.mjs
node ./examples/02-web-search.mjs
node ./examples/03-file-search-with-krebsiti-collections.mjs
node ./examples/04-stream.mjs
node ./examples/05-stream-with-web-and-collections.mjs
node ./examples/06-instructions.mjsAPI compatibility
krebsiti-ai targets POST /api/v1/chat/completions and supports:
modelmessagesstreaminstructionstemperaturemax_tokensweb_searchfile_searchkb_collection_ids
Errors
API failures throw KrebsitiApiError with:
statuscodebody
