Skip to content

PromStack-1/sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

@promstack-1/sdk

PromStack을 μœ„ν•œ 곡식 TypeScript/JavaScript SDKμž…λ‹ˆλ‹€.

μ„€μΉ˜

npm install @promstack-1/sdk
# λ˜λŠ”
yarn add @promstack-1/sdk
# λ˜λŠ”
pnpm add @promstack-1/sdk

λΉ λ₯Έ μ‹œμž‘

import { PromStackClient } from '@promstack-1/sdk';

// ν΄λΌμ΄μ–ΈνŠΈ μ΄ˆκΈ°ν™”
const client = new PromptManagerClient({
    apiKey: 'your-api-key',
    baseUrl: 'https://promstack.com'
});

// ν”„λ‘¬ν”„νŠΈ λͺ©λ‘ κ°€μ Έμ˜€κΈ°
const prompts = await client.getPrompts();
console.log(prompts);

// νŠΉμ • ν”„λ‘¬ν”„νŠΈ κ°€μ Έμ˜€κΈ°
const prompt = await client.getPrompt(1);
console.log(prompt.content);

// λ³€μˆ˜ ν…œν”Œλ¦Ώ λ Œλ”λ§
const rendered = client.renderPrompt(prompt.content, {
    name: '홍길동',
    topic: 'AI'
});

// μ‹€ν–‰ 기둝 μ €μž₯
const { id } = await client.recordRun({
    promptId: 1,
    response: 'AIκ°€ μƒμ„±ν•œ 응닡...',
    provider: 'openai',
    variables: { name: '홍길동' }
});

API

PromptManagerClient

μƒμ„±μž

// κ°„λ‹¨ν•œ 방식
const client = new PromptManagerClient('your-api-key');

// 전체 μ˜΅μ…˜
const client = new PromptManagerClient({
    apiKey: 'your-api-key',
    baseUrl: 'https://api.example.com',  // κΈ°λ³Έκ°’: http://localhost:3000
    timeout: 30000,                       // κΈ°λ³Έκ°’: 30000ms
    retries: 3,                           // κΈ°λ³Έκ°’: 3
    retryDelay: 1000,                     // κΈ°λ³Έκ°’: 1000ms
    enableCache: true,                    // κΈ°λ³Έκ°’: false
    cacheTTL: 60000                       // κΈ°λ³Έκ°’: 60000ms
});

ν”„λ‘¬ν”„νŠΈ λ©”μ„œλ“œ

getPrompts(options?)
const prompts = await client.getPrompts({
    q: '검색어',           // 제λͺ© 검색
    tag: 'marketing',     // νƒœκ·Έ ν•„ν„°
    category: 'writing',  // μΉ΄ν…Œκ³ λ¦¬ ν•„ν„°
    limit: 10,            // κ²°κ³Ό 수 μ œν•œ
    offset: 0,            // νŽ˜μ΄μ§€λ„€μ΄μ…˜ μ˜€ν”„μ…‹
    sort: 'updated',      // μ •λ ¬ (created, updated, title, likes)
    order: 'desc'         // μ •λ ¬ λ°©ν–₯ (asc, desc)
});
getPrompt(id) / getPromptVersion(id, version) / getPromptVersions(id)
const prompt = await client.getPrompt(1);
const promptV2 = await client.getPromptVersion(1, 2);
const versions = await client.getPromptVersions(1);
searchPrompts(query, options?)
const result = await client.searchPrompts('λ§ˆμΌ€νŒ…', { limit: 10 });
console.log(`총 ${result.total}개 쀑 ${result.prompts.length}개 λ°˜ν™˜`);

μ‹€ν–‰ 기둝 λ©”μ„œλ“œ

recordRun(input) / getRuns(options?) / batchRecordRuns(inputs)
// 단일 μ‹€ν–‰ 기둝
const { id } = await client.recordRun({
    promptId: 1,
    response: 'AI 응닡',
    provider: 'openai',
    tokenUsage: { totalTokens: 100 }
});

