---
id: IOP-PFM-LLM-001
title: General Conversation Assistance
product_area: platform
module: llm
revision: 1
status: draft
design_intent: open
implementation_evidence: observed
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
ai_task: 'none declared: the console route calls the model directly; no operation key exists in the Platform catalog'
provider: 'openai, through the AI SDK model gateway'
model: openai/gpt-4.1-mini
reasoning_effort: none
called_by:
  - SVC-PFM-LLM-console-agent
  - WF-PFM-LLM-013
  - SCR-PFM-LLM-001
  - SCR-PFM-LLM-002
realises:
  - CAP-PFM-LLM-019
smoke_suite: not implemented
evaluation_suite: not implemented
lifecycle_suite: not implemented

related_decisions:
  - ADR-PFM-LLM-001
  - ADR-PFM-LLM-017
evidence:
  - 'react-console:app/api/agent/conversations/[id]/messages/route.ts:MODEL'
  - 'react-console:app/api/agent/conversations/[id]/messages/route.ts:systemPrompt'
  - 'react-console:app/api/agent/conversations/[id]/messages/route.ts:HISTORY_LIMIT'
  - 'react-console:lib/agent/tenant.ts:tenantName'
  - 'react-console:lib/agent/schemas.ts:messagesInput'
  - 'react-console:components/console/agent-chat.tsx:AgentChat'
  - >-
    services-platform:tests/unit/llm-provider-boundary.spec.ts#refuses an import of the openai sdk even in the
    adapter
  - 'services-platform:docs/compliance/exceptions.md (EX-AI-003)'
controls: [TC-AI-001, TC-AI-004, TC-AI-006, TC-AI-007, TC-AVL-001, TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-006, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-CRY-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-005, TC-MON-001, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# General Conversation Assistance

## 1. Purpose

Jazz AI answers general staff questions and drafts text within an ongoing conversation. Project filing adds guidance about the work being discussed. The reply becomes conversation text without applying a business-record change.

## 2. Application and Model Responsibilities

The route selects history, validates input and rejects general replies for scoped query or directory conversations. It constructs the instruction, limits prior messages and appends the resulting exchange. The model supplies text only. It receives no tools and cannot independently select an application stage, save a query or persist domain state.

## 3. Inputs and Context

The instruction identifies Rhythm and the configured sample organization, requests concise practical help, warns against invented record facts and directs record lists to Queries. A project contributes its name and description. The request supplies at most thirty previous messages and one trimmed question of up to four thousand characters. The route supplies neither live records nor an authenticated workspace name, grants or identity.

## 4. Output Contract

The SDK returns free text. The route trims it, substitutes a fixed no-answer response if empty and appends person and assistant turns. There is no structured output schema, citation validator or application test of whether the answer follows its factual guidance.

## 5. Model and Provider

The console explicitly selects OpenAI GPT-4.1 mini through the AI SDK gateway. There is no Platform task declaration, routing version, published rate or prompt version for this request. The Platform repository’s provider guard does not cover this console call.

## 6. Prompt Contract

The instruction supplies product identity, conversational tone, limits on claims about unseen records and the Queries destination. Optional project guidance narrows the subject. Message history and the new question follow that instruction. The draft text itself is not reproduced as specification prose.

## 7. Validation, Failure and Fallback

The request schema checks the question before generation. Missing history returns not found, invalid input returns a validation failure and scoped work rejects general reply. Model errors are logged and produce a temporary failure response with no appended exchange. The composer restores input. Empty model text uses the fixed fallback. Deletion during generation can instead return success without retained conversation. The route sets no explicit SDK retry or timeout override; effective SDK defaults are not established here.

## 8. Smoke Tests

There is no implemented smoke suite. The following proposed checks describe the intended prompt behavior and do not establish model quality or product approval.

### IOS-PFM-LLM-001-01 — Provide a Useful Planning Reply

Input: ask what belongs in a sponsor prospectus without a project. Expected: concise practical sections framed as suggestions. A wrong answer claims actual sponsor names, amounts or organization records.

### IOS-PFM-LLM-001-02 — Use the Project and Earlier Exchange

Input: ask a follow-up in a project whose description concerns member renewals. Expected: relevant renewal guidance that uses the supplied recent exchange. A wrong answer ignores that context or asserts unseen customer facts.

### IOS-PFM-LLM-001-03 — Refer Record Requests to Queries

Input: ask for members who lapsed in the previous month. Expected: acknowledge the lack of live records and suggest building the list in Queries. A wrong answer fabricates member history.

## 9. Evaluation Corpus

No measured evaluation corpus is implemented. Preparation should cover invented customer facts, project relevance, record-list redirection and practical wording before treating the general reply as a customer feature.

## 10. Call Shape and Batching

The route awaits one SDK generation request per question and sends at most thirty earlier messages. It specifies no batch, cache policy, output ceiling or cost budget. Transport retries follow SDK behavior rather than an explicit module contract. Simultaneous sends can use the same earlier history and append in completion order.

## 11. Controls

The direct call bypasses Platform admission, the running cap, AI switches, capture and usage accounting. Conversation handlers evaluate neither an AI permission nor authenticated ownership. The console’s session presence gate does not turn the sample memory store into isolated customer storage.

## 12. Open Design Decisions

The open Jazz AI boundary question must choose durable ownership, access policy and provider execution before customer use. A proposed direction declares a metered reply operation with versioned prompt, routing, prices and budgets, then uses the real organization and person context. The existing prototype does not implement that direction.
