FocusGroup 0.5.2
Corrections replacing 0.5.1, which was never published.
- The untouched default is now runnable: a compact default guide (one
opening, one icebreaker, two engagement, three exploration, one closing)
and a default of two responses per question plan 93 model outputs,
inside the default
max_calls of 100. The old defaults
planned 467 outputs and always tripped their own gate.
- Participant construction no longer invents data. A call that
supplies nothing now samples real respondents from the bundled ANES 2024
records (the easy route: their demographic profile rendered with the
survey’s own question wording), where it used to fabricate ages,
incomes, and four Likert answers from fixed distributions. Direct
personas receive no synthetic records, and a demographics or survey
frame with fewer rows than participants is refused instead of recycled
(recycled rows are one research unit counted several times).
create_agents_from_data() and
create_agents_from_survey() remain the detailed routes, the
first also carrying respondents’ stated answers.
- Topic modeling treats each utterance as a document rather than
pooling every turn by speaker. Pooling made each document a person, so
the fitted topics separated speakers rather than subjects and a
six-person group left six documents;
unit = "speaker"
restores the old behavior. Fitting few documents relative to
num_topics now warns.
- Survey value cleanup strips a numbered-label prefix only when
whitespace follows the period, so “1. Male” cleans and “1.5” survives.
Trailing parentheticals are kept: “Asian (non-Hispanic)” stays
whole.
- Continuation comparisons keep the end-of-session interim summary out
of the cut histories, which could otherwise carry post-cut information
into both arms. Perturbation targets are matched by
message_id.
- The Studio’s saved session is sanitized: no model configurations (a
config can carry a literal key) and no runner closures leave the
session. Continuations re-supply the configuration from the sidebar, as
before.
- A failed final-summary call warns and returns the completed
transcript instead of destroying the run.
- An unparseable desire score is
NA, where it used to
become a zero that scored as real evidence. Unscored agents are rescored
individually, flow parameters are validated, and the selection metadata
records threshold-lowering and highest-below-threshold fallbacks.
- A truncated reply retried above a caller-set token cap announces the
escalation.
- Blank strings count zero words.
- Participation is reported as a spread, without a “balanced”
verdict.
- The analysis print shows the fitted topic count.
analyze_focus_group() gains speakers
(default "participants", which keeps the moderator out of
the text statistics) and language (English-specific methods
skip, with a note, for other languages).
- Imported transcripts match moderators by exact alias (“mod”,
“moderator”, “facilitator”, “interviewer”) and refuse ambiguity. A
substring match used to make “Modesto” a moderator.
- The flat-mode prompt carries the same truthful-disclosure line as
the role-flipped mode.
- Removed the unused
default_llmr_config() and
readr dependency; R floor aligned with LLMR at 4.1.
FocusGroup 0.5.1
Initial CRAN release.
run_focus_group() is the single high-level session
runner. It requires an explicit config, accepts
n_participants, guide, flow, and
message_mode, and performs a model-call cost preflight
before live work.
run_focus_group() returns a
focus_group_result with the stable fields
focus_group, transcript, summary,
participants, usage, and
metadata. Its print method gives a concise run
summary.
create_agents(),
create_agents_from_data(), and
create_agents_from_survey() construct agent-ID-keyed
rosters from supplied personas, in-memory records, labeled survey files,
and pre-rendered persona panels.
ConversationFlow is the public extension base. Built-in
round-robin, probabilistic, and desire-based flows are constructed with
create_conversation_flow().
- Model configuration arguments use
config; group-level
configuration uses admin_config. The FGAgent
configuration field is config.
- The
.runner seam accepts an experiments data frame with
config and messages list-columns and returns
those rows with at least response_text.
- Session logs give every row a unique integer
message_id
and record the moderator cycle as round, while retaining
phase.
analyze_focus_group() returns a
focus_group_analysis with stable fields, typed empty
components, and an issues table. Descriptive analysis runs
offline. Thematic analysis and model summaries require an explicit
config.
focus_group_from_transcript() accepts
moderator_id; when it is omitted, speaker identifiers
containing "mod" provide the fallback.
get_default_prompt_templates() contains only templates
used by supported package operations.
run_focus_studio() starts the optional Shiny interface
for running sessions, reading transcripts, and comparing continuations
from edited histories.
- The studio now exports both complete
.rds sessions and
transcript-only CSV files, and a finished run can be passed directly to
the Analyze tab.
- ANES participant selection now includes full rendered-persona
inspection and control over which respondent columns enter each
persona.
- The Analyze tab now presents
analyze_focus_group()
components, optional model themes and summaries, package guidance,
source provenance, and timing.
- Transcript mapping now chooses text and speaker defaults by column
name and keeps the two roles distinct when separate columns are
available.
- Continuation experiments now support three labeled treatment arms,
repeated runs per arm, true planned-call counts, retained responses,
summaries, and response-length comparisons.
- Studio run, analysis, model-analysis, and continuation actions are
disabled until their known inputs are ready, with the unmet requirement
shown beside each disabled action.
- Studio live paths honor the shared temperature, maximum output
token, and reasoning-effort settings; long text results use scrollable
output blocks.
- The Run tab now provides a topic-aware, line-based editor for all
five moderator-guide phases. Included phases, question counts, call
estimates, and both participant-source paths use the edited guide.
- Run configuration is grouped in collapsible sections while the run
action remains outside the sections.
- Transcript tables give text most of the available width, wrap
complete words, and retain hidden identifiers in a column-visibility
menu. Numeric tables use display-only rounding from
LLMR.shiny.
- TF-IDF results now show a user-selected number of ranked terms per
speaker in a table and, when ggplot2 is installed, a faceted bar
chart.