بلاگ پر واپس جائیں

API اور SDKگائیڈ

openai-java کے ساتھ Java میں پہلی request: base URL، key، usage

ایک چلنے والا Java 8+ پروگرام: openai-java CheapTokens کی طرف اشارہ کیا گیا، ایک chat completion، اور جواب، finish_reason اور token usage پرنٹ۔

از CheapTokens Teamشائع شدہ 5 منٹ کا مطالعہ

Java code جو openai-java کو CheapTokens API کی طرف اشارہ کرتا ہے
اس صفحہ پر
  1. dependency شامل کریں
  2. key اور base URL کوڈ سے باہر رکھیں
  3. پروگرام
  4. builder کے ساتھ values واضح طور پر سیٹ کریں
  5. تین errors جو آپ سب سے پہلے ملیں گے
  6. ایک request کی لاگت

Java سے CheapTokens کو کال کرنے کے لیے، سرکاری openai-java SDK رکھیں اور تین چیزیں تبدیل کریں: base URL (https://api.cheaptokens.dev/v1)، API key، اور model id، جو ایک سادہ String کے طور پر پاس کی جاتی ہے۔ نیچے دیا گیا پروگرام ایک chat completion بھیجتا ہے اور جواب، finish_reason اور token usage پرنٹ کرتا ہے۔ اس کے لیے Java 8 یا اس سے جدید ورژن درکار ہے۔

اگر آپ کی ٹیم کے پاس پہلے سے کوئی Spring سروس ہے جو OpenAI سے بات کرتی ہے، تو پوری migration یہی ہے: کوئی نیا client نہیں، کوئی نئی request classes نہیں۔

dependency شامل کریں#

SDK کا README (github.com/openai/openai-java، 4 نومبر 2026 کو چیک کیا گیا) ورژن 4.99.0، group com.openai، artifact openai-java دکھاتا ہے۔ README کوئی release date نہیں دکھاتا، اس لیے اسے کاپی کرنے سے پہلے تازہ ترین ورژن کے لیے repository دیکھیں۔

اپنی build میں openai-java شامل کریں

Maven

xml
<dependency>
  <groupId>com.openai</groupId>
  <artifactId>openai-java</artifactId>
  <version>4.99.0</version>
</dependency>

Gradle

kotlin
implementation("com.openai:openai-java:4.99.0")

framework-neutral artifacts Java 8+ پر چلتے ہیں، اس لیے پرانا corporate JDK رکاوٹ نہیں ہے۔

key اور base URL کوڈ سے باہر رکھیں#

SDK دو environment variables پڑھتا ہے: OPENAI_API_KEY اور OPENAI_BASE_URL۔ OpenAIOkHttpClient.fromEnv() دونوں اٹھا لیتا ہے، اس لیے key کبھی آپ کی source files میں نہیں پہنچتی۔ (System properties openai.apiKey اور openai.baseUrl بھی کام کرتی ہیں اور variables پر فوقیت رکھتی ہیں۔)

bash
export OPENAI_API_KEY="your-cheaptokens-key"
export OPENAI_BASE_URL="https://api.cheaptokens.dev/v1"

SDK کا default base URL https://api.openai.com/v1 ہے۔ دوسری لائن چھوڑ دیں تو آپ کی request وہاں جاتی ہے، ایسی CheapTokens key کے ساتھ جسے وہ نہیں جانتا۔ یہ پہلی بار چلانے پر 401 حاصل کرنے کا ایک طریقہ ہے۔ key کہاں رکھیں اور اسے git سے باہر کیسے رکھیں، اس کے لیے دیکھیں store an API key safely۔

ٹرمینل میں دو environment variables اور ایک run command
Key اور base URL environment سے آتے ہیں، source file سے نہیں

پروگرام#

FirstRequest.java بنائیں:

java
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;

public class FirstRequest {
  public static void main(String[] args) {
    OpenAIClient client = OpenAIOkHttpClient.fromEnv();

    ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
        .model("deepseek-ai/DeepSeek-V4-Flash-0731")
        .addUserMessage("Explain in two sentences what a token is.")
        .maxCompletionTokens(300L)
        .build();

    ChatCompletion completion = client.chat().completions().create(params);
    ChatCompletion.Choice choice = completion.choices().get(0);

    System.out.println(choice.message().content().orElse("(no text)"));
    System.out.println("finish_reason: " + choice.finishReason());
    completion.usage().ifPresent(u ->
        System.out.println("input " + u.promptTokens()
            + ", output " + u.completionTokens()));
  }
}

چند لائنیں دوبارہ دیکھنے کے قابل ہیں۔

  • .model("deepseek-ai/DeepSeek-V4-Flash-0731")۔ SDK کے README کی مثالیں ChatModel.GPT_5_2 جیسے typed constants استعمال کرتی ہیں، لیکن builder میں model(String) overload بھی ہے، اس لیے کوئی بھی id کام کرتی ہے۔ CheapTokens docs سے مکمل id استعمال کریں: مختصر نام deepseek-v4-flash-0731 وہ ہے جس سے سائٹ پر قیمتیں لیبل ہوتی ہیں؛ API کو deepseek-ai/ prefix کے ساتھ مکمل id چاہیے۔ id کا یقین نہیں؟ List models with GET /v1/models۔
  • .maxCompletionTokens(300L)۔ جواب کی لمبائی پر حد، بطور long۔ DeepSeek-V4-Flash فی جواب زیادہ سے زیادہ 32,768 output tokens کی اجازت دیتا ہے، اس لیے یہاں 300 ڈیمو کو مختصر رکھنے کا انتخاب ہے، model کی حد نہیں۔
  • content() ایک Optional ہے۔ اسی لیے پروگرام میں orElse ہے۔ صرف tool calls پر مشتمل جواب میں کوئی متن نہیں ہوتا۔
  • usage() بھی ایک Optional ہے۔ جب سرور بھیجتا ہے تو ifPresent اسے پرنٹ کرتا ہے۔

اسے اسی طرح compile اور run کریں جیسے آپ کی build کرتی ہے (mvn compile exec:java -Dexec.mainClass=FirstRequest، یا Gradle میں JavaExec task)۔ آپ کو token کی وضاحت ملنی چاہیے، پھر finish_reason: … والی ایک لائن جس میں stop ہو، پھر input اور output token counts والی ایک لائن۔ اگر finish_reason میں length لکھا ہو، تو جواب آپ کی 300-token حد پر پہنچ کر کٹ گیا: نمبر بڑھائیں (ایسا کیوں ہوتا ہے)۔

usage() prompt، completion اور total token counts واپس کرتا ہے (promptTokens()، completionTokens()، totalTokens())۔

builder کے ساتھ values واضح طور پر سیٹ کریں#

Tests، یا کئی clients والی سروس، کو کبھی کبھی واضح values درکار ہوتی ہیں۔ وہی client، ہاتھ سے بنایا گیا:

java
OpenAIClient client = OpenAIOkHttpClient.builder()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .baseUrl("https://api.cheaptokens.dev/v1")
    .build();

اس لائن کے بعد سب کچھ، params اور create کال، بالکل ویسا ہی رہتا ہے جیسا اوپر ہے۔ یہاں بھی key environment سے ہی پڑھیں؛ .java فائل میں string literal آپ کے repository میں پہنچ جاتا ہے۔

Java code، openai-java، CheapTokens endpoint اور model
آپ کا کوڈ SDK سے بات کرتا ہے؛ صرف base URL طے کرتا ہے کہ جواب کون دے گا

تین errors جو آپ سب سے پہلے ملیں گے#

جوڑے ملائیں

علامت کو وجہ سے ملائیں

  • 401 Unauthorizedkey خالی یا غلط ہے، یا request api.openai.com پر گئی کیونکہ OPENAI_BASE_URL سیٹ نہیں
  • 404 Not Foundbase URL میں /v1 نہیں، یا model id موجود نہیں
  • finish_reason کہتا ہے lengthmaxCompletionTokens جواب کی ضرورت سے کم ہے

IDE میں خالی environment variable نظر سے چھوٹ جانا آسان ہے: toolbar سے شروع کی گئی run configuration شاید وہ variables inherit نہ کرے جو آپ نے terminal میں export کیے۔ اگر key "سیٹ ہے" مگر پھر بھی 401 ملتا ہے، تو run configuration میں variables شامل کریں۔ ان codes پر مزید: API 401 or 404: key, base URL, model id۔

ایک request کی لاگت#

چونکہ آپ usage پرنٹ کرتے ہیں، آپ scale کرنے سے پہلے request کی قیمت لگا سکتے ہیں۔ فرض کریں آپ کی سروس تقریباً 200 input tokens بھیجتی ہے اور 300 واپس پاتی ہے۔ آج کی قیمتوں پر وہ request DeepSeek-V4-Flash پر $0.000033 کی پڑتی ہے۔ Input اور output ایک ساتھ بل ہوتے ہیں، اور مجموعی طور پر یہ OpenRouter سے سستا ہے۔ جدول ہمارے models میں 1,000 requests کے لیے اسے دہراتا ہے:

ماڈل فی درخواست 1,000 درخواستیں OpenRouter، 1,000 درخواستیں
GLM-5.3-Flash $0.000016 $0.016 $0.0316
DeepSeek-V4-Flash $0.000033 $0.033 $0.056
MiniMax-M2.7 $0.000055 $0.055 $0.66

فی درخواست 200 ان پٹ اور 300 آؤٹ پٹ ٹوکنز۔ فی 1M ٹوکنز کی قیمتیں موجودہ ہیں اور ہمارے ٹیرف کے ساتھ تبدیل ہوتی ہیں؛ OpenRouter کالم اسی ورک لوڈ کے لیے حوالہ جاتی قیمتیں دکھاتا ہے۔

اب اپنی traffic ڈالیں۔ sliders کو اپنی پہلی پرنٹ شدہ usage لائن کے نمبروں پر لے جائیں:

لاگت کیلکولیٹر

روزانہ 2,000 requests والی support سروس

فی درخواست ان پٹ ٹوکنز: 200 · فی درخواست آؤٹ پٹ ٹوکنز: 300 · فی دن درخواستیں: 2,000

ماڈلفی دنفی ماہ
GLM-5.3-Flash$0.032$0.96
DeepSeek-V4-Flash$0.066$1.98
MiniMax-M2.7$0.11$3.30

فی جواب زیادہ گنجائش یا مختلف قسم کے workload کے لیے، DeepSeek-V4-Flash آپ کو 380K context window اور دن کے کسی بھی وقت ایک ہی قیمت دیتا ہے؛ GLM-5.3-Flash (zai-org/GLM-5.3-Flash) اسی پروگرام میں drop-in replacement ہے: id بدلیں، بس۔ تمام models کی موجودہ قیمتیں pricing page پر ہیں، اور docs وہی request دیگر زبانوں میں دکھاتے ہیں۔ یہ Go میں کر رہے ہیں؟ دیکھیں the openai-go version۔