pinecall 0.0.6 → 0.0.7
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/pinecall/agent/config.rb +11 -1
- data/lib/pinecall/version.rb +1 -1
- data/lib/pinecall/wire/enums.rb +4 -3
- data/lib/pinecall/wire/shapes_call_events.rb +4 -1
- data/lib/pinecall/wire/shapes_doors.rb +1 -0
- data/lib/pinecall/wire/shapes_parts.rb +3 -1
- data/sig/pinecall.rbs +1 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f33416ca47b6dac53cbee96b457cd9d8961c27439b7f5568834ca64c561c5e89
|
|
4
|
+
data.tar.gz: deaf2b2a704a6dbda1a8b88f21f46fabb327ee7dc22eab9f858cf2e5dca7d694
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 671735c18ef00423d7e4c7a1fbefbd87c0f5087b23a0d9fa556bc151a19df928fa0c7bbebcb9977858bdf3cb54645a7d570d0e3e0fe6ad5bb5fb8977575d45ea
|
|
7
|
+
data.tar.gz: 5ed8532ef612a31608e11e70016045e8da92d35dcfe078e6dd976680e729695b4e8b6eee2448cb4567991592294fe67cb4519ad53ed05bbf27878c81ed1d66e0
|
data/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,14 @@ version number is the human's call.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.0.7] — Every judge is a model's answer, and the class names the judge's model (2026-10-10)
|
|
10
|
+
|
|
11
|
+
- `judge "<vendor>/<model>", builds:, options:`: the model the agent's calls are judged on, over
|
|
12
|
+
the org's choice and Pinecall's. On a key of the org's own — a local model through
|
|
13
|
+
`options: { base_url: "…" }` among them — its evals are never billed.
|
|
14
|
+
- The wire reads what the runtime now writes: a judge's `na` and `classified` answers with their
|
|
15
|
+
`choice` or `score`, `call.score`'s `evals` and `own_key`, and `call.summary`'s `simulated`.
|
|
16
|
+
|
|
9
17
|
## [0.0.6] — A greeting is words or :improvise, a hangup is words or true, and the ears choose who ends the turn (2026-10-10)
|
|
10
18
|
|
|
11
19
|
- `greeting "…"` (said as written), `greeting :improvise` (the model opens on its prompt) and
|
|
@@ -13,7 +13,7 @@ module Pinecall
|
|
|
13
13
|
AS_WRITTEN = %i[phone whatsapp web channel_rules].freeze
|
|
14
14
|
|
|
15
15
|
# The settings a class may declare. Must match the TypeScript package's `ENVIRONMENT`.
|
|
16
|
-
ENVIRONMENT = %i[language voice llm stt greeting hangup turn says hears knowledge docs memory record].freeze
|
|
16
|
+
ENVIRONMENT = %i[language voice llm stt judge greeting hangup turn says hears knowledge docs memory record].freeze
|
|
17
17
|
|
|
18
18
|
# The ones written as the wire's own fields, keyword by keyword: `greeting say: "…"`.
|
|
19
19
|
AS_KEYWORDS = %i[turn knowledge docs memory].freeze
|
|
@@ -90,6 +90,16 @@ module Pinecall
|
|
|
90
90
|
environment[:stt] = { **Config.model_of(model), builds:, options:, end_of_turn: ends }.compact
|
|
91
91
|
end
|
|
92
92
|
|
|
93
|
+
# The model the agent's calls are judged on, over the org's choice and the platform's:
|
|
94
|
+
# `judge "openai/qwen3-32b", options: { base_url: "http://gpu:8000/v1" }`. On a key of the
|
|
95
|
+
# org's own, a local model's server among them, its evals are never billed; `builds` and
|
|
96
|
+
# `options` run on the org's own key alone.
|
|
97
|
+
def judge(model = NOTHING, builds: nil, options: nil)
|
|
98
|
+
return environment[:judge] if model.equal?(NOTHING)
|
|
99
|
+
|
|
100
|
+
environment[:judge] = { **Config.model_of(model), builds:, options: }.compact
|
|
101
|
+
end
|
|
102
|
+
|
|
93
103
|
# How a call opens: the words, said as written, or :improvise for the model's own. The
|
|
94
104
|
# caller cannot cut it short unless `interruptible: true`.
|
|
95
105
|
def greeting(opening = NOTHING, interruptible: nil)
|
data/lib/pinecall/version.rb
CHANGED
data/lib/pinecall/wire/enums.rb
CHANGED
|
@@ -34,9 +34,10 @@ module Pinecall
|
|
|
34
34
|
# Whose action ended the call. platform covers timeouts, errors and a drained worker.
|
|
35
35
|
ENDED_BY = %w[caller agent supervisor platform].freeze
|
|
36
36
|
# What one judge answered about a finished call. Held: the rule held. Broken: it did not,
|
|
37
|
-
# and the reason names the evidence.
|
|
38
|
-
#
|
|
39
|
-
|
|
37
|
+
# and the reason names the evidence. Classified: a choice or a score was answered. N/A: the
|
|
38
|
+
# question did not apply. Deferred: the judge was asked and could not settle it. Skipped:
|
|
39
|
+
# nobody asked it — no model, the ceiling reached, or the org's evals used up.
|
|
40
|
+
SCORE_VERDICT = %w[held broken classified na deferred skipped].freeze
|
|
40
41
|
# Cold: the caller is sent on with a REFER on their SIP leg and the call ends here. Warm:
|
|
41
42
|
# the number is dialled into the call's own room, the agent stays on the line until the
|
|
42
43
|
# other side answers and then falls silent; the call ends when either of them hangs up.
|
|
@@ -81,6 +81,8 @@ module Pinecall
|
|
|
81
81
|
judges: { kind: :list, items: { kind: :ref, ref: "Judgment" }, required: true },
|
|
82
82
|
panel: { kind: :list, items: { kind: :str } },
|
|
83
83
|
judge_calls: { kind: :int, required: true },
|
|
84
|
+
evals: { kind: :int },
|
|
85
|
+
own_key: { kind: :bool },
|
|
84
86
|
judge_cost_usd: { kind: :float },
|
|
85
87
|
judged_by: { kind: :ref, ref: "JudgedBy" }
|
|
86
88
|
}.freeze,
|
|
@@ -108,7 +110,8 @@ module Pinecall
|
|
|
108
110
|
turns: { kind: :int, required: true },
|
|
109
111
|
usage: { kind: :list, items: { kind: :ref, ref: "ModelUsage" }, required: true },
|
|
110
112
|
cost: { kind: :ref, ref: "Cost", required: true },
|
|
111
|
-
recording: { kind: :str }
|
|
113
|
+
recording: { kind: :str },
|
|
114
|
+
simulated: { kind: :bool }
|
|
112
115
|
}.freeze,
|
|
113
116
|
"CallTransferred" => {
|
|
114
117
|
to: { kind: :str, required: true },
|
|
@@ -23,6 +23,7 @@ module Pinecall
|
|
|
23
23
|
voice: { kind: :ref, ref: "VoiceConfig" },
|
|
24
24
|
llm: { kind: :ref, ref: "ModelConfig" },
|
|
25
25
|
stt: { kind: :ref, ref: "ModelConfig" },
|
|
26
|
+
judge: { kind: :ref, ref: "ModelConfig" },
|
|
26
27
|
turn: { kind: :ref, ref: "TurnConfig" },
|
|
27
28
|
says: { kind: :list, items: { kind: :ref, ref: "Pronunciation" } },
|
|
28
29
|
hears: { kind: :list, items: { kind: :str } },
|
|
@@ -318,7 +318,9 @@ module Pinecall
|
|
|
318
318
|
verdict: { kind: :ref, ref: "ScoreVerdict", required: true },
|
|
319
319
|
criteria: { kind: :str, required: true },
|
|
320
320
|
reason: { kind: :str, required: true },
|
|
321
|
-
evidence: { kind: :ref, ref: "JudgmentEvidence", required: true }
|
|
321
|
+
evidence: { kind: :ref, ref: "JudgmentEvidence", required: true },
|
|
322
|
+
choice: { kind: :str, null: true },
|
|
323
|
+
score: { kind: :int, null: true }
|
|
322
324
|
}.freeze,
|
|
323
325
|
"JudgmentEvidence" => {
|
|
324
326
|
seqs: { kind: :list, items: { kind: :int }, required: true },
|
data/sig/pinecall.rbs
CHANGED
|
@@ -88,6 +88,7 @@ module Pinecall
|
|
|
88
88
|
def self.voice: (?String, ?String?, ?model: String?, ?builds: String?, ?options: Hash[untyped, untyped]?) -> untyped
|
|
89
89
|
def self.llm: (?String, ?temperature: Float?, ?builds: String?, ?options: Hash[untyped, untyped]?) -> untyped
|
|
90
90
|
def self.stt: (?String, ?builds: String?, ?options: Hash[untyped, untyped]?, ?end_of_turn: (String | Symbol)?) -> untyped
|
|
91
|
+
def self.judge: (?String, ?builds: String?, ?options: Hash[untyped, untyped]?) -> untyped
|
|
91
92
|
def self.language: (?String) -> untyped
|
|
92
93
|
def self.says: (?Array[Hash[Symbol, String]]) -> untyped
|
|
93
94
|
def self.record: (?bool) -> untyped
|