Skip to content

Exa

Nuget package dotnet License: MIT Discord

Features 🔥

  • Fully generated C# SDK based on official Exa OpenAPI specification using AutoSDK
  • Same day update to support new features
  • Updated and supported automatically if there are no breaking changes
  • All modern .NET features - nullability, trimming, NativeAOT, etc.
  • Support .Net Framework/.Net Standard 2.0

Usage

1
2
3
using Exa;

using var client = new ExaClient(apiKey);

Shows how to search the web using Exa's AI-powered search.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
using var client = new ExaClient(apiKey);

// Search the web for relevant results using a natural language query.
var response = await client.SearchAsync(new AllOf<SearchRequest2, CommonRequest>
{
    Value1 = new SearchRequest2
    {
        Query = "Latest developments in LLM capabilities",
    },
    Value2 = new CommonRequest
    {
        NumResults = 5,
    },
});

Console.WriteLine($"Found {response.Results!.Count} results");

foreach (var result in response.Results)
{
    Console.WriteLine($"  - {result.Value1?.Title}: {result.Value1?.Url}");
}

Get Contents

Shows how to retrieve page contents for specific URLs using Exa.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using var client = new ExaClient(apiKey);

// Retrieve the text content of specific web pages by URL.
var response = await client.GetContentsAsync(new AllOf<GetContentsRequest2, ContentsRequest>
{
    Value1 = new GetContentsRequest2
    {
        Urls = ["https://exa.ai"],
    },
    Value2 = new ContentsRequest
    {
        Text = true,
    },
});

Console.WriteLine($"Retrieved contents for {response.Results!.Count} URL(s)");

foreach (var result in response.Results)
{
    var text = result.Value2?.Text;
    Console.WriteLine($"  - {result.Value1?.Url}: {text?[..Math.Min(text.Length, 100)]}...");
}

Find Similar

Shows how to find pages similar to a given URL using Exa.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using var client = new ExaClient(apiKey);

// Find pages similar to a given URL. This is useful for discovering
// related content, competitor analysis, or expanding a research corpus.
var response = await client.FindSimilarAsync(new AllOf<FindSimilarRequest2, CommonRequest>
{
    Value1 = new FindSimilarRequest2
    {
        Url = "https://arxiv.org/abs/2307.06435",
    },
    Value2 = new CommonRequest
    {
        NumResults = 3,
    },
});

Console.WriteLine($"Found {response.Results!.Count} similar pages");

foreach (var result in response.Results)
{
    Console.WriteLine($"  - {result.Value1?.Title} (score: {result.Value1?.Score:F4})");
}

Search Tool

Shows how to use Exa as an AIFunction tool with any IChatClient.

1
2
3
4
using var client = new ExaClient(apiKey);

// Create a search tool from the Exa client for use with any IChatClient.
var tool = client.AsSearchTool(numResults: 3);

Answer Tool

Shows how to use Exa's answer endpoint as an AIFunction tool with any IChatClient.

1
2
3
4
using var client = new ExaClient(apiKey);

// Create an answer tool from the Exa client for RAG-style question answering.
var tool = client.AsAnswerTool();

Support

Priority place for bugs: https://github.com/tryAGI/Exa/issues
Priority place for ideas and general questions: https://github.com/tryAGI/Exa/discussions
Discord: https://discord.gg/Ca2xhfBf3v

Acknowledgments

JetBrains logo

This project is supported by JetBrains through the Open Source Support Program.