freddie 0.0.109 → 0.0.111
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.111",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Open JS agent harness built on pi-mono, floosie, xstate, and anentrypoint-design",
|
|
6
6
|
"bin": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@mariozechner/pi-ai": "^0.70.6",
|
|
27
27
|
"@mariozechner/pi-coding-agent": "^0.70.6",
|
|
28
28
|
"@mariozechner/pi-tui": "^0.70.6",
|
|
29
|
-
"acptoapi": "^1.0.
|
|
29
|
+
"acptoapi": "^1.0.107",
|
|
30
30
|
"anentrypoint-design": "^0.0.132",
|
|
31
31
|
"commander": "^14.0.0",
|
|
32
32
|
"express": "^5.0.0",
|
|
@@ -32,7 +32,7 @@ function adapt(result) {
|
|
|
32
32
|
// Mirror lib/named-chains.js BUILTIN — acptoapi resolves unknown names.
|
|
33
33
|
const NAMED_CHAIN_NAMES = new Set(['fast', 'cheap', 'smart', 'reasoning', 'free', 'local', 'auto'])
|
|
34
34
|
|
|
35
|
-
function buildModel({ provider, model, inputModel }) {
|
|
35
|
+
async function buildModel({ provider, model, inputModel }) {
|
|
36
36
|
if (provider) return `${provider}/${model || DEFAULTS[provider] || ''}`.replace(/\/$/, '')
|
|
37
37
|
if (model) return model
|
|
38
38
|
if (inputModel) {
|
|
@@ -51,12 +51,14 @@ function buildModel({ provider, model, inputModel }) {
|
|
|
51
51
|
const auto = typeof sdk.buildAutoChain === 'function' ? sdk.buildAutoChain(undefined) : []
|
|
52
52
|
const keyed = Array.isArray(auto) ? auto.filter(l => { const p = l.model.split('/')[0]; const env = PROVIDER_KEYS[p]; return env && process.env[env] }) : []
|
|
53
53
|
if (keyed.length) return keyed.map(l => l.model).join(', ')
|
|
54
|
+
// No local provider keys — delegate to acptoapi if reachable.
|
|
55
|
+
if (await bridgeReachable()) return process.env.FREDDIE_LLM_MODEL || 'auto'
|
|
54
56
|
return null
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
export function resolveCallLLM({ provider, model } = {}) {
|
|
58
60
|
return async (input) => {
|
|
59
|
-
const m = buildModel({ provider, model, inputModel: input.model })
|
|
61
|
+
const m = await buildModel({ provider, model, inputModel: input.model })
|
|
60
62
|
if (!m) {
|
|
61
63
|
const status = typeof sdk.getStatus === 'function' ? sdk.getStatus().map(s => `${s.provider}(ok=${s.ok},fails=${s.failCount})`).join(', ') : ''
|
|
62
64
|
throw new Error('no LLM backend reachable: set a provider API key or start acptoapi (http://127.0.0.1:4800/v1)' + (status ? ' | sampler: ' + status : ''))
|
package/src/observability/log.js
CHANGED
|
@@ -9,8 +9,14 @@ let _streams = new Map()
|
|
|
9
9
|
function streamFor(name) {
|
|
10
10
|
if (_streams.has(name)) return _streams.get(name)
|
|
11
11
|
const dir = path.join(getFreddieHome(), 'logs')
|
|
12
|
-
fs.mkdirSync(dir, { recursive: true })
|
|
13
|
-
|
|
12
|
+
try { fs.mkdirSync(dir, { recursive: true }) } catch {}
|
|
13
|
+
let s
|
|
14
|
+
if (typeof fs.createWriteStream === 'function') {
|
|
15
|
+
s = fs.createWriteStream(path.join(dir, `${name}.log`), { flags: 'a' })
|
|
16
|
+
} else {
|
|
17
|
+
// Browser fs shim without createWriteStream — fall back to console.
|
|
18
|
+
s = { write(line) { try { console.log('[' + name + ']', line.trim()) } catch {} }, end() {} }
|
|
19
|
+
}
|
|
14
20
|
_streams.set(name, s)
|
|
15
21
|
return s
|
|
16
22
|
}
|