---
name: skill-concept-prompt-designer
description: Turn user utterances into well-formed SAM 3 concept prompts with splitting, disambiguation, and fallbacks
version: 1.0.0
phase: 4
lesson: 24
tags: [sam3, open-vocab, prompt-engineering, segmentation]
---

# Concept Prompt Designer

SAM 3's accuracy depends heavily on how the concept prompt is phrased. This skill normalises free-form user utterances into prompts that SAM 3 handles well.

## When to use

- Building a UI that accepts natural-language object queries.
- Exposing SAM 3 through an API where upstream callers send sentences.
- Debugging poor SAM 3 matches — often the prompt is malformed, not the model.

## Inputs

- `utterance`: raw user string.
- `context`: optional domain hint (e.g. "surveillance", "medical", "retail").
- `max_concepts`: maximum concepts to extract per utterance; default 5.

## Rules SAM 3 prefers

- **Short noun phrases, not sentences.** `"cat"` wins over `"there is a cat"`.
- **Concrete nouns.** `"skateboard"` wins over `"thing to ride on"`.
- **Modifiers immediately before the noun.** `"red car"` wins over `"car that is red"`.
- **Lowercase.** SAM 3 is robust but empirically slightly better on lowercase inputs.
- **Singular or plural.** Both work; plural helps when multiple instances are expected.

## Steps

1. **Tokenise by common separators** — comma, semicolon, "and", "or", "&".
2. **Drop filler prefixes** — "find", "show me", "segment", "detect", "locate", "a", "an", "the".
3. **Keep prepositional modifiers** only if they are visual — `"striped red umbrella"` yes, `"umbrella from yesterday"` no (the `"from yesterday"` is not in-image).
4. **Disambiguate collisions** using the optional `context`:
   - `"window"` in surveillance context -> `"building window"`.
   - `"window"` in medical context -> often error; suggest user clarify.
5. **Fallback** to the exact string if splitting yields zero concepts *and* the utterance contains at least one concrete noun. If no concrete noun can be extracted, do not emit a concept — return only warnings and ask the user to clarify (see Rules).
6. **Cap at `max_concepts`.** If more concepts were extracted than the caller asked for, keep the first `max_concepts` in utterance order and emit the rest under `dropped` with reason `"exceeded max_concepts"`. This keeps latency bounded when a user pastes a long enumeration.

## Output format

```
[designed prompts]
  utterance:    <original>
  concepts:     ["concept_1", "concept_2", ...]
  dropped:      ["filler_1", ...]
  warnings:     ["concept too abstract", "may match many classes", ...]

[sam3 calls]
  For each concept run: sam3.detect(image, concept)
  Merge outputs with distinct concept tags per detection.
```

## Examples

```
in:  "can you find me a cat or two dogs?"
out: ["cat", "dogs"]
dropped: ["can you find me", "a", "or two", "?"]
note: "dogs" kept plural because the utterance says "two dogs" — plural hint preserved.

in:  "segment the big red truck and the blue sedan"
out: ["big red truck", "blue sedan"]
dropped: ["segment", "the", "and"]

in:  "thing near the door"
out: ["door"]
warnings: ["'thing' is too abstract for SAM 3; fell back to 'door'"]

in:  "striped red umbrella, green hat, pink balloon"
out: ["striped red umbrella", "green hat", "pink balloon"]
```

## Rules

- Never pass sentences longer than 8 words to SAM 3 — accuracy drops above that.
- When an utterance contains no extractable concrete nouns, do not run SAM 3; return the warnings and ask for clarification.
- Do not split on punctuation inside quoted strings; preserve `"black and white cat"` as one concept if it is quoted.
- Always log the original utterance and the derived concepts for production debugging.
