Commit graph

512 commits

Author SHA1 Message Date
Rohan Verma
d3da875658
Merge pull request #1599 from Thibaultjaigu/feat/requesty-provider
feat: add Requesty as a model provider
2026-07-13 13:03:20 -07:00
Rohan Verma
d1fa9306cb
Merge pull request #1597 from zzh-github/feature/openai-compatible-raw
Add raw OpenAI-compatible provider without /v1 normalization
2026-07-13 13:02:19 -07:00
Thibault Jaigu
2ff7ea4cb6 feat: add Requesty as a model provider
Add Requesty (https://requesty.ai), an OpenAI-compatible LLM router, as a
model provider by mirroring the existing OpenRouter integration.

Backend:
- app/services/requesty_model_normalizer.py: normalizes Requesty's /v1/models
  catalogue, mapping its flat capability booleans (supports_tool_calling/
  supports_vision/supports_image_generation) and context_window field onto the
  shared normalized shape (Requesty differs from OpenRouter's architecture +
  supported_parameters + context_length layout)
- provider_registry.py: Requesty ProviderSpec (OpenAI-compatible, base URL
  https://router.requesty.ai/v1, REQUESTY_API_KEY bearer auth)
- model_connection_service.py: key verification + live model discovery
- quality_score.py: Requesty score entry
- unit tests mirroring the OpenRouter normalizer coverage

Frontend:
- Requesty provider icon + registration, metadata entry, and base-url hint

Signed-off-by: Thibault Jaigu <thibault.jaigu@gmail.com>
2026-07-13 09:42:30 +01:00
zzh
a172e9c162 Add raw OpenAI-compatible provider without /v1 normalization 2026-07-13 00:08:30 +08:00
Anish Sarkar
e38ca19b18 Merge remote-tracking branch 'upstream/dev' into feat/instagram-scraper 2026-07-11 04:31:11 +05:30
Anish Sarkar
75c3addd2b test(instagram): cover PolarisMedia relay parsing and enriched media fields 2026-07-11 03:44:33 +05:30
Anish Sarkar
457be1871c feat(instagram): improve parsing of Instagram media IDs and mentions
- Enhanced the regular expression for mentions to prevent trailing punctuation from being included in handles.
- Added support for extracting media IDs from deep-link meta tags in anonymous posts.
- Updated unit tests to validate the new media ID extraction and ensure proper handling of mentions.
2026-07-11 03:06:04 +05:30
Anish Sarkar
d41ccb7edd feat(instagram): enhance Open Graph parsing for anonymous posts
- Added support for extracting likes, comments, username, timestamp, and caption from Open Graph meta tags.
- Implemented fallback mechanisms to ensure graceful degradation when expected data is missing.
- Updated unit tests to validate new parsing logic and ensure robustness against unrecognized formats.
2026-07-11 02:56:29 +05:30
Anish Sarkar
4bd3ec275c delete(instagram): remove obsolete post fixture for Instagram tests 2026-07-11 02:50:26 +05:30
Anish Sarkar
ba70ae1f45 test(instagram): update platform tests and add discovery fixtures 2026-07-11 02:21:14 +05:30
Anish Sarkar
82a63043f7 test(instagram): update capability tests for schema changes 2026-07-11 02:21:11 +05:30
CREDO23
8f825b7b3c test(tiktok): cover item_list retry-on-empty loop 2026-07-10 17:25:48 +02:00
CREDO23
867e940911 Merge upstream/dev into feature/tiktok-scraper
Sync with the advanced dev tip so the PR compares against current dev
(drops already-merged commits from the diff). No history rewritten.
2026-07-09 20:15:20 +02:00
CREDO23
bcfc3a5c3a test(capabilities): expect export_run in the agent tool manifest
The run-reader set gained export_run (CSV export of a stored run), but this
manifest assertion still expected only read_run/search_run. Add export_run so
the agent-door test reflects the shipped readers.
2026-07-09 20:04:30 +02:00
CREDO23
67b5472b9f feat(tiktok): add tiktok.trending verb for the Explore feed
The Explore feed (/api/explore/item_list) is a global trending-video feed
served to anonymous sessions, and it returns the same itemStruct shape as the
other listings — so the verb reuses parse_video, the listing flow, the
TikTokVideoItem output, and the per-video billing meter wholesale. Adds a
browser-capture marker + fetch_trending, a synthetic-target orchestrator entry,
and the tiktok.trending capability, surfaced on the chat subagent.
2026-07-09 18:52:56 +02:00
CREDO23
7723b5b8b6 feat(tiktok): add tiktok.comments verb for public comment scraping
Comments load over a signed /api/comment/list XHR that TikTok serves to
anonymous sessions once the comments panel is opened (unlike profile-video and
general-search feeds), so this is a reliable verb. Given video URLs it returns
CommentItems (text, author, likes, reply counts; replies carry repliesToId),
deduped per video, capped, and degraded to an ErrorItem for empty/withheld
videos or a bad_url ErrorItem for non-video inputs.

Generalizes the browser capture over a pluggable interaction step so the
comments flow (open panel, scroll the panel to paginate) reuses the same
warm+capture scaffolding as listing/user-search. Billed per comment on a new
TIKTOK_COMMENT meter (TIKTOK_MICROS_PER_COMMENT, matching the per-comment
market), surfaced on the chat subagent alongside tiktok.scrape/user_search.
2026-07-09 18:35:26 +02:00
CREDO23
192b6dc31a feat(tiktok): add tiktok.user_search verb for account discovery
Video/general search is login-walled for anonymous sessions, but the Users
tab (/api/search/user) returns public account records without a redirect, so
this exposes the one reliably-unblocked search path. A keyword yields
TikTokProfileItems (name, followers, bio, verification), deduped per query,
capped, and degraded to an ErrorItem when a query is empty/withheld.

Reuses the browser capture (generalized over XHR markers + extractor) and the
shared profile item shape. Billed per account on a new TIKTOK_USER meter
(TIKTOK_MICROS_PER_USER), surfaced on the chat subagent alongside tiktok.scrape.
2026-07-09 18:00:40 +02:00
CREDO23
6652efd035 feat(tiktok): return profile metadata even when video listing is gated
A profile's account data (name, followers, bio, verification) lives in the
page's rehydration blob and loads over plain HTTP without a signed request,
so emit it first and always. The video listing needs a signed item_list XHR
that TikTok withholds from anonymous sessions, so it stays best-effort and
degrades to an ErrorItem. A blocked profile now yields its metadata instead
of only an ErrorItem.
2026-07-09 17:48:19 +02:00
Anish Sarkar
2c251f9e07 test(instagram): add tests for anonymous profile and hashtag discovery
Introduced new tests to validate the behavior of the Instagram scraper when discovering anonymous profiles and handling hashtag searches. The tests ensure that profile lookups succeed without requiring authentication, while hashtag searches correctly raise an error when access is blocked, enhancing the robustness of the scraper's functionality.
2026-07-09 20:26:18 +05:30
Anish Sarkar
0309e1d28a refactor(instagram): streamline login redirect handling in tests
Revised tests for handling login redirects to improve clarity and efficiency. The test for immediate failure on endpoint-level walls was updated to prevent unnecessary IP rotations. Additionally, new tests were added to ensure that partial results are returned when encountering blocked targets, enhancing the resilience of the scraper's batch processing.
2026-07-09 19:56:55 +05:30
Anish Sarkar
4af0b9dbbd test(instagram): add regression test for InstagramAccessBlockedError handling
Introduced a new test to ensure that InstagramAccessBlockedError is properly propagated without causing deadlocks in the scraper's fan_out function. This regression test verifies that the error surfaces correctly when a blocked job is encountered, enhancing the resilience of the fetch process.
2026-07-09 19:09:06 +05:30
Anish Sarkar
6384409b1d test(instagram): enhance fetch resilience tests for login redirects
Added tests to handle scenarios where a 200 status response is redirected to a login page, ensuring proper rotation of IPs and raising errors when persistent login redirects occur. Updated the _FakeSession class to support login wall detection.
2026-07-09 18:29:29 +05:30
Anish Sarkar
e151346fbe test(chat): include Instagram in subagent composition test 2026-07-09 16:03:23 +05:30
Anish Sarkar
458d223ef8 test(billing): cover Instagram item and comment billing 2026-07-09 16:02:54 +05:30
Anish Sarkar
2e66e714e2 test(instagram): add capability unit tests 2026-07-09 16:02:48 +05:30
Anish Sarkar
9da136070d test(instagram): add platform-layer unit tests 2026-07-09 16:02:41 +05:30
Rohan Verma
3eb485ff31
Merge pull request #1575 from SyntaxSawdust/feature/1354-embedding-base-url
Support separate embedding base URL configuration
2026-07-08 17:11:42 -07:00
Rohan Verma
d2ed0bb382
Merge pull request #1570 from pelazas/fix/scheduler-task-map-bookstack
fix: dispatch periodic BookStack indexing from the scheduler task_map
2026-07-08 15:07:38 -07:00
CREDO23
ba375ea3ee feat(tiktok): emit graceful ErrorItem for blocked/empty listings
Profile and search feeds are trust-gated: an anonymous headless session
gets an empty item_list (profile) or no results XHR (search), while
hashtag feeds load. A zero-item listing now yields one honest ErrorItem
(errorCode="no_items") instead of vanishing silently, and ErrorItems are
excluded from billing so a blocked target is surfaced but never charged.
2026-07-08 23:14:50 +02:00
CREDO23
ed1c3a1f3d feat(tiktok): expose tiktok.scrape on MCP, chat subagent, playground 2026-07-08 20:20:20 +02:00
CREDO23
2943d8b23c feat(tiktok): tiktok.scrape capability + billing wire-up 2026-07-08 18:21:44 +02:00
CREDO23
ad8b73477a feat(tiktok): browser-driven signed listings 2026-07-08 16:37:36 +02:00
CREDO23
daa0856c44 feat(tiktok): blob-first orchestrator + video flow 2026-07-08 16:07:07 +02:00
CREDO23
44b3e640d3 feat(tiktok): rotate-on-block fetch session 2026-07-08 15:51:17 +02:00
CREDO23
5688ab0678 feat(tiktok): scrape input schema 2026-07-08 15:51:17 +02:00
CREDO23
ef66063bfc feat(tiktok): video normalizer and parser tests 2026-07-08 15:40:50 +02:00
CREDO23
8840fd2c53 feat(tiktok): rehydration blob extractor 2026-07-08 15:40:21 +02:00
CREDO23
b2d387f994 feat(tiktok): URL target resolver 2026-07-08 15:40:07 +02:00
Dustin Persek
41edac7641 Merge remote-tracking branch 'upstream/dev' into feature/1354-embedding-base-url
# Conflicts:
#	surfsense_web/content/docs/docker-installation/docker-compose.mdx
#	surfsense_web/content/docs/manual-installation.mdx
2026-07-07 14:19:40 -04:00
DESKTOP-RTLN3BA\$punk
b477d33cba Merge commit 'fa7075fde6' into dev 2026-07-07 00:39:58 -07:00
DESKTOP-RTLN3BA\$punk
9a9a78e7ef refactor: improve session management and concurrency in Google Search fetcher
- Introduced a semaphore to limit concurrent page renders, enhancing resource management.
- Updated session handling to defer browser closure until all in-flight renders are complete.
- Improved comments for clarity on the behavior of concurrent fetches and session lifecycle.
- Cleaned up imports in alembic environment and migration flow scripts for consistency.
2026-07-06 22:33:40 -07:00
DESKTOP-RTLN3BA\$punk
1c9ab207ef chore: bumped version to 0.0.31 2026-07-06 21:43:15 -07:00
DESKTOP-RTLN3BA\$punk
1fd58752a3 feat: update environment variables and enhance scraping capabilities
- Adjusted Google Maps and YouTube micro pricing in the .env.example file for better cost management.
- Introduced new environment variables for captcha solving and stealth browser hardening to improve scraping resilience.
- Removed outdated smoke test for scraper API endpoints to streamline testing.
- Enhanced anonymous chat agent's system prompt to clarify capabilities and suggest account creation for advanced features.
- Updated Reddit fetch logic to prioritize new session handling and improve resilience against IP-related issues.
- Added compacting functionality for scraper results to optimize data handling and presentation.
- Improved workspace and document management tools with clearer descriptions and enhanced functionality.
- Introduced new UI components for agent setup guidance in the web application.
2026-07-06 20:27:36 -07:00
DESKTOP-RTLN3BA\$punk
271a21aee6 feat: docs and ui tweaks 2026-07-06 19:26:35 -07:00
DESKTOP-RTLN3BA\$punk
50f2d095aa feat: api playground, other tweaks 2026-07-06 16:45:04 -07:00
Anish Sarkar
cda232101f feat(workspace): remove AI file sorting feature and related components 2026-07-06 10:50:20 +05:30
Dustin Persek
6fafedca6a Support separate embedding base URL 2026-07-05 22:33:09 -04:00
DESKTOP-RTLN3BA\$punk
80927a2872 feat(billing): meter platform scrapers per item; consolidate web scraping onto web.crawl
Add per-item, per-platform billing for the platform-native connectors (Reddit, Google Search, Google Maps places/reviews, YouTube videos/comments) through the capability gate/charge seam. Rates are config-driven with a shared wallet-credit module (wallet_credit) and a dedicated PlatformScrapeCreditService; agent and REST capability runs now record cost_micros. Google Maps scrape dual-meters places and attached reviews.

Remove the main-agent scrape_webpage tool now that the web.crawl capability covers single-page (maxCrawlDepth=0) and site crawling. The main agent now reaches crawling via task(web_crawler, ...). Update prompts, tool catalog, receipts, skills, proprietary docs, and tests; drop the obsolete chat-turn crawl fold path.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 17:08:01 -07:00
DESKTOP-RTLN3BA\$punk
c600a2920b feat(crawler): harden web crawler and agent tooling for real-world research tasks
Crawler engine: escalate thin JS-shell pages past static fetch, repair
currency-lossy extractions, emit categorized link records with anchor
provenance, and decode percent-encoded mailto:/tel: contacts; site crawls
reuse the connector ladder via Scrapling's spider engine with URL pattern
filters. Agent layer: read_run gains char_offset paging, search_run gains
match excerpts, new export_run turns stored runs into CSV workspace docs;
reddit search fair-shares the item budget across queries and dedupes
cross-query hits. Subagent prompts and routing teach crawl-after-search,
full-run coverage before summarizing, and executing own-tool next steps
instead of returning partial.
2026-07-05 03:51:16 -07:00
DESKTOP-RTLN3BA\$punk
b6e378b070 feat(runs): introduce Run and ToolOutputSpill models for logging scraper invocations
- Added `Run` model to track scraper invocations, including metadata such as status, input, and output.
- Implemented `ToolOutputSpill` model to store context-editing spills separately from user-facing logs.
- Updated middleware to handle spill placeholders and integrate with the new models.
- Enhanced REST API to record runs and expose run history through new endpoints.
- Adjusted tests to validate the new run logging functionality and ensure proper integration with existing capabilities.
2026-07-04 22:55:55 -07:00