Skip to content

Commit 1b11822

Browse files
chore: models update 2024-08-18 (#59)
1 parent 98d9986 commit 1b11822

File tree

11 files changed

+2392
-2291
lines changed

11 files changed

+2392
-2291
lines changed

.yarn/releases/yarn-4.2.1.cjs

-894
This file was deleted.

.yarn/releases/yarn-4.4.0.cjs

+925
Large diffs are not rendered by default.

.yarnrc.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ nmHoistingLimits: workspaces
66

77
nodeLinker: node-modules
88

9-
yarnPath: .yarn/releases/yarn-4.2.1.cjs
9+
yarnPath: .yarn/releases/yarn-4.4.0.cjs

package.json

+5-5
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,20 @@
4141
"registry": "https://registry.npmjs.org/"
4242
},
4343
"dependencies": {
44-
"@anthropic-ai/sdk": "^0.24.3",
44+
"@anthropic-ai/sdk": "^0.26.1",
4545
"@inkjs/ui": "^1.0.0",
46-
"@mistralai/mistralai": "^0.5.0",
46+
"@mistralai/mistralai": "^1.0.2",
4747
"chalk": "^5.3.0",
4848
"date-fns": "^3.6.0",
4949
"dotenv": "^16.4.5",
5050
"ink": "^4.4.1",
5151
"ink-link": "^3.0.0",
5252
"ink-text-input": "^5.0.1",
53-
"openai": "^4.52.2",
53+
"openai": "^4.56.0",
5454
"prompts": "^2.4.2",
5555
"react": "^18.2.0",
5656
"redent": "^4.0.0",
57-
"tiktoken": "^1.0.15",
57+
"tiktoken": "^1.0.16",
5858
"update-notifier": "^7.0.0",
5959
"yargs": "^17.7.2",
6060
"zod": "^3.23.6",
@@ -80,7 +80,7 @@
8080
"release-it": "^15.11.0",
8181
"typescript": "^5.4.5"
8282
},
83-
"packageManager": "yarn@4.2.1",
83+
"packageManager": "yarn@4.4.0",
8484
"engines": {
8585
"node": ">= 18.0.0"
8686
},

