Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/transitive-bullshit/chatgpt-api
AI agent stdlib that works with any LLM and TypeScript AI SDK.
https://github.com/transitive-bullshit/chatgpt-api
agents ai llms openai
Last synced: about 1 month ago
JSON representation
AI agent stdlib that works with any LLM and TypeScript AI SDK.
- Host: GitHub
- URL: https://github.com/transitive-bullshit/chatgpt-api
- Owner: transitive-bullshit
- License: mit
- Created: 2022-12-03T00:05:09.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-07-30T09:29:37.000Z (about 2 months ago)
- Last Synced: 2024-07-30T10:50:59.230Z (about 2 months ago)
- Topics: agents, ai, llms, openai
- Language: TypeScript
- Homepage:
- Size: 4.99 MB
- Stars: 16,072
- Watchers: 138
- Forks: 2,111
- Open Issues: 6
-
Metadata Files:
- Readme: readme.md
- Funding: .github/funding.yml
- License: license
Awesome Lists containing this project
- awesome_chatgpt_ch - transitive-bullshit/chatgpt-api
- awesome-llm-and-aigc - transitive-bullshit/chatgpt-api - bullshit/chatgpt-api?style=social"/> : Node.js client for the unofficial ChatGPT API. 🔥 (Open API / 提示语(魔法))
- awesome-ChatGPT-repositories - chatgpt-api - Node.js client for the official ChatGPT API. 🔥 (CLIs)
- awesome-chatgpt - Node.js client for the unofficial ChatGPT API.
- awesome-chatgpt-summary - Unofficial API in JS/TS
- awesome-chatgpt - Node.js
- awesome-chatgpt-tools - Unofficial API in JS/TS
- awesome-gpt - Unofficial API in JS/TS
- Awesome-ChatGPT - Unofficial API in JS/TS
- Awesome-ChatGPT - Node.js client for the unofficial ChatGPT API.
- awesome-ChatGPT-resource-zh - 【非官方】【JS/TS】 transitive-bullshit/chatgpt-api
- awesome-web-cn - chatgpt-api - chatgpt 的 node 客户端 (Uncategorized / Uncategorized)
- awesome-chatgpt - npm/chatgpt
- fucking-awesome-chatgpt - Unofficial API in JS/TS
- awesome-chatgpt - Unofficial API in JS/TS
- awesome-open-gpt - chatgpt-node
- awesome-chatgpt - Unofficial API in JS/TS
- AiTreasureBox - transitive-bullshit/chatgpt-api - 09-13_16250_0](https://img.shields.io/github/stars/transitive-bullshit/chatgpt-api.svg) | Node.js client for the official ChatGPT API. | (Repos)
- awesome-gpt - chatgpt-api - Node.js client for the official ChatGPT API. (Applications / APIs & Clients)
- awesome-chatgpt - Wrapper
- StarryDivineSky - transitive-bullshit/chatgpt-api
- awesome-chatgpt-zh - JS/TS 中的非官方 API
- awesome-chatgpt - chatgpt-api
- awesome-chatgpt - transitive-bullshit/chatgpt-api - Node.js client for the official ChatGPT API (SDK, Libraries, Frameworks / JavaScript/Typescript)
- awesome-chatgpt - Node.js
README
AI agent stdlib that works with any LLM and TypeScript AI SDK.# Agentic
- [Intro](#intro)
- [Install](#install)
- [Services](#services)
- [Compound Tools](#compound-tools)
- [AI SDKs](#ai-sdks)
- [Client Goals](#client-goals)
- [TODO](#todo)
- [Contributors](#contributors)
- [License](#license)## Intro
The goal of this project is to create a **set of standard AI functions / tools** which are **optimized for both normal TS-usage as well as LLM-based apps** and that work with all of the major AI SDKs (LangChain, LlamaIndex, Vercel AI SDK, OpenAI SDK, etc).
For example, stdlib clients like `WeatherClient` can be used as normal TS classes:
```ts
import { WeatherClient } from '@agentic/stdlib'const weather = new WeatherClient() // (requires `WEATHER_API_KEY` env var)
const result = await weather.getCurrentWeather({
q: 'San Francisco'
})
console.log(result)
```Or you can use these clients as **LLM-based tools** where the LLM decides when and how to invoke the underlying functions for you.
This works across all of the major AI SDKs via adaptors. Here's an example using [Vercel's AI SDK](https://github.com/vercel/ai):
```ts
// sdk-specific imports
import { openai } from '@ai-sdk/openai'
import { generateText } from 'ai'
import { createAISDKTools } from '@agentic/stdlib/ai-sdk'// sdk-agnostic imports
import { WeatherClient } from '@agentic/stdlib'const weather = new WeatherClient()
const result = await generateText({
model: openai('gpt-4o'),
// this is the key line which uses the `@agentic/stdlib/ai-sdk` adaptor
tools: createAISDKTools(weather),
toolChoice: 'required',
prompt: 'What is the weather in San Francisco?'
})console.log(result.toolResults[0])
```You can use our standard library of thoroughly tested AI functions with your favorite AI SDK – without having to write any glue code!
Here's a slightly more complex example which uses multiple clients and selects a subset of their functions using the `AIFunctionSet.pick` method:
```ts
// sdk-specific imports
import { ChatModel, createAIRunner } from '@dexaai/dexter'
import { createDexterFunctions } from '@agentic/stdlib/dexter'// sdk-agnostic imports
import { PerigonClient, SerperClient } from '@agentic/stdlib'async function main() {
// Perigon is a news API and Serper is a Google search API
const perigon = new PerigonClient()
const serper = new SerperClient()const runner = createAIRunner({
chatModel: new ChatModel({
params: { model: 'gpt-4o', temperature: 0 }
}),
functions: createDexterFunctions(
perigon.functions.pick('search_news_stories'),
serper
),
systemMessage: `You are a helpful assistant. Be as concise as possible.`
})const result = await runner(
'Summarize the latest news stories about the upcoming US election.'
)
console.log(result)
}
```Here we've exposed 2 functions to the LLM, `search_news_stories` (which comes from the `PerigonClient.searchStories` method) and `serper_google_search` (which implicitly comes from the `SerperClient.search` method).
All of the SDK adaptors like `createDexterFunctions` accept very flexible in what they accept. `AIFunctionLike` objects include:
- `AIFunctionSet` - Sets of AI functions (like `perigon.functions.pick('search_news_stories')` or `perigon.functions` or `serper.functions`)
- `AIFunctionsProvider` - Client classes which expose an `AIFunctionSet` via the `.functions` property (like `perigon` or `serper`)
- `AIFunction` - Individual functions (like `perigon.functions.get('search_news_stories')` or `serper.functions.get('serper_google_search')` or AI functions created directly via the `createAIFunction` utility function)You can pass as many of these `AIFunctionLike` objects as you'd like and you can manipulate them as `AIFunctionSet` sets via `.pick`, `.omit`, `.get`, `.map`, etc.
## Install
```sh
npm install @agentic/stdlib
```This package is [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) and requires `Node.js >= 18` or an equivalent environment (bun, deno, CF workers, etc).
> [!NOTE]
> All heavy third-party imports are isolated as _optional peer dependencies_ to keep the main `@agentic/stdlib` package as lightweight as possible.Depending on the AI SDK and tool you want to use, you'll also need to install the required peer dependencies.
## Services
| Service | Client | Description |
| ------------------------------------------------------------------------ | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Bing](https://www.microsoft.com/en-us/bing/apis/bing-web-search-api) | `BingClient` | Bing web search. |
| [Calculator](https://github.com/josdejong/mathjs) | `calculator` | Basic calculator for simple mathematical expressions. |
| [Clearbit](https://dashboard.clearbit.com/docs) | `ClearbitClient` | Resolving and enriching people and company datae. |
| [Dexa](https://dexa.ai) | `DexaClient` | Answers questions from the world's best podcasters. |
| [Diffbot](https://docs.diffbot.com) | `DiffbotClient` | Web page classification and scraping; person and company data enrichment. |
| [E2B](https://e2b.dev) | `e2b` | Hosted Python code intrepreter sandbox which is really useful for data analysis, flexible code execution, and advanced reasoning on-the-fly. |
| [Exa](https://docs.exa.ai) | `ExaClient` | Web search tailored for LLMs. |
| [Firecrawl](https://www.firecrawl.dev) | `FirecrawlClient` | Website scraping and sanitization. |
| [HackerNews](https://github.com/HackerNews/API) | `HackerNewsClient` | Official HackerNews API. |
| [Hunter](https://hunter.io) | `HunterClient` | Email finder, verifier, and enrichment. |
| [Jina](https://jina.ai/reader) | `JinaClient` | Clean URL reader and web search + URL top result reading with a generous free tier. |
| [Midjourney](https://www.imagineapi.dev) | `MidjourneyClient` | Unofficial Midjourney client for generative images. |
| [Novu](https://novu.co) | `NovuClient` | Sending notifications (email, SMS, in-app, push, etc). |
| [People Data Labs](https://www.peopledatalabs.com) | `PeopleDataLabsClient` | People & company data (WIP). |
| [Perigon](https://www.goperigon.com/products/news-api) | `PerigonClient` | Real-time news API and web content data from 140,000+ sources. Structured and enriched by AI, primed for LLMs. |
| [Polygon](https://polygon.io) | `PolygonClient` | Stock market and company financial data. |
| [PredictLeads](https://predictleads.com) | `PredictLeadsClient` | In-depth company data including signals like fundraising events, hiring news, product launches, technologies used, etc. |
| [Proxycurl](https://nubela.co/proxycurl) | `ProxycurlClient` | People and company data from LinkedIn & Crunchbase. |
| Scraper | `ScraperClient` | Scrapes URLs into clean html/markdown/text content (TODO: currently closed beta). |
| [Searxng](https://docs.searxng.org) | `SearxngClient` | OSS meta search engine capable of searching across many providers like Reddit, Google, Brave, Arxiv, Genius, IMDB, Rotten Tomatoes, Wikidata, Wolfram Alpha, YouTube, GitHub, [etc](https://docs.searxng.org/user/configured_engines.html#configured-engines). |
| [SerpAPI](https://serpapi.com/search-api) | `SerpAPIClient` | Lightweight wrapper around SerpAPI for Google search. |
| [Serper](https://serper.dev) | `SerperClient` | Lightweight wrapper around Serper for Google search. |
| [Slack](https://api.slack.com/docs) | `SlackClient` | Send and receive Slack messages. |
| [SocialData](https://socialdata.tools) | `SocialDataClient` | Unofficial Twitter / X client (readonly) which is much cheaper than the official Twitter API. |
| [Tavily](https://tavily.com) | `TavilyClient` | Web search API tailored for LLMs. |
| [Twilio](https://www.twilio.com/docs/conversations/api) | `TwilioClient` | Twilio conversation API to send and receive SMS messages. |
| [Twitter](https://developer.x.com/en/docs/twitter-api) | `TwitterClient` | Basic Twitter API methods for fetching users, tweets, and searching recent tweets. Includes support for plan-aware rate-limiting. Uses [Nango](https://www.nango.dev) for OAuth support. |
| [WeatherAPI](https://www.weatherapi.com) | `WeatherClient` | Basic access to current weather data based on location. |
| [Wikipedia](https://www.mediawiki.org/wiki/API) | `WikipediaClient` | Wikipedia page search and summaries. |
| [Wolfram Alpha](https://products.wolframalpha.com/llm-api/documentation) | `WolframAlphaClient` | Wolfram Alpha LLM API client for answering computational, mathematical, and scientific questions. |Note that many of these clients expose multiple AI functions.
## Compound Tools
- `SearchAndCrawl`
## AI SDKs
- OpenAI SDK
- no need for an adaptor; use `AIFunctionSet.specs` or `AIFunctionSet.toolSpecs`
- Vercel AI SDK
- `import { createAISDKTools } from '@agentic/stdlib/ai-sdk'`
- LangChain
- `import { createLangChainTools } from '@agentic/stdlib/langchain'`
- LlamaIndex
- `import { createLlamaIndexTools } from '@agentic/stdlib/llamaindex'`
- Firebase Genkit
- `import { createGenkitTools } from '@agentic/stdlib/genkit'`
- Dexa Dexter
- `import { createDexterFunctions } from '@agentic/stdlib/dexter'`See the [examples](./examples) directory for examples of how to use each of these adaptors.
## Client Goals
- clients should be as minimal as possible
- clients should use `ky` and `zod` where possible
- clients should have a strongly-typed TS DX
- clients should expose select methods via the `@aiFunction(...)` decorator
- `inputSchema` zod schemas should be as minimal as possible with descriptions prompt engineered specifically for use with LLMs
- clients and AIFunctions should be composable via `AIFunctionSet`
- clients should work with all major TS AI SDKs
- SDK adaptors should be as lightweight as possible and be optional peer dependencies of `@agentic/stdlib`## TODO
- services
- browserbase
- [brave search](https://brave.com/search/api/)
- [phantombuster](https://phantombuster.com)
- [apify](https://apify.com/store)
- perplexity
- valtown
- replicate
- huggingface
- [skyvern](https://github.com/Skyvern-AI/skyvern)
- pull from [clay](https://www.clay.com/integrations)
- pull from [langchain](https://github.com/langchain-ai/langchainjs/tree/main/langchain)
- provide a converter for langchain `DynamicStructuredTool`
- pull from [nango](https://docs.nango.dev/integrations/overview)
- pull from [activepieces](https://github.com/activepieces/activepieces/tree/main/packages/pieces/community)
- general openapi support ala [workgpt](https://github.com/team-openpm/workgpt)
- compound tools / chains / flows / runnables
- market maps
- incorporate [zod-validation-error](https://github.com/causaly/zod-validation-error)
- investigate [autotool](https://github.com/run-llama/LlamaIndexTS/tree/main/packages/autotool)
- investigate [alt search engines](https://seirdy.one/posts/2021/03/10/search-engines-with-own-indexes/)
- investigate [data connectors](https://github.com/mendableai/data-connectors)
- add unit tests for individual providers## Contributors
- [Travis Fischer](https://x.com/transitive_bs)
- [David Zhang](https://x.com/dzhng)
- [Philipp Burckhardt](https://x.com/burckhap)
- And all of the [amazing OSS contributors](https://github.com/transitive-bullshit/agentic/graphs/contributors)!## License
MIT © [Travis Fischer](https://x.com/transitive_bs)
To stay up to date or learn more, follow [@transitive_bs](https://x.com/transitive_bs) on Twitter.