MCPcopy Create free account
hub / github.com/arctic-cli/interface / ensureTitle

Function ensureTitle

packages/arctic/src/session/prompt.ts:1701–1791  ·  view source on GitHub ↗
(input: {
    session: Session.Info
    message: MessageV2.WithParts
    history: MessageV2.WithParts[]
    providerID: string
    modelID: string
  })

Source from the content-addressed store, hash-verified

1699 }
1700
1701 async function ensureTitle(input: {
1702 session: Session.Info
1703 message: MessageV2.WithParts
1704 history: MessageV2.WithParts[]
1705 providerID: string
1706 modelID: string
1707 }) {
1708 if (input.session.parentID) return
1709 if (!Session.isDefaultTitle(input.session.title)) return
1710 const isFirst =
1711 input.history.filter((m) => m.info.role === "user" && !m.parts.every((p) => "synthetic" in p && p.synthetic))
1712 .length === 1
1713 if (!isFirst) return
1714 const fallbackTitle = fallbackTitleFromMessage(input.message)
1715 const cfg = await Config.get()
1716 const small =
1717 (await Provider.getSmallModel(input.providerID)) ?? (await Provider.getModel(input.providerID, input.modelID))
1718 const language = await Provider.getLanguage(small)
1719 const provider = await Provider.getProvider(small.providerID)
1720 if (provider?.options?.disableSessionTitle) return
1721 const options = pipe(
1722 {},
1723 mergeDeep(ProviderTransform.options(small, input.session.id, provider?.options)),
1724 mergeDeep(ProviderTransform.smallOptions(small)),
1725 mergeDeep(small.options),
1726 )
1727 await generateText({
1728 // use higher # for reasoning models since reasoning tokens eat up a lot of the budget
1729 maxOutputTokens: small.capabilities.reasoning ? 3000 : 20,
1730 providerOptions: ProviderTransform.providerOptions(small, options),
1731 messages: [
1732 ...SystemPrompt.title(small.providerID).map(
1733 (x): ModelMessage => ({
1734 role: "system",
1735 content: x,
1736 }),
1737 ),
1738 {
1739 role: "user",
1740 content: "Generate a title for this conversation:\n",
1741 },
1742 ...MessageV2.toModelMessage([
1743 {
1744 info: {
1745 id: Identifier.ascending("message"),
1746 role: "user",
1747 sessionID: input.session.id,
1748 time: {
1749 created: Date.now(),
1750 },
1751 agent: input.message.info.role === "user" ? input.message.info.agent : "build",
1752 model: {
1753 providerID: input.providerID,
1754 modelID: input.modelID,
1755 },
1756 },
1757 parts: input.message.parts,
1758 },

Callers 1

prompt.tsFile · 0.85

Calls 3

fallbackTitleFromMessageFunction · 0.85
getMethod · 0.45
updateMethod · 0.45

Tested by

no test coverage detected