// μ‹€ν–‰ 기둝 쑰회
const runs = await client.getRuns({ promptId: 1, limit: 20 });

// 일괄 기둝
const result = await client.batchRecordRuns([
    { promptId: 1, response: '응닡 1' },
    { promptId: 2, response: '응닡 2' }
]);
console.log(`성곡: ${result.successful}, μ‹€νŒ¨: ${result.failed}`);

ν”„λ‘œμ νŠΈ & 톡계 λ©”μ„œλ“œ

getProject() / getStats() / getCategories() / getTags()
const project = await client.getProject();
const stats = await client.getStats();
console.log(`ν”„λ‘¬ν”„νŠΈ: ${stats.promptCount}, μ‹€ν–‰: ${stats.runCount}`);

const categories = await client.getCategories();
const tags = await client.getTags();

μœ ν‹Έλ¦¬ν‹° λ©”μ„œλ“œ

renderPrompt() / parseVariables() / validateVariables()
const template = 'μ•ˆλ…•ν•˜μ„Έμš” {{name}}λ‹˜';

// λ³€μˆ˜ μΆ”μΆœ
const vars = client.parseVariables(template);  // ['name']

// λ³€μˆ˜ μœ νš¨μ„± 검증
const isValid = client.validateVariables(template, { name: '홍길동' });  // true

// λ Œλ”λ§
const rendered = client.renderPrompt(template, { name: '홍길동' });
createRunner(options) / executeAndRecord()
// μž¬μ‚¬μš© κ°€λŠ₯ν•œ λŸ¬λ„ˆ 생성
const runner = client.createRunner({
    provider: 'openai',
    executor: async (content, userInput) => {
        const response = await openai.chat.completions.create({
            model: 'gpt-4',
            messages: [{ role: 'user', content }]
        });
        return response.choices[0].message.content;
    }
});

// κ°„νŽΈν•˜κ²Œ μ‹€ν–‰
const result = await runner(1, '질문', { name: '홍길동' });

μΊμ‹œ μ œμ–΄

client.clearCache();           // 전체 μΊμ‹œ μ‚­μ œ
client.invalidateCache(key);   // νŠΉμ • ν‚€ μ‚­μ œ

μ—λŸ¬ 처리

import { 
    PromptManagerError, 
    AuthenticationError, 
    NotFoundError,
    ValidationError,
    TimeoutError,
    RateLimitError 
} from '@promstack-1/sdk';

try {
    const prompt = await client.getPrompt(999);
} catch (error) {
    if (error instanceof AuthenticationError) {
        console.log('API ν‚€κ°€ μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€');
    } else if (error instanceof NotFoundError) {
        console.log('ν”„λ‘¬ν”„νŠΈλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€');
    } else if (error instanceof ValidationError) {
        console.log('μž…λ ₯값이 μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€');
    } else if (error instanceof TimeoutError) {
        console.log('μš”μ²­ μ‹œκ°„μ΄ μ΄ˆκ³Όλ˜μ—ˆμŠ΅λ‹ˆλ‹€');
    } else if (error instanceof RateLimitError) {
        console.log(`μš”μ²­ ν•œλ„ 초과. ${error.retryAfter}초 ν›„ μž¬μ‹œλ„`);
    }
}

νƒ€μž…

λͺ¨λ“  νƒ€μž…μ€ νŒ¨ν‚€μ§€μ—μ„œ exportλ©λ‹ˆλ‹€:

import type { 
    Prompt, 
    PromptVersion,
    Project, 
    Run, 
    RunInput,
    Category,
    Tag,
    SearchResult,
    BatchRunResult,
    GetPromptsOptions,
    GetRunsOptions,
    ClientOptions 
} from '@promstack-1/sdk';

지원 ν™˜κ²½

  • Node.js 18+
  • λΈŒλΌμš°μ € (Fetch API 지원)
  • Edge Runtime (Vercel, Cloudflare Workers)

λΌμ΄μ„ μŠ€

MIT

About

promstack sdk

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors