Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TypeSpec for Azure AI Inference #28438

Open
wants to merge 149 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
149 commits
Select commit Hold shift + click to select a range
2106537
TypeSpec changes to support Python SDK updates for beta.2
dargilco Feb 6, 2024
79e9a42
use imageUrl and imageData instead of imageContent. Make analyzeFromU…
dargilco Feb 7, 2024
0934f72
Revert back Python specific changes
dargilco Feb 7, 2024
000a326
Revert new line, so it shows no change in client.tsp file
dargilco Feb 7, 2024
c8c1d7b
Try again
dargilco Feb 7, 2024
171c917
Fix generated & example JSONs
dargilco Feb 7, 2024
acd93ec
Use unique variable names for image URL and image data
dargilco Feb 7, 2024
edf9a73
Merge remote-tracking branch 'origin/main' into dargilco/image-analys…
dargilco Feb 12, 2024
2690ded
data plane template
dargilco Mar 22, 2024
831ac8b
Bring over a trimmed down version of Azure OpenAI TypeSpec
dargilco Mar 23, 2024
f4f4a39
Make it build via `npx tsp compile .`
dargilco Mar 23, 2024
135f3f4
Additional refinement
dargilco Mar 25, 2024
4f6c4fc
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Mar 25, 2024
1da51c9
Fix URL path
dargilco Mar 25, 2024
640ac1c
Revert unrelated changes
dargilco Mar 25, 2024
fc6fa2b
Continue to revert unrelated changes
dargilco Mar 25, 2024
6373315
Delete old examples
dargilco Mar 25, 2024
d31bec2
Update service name. Redo data-plane folder
dargilco Mar 25, 2024
d5c7b0b
Copy examples
dargilco Mar 25, 2024
2829c28
Fix build issues
dargilco Mar 25, 2024
9dfb94f
Simplify and fix errors
dargilco Mar 26, 2024
a14be5a
Fix more errors
dargilco Mar 26, 2024
97d7375
More fixes
dargilco Mar 26, 2024
553ccaa
Another fix
dargilco Mar 26, 2024
3b8c933
Fix typo in variable name
dargilco Mar 27, 2024
837a784
Remove delta streaming for now
dargilco Mar 27, 2024
1b950eb
Use bearer auth
dargilco Mar 28, 2024
11cd623
Add support for tools. Reorder elements based on order I see in servi…
dargilco Mar 28, 2024
a5b5fe9
More changes
dargilco Mar 28, 2024
684e642
Add embeddings. Use ModelClient folders
dargilco Mar 29, 2024
7f2f7cc
Update embeddings
dargilco Mar 30, 2024
9523f51
After running `npx tsv specification/ai/ModelClient`
dargilco Mar 30, 2024
b545c63
Add two optional HTTP request headers
dargilco Apr 1, 2024
22d4943
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Apr 1, 2024
7f14ca7
use alias for the grouping of HTTP request header
dargilco Apr 1, 2024
faa1b2c
Fix example titles
dargilco Apr 1, 2024
708818b
Remove @projectedName(json,...) and disable the linter warning
dargilco Apr 1, 2024
c26f993
Fix typos. Use alias instead of model for request settings. Use commo…
dargilco Apr 2, 2024
efeef7a
Add image generation
dargilco Apr 3, 2024
b32886f
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Apr 3, 2024
9af8c9e
Update 'Usage' models
dargilco Apr 4, 2024
7b772e1
Fix following `tsp format`
dargilco Apr 4, 2024
ded7b3a
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Apr 4, 2024
7a68070
Fix enums
dargilco Apr 4, 2024
58c70be
Fix typo
dargilco Apr 4, 2024
319f92b
Fix the same typo in swagger
dargilco Apr 4, 2024
227172e
Add Record<string> for extra parameters
dargilco Apr 4, 2024
be2a34f
Minor fixes
dargilco Apr 4, 2024
4269199
Recompile
dargilco Apr 4, 2024
3f67808
Delta models for streaming
dargilco Apr 5, 2024
0053feb
Set usage and access of 'Delta' models
dargilco Apr 5, 2024
a017d31
Add /info route
dargilco Apr 7, 2024
a0228f4
Update to Record<unknown>
dargilco Apr 8, 2024
d1b64a2
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Apr 8, 2024
2186f31
Try to define HTTP request header to deal with extra parameters as a …
dargilco Apr 8, 2024
b3d686f
Fix service title
dargilco Apr 8, 2024
c02f3db
Remove 'stream' from chat completion options
dargilco Apr 10, 2024
6cf4b2b
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Apr 10, 2024
27eb2a5
Disable 'extra_parameters' for now
dargilco Apr 10, 2024
178c216
Refresh examples
dargilco Apr 10, 2024
72ddb1a
First set of changes following SDK review
dargilco Apr 12, 2024
b57d3b3
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Apr 12, 2024
00b1841
Attempt to create seperate clients
dargilco Apr 12, 2024
81608d0
Attempt to add getModelInfo to each client
dargilco Apr 12, 2024
09dca82
Fix CapacityType
dargilco Apr 12, 2024
ba7fc34
Use 'client' as common operator name. Split models into their own fol…
dargilco Apr 12, 2024
511f2bf
Try model folders without a dot
dargilco Apr 12, 2024
78e7193
Move models back into the models folder
dargilco Apr 12, 2024
5f6a8a4
Fix typo
dargilco May 6, 2024
360cd92
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco May 6, 2024
bb3d704
Fix openapi.json
dargilco May 6, 2024
85197a8
Suppress IntegerTypeMustHaveFormat
dargilco May 7, 2024
403d41b
Another supression
dargilco May 7, 2024
5fb4c79
Fix tools support
dargilco May 7, 2024
3a7391e
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco May 7, 2024
2ef227e
Update examples
dargilco May 7, 2024
32a24a5
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco May 8, 2024
a749c53
Update ModelInfo
dargilco May 10, 2024
a6406af
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco May 10, 2024
199b52e
Remove Image Generation, as it will not be supported in first release
dargilco May 10, 2024
43e5511
Another run
dargilco May 10, 2024
f806b37
Try new auths
dargilco May 11, 2024
7de926d
try BearerAuth | AadOauth2Auth
dargilco May 13, 2024
3fc9d20
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco May 13, 2024
3dc0445
Add more fields to OAuth2Auth, similar to what we have in AOAI
dargilco May 13, 2024
bbd51a4
Remove /v1 from routes
dargilco May 14, 2024
b12d98f
Add image embeddings. Update version to 2024-05-01-preview
dargilco May 14, 2024
6f4ed3b
Additional fixes related to new 2024-05 api version. Also supress spe…
dargilco May 14, 2024
78cccac
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco May 14, 2024
f091d3b
Update operator names
dargilco May 17, 2024
b9c9be4
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco May 17, 2024
e75d2ee
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco May 20, 2024
ee2203c
Experiment with extras?: Record<unknown>
dargilco May 20, 2024
a7530e5
Add 'stream' back, hide operators for additional hand-tuning'
dargilco May 20, 2024
39fa4d1
Mark all models as public
dargilco May 20, 2024
556cb56
Make getModelInfo internal. Add unknown_params
dargilco May 21, 2024
9362211
Update names of streaming response models. Some cleanup
dargilco May 23, 2024
e700a46
Document additional HTTP reuest header. Change Entra ID URL
dargilco May 24, 2024
bbdc091
Remove modelDeployment. Rename operator to `embed`. Use AOAI chat req…
dargilco May 29, 2024
868c498
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco May 29, 2024
be191d7
Update values for UnknownParams
dargilco May 30, 2024
75d69cd
Fix typo `pyton` in @@access decorator
dargilco May 31, 2024
50a7d7b
Add 'required' to tool_choice. Add missing models ChatCompletionsName…
dargilco Jun 1, 2024
907e4e1
Update some comments
dargilco Jun 3, 2024
0aeb368
Remove CapacityType
dargilco Jun 6, 2024
54ca985
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Jun 7, 2024
6dee548
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Jun 10, 2024
4478a53
Support image input in chat completions
dargilco Jun 10, 2024
1e69395
limit scope of text and image embedding clients to Python only
dargilco Jun 10, 2024
ac08a31
Add missing public access of ModelType
dargilco Jun 10, 2024
36d9e57
Regenerate examples
dargilco Jun 10, 2024
4ee5306
Move Python class renaming to client.tsp
dargilco Jun 10, 2024
8849a52
Set Python package dir to azure-ai-inference
dargilco Jun 13, 2024
6a487b2
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Jun 13, 2024
1b0a8f9
Make sure text and image embeddings models don't show up in C# and JS…
dargilco Jun 13, 2024
e148aa7
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Jun 18, 2024
777a55d
Add api-key auth
dargilco Jun 18, 2024
e6bcee1
Go back to azure-ai-inference package name
dargilco Jun 19, 2024
186c1eb
Remove api-key auth
dargilco Jun 19, 2024
2af12ce
Add 'model' to chat completions request
dargilco Jun 20, 2024
679d6fc
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Jun 20, 2024
5876f4b
Remove input_tokens from embeddings usage
dargilco Jun 21, 2024
4901f38
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Jul 2, 2024
5bf2215
Rename HTTP header to extra-parameters
dargilco Jul 2, 2024
dda6da8
namespace to AI.Model, add ApiKeyAuth
glharper Jul 9, 2024
52b7554
Add `model` to text and image embedding clients
dargilco Jul 15, 2024
f5f089d
Merge branch 'dargilco/ai-model-inference' of https://github.com/Azur…
dargilco Jul 15, 2024
bbdcedf
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Jul 15, 2024
3169d39
Fix response_format
dargilco Jul 23, 2024
a7376f6
Another update to response_format
dargilco Jul 23, 2024
bec9f19
Fix pass_through to pass-through
dargilco Jul 25, 2024
072b399
Bring changes from Travis' TypeSpec branch. Also modify image url to …
dargilco Jul 29, 2024
405a801
fix typo
dargilco Jul 29, 2024
ac39e78
Missing CR/LR at the end of tspconfig.yaml
dargilco Jul 29, 2024
6449340
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Jul 29, 2024
e5183e4
Add Record<unknown>. Add support for function streaming. Assuming too…
dargilco Jul 30, 2024
13a8cdc
Another change related to assuming tools only supports functions
dargilco Jul 30, 2024
a6bc388
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Jul 30, 2024
7052b47
Fixes
dargilco Jul 31, 2024
9fdea9e
Merge branch 'main' into dargilco/ai-model-inference
santiagxf Aug 5, 2024
335617e
Support string output format for embeddings result
dargilco Aug 14, 2024
0fb6ae0
Switch order of Union for embeddings result. To overcome an issue in …
dargilco Aug 15, 2024
2bc4a5f
Go back to `parameters?: unknown` in FunctionDefinition model
dargilco Aug 19, 2024
4a29832
Merge remote-tracking branch 'origin/main' into dargilco/ai-model-inf…
dargilco Aug 19, 2024
d68a383
Add missing CompletionsFinishReason comments. Update tool choice rela…
dargilco Aug 19, 2024
adeddf3
Update JSON examples. Fix client.tsp after previous commit to rename …
dargilco Aug 19, 2024
3e95e57
Add ID back to EmbeddingsResult model. Add comment to getModelInfo th…
dargilco Aug 23, 2024
dedab7a
Update comments about hand-written operator methods
dargilco Aug 29, 2024
7507aaf
Update teh ModelInfo enum
dargilco Sep 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions cSpell.json
Original file line number Diff line number Diff line change
Expand Up @@ -1037,6 +1037,12 @@
"rrggbb"
]
},
{
"filename": "**/specification/ai/data-plane/ModelClient/**/openapi.json",
"words": [
"ubinary"
]
},
{
"filename": "**/specification/ai/data-plane/DocumentIntelligence/**/DocumentIntelligence.json",
"words": [
Expand Down
119 changes: 119 additions & 0 deletions specification/ai/ModelClient/client.tsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import "@azure-tools/typespec-client-generator-core";

import "./main.tsp";

using Azure.ClientGenerator.Core;
using TypeSpec.Versioning;

@useDependency(AI.Model.Versions.v2024_05_01_Preview)
namespace Customizations; // The actual name here doesn't matter and is here for organization purposes only

// Are these needed?
@@usage(AI.Model.ChatCompletions, Usage.output);
@@usage(AI.Model.ModelInfo, Usage.output);
@@usage(AI.Model.StreamingChatCompletionsUpdate, Usage.output);
@@usage(AI.Model.StreamingChatChoiceUpdate, Usage.output);
@@usage(AI.Model.StreamingChatResponseMessageUpdate, Usage.output);
@@usage(AI.Model.StreamingChatResponseToolCallUpdate, Usage.output);

// Since we made all operator methods internal, we need to expliclty
// say we still want the models they use to be public.
@@access(AI.Model.ChatChoice, Access.public);
@@access(AI.Model.ChatCompletions, Access.public);
@@access(AI.Model.ChatCompletionsToolCall, Access.public);
@@access(AI.Model.ChatCompletionsToolDefinition, Access.public);
@@access(AI.Model.ChatCompletionsNamedToolChoice, Access.public);
@@access(AI.Model.ChatCompletionsNamedToolChoiceFunction, Access.public);
@@access(AI.Model.ChatCompletionsResponseFormat, Access.public);
@@access(AI.Model.ChatCompletionsResponseFormatJSON, Access.public);
@@access(AI.Model.ChatCompletionsResponseFormatText, Access.public);
@@access(AI.Model.ChatCompletionsToolCall, Access.public);
@@access(AI.Model.ChatCompletionsToolDefinition, Access.public);
@@access(AI.Model.ChatCompletionsToolChoicePreset, Access.public);
@@access(AI.Model.ChatRequestAssistantMessage, Access.public);
@@access(AI.Model.ChatRequestMessage, Access.public);
@@access(AI.Model.ChatRequestSystemMessage, Access.public);
@@access(AI.Model.ChatRequestToolMessage, Access.public);
@@access(AI.Model.ChatRequestUserMessage, Access.public);
@@access(AI.Model.ChatResponseMessage, Access.public);
@@access(AI.Model.ChatRole, Access.public);
@@access(AI.Model.CompletionsFinishReason, Access.public);
@@access(AI.Model.CompletionsUsage, Access.public);
@@access(AI.Model.EmbeddingEncodingFormat, Access.public, "python");
@@access(AI.Model.EmbeddingInput, Access.public, "python");
@@access(AI.Model.EmbeddingInputType, Access.public, "python");
@@access(AI.Model.EmbeddingItem, Access.public, "python");
@@access(AI.Model.EmbeddingsResult, Access.public, "python");
@@access(AI.Model.EmbeddingsUsage, Access.public, "python");
@@access(AI.Model.FunctionCall, Access.public);
@@access(AI.Model.FunctionDefinition, Access.public);
@@access(AI.Model.ModelInfo, Access.public);
@@access(AI.Model.ModelType, Access.public);
@@access(AI.Model.ChatMessageContentItem, Access.public);
@@access(AI.Model.ChatMessageTextContentItem, Access.public);
@@access(AI.Model.ChatMessageImageContentItem, Access.public);
@@access(AI.Model.ChatMessageImageUrl, Access.public);
@@access(AI.Model.ChatMessageImageDetailLevel, Access.public);
@@access(AI.Model.StreamingChatCompletionsUpdate, Access.public, "python");
@@access(AI.Model.StreamingChatChoiceUpdate, Access.public, "python");
@@access(AI.Model.StreamingChatResponseMessageUpdate, Access.public, "python");
@@access(AI.Model.StreamingChatResponseToolCallUpdate, Access.public, "python");

// The operators need to be hidden, since we hand-write the public versions of those
@@access(AI.Model.getChatCompletions, Access.internal);
@@access(AI.Model.getEmbeddings, Access.internal);
@@access(AI.Model.getImageEmbeddings, Access.internal);
@@access(AI.Model.getModelInfo, Access.internal, "python");

// We use shorter names in the Python client library
@@clientName(AI.Model.ChatRequestSystemMessage, "SystemMessage", "python");
@@clientName(AI.Model.ChatRequestUserMessage, "UserMessage", "python");
@@clientName(AI.Model.ChatRequestAssistantMessage,
"AssistantMessage",
"python"
);
@@clientName(AI.Model.ChatRequestToolMessage, "ToolMessage", "python");
@@clientName(AI.Model.ChatMessageContentItem, "ContentItem", "python");
@@clientName(AI.Model.ChatMessageTextContentItem, "TextContentItem", "python");
@@clientName(AI.Model.ChatMessageImageContentItem,
"ImageContentItem",
"python"
);
@@clientName(AI.Model.ChatMessageImageUrl, "ImageUrl", "python");
@@clientName(AI.Model.ChatMessageImageDetailLevel,
"ImageDetailLevel",
"python"
);

@client({
name: "ChatCompletionsClient",
service: AI.Model,
})
interface Client1 {
complete is AI.Model.getChatCompletions;
getModelInfo is AI.Model.getModelInfo;
}

@client(
{
name: "EmbeddingsClient",
service: AI.Model,
},
"python"
)
interface Client2 {
embed is AI.Model.getEmbeddings;
getModelInfo is AI.Model.getModelInfo;
}

@client(
{
name: "ImageEmbeddingsClient",
service: AI.Model,
},
"python"
)
interface Client3 {
embed is AI.Model.getImageEmbeddings;
getModelInfo is AI.Model.getModelInfo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
{
"title": "maximum set chat completion",
"operationId": "GetChatCompletions",
"parameters": {
"api-version": "2024-05-01-preview",
"extra-parameters": "error",
"body": {
"messages": [
{
"role": "ChatRequestMessage"
}
],
"frequency_penalty": -2,
"stream": true,
"presence_penalty": -1,
"temperature": 0,
"top_p": 0,
"max_tokens": 0,
"response_format": {
"type": "ChatCompletionsResponseFormat"
},
"stop": [
"dcfnxrdeumnoytdaooqkbl"
],
"tools": [
{
"type": "function",
"function": {
"name": "ikvkykzp",
"description": "gofxoftbpdi"
}
}
],
"seed": 21,
"model": "askiizcjob"
}
},
"responses": {
"200": {
"body": {
"id": "kgousajxgzyhugvqekuswuqbk",
"created": 18,
"model": "zjxvtpxhzhvgjrhit",
"usage": {
"completion_tokens": 19,
"prompt_tokens": 28,
"total_tokens": 16
},
"choices": [
{
"index": 7,
"finish_reason": "stop",
"message": {
"role": "system",
"content": "jnsnrwblpuokzbkrzdcwubpfz",
"tool_calls": [
{
"id": "yrobmilsrugmbwukmzo",
"type": "function",
"function": {
"name": "ikvkykzp",
"arguments": "oqxvktuduomvckic"
}
}
]
}
}
]
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"title": "minimum set chat completion",
"operationId": "GetChatCompletions",
"parameters": {
"api-version": "2024-05-01-preview",
"body": {
"messages": [
{
"role": "ChatRequestMessage"
}
]
}
},
"responses": {
"200": {
"body": {
"id": "kgousajxgzyhugvqekuswuqbk",
"created": 18,
"model": "zjxvtpxhzhvgjrhit",
"usage": {
"completion_tokens": 19,
"prompt_tokens": 28,
"total_tokens": 16
},
"choices": [
{
"index": 7,
"finish_reason": "stop",
"message": {
"role": "system",
"content": "jnsnrwblpuokzbkrzdcwubpfz"
}
}
]
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"title": "maximum set embeddings",
"operationId": "GetEmbeddings",
"parameters": {
"api-version": "2024-05-01-preview",
"extra-parameters": "error",
"body": {
"input": [
"p"
],
"dimensions": 11,
"encoding_format": "base64",
"input_type": "text",
"model": "kwkpluujwiabfquhkaugttxut"
}
},
"responses": {
"200": {
"body": {
"id": "cknxthfa",
"data": [
{
"index": 21
}
],
"usage": {
"prompt_tokens": 4,
"total_tokens": 22
},
"model": "uvrmctbnze"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"title": "minimum set embeddings",
"operationId": "GetEmbeddings",
"parameters": {
"api-version": "2024-05-01-preview",
"body": {
"input": [
"ujbdzqgintkjjorqvgtyqxehwod"
]
}
},
"responses": {
"200": {
"body": {
"id": "kmclubpbyrjjrcihu",
"data": [
{
"embedding": [
3
],
"index": 20
}
],
"usage": {
"prompt_tokens": 17,
"total_tokens": 25
},
"model": "gg"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"title": "maximum set image embeddings",
"operationId": "GetImageEmbeddings",
"parameters": {
"api-version": "2024-05-01-preview",
"extra-parameters": "error",
"body": {
"input": [
{
"image": "puqkvvlvgcjyzughesnkena",
"text": "azrzyjsmnuefqpowpvfmyobeehqsni"
}
],
"dimensions": 26,
"encoding_format": "base64",
"input_type": "text",
"model": "jyb"
}
},
"responses": {
"200": {
"body": {
"id": "cknxthfa",
"data": [
{
"index": 21
}
],
"usage": {
"prompt_tokens": 4,
"total_tokens": 22
},
"model": "uvrmctbnze"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"title": "minimum set image embeddings",
"operationId": "GetImageEmbeddings",
"parameters": {
"api-version": "2024-05-01-preview",
"body": {
"input": [
{
"image": "gvmojtfooxixxzayrditjlyymg"
}
]
}
},
"responses": {
"200": {
"body": {
"id": "kmclubpbyrjjrcihu",
"data": [
{
"embedding": [
3
],
"index": 20
}
],
"usage": {
"prompt_tokens": 17,
"total_tokens": 25
},
"model": "gg"
}
}
}
}
Loading
Loading