Migrar desde Exa
Mantén exa-py o exa-js. Cambia la dirección base y la key.
typesearch tiene una capa de compatibilidad que habla la API de Exa: los mismos parámetros, la misma forma de respuesta y los mismos errores. Con los SDKs oficiales, migrar son dos líneas.
from exa_py import Exa
# antes: exa = Exa(api_key=EXA_API_KEY)
exa = Exa(api_key=TYPESEARCH_API_KEY, base_url="https://api.typesearch.ai/compat/exa")
results = exa.search("el dólar", num_results=10, type="fast", include_domains=["infobae.com"])
similar = exa.find_similar(results.results[0].url, exclude_source_domain=True)
pages = exa.get_contents([r.url for r in results.results], highlights=True)Están soportados /search, /findSimilar y /contents. La key va en el encabezado que ya usa el SDK.
Parámetros
| Exa | En typesearch |
|---|---|
query, numResults | Igual. Hasta 50 resultados (limited:numResults si pides más). |
type | instant → ultra · fast → fast · auto, neural, keyword, hybrid → normal · deep* → deep. |
includeDomains, excludeDomains | Igual, hasta 20. *.dominio.com también. |
startPublishedDate, endPublishedDate | Igual. |
includeText, excludeText | Sobre título, bajada y fragmentos (approximated:includeText). |
category | news o nada. Cualquier otra categoría responde vacío sin buscar ni cobrar (unsupported:category). |
contents.highlights | Fragmentos textuales de las notas leídas; la bajada en las demás. |
contents.text | Un extracto breve, nunca la página completa (limited:text). |
contents.summary | No se genera: no redactamos resúmenes (unsupported:summary). |
/findSimilar | Notas del índice sobre la misma noticia. excludeSourceDomain funciona. |
/contents | Metadatos y extractos breves. Con highlights.query, el modelo los elige. |
Nada se rompe en silencio
Lo que no soportamos se acepta y se informa en el encabezado X-Compat-Warnings de la respuesta
—ignored:…, limited:…, approximated:… o unsupported:…—, así el código que migras sigue
funcionando. Sólo lo que cambiaría el sentido del pedido es un error, con el formato de Exa:
{ requestId, error, tag }.
Lo nuestro
Agrega un campo typesearch al cuerpo del pedido para lo que Exa no tiene: tono, lo esencial, un modo o un
tope de costo. Vuelve en un campo typesearch de la respuesta. Sirve cualquier cliente que te deje agregar
campos al JSON:
curl https://api.typesearch.ai/compat/exa/search \
-H "x-api-key: $TYPESEARCH_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "query": "el dólar", "numResults": 5, "typesearch": { "tone": true, "mode": "normal" } }'Para todo lo demás, la API nativa y nuestros SDKs lo exponen completo.
Lo que se queda en Exa
Los índices de personas, empresas y papers, el texto completo de las páginas y las respuestas o resúmenes generados no son parte de typesearch. Si tu producto depende de eso, deja esas llamadas en Exa y trae el resto.