freddie 0.0.49 → 0.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "freddie",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.50",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Open JS agent harness built on pi-mono, floosie, xstate, and anentrypoint-design",
|
|
6
6
|
"bin": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"@mariozechner/pi-ai": "^0.70.6",
|
|
18
18
|
"@mariozechner/pi-coding-agent": "^0.70.6",
|
|
19
19
|
"@mariozechner/pi-tui": "^0.70.6",
|
|
20
|
-
"anentrypoint-design": "^0.0.
|
|
20
|
+
"anentrypoint-design": "^0.0.29",
|
|
21
21
|
"commander": "^14.0.0",
|
|
22
22
|
"express": "^5.0.0",
|
|
23
23
|
"flatspace": "^1.0.18",
|
|
@@ -12,6 +12,7 @@ export default {
|
|
|
12
12
|
send('start', { ts: Date.now(), sessionId })
|
|
13
13
|
try {
|
|
14
14
|
const out = await runTurn({ prompt, timeoutMs: 30000 })
|
|
15
|
+
if (out.error) { send('error', { error: out.error }); res.end(); return }
|
|
15
16
|
for (const m of out.messages) send('message', m)
|
|
16
17
|
send('done', { result: out.result || '', iterations: out.iterations })
|
|
17
18
|
} catch (e) { send('error', { error: String(e.message || e) }) }
|
|
@@ -13,8 +13,9 @@ export function resolveCallLLM({ provider, model } = {}) {
|
|
|
13
13
|
if (await acptoapiReachable()) {
|
|
14
14
|
return await acptoapiCall({ ...input, model: model || input.model })
|
|
15
15
|
}
|
|
16
|
+
const DEFAULTS = { anthropic: 'claude-3-5-haiku-20241022', openai: 'gpt-4o-mini', groq: 'llama3-8b-8192', openrouter: 'openai/gpt-4o-mini' }
|
|
16
17
|
for (const [p, k] of Object.entries(KEYS)) {
|
|
17
|
-
if (process.env[k]) return await piCall({ ...input, provider: p, model: model || input.model })
|
|
18
|
+
if (process.env[k]) return await piCall({ ...input, provider: p, model: model || input.model || DEFAULTS[p] })
|
|
18
19
|
}
|
|
19
20
|
throw new Error('no LLM backend reachable: start acptoapi (http://127.0.0.1:4800/v1) or set ANTHROPIC_API_KEY/OPENAI_API_KEY/GROQ_API_KEY/OPENROUTER_API_KEY')
|
|
20
21
|
}
|
package/src/agent/pi-bridge.js
CHANGED
|
@@ -6,15 +6,17 @@ let _piAi = null
|
|
|
6
6
|
async function pi() {
|
|
7
7
|
if (_piAi) return _piAi
|
|
8
8
|
_piAi = await import('@mariozechner/pi-ai')
|
|
9
|
+
_piAi.registerBuiltInApiProviders()
|
|
9
10
|
return _piAi
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
export async function callLLM({ messages, tools = [], model, provider = 'anthropic' } = {}) {
|
|
13
14
|
const m = await pi()
|
|
14
15
|
const modelObj = m.getModel ? m.getModel(provider, model) : { provider, id: model }
|
|
16
|
+
if (!modelObj) throw new Error(`pi-bridge: unknown model ${model} for provider ${provider}`)
|
|
15
17
|
const apiKey = m.getEnvApiKey ? m.getEnvApiKey(provider) : process.env[providerEnv(provider)]
|
|
16
18
|
if (!apiKey) throw new Error(`pi-bridge: no API key for ${provider} (set ${providerEnv(provider)})`)
|
|
17
|
-
const result = await m.complete(
|
|
19
|
+
const result = await m.complete(modelObj, { messages: messages.map(adaptMessage), tools: tools.map(adaptTool) }, { apiKey })
|
|
18
20
|
log.info('completed', { model: model || 'default', usage: result.usage })
|
|
19
21
|
return adaptResponse(result)
|
|
20
22
|
}
|