Tavily web search and extract for AppKit apps
Mantenedores costumam responder em até 3 dias
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Funcionalidade
- Clareza
- Razoavelmente clara
- Status de atividade
- Ativa
- Stack de tecnologia
- node.js, typescript
- Domínio
- api, backend, developer-experience
Direção de pesquisa
Comece comparando a estrutura proposta de packages/appkit/src/plugins/tavily/ com os plugins genie e serving existentes; em seguida, leia o contrato ToolProvider de agents e as convenções de sincronização de plugins do appkit. O trabalho da v1 estará concluído quando search e extract, o manifesto de secrets, o schema de configuração, a integração com o toolkit, os testes e uma página de documentação estiverem cobertos, e as questões de packaging, beta-gating e dependências estiverem resolvidas.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Summary
We propose adding a Tavily plugin to AppKit, giving Databricks Apps first-class access to real-time web data: search, content extraction, and (later) crawling and deep research. Tavily is a web access API built specifically for LLMs and agents — results come back as clean, relevance-scored, LLM-ready content rather than raw HTML.
We're the Tavily team, and we'd like to contribute this plugin ourselves — this issue is to align on scope and design before we open the PR.
Motivation
AppKit apps are strong on Lakehouse-native data (analytics, Genie, vector search) but have no built-in way to reach outside the workspace. Common patterns this unlocks:
- Grounded AI agents — the agents plugin resolves
plugin:NAMEtool providers; a Tavily plugin exposing atoolkit()would let any AppKit agent do web search/extraction with one line of frontmatter (tools: [plugin:tavily]), complementing Genie and vector-search for questions that need current, external information. - RAG enrichment — combine vector-search results over internal docs with fresh web context in serving/agents flows.
- Data enrichment apps — enrich entities from Lakehouse tables (companies, products, tickers) with live web data.
Proposed design
A core plugin following the existing conventions (packages/appkit/src/plugins/tavily/):
Manifest — one required secret resource (permission: READ) holding the Tavily API key, surfaced via a TAVILY_API_KEY env field, so databricks apps init and appkit plugin sync wire it up like any other resource. No OBO semantics — the key is app-level, like a service principal credential.
Server API — typed methods plus injected routes:
const app = await createApp({ plugins: [new TavilyPlugin({ /* defaults */ })] });
await app.tavily.search("latest EU AI Act enforcement actions", {
maxResults: 5,
timeRange: "month",
});
await app.tavily.extract(["https://example.com/report"], { format: "markdown" });
POST /api/tavily/searchandPOST /api/tavily/extract, validated with Zod like other plugins.- All outbound calls go through
this.execute(), so caching (search results are very cacheable), retry, timeout, and OpenTelemetry tracing come for free from the interceptor chain.
Agents integration — implement the ToolProvider contract (toolkit()), so agents get tavily_search / tavily_extract tools, subject to the existing tool-approval gate.
Config schema (sketch) —
{
"apiKey": { /* from secret resource / TAVILY_API_KEY */ },
"search": { "maxResults": 5, "searchDepth": "basic", "includeDomains": [], "excludeDomains": [] },
"cache": { "ttl": 300000 },
"timeout": 30000
}
Scope
- v1:
search+extract, manifest, config schema, agentstoolkit(), tests, docs page. - Later (separate PRs):
crawl/map, deepresearch(long-running — fits the SSE streaming machinery), and optionally anappkit-uiresults component.
Open questions for maintainers
- Packaging — core plugin in
packages/appkit(like genie/serving), or would you prefer third-party integrations in a separate package? This would be the first non-Databricks-service plugin, so happy to follow whatever precedent you want to set. - Beta gating — should it ship via
beta-exportsinitially? - Dependency policy — we'd use the official
@tavily/coreSDK (MIT); fine, or do you prefer plainfetchfor supply-chain reasons?
If this direction sounds good, we'll follow up with the PR.
- Linguagem predominante
- TypeScript
- Estrelas
- 119
- Forks
- 36
- Merge médio
- 4d 16h
- PRs com merge (30d)
- 37
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de databricks/appkit
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 55/100
databricks/appkit#729 ·
Mantenedores costumam responder em até 3 dias
-
@databricks/lakebase: pool drops maxLifetimeSeconds and other pg options, so connections never recycle and Unity Catalog claims access fails after 4 hoursTalvez já em andamento @billmcmillin assumiu há 5 dias. Aberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 20/100
databricks/appkit#718 ·
Mantenedores costumam responder em até 3 dias
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
databricks/appkit#699 ·
Mantenedores costumam responder em até 3 dias
-
Dificuldade 3/5 Meio dia Facilidade para iniciantes 42/100
databricks/appkit#656 · 1 comentário ·
Mantenedores costumam responder em até 3 dias
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 28/100
databricks/appkit#648 · 2 comentários ·
Mantenedores costumam responder em até 3 dias
Todas as issues de databricks/appkit
Issues semelhantes
-
Add "append" and "prepend" slots for vue-vuetify extended renderersTalvez já em andamento @simeyc assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
eclipsesource/jsonforms#2668 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Mantenedores costumam responder em até 1 dia
-
README の通知条件を実際の判定処理に合わせるTalvez já em andamento @unhappychoice assumiu hoje. Abertafactory:in-progress priority:medium
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
unhappychoice/oss-issue-opener#395 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
bug Website
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
OWASP/OWASP-Hunting#88 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Mantenedores costumam responder em até 1 dia