рд╢реБрд░реБрдЖрдд
рдЧрд╛рдЗрдб: рдмреИрдЪ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ
рд░реЗрдЯ рд▓рд┐рдорд┐рдЯ рдХреЗ рднреАрддрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЕрдиреБрд╡рд╛рдж, рд╡рд░реНрдЧреАрдХрд░рдг рдФрд░ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд╕реА рдХрд░реЗрдВ, рд░реАрдЯреНрд░рд╛рдИ, рдХреИрд╢рд┐рдВрдЧ рдФрд░ рд╕рд╕реНрддреЗ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
рдмреИрдЪ рдЬреЙрдм (рдкреНрд░реЛрдбрдХреНрдЯ рдХреИрдЯрд▓реЙрдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж, рд╕рдкреЛрд░реНрдЯ рдЯрд┐рдХрдЯ рдХрд╛ рд╡рд░реНрдЧреАрдХрд░рдг, рд╣рдЬрд╝рд╛рд░реЛрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рд╕реЗ рдлрд╝реАрд▓реНрдб рдирд┐рдХрд╛рд▓рдирд╛) рдПрдХ рд╣реА рддрд░рд╣ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрдИ рдмрд╛рд░ рднреЗрдЬрддреЗ рд╣реИрдВред рдХрд╛рдо рд╕рд░рд▓ рд╣реИ; рдХрдард┐рди рд╣рд┐рд╕реНрд╕реЗ рд╣реИрдВ рдереНрд░реВрдкреБрдЯ, рд╡рд┐рдлрд▓рддрд╛рдПрдБ рдФрд░ рд▓рд╛рдЧрддред рдпрд╣ рдЧрд╛рдЗрдб рдЖрдзрд┐рдХрд╛рд░рд┐рдХ openai рдкреИрдХреЗрдЬ рдФрд░ рдмреЗрд╕ URL https://api14.com/api/v1 рдХреЗ рд╕рд╛рде рддреАрдиреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддреА рд╣реИред
рдХреЛрдИ рдЕрд▓рдЧ рдмреИрдЪ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдирд╣реАрдВ рд╣реИ: OpenAI рдХреА Batch API api14 рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ (рджреЗрдЦреЗрдВ OpenAI SDK рд╕рдВрдЧрддрддрд╛)ред рдЖрдк рдмреИрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╕рдорд╡рд░реНрддреАрддрд╛ (concurrency) рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
рдЕрдкрдиреА рд░реЗрдЯ рд▓рд┐рдорд┐рдЯ рдЬрд╛рдиреЗрдВ
рд╕реАрдорд╛рдПрдБ рдкреНрд░рддрд┐ API рдХреБрдВрдЬреА рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдЕрдиреБрд░реЛрдз (RPM) рдореЗрдВ рдЧрд┐рдиреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкреНрд▓рд╛рди рд╕реЗ рд╕реАрдорд┐рдд рд╣реЛрддреА рд╣реИрдВ:
| рдкреНрд▓рд╛рди | рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдЕрдиреБрд░реЛрдз |
|---|---|
| Free | 5 |
| Pro | 100 |
| Team | 3,000 |
| Enterprise | 3,000+ |
рдЬрд┐рд╕ рдХреБрдВрдЬреА рдХреА рдЕрдкрдиреА RPM рд╕реАрдорд╛ рд╣реЛ, рдЙрд╕ рдкрд░ рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрдо рд╕реАрдорд╛ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рдЕрдкрдиреА рд╕реАрдорд╛ GET /key рд╕реЗ рдЬрд╛рдБрдЪреЗрдВ (рдЬрдм рдХреБрдВрдЬреА рдкреНрд▓рд╛рди рдХреА рд╕реАрдорд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреА рд╣реИ рддрдм rate_limit.requests null рд╣реЛрддрд╛ рд╣реИ), рджреЗрдЦреЗрдВ рдмреИрд▓реЗрдВрд╕ рдФрд░ рдХреБрдВрдЬреА рдЬрд╛рдирдХрд╛рд░реАред рд╕реАрдорд╛ рдкрд╛рд░ рд╣реЛрдиреЗ рдкрд░ Retry-After: 60 рдХреЗ рд╕рд╛рде 429 rate_limited рд▓реМрдЯрддрд╛ рд╣реИред
RPM рдпрд╣ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдХрд┐рддрдиреЗ рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣ рдирд╣реАрдВ рдХрд┐ рдПрдХ рд╕рд╛рде рдХрд┐рддрдиреЗ рдЪрд▓рддреЗ рд╣реИрдВред рдпрджрд┐ рдФрд╕рдд рдЕрдиреБрд░реЛрдз рдореЗрдВ 4 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреА рд╕реАрдорд╛ 100 RPM рд╣реИ, рддреЛ рд▓рдЧрднрдЧ 7 рдЕрдиреБрд░реЛрдз рдПрдХ рд╕рд╛рде рдЪрд▓рдиреЗ рдкрд░ рд╣реА рд╕реАрдорд╛ рдЖ рдЬрд╛рддреА рд╣реИред рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЧрддрд┐ рджреЗрдВ, рдФрд░ рд╕рдорд╡рд░реНрддреАрддрд╛ рд╕рдВрддреБрд▓рд┐рдд рд░рдЦреЗрдВред
рдЧрддрд┐-рдирд┐рдпрдВрддреНрд░рд┐рдд, рд╕рдорд╡рд░реНрддреА рд░рдирд░ (Python)
import asyncio, json, os, time
from openai import AsyncOpenAI, APIStatusError
client = AsyncOpenAI(base_url="https://api14.com/api/v1", api_key=os.environ["API14_API_KEY"], max_retries=4)
RPM = 100 # рдЖрдкрдХреЗ рдкреНрд▓рд╛рди рдпрд╛ рдХреБрдВрдЬреА рдХреА рд╕реАрдорд╛
CONCURRENCY = 10
FATAL = {"daily_limit_reached", "insufficient_balance", "invalid_api_key", "model_not_allowed"}
class Pacer:
"""Spaces request starts evenly so we never exceed RPM."""
def __init__(self, rpm):
self.interval, self.next, self.lock = 60 / rpm, 0.0, asyncio.Lock()
async def wait(self):
async with self.lock:
now = time.monotonic()
self.next = max(self.next, now)
delay, self.next = self.next - now, self.next + self.interval
await asyncio.sleep(delay)
SYSTEM = "Translate the user's text to German. Keep product names and units unchanged. Reply with the translation only."
async def translate(item, pacer, sem):
async with sem:
await pacer.wait()
r = await client.chat.completions.create(
model="openai/gpt-5-mini",
messages=[{"role": "system", "content": SYSTEM}, {"role": "user", "content": item["text"]}],
max_tokens=500,
)
return {"id": item["id"], "text": r.choices[0].message.content, "cost": r.usage.cost}
async def main(items, out_path="out.jsonl"):
done = set()
if os.path.exists(out_path):
done = {json.loads(line)["id"] for line in open(out_path)}
todo = [i for i in items if i["id"] not in done]
pacer, sem = Pacer(RPM), asyncio.Semaphore(CONCURRENCY)
with open(out_path, "a") as out:
for task in asyncio.as_completed([translate(i, pacer, sem) for i in todo]):
try:
out.write(json.dumps(await task) + "\n")
except APIStatusError as e:
if e.code in FATAL:
raise SystemExit(f"Stopping batch: {e.code}")
print("failed:", e.status_code, e.code) # рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛; рд░реАрдЯреНрд░рд╛рдИ рдХреЗ рд▓рд┐рдП рджреЛрдмрд╛рд░рд╛ рдЪрд▓рд╛рдПрдБ
items = [json.loads(line) for line in open("items.jsonl")] # [{"id": "...", "text": "..."}]
asyncio.run(main(items))
рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:
- рдЧрддрд┐ рдирд┐рдпрдВрддреНрд░рдг:
PacerрдкреНрд░рддрд┐ рдорд┐рдирдЯ рдЕрдзрд┐рдХрддрдоRPMрдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ; рд╕реЗрдорд╛рдлрд╝реЛрд░ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рдЕрдиреБрд░реЛрдз рдПрдХ рд╕рд╛рде рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред - рд░реАрдЯреНрд░рд╛рдИ: SDK 429 рдФрд░ 5xx рдХреЛ exponential backoff рдХреЗ рд╕рд╛рде рджреЛрдмрд╛рд░рд╛ рдЖрдЬрд╝рдорд╛рддрд╛ рд╣реИ рдФрд░
Retry-AfterрдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИ (max_retries=4)ред рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЗ 429 рднреА рдЗрд╕реА рддрд░рд╣ рд░реАрдЯреНрд░рд╛рдИ рд╣реЛрддреЗ рд╣реИрдВред - рдШрд╛рддрдХ рдХреЛрдб рдЬреЙрдм рд░реЛрдХ рджреЗрддреЗ рд╣реИрдВ:
daily_limit_reachedрдФрд░insufficient_balanceрд░реАрдЯреНрд░рд╛рдИ рд╕реЗ рдареАрдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЬреЙрдм рдкреНрд░рдпрд╛рд╕ рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИред - рдЪреЗрдХрдкреЙрдЗрдВрдЯрд┐рдВрдЧ: рдирддреАрдЬреЗ рдкреВрд░реЗ рд╣реЛрддреЗ рд╣реА JSONL рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЛрдмрд╛рд░рд╛ рдЪрд▓рд╛рдиреЗ рдкрд░ рдкреВрд░реЗ рд╣реЛ рдЪреБрдХреЗ id рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреНрд░реИрд╢ рдпрд╛ рд░реБрдХреЗ рд╣реБрдП рдЬреЙрдм рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдЦреЛрддрд╛ред
Node рдореЗрдВ рдпрд╣реА рд╕рдВрд░рдЪрдирд╛ рдПрдХ рд╕рд╛рдЭрд╛ рдХрддрд╛рд░ рд╕реЗ рдХрд╛рдо рдЙрдард╛рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╡рд░реНрдХрд░ рдкрд░ Promise.all рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЬрд╣рд╛рдБ рд╣рд░ рд╡рд░реНрдХрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ 60_000 / RPM ms рд░реБрдХрддрд╛ рд╣реИред
рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХрдИ рдЖрдЗрдЯрдо рд░рдЦреЗрдВ
рдЫреЛрдЯреЗ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╣рд░ рдЖрдЗрдЯрдо рдкрд░ рдПрдХ рдЕрдиреБрд░реЛрдз RPM рдмрд░реНрдмрд╛рдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рд░ рдмрд╛рд░ рдирд┐рд░реНрджреЗрд╢ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдз 20-50 рдЖрдЗрдЯрдо рд╡рд░реНрдЧреАрдХреГрдд рдХрд░реЗрдВ, рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЙрддрдиреЗ рд╣реА рдЧреБрдирд╛ рдШрдЯ рдЬрд╛рддреА рд╣реИ:
schema = {
"type": "object",
"properties": {"labels": {"type": "array", "items": {
"type": "object",
"properties": {"id": {"type": "string"}, "label": {"type": "string", "enum": ["billing", "bug", "feature", "other"]}},
"required": ["id", "label"], "additionalProperties": False,
}}},
"required": ["labels"], "additionalProperties": False,
}
tickets = "\n".join(f"{t['id']}: {t['text']}" for t in batch_of_30)
r = await client.chat.completions.create(
model="openai/gpt-5-mini",
messages=[{"role": "system", "content": "Label each ticket."}, {"role": "user", "content": tickets}],
response_format={"type": "json_schema", "json_schema": {"name": "labels", "strict": True, "schema": schema}},
)
labels = json.loads(r.choices[0].message.content)["labels"]
рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рд╣рд░ рдЗрдирдкреБрдЯ id рд▓реМрдЯрд╛ рд╣реИ; рдЬреЛ рдЫреВрдЯ рдЧрдП рдЙрдиреНрд╣реЗрдВ рджреЛрдмрд╛рд░рд╛ рднреЗрдЬреЗрдВред рдпрджрд┐ finish_reason "length" рд╣реИ, рддреЛ рдмреИрдЪ max_tokens рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝рд╛ рдерд╛, рдЙрд╕реЗ рдмрд╛рдБрдЯ рджреЗрдВред рджреЗрдЦреЗрдВ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдЖрдЙрдЯрдкреБрдЯред рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ input рдРрд░реЗ рдореЗрдВ 100 рддрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреЗрдЬреЗрдВ, рджреЗрдЦреЗрдВ рдПрдореНрдмреЗрдбрд┐рдВрдЧред
рдкреНрд░реЙрдореНрдкреНрдЯ рдХреИрд╢рд┐рдВрдЧ рд╕реЗ рд▓рд╛рдЧрдд рдШрдЯрд╛рдПрдБ
рдмреИрдЪ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢, рдЙрджрд╛рд╣рд░рдг рдФрд░ schema рд╣рд░ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдПрдХ рдЬреИрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдФрд░ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЖрдЗрдЯрдо рдХреЛ рдЖрдЦрд╝рд┐рд░ рдореЗрдВ рд░рдЦреЗрдВ, рддрд╛рдХрд┐ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреИрд╢реНрдб рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рджреЛрдмрд╛рд░рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХреЗрдВ:
- OpenAI, DeepSeek, Gemini 2.5 рдФрд░ рдЕрдиреНрдп рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд▓рдВрдмрд╛ рд╣реЛрддреЗ рд╣реА рдЕрдкрдиреЗ рдЖрдк рдХреИрд╢ рдХрд░рддреЗ рд╣реИрдВ (OpenAI рдХреЗ рд▓рд┐рдП 1,024 рдЯреЛрдХрди)ред рдХреИрд╢ рд░реАрдб рдХреА рд▓рд╛рдЧрдд рд╕рд╛рдорд╛рдиреНрдп рдЗрдирдкреБрдЯ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддреА рд╣реИред
- Anthropic рдореЙрдбрд▓ рдХреЛ рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рд╕реНрдерд┐рд░ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рд╕реНрдкрд╖реНрдЯ
cache_controlрдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╡рд╛рд▓рд╛ рд▓рдВрдмрд╛, рд╡рд┐рд╕реНрддреГрдд рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рдЫреЛрдЯреЗ рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ рдмрд╣реБрдд рдЬрд╝реНрдпрд╛рджрд╛ рдорд╣рдБрдЧрд╛ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рд╣рд┐рдЯ рдХреА рдкреБрд╖реНрдЯрд┐ usage.prompt_tokens_details.cached_tokens рдореЗрдВ рдХрд░реЗрдВред рджреЗрдЦреЗрдВ рдкреНрд░реЙрдореНрдкреНрдЯ рдХреИрд╢рд┐рдВрдЧред
рд╕рд╕реНрддрд╛ рдореЙрдбрд▓ рдЪреБрдиреЗрдВ, рдлрд┐рд░ рдЬрд╛рдБрдЪреЗрдВ
рдЕрдиреБрд╡рд╛рдж, рд╡рд░реНрдЧреАрдХрд░рдг рдФрд░ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд╕реА рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдореЙрдбрд▓ рдЕрдХреНрд╕рд░ рдХреАрдордд рдХреЗ рдПрдХ рдЕрдВрд╢ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЕрдЪреНрдЫреЗ рд╣реЛрддреЗ рд╣реИрдВред рдЯреЗрдХреНрд╕реНрдЯ рдореЙрдбрд▓ рдХреЛ рдЗрдирдкреБрдЯ рдХреАрдордд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ:
curl -s "https://api14.com/api/v1/models?category=text" \
| jq -r '.data | sort_by(.pricing.prompt | tonumber) | .[:15][] | "\(.id) \(.pricing.prompt) \(.pricing.completion)"'
рдлрд┐рд░ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рдкреЗрдВ:
- 50-100 рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЖрдЗрдЯрдо рд▓реЗрдВ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рд╣рд╛рде рд╕реЗ рд▓реЗрдмрд▓ рдХрд░реЗрдВред
- рдЙрдиреНрд╣реЗрдВ рджреЛ рдпрд╛ рддреАрди рдЙрдореНрдореАрджрд╡рд╛рд░ рдореЙрдбрд▓ рд╕реЗ рдЪрд▓рд╛рдПрдБ рдФрд░ рд╕рдЯреАрдХрддрд╛ рддрдерд╛ рдЬреЛрдбрд╝реЗ рдЧрдП
usage.costрдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред - рдкреНрд░рддрд┐ рдЖрдЗрдЯрдо рд▓рд╛рдЧрдд рдХреЛ рдХреБрд▓ рдЖрдЗрдЯрдо рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдХреЗ рдкреВрд░реЗ рдЬреЙрдм рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдБ, рдФрд░
GET /creditsрд╕реЗ рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдмреИрд▓реЗрдВрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
:free рд╡реЗрд░рд┐рдПрдВрдЯ рдХрд┐рд╕реА рдореЙрдбрд▓ рдХрд╛ рдореБрдлрд╝реНрдд рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╡рд╣ рдореМрдЬреВрдж рд╣реЛ, рд▓реЗрдХрд┐рди рдЙрди рдкрд░ рдЕрдкрд╕реНрдЯреНрд░реАрдо рд░реЗрдЯ рд▓рд┐рдорд┐рдЯ рд╕рдЦрд╝реНрдд рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдмрдбрд╝реЗ рдмреИрдЪ рдХреЗ рдмрдЬрд╛рдп рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред рджреЗрдЦреЗрдВ рдореЙрдбрд▓ id рдФрд░ рд╡реЗрд░рд┐рдПрдВрдЯред
рдмрдбрд╝реЗ рд░рди рд╕реЗ рдкрд╣рд▓реЗ
- рджреИрдирд┐рдХ USD рд╕реАрдорд╛ рд╡рд╛рд▓реА рдЕрд▓рдЧ рдХреБрдВрдЬреА рдмрдирд╛рдПрдБ рддрд╛рдХрд┐ рдХреЛрдИ рдмрдЧ рдЖрдкрдХрд╛ рдмреИрд▓реЗрдВрд╕ рдЦрд╛рд▓реА рди рдХрд░ рд╕рдХреЗред рддрдм рдЬреЙрдм
429 daily_limit_reachedрдХреЗ рд╕рд╛рде рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред рджреЗрдЦреЗрдВ рд░реЗрдЯ рд▓рд┐рдорд┐рдЯред - рд╣рд░ рдЕрдиреБрд░реЛрдз рдкрд░
max_tokensрд╕реЗрдЯ рдХрд░реЗрдВред - рдкрд╣рд▓реЗ 1% рдЖрдЗрдЯрдо рдЪрд▓рд╛рдПрдБ, рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рд▓рд╛рдЧрдд рдЬрд╛рдБрдЪреЗрдВ, рдлрд┐рд░ рдмрд╛рдХреА рд╢реБрд░реВ рдХрд░реЗрдВред
- рд╡рд┐рдлрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ (рдХреЛрдИ рднреА 4xx рдпрд╛ 5xx) рдкрд░ рд╢реБрд▓реНрдХ рдирд╣реАрдВ рд▓рдЧрддрд╛, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЪрд▓рд╛рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рджреЗрдЦреЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдБред