Skip to content

Add selectable providers for FluidMeet summaries - #1028

Open
grohith327 wants to merge 5 commits into
mainfrom
feat/meeting-summary-providers
Open

grohith327 wants to merge 5 commits into
mainfrom
feat/meeting-summary-providers

Conversation

@grohith327

@grohith327 grohith327 commented Sep 26, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Meeting summaries currently require the on-device model or manually exporting a transcript. This adds a provider/model picker to a completed meeting's Meet Summary tab, reusing verified AI Providers configurations while keeping the summary selection independent of dictation.

  • Choose on-device Fluid Intelligence or select a saved provider and model. Summary selections are always independent; earlier “Use AI Settings” selections are migrated to their current provider and model. Anthropic uses its native Messages API; compatible providers use the existing LLM client.
  • Run the installed Claude Code (claude -p) or Codex (codex exec) CLI with an optional model override. Transcripts go through stdin, with bounded output, timeout/cancellation, process-group cleanup, and separate diagnostics.
  • Preserve previous summaries on failure and save provider/model provenance. Existing saved summaries remain readable.
  • Keep new-meeting setup focused on recording. Summary controls appear in the completed-meeting view; on-device setup presents the existing LFM download action.

Type of Change

  • 🐞 Bug fix
  • ✨ New feature
  • 💥 Breaking change
  • 🧹 Chore
  • 📝 Documentation update

Related Issue or Discussion

#1022

Testing

Validation performed on September 24, 2026; SwiftLint and diff checks repeated before opening the PR on September 26.

  • Tested on Intel Mac
  • Tested on Apple Silicon Mac
  • Tested on macOS version: 27.2 (26B5086k), as reported by the test result
  • Ran linter locally: strict SwiftLint on the six changed Swift files; zero violations
  • Ran formatter locally: SwiftFormat on the new provider/CLI service, summary view, and provider tests; unrelated pre-existing formatting findings in MeetingTranscriptionView were left untouched
  • Ran tests locally: testfv -only-testing:FluidDictationIntegrationTests/MeetingSummaryProviderTests — 14 passed, zero failures

Additional checks:

  • Earlier focused summary-input, summary-activity, and LLM request-body suites passed (35 tests).
  • runfv successfully built, installed, signed, and relaunched the final app.
  • Both installed CLIs returned the expected summary for a synthetic transcript.
  • Computer Use verified the provider menu, optional CLI model field, and new-meeting screen. No real meeting transcript was sent during CLI smoke testing.
  • git diff --check passes.

Screenshots / Video

New-meeting recording setup:

New meeting recording setup

Completed meeting with Codex selected:

Codex meeting summary option

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-26T19:26:02.980199Z 1cd64bb New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[Medium risk] Adds selectable LLM providers for meeting summaries.

The PR appears safe to merge; no outstanding finding or new issue was established.

Summary

The PR adds independent provider and model selection for completed-meeting summaries, including saved AI providers and Claude Code or Codex CLI routes. The latest changes migrate earlier “Use AI Settings” selections into independent selections and add a wrapper-and-child cleanup test.

Reviews (4) · Last reviewed commit: "Remove linked AI settings option from me..."

Comment thread Sources/Fluid/Services/Meeting/MeetingSummaryProvider.swift Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1e06c79865

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

}
text = try Self.anthropicText(data)
} else {
text = try await self.client.call(self.configuration(transcript: transcript, kind: kind, route: route)).content

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reject truncated remote summaries

When a long detailed summary exhausts an OpenAI-compatible provider's output limit, the response can contain nonempty partial text with finish_reason: "length"; the Responses API similarly reports an incomplete status. LLMClient.call currently discards both completion indicators, so this path treats that partial text as successful and MeetingSummaryController persists it as a finished summary. Validate the provider's completion status before returning the text, as the Anthropic path already does for stop_reason == "max_tokens".

Useful? React with 👍 / 👎.

@github-actions

github-actions Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

FluidVoice PR build ready

Download FluidVoice-PR-1028-1cd64bb0897a

The artifact contains the ad-hoc-signed app ZIP, Xcode archive, build manifest, and installation instructions. It expires 5 days after the build.

Install the app

  1. Extract the downloaded artifact, then extract FluidVoice-PR-1028.app.zip.

  2. Move FluidVoice Add selectable providers for FluidMeet summaries #1028.app into the /Applications folder.

  3. Open Terminal and remove the download quarantine marker:

    xattr -dr com.apple.quarantine "/Applications/FluidVoice #1028.app"
    
  4. In Applications, Control-click FluidVoice Add selectable providers for FluidMeet summaries #1028.app and choose Open.

  5. If macOS still blocks it, open System Settings → Privacy & Security, click Open Anyway, and confirm.

This build has its own app identity, so its permissions are separate from the release version of FluidVoice.

View workflow run

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1cd64bb089

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +223 to +225
guard json["stop_reason"] as? String != "max_tokens" else {
throw LLMError.invalidRequest("The summary reached the model's output limit. Try Executive summary instead.")
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reject all unsuccessful Anthropic stop reasons

When Anthropic returns nonempty text with stop_reason: "model_context_window_exceeded" (partial output) or "refusal", this check accepts the response and the controller persists it as a completed summary. Fresh evidence beyond the prior max_tokens handling is that these distinct stop reasons also indicate the requested summary was not completed successfully; whitelist successful terminal reasons such as end_turn/stop_sequence instead of rejecting only max_tokens.

Useful? React with 👍 / 👎.

@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

This pull request has been marked stale because it has had no activity for 5 days. It will be closed in 2 days if there is no further activity. Add the keep-open or pinned label to prevent automatic closure.

@andrewmitchell-automations

Copy link
Copy Markdown

Hi @grohith327, thanks for this work. I opened #1076 to continue it, rebased onto current main (which now disables on-device summaries).

Following maintainer guidance on Discord, #1076 narrows the scope to the providers already set up in AI Providers, sent through the shared LLMClient. So it drops the Claude Code/Codex CLI routes and the separate Anthropic client. Your commits are kept as the first commit, with you as author, and you are credited as co-author on the rework.

Follow-up: #1077 adds an optional custom prompt. Feedback welcome on either.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants