Skip to content

Feat/youtube transcripts UI#26

Merged
Krasimir-Hristov merged 4 commits into
mainfrom
feat/youtube-transcripts-ui
May 25, 2026
Merged

Feat/youtube transcripts UI#26
Krasimir-Hristov merged 4 commits into
mainfrom
feat/youtube-transcripts-ui

Conversation

@Krasimir-Hristov

@Krasimir-Hristov Krasimir-Hristov commented May 25, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • Documentation

    • Added comprehensive project documentation covering AXON features, architecture, and setup instructions.
    • Updated implementation roadmap with Phase 11 planning details.
  • Style

    • Reformatted API call structure for improved code readability.

Review Change Stack

@coderabbitai

coderabbitai Bot commented May 25, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@Krasimir-Hristov, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 49 minutes and 53 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: f4ad0a4e-aab7-4132-8791-6a6f7ca3cc54

📥 Commits

Reviewing files that changed from the base of the PR and between b855eec and b551157.

📒 Files selected for processing (2)
  • README.md
  • implementationPlan.MD

Walkthrough

This PR adds comprehensive project documentation (README), detailed planning for a new Deep Search Agent feature (PHASE 11 in implementationPlan.MD), and a minor formatting adjustment to a frontend API helper function. The changes are primarily documentation and planning with no implementation code.

Changes

Project Documentation

Layer / File(s) Summary
Project Overview and Features
README.md
AXON introduced as persistent, encrypted, semantically-searchable AI assistant featuring streaming chat, encrypted memory with semantic search, document/video ingestion, text-to-speech, PII masking, rate limiting, and Supabase Auth.
Architecture and Technology Stack
README.md
Next.js frontend connects to FastAPI/LangGraph backend supervisor that delegates to sub-agents; LLM calls via OpenRouter; storage/auth/RLS via Supabase Postgres. Repository organized by feature-based structure.
Setup, Configuration, and API Reference
README.md
Setup instructions for Supabase, backend (uv/spacy/uvicorn), frontend (pnpm). Backend and frontend environment variable templates. Security notes cover encryption, PII masking, JWT-derived user IDs, Postgres RLS, and rate limiting strategy. Selected API surface table and license statement.

Deep Search Agent Feature Plan

