Skip to content

Commit 377a366

Browse files
authored
Merge pull request #78 from langtail/finishReason_fix
fix finish reason for anthropic & google
2 parents d49ccca + 9691bd1 commit 377a366

File tree

5 files changed

+50
-26
lines changed

5 files changed

+50
-26
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 0.14.1
4+
5+
- Fix `finishReason` for Anthropic and Google providers in Vercel AI SDK integration
6+
37
## 0.14.0
48

59
- Update `openai` version

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "langtail",
3-
"version": "0.14.0",
3+
"version": "0.14.1",
44
"description": "",
55
"main": "./Langtail.js",
66
"packageManager": "[email protected]",

src/vercel-ai/langtail-language-model.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,12 @@ import {
1717
} from '@ai-sdk/provider-utils';
1818
import { z } from 'zod';
1919
import { convertToOpenAIChatMessages } from './convert-to-openai-chat-messages';
20-
import { mapOpenAIFinishReason } from './map-openai-finish-reason';
20+
import { mapLangtailFinishReason } from './map-langtail-finish-reason';
2121
import { LangtailChatSettings } from './langtail-chat-settings';
2222
import { openaiErrorDataSchema, openaiFailedResponseHandler } from './openai-error';
2323
import { mapOpenAIChatLogProbsOutput } from './map-openai-chat-logprobs';
2424
import { LangtailPrompts } from '../Langtail';
25-
import { ChatCompletionCreateParamsBase } from 'openai/resources/chat/completions';
26-
import { FunctionParameters } from 'openai/resources';
2725
import type { PromptSlug, Environment, Version, LangtailEnvironment } from '../types';
28-
import { ILangtailExtraProps } from '../schemas';
2926
import { getResponseMetadata } from './get-response-metadata';
3027
import { prepareTools } from './openai-prepare-tools';
3128

@@ -305,7 +302,7 @@ export class LangtailChatLanguageModel<P extends PromptSlug = PromptSlug, E exte
305302
toolName: toolCall.function.name,
306303
args: toolCall.function.arguments!,
307304
})),
308-
finishReason: mapOpenAIFinishReason(choice.finish_reason),
305+
finishReason: mapLangtailFinishReason(choice.finish_reason, Boolean(choice.message.tool_calls)),
309306
usage: {
310307
promptTokens: response.usage?.prompt_tokens ?? NaN,
311308
completionTokens: response.usage?.completion_tokens ?? NaN,
@@ -428,7 +425,7 @@ export class LangtailChatLanguageModel<P extends PromptSlug = PromptSlug, E exte
428425
const choice = value.choices[0];
429426

430427
if (choice?.finish_reason != null) {
431-
finishReason = mapOpenAIFinishReason(choice.finish_reason);
428+
finishReason = mapLangtailFinishReason(choice.finish_reason, Boolean(choice.delta?.tool_calls));
432429
}
433430

434431
if (choice?.delta == null) {
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { LanguageModelV1FinishReason } from '@ai-sdk/provider';
2+
3+
export function mapLangtailFinishReason(
4+
finishReason: string | null | undefined,
5+
hasToolCalls: boolean,
6+
): LanguageModelV1FinishReason {
7+
switch (finishReason) {
8+
// openai:
9+
case 'stop':
10+
return 'stop';
11+
case 'length':
12+
return 'length';
13+
case 'content_filter':
14+
return 'content-filter';
15+
case 'function_call':
16+
case 'tool_calls':
17+
return 'tool-calls';
18+
// anthropic:
19+
case 'end_turn':
20+
case 'stop_sequence':
21+
return 'stop';
22+
case 'tool_use':
23+
return 'tool-calls';
24+
case 'max_tokens':
25+
return 'length';
26+
// google:
27+
case 'STOP':
28+
return hasToolCalls ? 'tool-calls' : 'stop';
29+
case 'MAX_TOKENS':
30+
return 'length';
31+
case 'RECITATION':
32+
case 'SAFETY':
33+
return 'content-filter';
34+
case 'FINISH_REASON_UNSPECIFIED':
35+
case 'OTHER':
36+
return 'other';
37+
38+
default:
39+
console.warn('Unknown finish reason: ', finishReason);
40+
return 'unknown';
41+
}
42+
}

src/vercel-ai/map-openai-finish-reason.ts

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)