@callmedayz/ai-prompt-toolkit
Version:
Professional AI prompt engineering toolkit with advanced template features, real-time dashboards, conditional logic, template inheritance, live monitoring, OpenRouter integration, and 310+ model support
168 lines • 5.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OpenRouterCompletion = void 0;
const openrouter_client_1 = require("./openrouter-client");
const openrouter_types_1 = require("./openrouter-types");
/**
* OpenRouter completion service for generating text responses
*/
class OpenRouterCompletion {
constructor(client) {
this.client = client;
}
/**
* Generate a completion for a single prompt
*/
async complete(prompt, config = {}) {
if (config.stream) {
throw new Error('Use completeStream() for streaming completions');
}
const messages = [
{ role: 'user', content: prompt }
];
return this.chat(messages, config);
}
/**
* Generate a streaming completion for a single prompt
*/
async completeStream(prompt, callback, config = {}) {
const messages = [
{ role: 'user', content: prompt }
];
return this.chatStream(messages, callback, config);
}
/**
* Generate a completion for a chat conversation
*/
async chat(messages, config = {}) {
if (config.stream) {
throw new Error('Use chatStream() for streaming completions');
}
const request = {
model: config.model || openrouter_types_1.DEFAULT_FREE_MODEL,
messages,
max_tokens: config.maxTokens,
temperature: config.temperature,
top_p: config.topP,
stop: config.stop,
stream: false
};
const response = await this.client.completion(request);
if (!response.choices || response.choices.length === 0) {
throw new Error('No completion choices returned from OpenRouter');
}
const choice = response.choices[0];
return {
text: choice.message.content,
model: response.model,
usage: {
promptTokens: response.usage.prompt_tokens,
completionTokens: response.usage.completion_tokens,
totalTokens: response.usage.total_tokens
},
finishReason: choice.finish_reason
};
}
/**
* Generate a streaming completion for a chat conversation
*/
async chatStream(messages, callback, config = {}) {
const request = {
model: config.model || openrouter_types_1.DEFAULT_FREE_MODEL,
messages,
max_tokens: config.maxTokens,
temperature: config.temperature,
top_p: config.topP,
stop: config.stop,
stream: true
};
const stream = await this.client.completionStream(request);
const reader = stream.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
callback({
content: '',
isComplete: true,
model: request.model
});
break;
}
callback({
content: value,
isComplete: false,
model: request.model
});
}
}
finally {
reader.releaseLock();
}
}
/**
* Generate a completion with system message
*/
async completeWithSystem(systemMessage, userPrompt, config = {}) {
const messages = [
{ role: 'system', content: systemMessage },
{ role: 'user', content: userPrompt }
];
return this.chat(messages, config);
}
/**
* Collect streaming response into a complete result
*/
async completeStreamCollected(prompt, config = {}) {
const chunks = [];
let fullText = '';
await this.completeStream(prompt, (chunk) => {
if (!chunk.isComplete && chunk.content) {
chunks.push(chunk.content);
fullText += chunk.content;
}
}, config);
return { text: fullText, chunks };
}
/**
* Test a prompt against a model and return the response
*/
async testPrompt(prompt, model, options = {}) {
return this.complete(prompt, {
model,
maxTokens: options.maxTokens || 100,
temperature: options.temperature || 0.7
});
}
/**
* Validate that a prompt works with a specific model
*/
async validatePrompt(prompt, model) {
try {
const result = await this.testPrompt(prompt, model, { maxTokens: 50 });
return { isValid: true, result };
}
catch (error) {
return {
isValid: false,
error: error instanceof Error ? error.message : 'Unknown error'
};
}
}
/**
* Create a completion service from API key
*/
static fromApiKey(apiKey) {
const client = new openrouter_client_1.OpenRouterClient({ apiKey });
return new OpenRouterCompletion(client);
}
/**
* Create a completion service from environment variables
*/
static fromEnv() {
const client = openrouter_client_1.OpenRouterClient.fromEnv();
return new OpenRouterCompletion(client);
}
}
exports.OpenRouterCompletion = OpenRouterCompletion;
//# sourceMappingURL=openrouter-completion.js.map