src/commands/chat/state/init.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export function initChatState(
2323

2424
const modelOrAlias = options.model ?? providerFileConfig.model;
2525
const model = modelOrAlias
26-
? provider.modelAliases[modelOrAlias] ?? modelOrAlias
26+
? (provider.modelAliases[modelOrAlias] ?? modelOrAlias)
2727
: provider.defaultModel;
2828

2929
const systemPrompt = providerFileConfig.systemPrompt ?? DEFAULT_SYSTEM_PROMPT;

src/engine/providers/anthropic.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@ const Anthropic: Provider = {
2121
// Price per 1M tokens [input, output].
2222
// Source: https://docs.anthropic.com/en/docs/about-claude/models
2323
modelPricing: {
24-
'claude-3-haiku-20240307': { inputTokensCost: 0.25, outputTokensCost: 1.25 },
24+
// Current models
2525
'claude-3-5-sonnet-20240620': { inputTokensCost: 3.0, outputTokensCost: 15.0 },
26+
'claude-3-haiku-20240307': { inputTokensCost: 0.25, outputTokensCost: 1.25 },
2627
'claude-3-sonnet-20240229': { inputTokensCost: 3.0, outputTokensCost: 15.0 },
2728
'claude-3-opus-20240229': { inputTokensCost: 15.0, outputTokensCost: 75.0 },
29+
30+
// Legacy models
2831
'claude-2.1': { inputTokensCost: 8.0, outputTokensCost: 24.0 },
2932
'claude-2.0': { inputTokensCost: 8.0, outputTokensCost: 24.0 },
3033
'claude-instant-1.2': { inputTokensCost: 0.8, outputTokensCost: 2.4 },

src/engine/providers/mistral.ts

+26-23
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import MistralClient, { type ChatCompletionResponseChunk } from '@mistralai/mistralai';
1+
import { Mistral as MistralClient } from '@mistralai/mistralai';
2+
import type { CompletionEvent } from '@mistralai/mistralai/models/components/completionevent.js';
23
import { type Message, type ModelResponseUpdate } from '../inference.js';
34
import { estimateInputTokens, estimateOutputTokens } from '../tokenizer.js';
45
import { responseStyles, type ProviderConfig } from './config.js';
@@ -9,54 +10,56 @@ const Mistral: Provider = {
910
name: 'mistral',
1011
apiKeyUrl: 'https://console.mistral.ai/api-keys/',
1112

12-
// OpenAI models: https://docs.mistral.ai/platform/endpoints/
13+
// Mistral models: https://docs.mistral.ai/getting-started/models/
1314
defaultModel: 'mistral-large-latest',
1415

1516
// Price per 1M tokens [input, output].
1617
// Source: https://docs.mistral.ai/platform/pricing/
1718
modelPricing: {
19+
// Current models
20+
'open-mistral-nemo': { inputTokensCost: 0.3, outputTokensCost: 0.3 },
21+
'open-mistral-nemo-2407': { inputTokensCost: 0.3, outputTokensCost: 0.3 },
22+
'mistral-large-latest': { inputTokensCost: 3, outputTokensCost: 9 },
23+
'mistral-large-2407': { inputTokensCost: 3, outputTokensCost: 9 },
24+
'codestral-latest': { inputTokensCost: 1, outputTokensCost: 3 },
25+
'codestral-2405': { inputTokensCost: 1, outputTokensCost: 3 },
26+
27+
// Legacy models
1828
'open-mistral-7b': { inputTokensCost: 0.25, outputTokensCost: 0.25 },
1929
'open-mixtral-8x7b': { inputTokensCost: 0.7, outputTokensCost: 0.7 },
2030
'open-mixtral-8x22b': { inputTokensCost: 2, outputTokensCost: 6 },
2131
'mistral-small-latest': { inputTokensCost: 1, outputTokensCost: 3 },
2232
'mistral-small-2402': { inputTokensCost: 1, outputTokensCost: 3 },
2333
'mistral-medium-latest': { inputTokensCost: 2.7, outputTokensCost: 8.1 },
2434
'mistral-medium-2312': { inputTokensCost: 2.7, outputTokensCost: 8.1 },
25-
'mistral-large-latest': { inputTokensCost: 4, outputTokensCost: 12 },
26-
'mistral-large-2402': { inputTokensCost: 4, outputTokensCost: 12 },
27-
'codestral-latest': { inputTokensCost: 1, outputTokensCost: 3 },
28-
'codestral-2405': { inputTokensCost: 1, outputTokensCost: 3 },
2935
},
3036

3137
modelAliases: {
32-
mistral: 'open-mistral-7b',
33-
mixtral: 'open-mixtral-8x22b',
34-
small: 'mistral-small-latest',
35-
medium: 'mistral-medium-latest',
38+
nemo: 'open-mistral-nemo-2407',
3639
large: 'mistral-large-latest',
3740
codestral: 'codestral-latest',
3841
},
3942

4043
getChatCompletion: async (config: ProviderConfig, messages: Message[]) => {
41-
const api = new MistralClient(config.apiKey);
44+
const api = new MistralClient({ apiKey: config.apiKey });
4245
const allMessages = getMessages(config, messages);
4346

4447
const startTime = performance.now();
45-
const response = await api.chat({
46-
messages: allMessages,
48+
const response = await api.chat.complete({
4749
model: config.model,
50+
messages: allMessages,
4851
...getMistralResponseStyle(config),
4952
});
5053
const responseTime = performance.now() - startTime;
5154

5255
return {
5356
message: {
5457
role: 'assistant',
55-
content: response.choices[0]?.message.content ?? '',
58+
content: response.choices?.[0]?.message?.content ?? '',
5659
},
5760
usage: {
58-
inputTokens: response.usage?.prompt_tokens ?? 0,
59-
outputTokens: response.usage?.completion_tokens ?? 0,
61+
inputTokens: response.usage.promptTokens,
62+
outputTokens: response.usage.completionTokens,
6063
requests: 1,
6164
},
6265
responseTime,
@@ -70,21 +73,21 @@ const Mistral: Provider = {
7073
messages: Message[],
7174
onResponseUpdate: (update: ModelResponseUpdate) => void,
7275
) {
73-
const api = new MistralClient(config.apiKey);
76+
const api = new MistralClient({ apiKey: config.apiKey });
7477
const allMessages = getMessages(config, messages);
7578

7679
const startTime = performance.now();
77-
const stream = await api.chatStream({
80+
const stream = await api.chat.stream({
7881
messages: allMessages,
7982
model: config.model,
8083
...getMistralResponseStyle(config),
8184
});
8285

83-
let lastChunk: ChatCompletionResponseChunk | null = null;
86+
let lastChunk: CompletionEvent | null = null;
8487
let content = '';
8588
for await (const chunk of stream) {
8689
lastChunk = chunk;
87-
content += chunk.choices[0]?.delta?.content || '';
90+
content += chunk.data.choices[0]?.delta?.content || '';
8891
onResponseUpdate({ content });
8992
}
9093

@@ -96,12 +99,12 @@ const Mistral: Provider = {
9699
content,
97100
},
98101
usage: {
99-
inputTokens: lastChunk?.usage?.prompt_tokens ?? estimateInputTokens(allMessages),
100-
outputTokens: lastChunk?.usage?.completion_tokens ?? estimateOutputTokens(content),
102+
inputTokens: lastChunk?.data.usage?.promptTokens ?? estimateInputTokens(allMessages),
103+
outputTokens: lastChunk?.data.usage?.completionTokens ?? estimateOutputTokens(content),
101104
requests: 1,
102105
},
103106
responseTime,
104-
responseModel: lastChunk?.model || 'unknown',
107+
responseModel: lastChunk?.data.model || 'unknown',
105108
data: lastChunk,
106109
};
107110
},

src/engine/providers/open-ai.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,16 @@ const OpenAi: Provider = {
1010
apiKeyUrl: 'https://platform.openai.com/api-keys',
1111

1212
// OpenAI models: https://platform.openai.com/docs/models
13-
defaultModel: 'gpt-4o',
13+
defaultModel: 'gpt-4o-2024-08-06',
1414

1515
// Price per 1M tokens [input, output].
1616
// Source: https://openai.com/pricing
1717
modelPricing: {
1818
'gpt-4o': { inputTokensCost: 5, outputTokensCost: 15 },
19+
'gpt-4o-2024-08-06': { inputTokensCost: 2.5, outputTokensCost: 10 },
20+
'gpt-4o-2024-05-13': { inputTokensCost: 5, outputTokensCost: 15 },
21+
'gpt-4o-mini': { inputTokensCost: 0.15, outputTokensCost: 0.6 },
22+
'gpt-4o-mini-2024-07-18': { inputTokensCost: 0.15, outputTokensCost: 0.6 },
1923
'gpt-4-turbo': { inputTokensCost: 10, outputTokensCost: 30 },
2024
'gpt-4-turbo-2024-04-09': { inputTokensCost: 10, outputTokensCost: 30 },
2125
'gpt-4': { inputTokensCost: 30, outputTokensCost: 60 },
@@ -25,10 +29,7 @@ const OpenAi: Provider = {
2529
'gpt-3.5-turbo-instruct': { inputTokensCost: 1.5, outputTokensCost: 2.0 },
2630
},
2731

28-
modelAliases: {
29-
'gpt-4-turbo-preview': 'gpt-4-turbo',
30-
'gpt-3.5': 'gpt-3.5-turbo',
31-
},
32+
modelAliases: {},
3233

3334
getChatCompletion: async (config: ProviderConfig, messages: Message[]) => {
3435
const api = new OpenAI({

src/engine/providers/perplexity.ts

+15-13
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,37 @@ const Perplexity: Provider = {
1010
apiKeyUrl: 'https://perplexity.ai/settings/api',
1111

1212
// Perplexity models: https://docs.perplexity.ai/docs/model-cards
13-
defaultModel: 'llama-3-sonar-large-32k-chat',
13+
defaultModel: 'llama-3.1-sonar-huge-128k-online',
1414

1515
// Price per 1M tokens [input, output], per 1k requests.
1616
// Source: https://docs.perplexity.ai/docs/model-cards
1717
// Source: https://docs.perplexity.ai/docs/pricing
1818
modelPricing: {
19-
'llama-3-sonar-small-32k-chat': { inputTokensCost: 0.2, outputTokensCost: 0.2 },
20-
'llama-3-sonar-small-32k-online': {
19+
'llama-3.1-sonar-small-128k-online': {
2120
inputTokensCost: 0.2,
2221
outputTokensCost: 0.2,
2322
requestsCost: 5,
2423
},
25-
'llama-3-sonar-large-32k-chat': { inputTokensCost: 1, outputTokensCost: 1 },
26-
'llama-3-sonar-large-32k-online': {
24+
'llama-3.1-sonar-large-128k-online': {
2725
inputTokensCost: 1,
2826
outputTokensCost: 1,
2927
requestsCost: 5,
3028
},
31-
'llama-3-8b-instruct': { inputTokensCost: 0.2, outputTokensCost: 0.2 },
32-
'llama-3-70b-instruct': { inputTokensCost: 1, outputTokensCost: 1 },
33-
'mixtral-8x7b-instruct': { inputTokensCost: 0.6, outputTokensCost: 0.6 },
29+
'llama-3.1-sonar-huge-128k-online': {
30+
inputTokensCost: 5,
31+
outputTokensCost: 5,
32+
requestsCost: 5,
33+
},
34+
'llama-3.1-sonar-small-128k-chat': { inputTokensCost: 0.2, outputTokensCost: 0.2 },
35+
'llama-3.1-sonar-large-128k-chat': { inputTokensCost: 1, outputTokensCost: 1 },
36+
'llama-3.1-8b-instruct': { inputTokensCost: 0.2, outputTokensCost: 0.2 },
37+
'llama-3.1-70b-instruct': { inputTokensCost: 1, outputTokensCost: 1 },
3438
},
3539

3640
modelAliases: {
37-
'small': 'llama-3-sonar-small-32k-chat',
38-
'large': 'llama-3-sonar-large-32k-chat',
39-
'online': 'llama-3-sonar-large-32k-online',
40-
'llama-3': 'llama-3-70b-instruct',
41-
'mixtral': 'mixtral-8x7b-instruct',
41+
small: 'llama-3.1-sonar-small-128k-online',
42+
large: 'llama-3.1-sonar-large-128k-online',
43+
huge: 'llama-3.1-sonar-huge-128k-online',
4244
},
4345

4446
getChatCompletion: async (config: ProviderConfig, messages: Message[]) => {

website/docs/getting-started.md

+26-30
Original file line numberDiff line numberDiff line change
@@ -68,30 +68,29 @@ CLI options are passed when invoking the `ai` commend:
6868

6969
You should have a relevant API key in your `~/.airc.json` file.
7070

71-
### Models
71+
### Current Models
7272

7373
<Tabs groupId="provider">
7474
<TabItem value="openAi" label="Open AI">
7575

76-
| Model | Alias | Price: in \| out \* | Notes |
77-
| --------------- | --------- | ------------------- | ------- |
78-
| `gpt-4o` | | $5 \| $15 | Default |
79-
| `gpt-4-turbo` | | $10 \| $30 | |
80-
| `gpt-4` | | $30 \| $60 | |
81-
| `gpt-3.5-turbo` | `gpt-3.5` | $0.5 \| $1.5 | |
76+
| Model | Alias | Price: in \| out \* | Notes |
77+
| ------------------- | ----- | ------------------- | ------- |
78+
| `gpt-4o-2024-08-06` | | $2.5 \| $10 | Default |
79+
| `gpt-4o` | | $5 \| $15 | |
80+
| `gpt-4o-mini` | | $0.15 \| $0.6 | |
8281

8382
\* API prices per 1 million input/output tokens
8483

85-
More info: [OpenAI docs](https://platform.openai.com/docs/models)
84+
More models & info: [OpenAI docs](https://platform.openai.com/docs/models)
8685

8786
</TabItem>
8887
<TabItem value="anthropic" label="Anthropic">
8988

90-
| Model | Alias | Price: in \| out \* | Notes |
91-
| -------------------------- | -------- | ------------------- | ------- |
92-
| `claude-3-opus-20240229` | `opus` | $15 \| $75 | |
93-
| `claude-3-sonnet-20240229` | `sonnet` | $3 \| $15 | Default |
94-
| `claude-3-haiku-20240307` | `haiku` | $0.25 \| $1.25 | |
89+
| Model | Alias | Price: in \| out \* | Notes |
90+
| ---------------------------- | -------- | ------------------- | ------- |
91+
| `claude-3-5-sonnet-20240620` | `sonnet` | $3 \| $15 | Default |
92+
| `claude-3-opus-20240229` | `opus` | $15 \| $75 | |
93+
| `claude-3-haiku-20240307` | `haiku` | $0.25 \| $1.25 | |
9594

9695
\* API prices per 1 million input/output tokens
9796

@@ -100,15 +99,15 @@ More info: [Anthropic docs](https://docs.anthropic.com/claude/docs/models-overvi
10099
</TabItem>
101100
<TabItem value="perplexity" label="Perplexity">
102101

103-
| Model | Alias | Price: in \| out \* | Notes |
104-
| -------------------------------- | --------- | --------------------------- | ---------- |
105-
| `llama-3-sonar-large-32k-chat` | `large` | $1 \| $1 | Default |
106-
| `llama-3-sonar-large-32k-online` | `online` | $1 \| $1 \| request: $5 | Online\*\* |
107-
| `llama-3-sonar-small-32k-chat` | `small` | $0.2 \| $0.2 | |
108-
| `llama-3-sonar-small-32k-online` | | $0.2 \| $0.2 \| request: $5 | Online\*\* |
109-
| `llama-3-70b-instruct` | `llama-3` | $1 \| $1 | |
110-
| `llama-3-8b-instruct` | | $0.2 \| $0.2 | |
111-
| `mixtral-8x7b-instruct` | `mixtral` | $0.6 \| $0.6 | |
102+
| Model | Alias | Price: in \| out \* | Notes |
103+
| ----------------------------------- | ------- | ---------------------------- | ------------------- |
104+
| `llama-3.1-sonar-huge-128k-online` | `huge` | $5 \| $5 \| requests: $5 | Default, Online\*\* |
105+
| `llama-3.1-sonar-large-128k-online` | `large` | $1 \| $1 \| requests: $5 | Online\*\* |
106+
| `llama-3.1-sonar-small-128k-online` | `small` | $0.2 \| $0.2 \| requests: $5 | Online\*\* |
107+
| `llama-3.1-sonar-large-128k-chat` | | $1 \| $1 | |
108+
| `llama-3.1-sonar-small-128k-chat` | | $0.2 \| $0.2 | |
109+
| `llama-3.1-70b-instruct` | | $1 \| $1 | |
110+
| `llama-3.1-8b-instruct` | | $0.2 \| $0.2 | |
112111

113112
\* API prices per 1 million input/output tokens, per 1 thousands requests
114113

@@ -119,14 +118,11 @@ More info: [Perplexity docs](https://docs.perplexity.ai/docs/model-cards)
119118
</TabItem>
120119
<TabItem value="mistral" label="Mistral">
121120

122-
| Model | Alias | Price: in \| out \* | Notes |
123-
| ----------------------- | --------- | ------------------- | ------- |
124-
| `mistral-large-latest` | `large` | $4 \| $12 | Default |
125-
| `mistral-medium-latest` | `medium` | $2.7 \| $8.1 | |
126-
| `mistral-small-latest` | `small` | $1 \| $3 | |
127-
| `open-mixtral-8x22b` | `mixtral` | $2 \| $6 | |
128-
| `open-mixtral-8x7b` | | $0.7 \| $0.7 | |
129-
| `open-mistral-7b` | `mistral` | $0.25 \| $0.25 | |
121+
| Model | Alias | Price: in \| out \* | Notes |
122+
| ---------------------- | ----------- | ------------------- | ------- |
123+
| `mistral-large-latest` | `large` | $3 \| $9 | Default |
124+
| `open-mistral-nemo` | `nemo` | $0.3 \| $0.3 | |
125+
| `codestral-latest` | `codestral` | $1 \| $3 | |
130126

131127
\* API prices per 1 million input/output tokens
132128

0 commit comments

Comments
 (0)