Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ CTX_REDIS_INSTANCE_ID=
DEMO_USER_ID=
DEMO_USER_NAME=
DEMO_USER_EMAIL=
# Available domains: reddash, electrohub, healthcare
# Available domains: reddash, electrohub, healthcare, airline-support, finance-researcher
DEMO_DOMAIN=reddash

# ═══════════════════════════════════════════════════════
Expand Down
29 changes: 16 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ The repo currently includes built-in demo domains for:

- `reddash` — food-delivery support
- `electrohub` — electronics retail and order support
- `airline-support` — passenger support across disruptions, reassignment, traveller profile lookup, and scoped semantic caching
- `finance-researcher` — ShiftIQ watchlist research across filings, metrics, prices, and live updates
- `healthcare` — RedHealthConnect patient success portal (appointments, referrals, providers)
- `airline-support` — synthetic airline support across disruptions, reassignment, and traveller profile lookup

**Two modes, same UI:**

Expand Down Expand Up @@ -126,15 +126,17 @@ Open http://localhost:3040 and try:
- In `electrohub`:
- *"Show me my recent ElectroHub orders."*
- *"Can I pick that up at my local store?"*
- In `airline-support`:
- *"My flight was disrupted. What happened?"*
- *"Can I still check in for the new flight?"*
- *"What help do I usually get after a cancellation?"*
- *"What is the status of ZX018 today?"*
- In `finance-researcher` / ShiftIQ:
- *"Walk me through Oracle's latest quarter using both the filing and the structured metrics."*
- *"What's new in my watchlist this week?"*
- In `healthcare`:
- *"Do I have any upcoming appointments?"*
- *"Find me a cardiologist accepting new patients?"*
- In `airline-support`:
- *"My flight was disrupted. What happened?"*
- *"Can I still check in for the new flight?"*

---

Expand Down Expand Up @@ -214,9 +216,9 @@ See:

- [`domains/reddash/docs/demo_paths.md`](domains/reddash/docs/demo_paths.md)
- [`domains/electrohub/docs/demo_paths.md`](domains/electrohub/docs/demo_paths.md)
- [`domains/airline-support/docs/demo_paths.md`](domains/airline-support/docs/demo_paths.md)
- [`domains/finance-researcher/docs/demo_paths.md`](domains/finance-researcher/docs/demo_paths.md)
- [`domains/healthcare/docs/demo_paths.md`](domains/healthcare/docs/demo_paths.md)
- [`domains/airline-support/docs/demo_paths.md`](domains/airline-support/docs/demo_paths.md)

Reddash includes four scripted conversation flows:

Expand All @@ -227,19 +229,20 @@ Reddash includes four scripted conversation flows:

> **Tip:** After each path, toggle to Simple RAG mode and ask the same question to see the contrast.

Airline support includes flagship and semantic-cache paths for:

1. **Disruption recovery** — explain a cancelled flight, the updated itinerary, and next steps
2. **Post-rebooking serviceability** — answer check-in, baggage, and terminal questions against the reassigned trip
3. **Traveller profile snapshot** — backup-only path for read-only identity and profile grounding
4. **Scoped semantic caching** — demonstrate public flight-status reuse, cohort-scoped passenger service guidance, and personalized support that intentionally stays out of the cache

ShiftIQ includes flagship paths for:

1. **Cross-company narrative comparison** — compare the latest filings and research chunks across peers
2. **Metric-plus-document reasoning** — explain a quarter using both structured metrics and source documents
3. **Peer trend analysis** — compare price and fundamentals trends, including RedisTimeSeries-backed queries
4. **Live watchlist updates** — explain what changed this week using normalized coverage events and Redis Streams

Airline support includes flagship paths for:

1. **Disruption recovery** — explain a cancelled flight, the updated itinerary, and next steps
2. **Post-rebooking serviceability** — answer check-in, baggage, and terminal questions against the reassigned trip
3. **Traveller profile snapshot** — backup-only path for read-only identity and profile grounding

## Presentations

Keep domain-specific presentations with the domain itself:
Expand Down Expand Up @@ -290,9 +293,9 @@ context-engine-demos/
├── domains/
│ ├── reddash/ # Delivery-support reference domain
│ ├── electrohub/ # Electronics retail reference domain
│ ├── airline-support/ # Passenger support + semantic cache reference domain
│ ├── finance-researcher/ # ShiftIQ watchlist research domain
│ ├── healthcare/ # Patient success portal domain
│ └── airline-support/ # Airline disruption and trip support domain
│ └── healthcare/ # Patient success portal domain
│ ├── domain.py # DOMAIN export implementing the contract
│ ├── schema.py # Entity definitions
│ ├── prompt.py # Domain prompt/playbooks
Expand Down
2 changes: 1 addition & 1 deletion backend/app/contracts.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ class ChatRequest(BaseModel):
messages: list[ChatMessage]
mode: Literal["context_surfaces", "simple_rag"] = "context_surfaces"
thread_id: str | None = None

demo_user_id: str | None = None
22 changes: 22 additions & 0 deletions backend/app/core/domain_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,26 @@ class IdentityConfig(BaseModel):
description: str


class SemanticCacheConfig(BaseModel):
enabled: bool = False
cache_name: str = ""
distance_threshold: float = 0.12
ttl_seconds: int = 1800


class InternalToolAccessControl(BaseModel):
access_control_enabled: bool = False
touched_entity_classes: list[str] = Field(default_factory=list)
access_class_override: str | None = None


class DemoUserOption(BaseModel):
id: str
label: str
subtitle: str | None = None
cache_group_id: str | None = None


class DomainManifest(BaseModel):
id: str
version: str = "1"
Expand All @@ -98,12 +118,14 @@ class DomainManifest(BaseModel):
namespace: NamespaceConfig
rag: RagConfig
identity: IdentityConfig
semantic_cache: SemanticCacheConfig = Field(default_factory=SemanticCacheConfig)


class InternalToolDefinition(BaseModel):
name: str
description: str
input_schema: dict[str, Any] = Field(default_factory=lambda: {"type": "object", "properties": {}, "required": []})
access_control: InternalToolAccessControl = Field(default_factory=InternalToolAccessControl)


class GeneratedDataset(BaseModel):
Expand Down
4 changes: 4 additions & 0 deletions backend/app/langgraph_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,10 @@ async def create_checkpointer(settings: Settings) -> AsyncRedisSaver:
domain = get_active_domain(settings)
checkpointer = AsyncRedisSaver(
redis_url=redis_url,
connection_args={
"max_connections": settings.redis_max_connections,
"health_check_interval": 30,
},
checkpoint_prefix=domain.manifest.namespace.checkpoint_prefix,
checkpoint_write_prefix=domain.manifest.namespace.checkpoint_write_prefix,
)
Expand Down
Loading