packages feed

shikumi 0.3.0.1 → 0.3.0.2

raw patch · 5 files changed

+42/−17 lines, 5 filesdep ~baikaidep ~baikai-claudedep ~baikai-effectfulPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: baikai, baikai-claude, baikai-effectful, baikai-openai

API changes (from Hackage documentation)

Files

CHANGELOG.md view
@@ -2,6 +2,20 @@  ## Unreleased +## 0.3.0.2 — 2026-08-07++### Changed++- Upgraded the baikai provider cohort to the `0.5` series: `baikai`,+  `baikai-claude`, and `baikai-openai` now require `>=0.5 && <0.6`.+  `baikai-effectful` stays on the `0.3` series, floored at `0.3.0.3` — the first+  release whose own `baikai` bound admits `0.5`. Dependency bounds only; no+  changes to the exported API.++  baikai 0.5 adds an optional model-call evidence record. shikumi does not opt+  in: it never sets `Options.evidence`, so no digest is computed and no evidence+  event is emitted on any call shikumi makes.+ ## 0.3.0.1 - 2026-07-20  ### Changed
shikumi.cabal view
@@ -1,6 +1,6 @@ cabal-version:   3.4 name:            shikumi-version:         0.3.0.1+version:         0.3.0.2 synopsis:        Typed, structured, evaluable LM programs over baikai category:        AI description:@@ -53,11 +53,11 @@    build-depends:     , aeson-    , baikai             >=0.4  && <0.5-    , baikai-claude      >=0.4  && <0.5-    , baikai-effectful   >=0.3  && <0.4-    , baikai-openai      >=0.4  && <0.5-    , base               >=4.20 && <5+    , baikai             >=0.5     && <0.6+    , baikai-claude      >=0.5     && <0.6+    , baikai-effectful   >=0.3.0.3 && <0.4+    , baikai-openai      >=0.5     && <0.6+    , base               >=4.20    && <5     , base64-bytestring     , bytestring     , containers@@ -109,10 +109,10 @@    build-depends:     , aeson-    , baikai             >=0.4      && <0.5-    , baikai-claude      >=0.4      && <0.5-    , baikai-effectful   >=0.3      && <0.4-    , baikai-openai      >=0.4      && <0.5+    , baikai             >=0.5      && <0.6+    , baikai-claude      >=0.5      && <0.6+    , baikai-effectful   >=0.3.0.3  && <0.4+    , baikai-openai      >=0.5      && <0.6     , base     , base64-bytestring     , bytestring
test/RoutingSpec.hs view
@@ -98,7 +98,7 @@     liftIO (atomicModifyIORef' ref (\xs -> (xs ++ [(m, ctx, o)], ())))     -- A minimal successful stream whose terminal reassembles to @resp@, so a     -- routed 'streamProgram' decodes exactly as the blocking path would.-    pure [EventDone (doneTerminal Nothing Stop (AssistantMessage (resp ^. #message)))]+    pure [EventDone (doneTerminal Nothing Nothing Stop (AssistantMessage (resp ^. #message)))]  -- | Run a program sequentially under @routeLLM . runRouting model@ over a capturing -- stub and return the captured requests.
test/StreamSpec.hs view
@@ -122,7 +122,7 @@   ]     ++ [TextDelta (DeltaPayload 0 d) | d <- deltas]     ++ [ TextEnd (BlockEndPayload 0 (T.concat deltas)),-         EventDone (doneTerminal Nothing Stop (AssistantMessage (payloadWith terminalText)))+         EventDone (doneTerminal Nothing Nothing Stop (AssistantMessage (payloadWith terminalText)))        ]   where     payloadWith t = (_Response ^. #message) & #content .~ V.singleton (AssistantText (_TextContent & #text .~ t))
test/StubProvider.hs view
@@ -53,6 +53,14 @@ stubApi :: Api stubApi = Custom "stub" +-- | Every stub ignores 'Options.thinking' and puts nothing on any wire, so the+-- truthful description of what it does with a reasoning-effort request is+-- 'noThinkingRequested' — not a translation invented to look plausible.+-- baikai only calls this for a caller who asked for strict evidence, which no+-- shikumi interpreter does.+stubDescribeThinking :: Model -> Options -> ThinkingTranslation+stubDescribeThinking _ _ = noThinkingRequested+ -- | A hand-built 'Model' whose 'api' routes to the stub provider. stubModel :: Model stubModel =@@ -101,7 +109,7 @@     TextStart IndexPayload {contentIndex = 0},     TextDelta DeltaPayload {contentIndex = 0, delta = t},     TextEnd BlockEndPayload {contentIndex = 0, content = t},-    EventDone (doneTerminal Nothing Stop (AssistantMessage (stubPayloadWith t)))+    EventDone (doneTerminal Nothing Nothing Stop (AssistantMessage (stubPayloadWith t)))   ]  -- | Build an isolated registry from a @complete@ implementation, reusing the@@ -114,7 +122,8 @@     ApiProvider       { apiTag = stubApi,         complete = completeFn,-        stream = \_ _ _ -> Stream.fromList (stubEvents streamText)+        stream = \_ _ _ -> Stream.fromList (stubEvents streamText),+        describeThinking = stubDescribeThinking       }   pure reg @@ -159,7 +168,7 @@ streamErrorEvents :: Rational -> Text -> [AssistantMessageEvent] streamErrorEvents cost msg =   [ EventStart StartPayload {partial = AssistantMessage (_Response ^. #message), responseId = Nothing},-    EventError (doneTerminal Nothing ErrorReason (AssistantMessage errPayload))+    EventError (doneTerminal Nothing Nothing ErrorReason (AssistantMessage errPayload))   ]   where     errPayload =@@ -189,7 +198,8 @@             Stream.fromList $               if n <= failTimes                 then streamErrorEvents 0 ("stub stream failure #" <> T.pack (show n))-                else stubEvents t+                else stubEvents t,+        describeThinking = stubDescribeThinking       }   pure reg @@ -204,7 +214,8 @@     ApiProvider       { apiTag = stubApi,         complete = \_ _ _ -> pure (stubResponse ""),-        stream = \_ _ _ -> Stream.fromList (streamErrorEvents cost "stub stream failure")+        stream = \_ _ _ -> Stream.fromList (streamErrorEvents cost "stub stream failure"),+        describeThinking = stubDescribeThinking       }   pure reg