Throwaway prototypes for Sausage v3. Plan and decisions: ~/research/sausage-v3/PLAN.md. Results and evidence: the spike READMEs.
25 lines
1.3 KiB
TypeScript
25 lines
1.3 KiB
TypeScript
// Make one streamed call through Surma's proxy with pi-ai's OpenAI provider.
|
|
import { createModels } from '@earendil-works/pi-ai/models';
|
|
import { openaiProvider } from '@earendil-works/pi-ai/providers/openai';
|
|
const models = createModels();
|
|
models.setProvider(openaiProvider());
|
|
const model = {
|
|
id: 'gpt-6.1-sol', name: 'gpt-6.1-sol', provider: 'openai', api: 'openai-responses',
|
|
baseUrl: `${process.env.PI_PROXY_BASE_URL}/v1`, reasoning: true, input: ['text'],
|
|
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 200000, maxTokens: 1024,
|
|
};
|
|
const answer = await models.completeSimple(model as any, {
|
|
messages: [{ role: 'user', content: 'Reply with one short sentence about prime numbers.', timestamp: Date.now() }],
|
|
}, { apiKey: process.env.PI_PROXY_API_KEY, maxTokens: 1024, reasoning: 'low', headers: { 'Shopify-Usage-Tag': JSON.stringify(['pi', 's1-v8-harness']) } });
|
|
if (answer.stopReason === 'error') {
|
|
let message = answer.errorMessage ?? 'Real model call failed';
|
|
for (const key of ['PI_PROXY_BASE_URL', 'PI_PROXY_API_KEY']) {
|
|
const value = process.env[key];
|
|
if (value) message = message.split(value).join('[redacted]');
|
|
}
|
|
throw new Error(message);
|
|
}
|
|
const text = answer.content.filter(c => c.type === 'text').map(c => c.text).join('');
|
|
if (!text) throw new Error('Real model returned no answer text');
|
|
console.log(text);
|