Layer / File(s) Summary
Agent Flow and Database Design
implementationPlan.MD
Supervisor transfers deep-research queries to deepsearch agent, which executes Tavily searches and synthesizes summary plus key findings and sources. Results persist to new deep_searches table with Postgres RLS, memory-entry foreign key, indexes, and cascade-delete semantics.
Backend Services, Agent Nodes, and State Wiring
implementationPlan.MD
Backend models/validation, service CRUD operations with re-embedding on summary edit, rate-limited REST endpoints. Deepsearch agent node executes Tavily search and synthesizes results. Save-tool node parses context, validates payload, persists to database, links memory entry. State adds deepsearch_context; supervisor/orchestrator updated for handoff and save; router mounted on FastAPI app.
Frontend Implementation and Verification
implementationPlan.MD
TypeScript types, hooks for list/delete/update with optimistic title editing and re-embed triggers, card/library UI with expandable sources and summary edit mode, deepsearch page routing, chat toolbar integration, and API functions with validation. Verification checklist covers UI/API behavior, Tavily error handling, empty PATCH rejection, and delete/edit correctness across both database tables.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related PRs

  • Krasimir-Hristov/AXON#24: Introduced the renameAudioEntry endpoint and UI that the current PR reformats in frontend/lib/api.ts.
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Title check ⚠️ Warning The PR title 'Feat/youtube transcripts UI' does not align with the actual changes: README documentation, a minor reformatting in frontend/lib/api.ts (renameAudioEntry), and a new implementationPlan.MD section for a Deep Search Agent. The title suggests YouTube transcript UI work, but the substantive changes are documentation and architectural planning unrelated to YouTube transcripts. Revise the title to reflect the actual changes, such as 'Add project README, Deep Search agent planning, and minor API formatting' or split into separate PRs for different change categories.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/youtube-transcripts-ui

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai 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.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@implementationPlan.MD`:
- Around line 617-621: The memory text format for Deep Search should include a
source tag like YouTube does; update the embedding text in the save_deep_search
flow to use a prefixed format so memory entries are filterable by source.
Specifically, change where service.save_deep_search builds the memory text
(currently f"{query}\n\n{summary}") to use a tagged pattern such as "[Deep
Search] {query}: {summary}" before creating memory_entries and storing the
returned memory_entry_id; ensure any tests or consumers expecting the old string
are adjusted accordingly.
- Around line 632-642: Add explicit LLM synthesis error handling inside
deepsearch_agent_node: wrap the OpenRouter/LLM call (using
settings.deepsearch_model) in a try/except that catches timeouts,
rate-limit/errors from the client, and malformed/parseable responses (including
JSON decode errors), apply an optional retry/backoff if appropriate, and on
persistent failure return a descriptive ToolMessage that explains the problem
without exposing raw exception traces; continue to validate the LLM output with
DeepSearchPayload and if validation fails fall back to the raw concatenation
strategy described (instead of crashing), and ensure any internal exceptions are
logged internally but not leaked to the returned ToolMessage.
- Around line 617-630: The save_deep_search flow currently inserts into
deep_searches then calls the embedding + inserts into memory_entries and updates
deep_searches.memory_entry_id; decide and implement one consistent strategy:
either wrap the multi-step work in a DB transaction so any failure in embedding
or memory_entries insertion rolls back the initial deep_searches INSERT, or
adopt the resilient YouTube pattern (preferred) where embedding/memory
cross-indexing failures are non-fatal—log the error with context (include
deep_search id, query, and the exception), leave the deep_searchs row committed
with memory_entry_id NULL, and continue; likewise, in update_deep_search when
summary changes, if memory_entry_id is NULL attempt to create a new memory entry
(and set memory_entry_id), and if that fails log and keep the deep_search
updated without a memory_entry_id; ensure all log messages reference
save_deep_search and update_deep_search and include the memory_entries and
memory_entry_id context so the failure is visible for debugging.
- Around line 598-609: The frontend enforces title <=200 and summary <=10,000
but the backend schemas lack these limits; update the Pydantic models in
schemas.py (e.g., the DeepSearchCreate/DeepSearchUpdate or equivalent model used
for deep search input) to declare title: str = Field(..., max_length=200) and
summary: str = Field(..., max_length=10000) and/or add `@validator` methods to
enforce/strip length and raise ValidationError, ensuring the service layer uses
those schemas for create/update requests so direct API calls cannot bypass the
limits.

In `@README.md`:
- Line 191: Update the README table row that references `/api/v1/youtube` to
capitalize the service name "YouTube" in the Notes/description column (e.g.,
change "Saved video transcripts" to "Saved YouTube video transcripts" or
otherwise replace any lowercase "youtube" with "YouTube") so the endpoint
reference is consistent with the existing "YouTube agent" phrasing.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 721d1dc8-b193-48ca-8fe1-af3f0576de56

📥 Commits

Reviewing files that changed from the base of the PR and between 403a747 and b855eec.

📒 Files selected for processing (3)
  • README.md
  • frontend/lib/api.ts
  • implementationPlan.MD

Comment thread implementationPlan.MD
Comment thread implementationPlan.MD Outdated
Comment thread implementationPlan.MD
Comment thread implementationPlan.MD Outdated
Comment thread README.md Outdated
- README: capitalize 'YouTube' in /api/v1/youtube endpoint description
- Plan: update deep search memory text to tagged format '[Deep Search] query: summary'
- Plan: add Pydantic field length limits (title <=200, summary <=10000) to DeepSearchCreate/Patch schemas
- Plan: adopt resilient non-fatal save strategy (YouTube pattern) for memory cross-indexing failures
- Plan: expand deepsearch_agent_node error handling to cover LLM timeouts, rate-limits, JSONDecodeError, and log-without-leak rule
@Krasimir-Hristov
Krasimir-Hristov merged commit e1eb8e9 into main May 25, 2026
2 checks passed
@Krasimir-Hristov
Krasimir-Hristov deleted the feat/youtube-transcripts-ui branch May 25, 2026 21:26
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.

1 participant