> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gravitex.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenAI SDK 사용

> 공식 OpenAI SDK로 GravitexAI를 원활하게 통합

## 공식 OpenAI 라이브러리 사용

GravitexAI는 OpenAI API 형식과 완전히 호환됩니다. 간단한 설정 변경만으로 공식 OpenAI SDK를 그대로 사용할 수 있습니다.

## 지원 SDK

* Python (`openai`)
* Node.js (`openai`)
* .NET (`OpenAI`)
* Go (`go-openai`)
* Java (서드파티)
* PHP (서드파티)
* Ruby (서드파티)

## Python SDK

### 설치

```bash theme={null}
pip install openai
```

### 기본 설정

```python theme={null}
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.gravitex.ai/v1"
)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "Hello!"}
    ]
)

print(response.choices[0].message.content)
```

### 환경 변수

```python theme={null}
import os
from openai import OpenAI

os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"
os.environ["OPENAI_BASE_URL"] = "https://api.gravitex.ai/v1"

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Explain quantum computing"}]
)
```

### 비동기 사용

```python theme={null}
import asyncio
from openai import AsyncOpenAI

async def main():
    client = AsyncOpenAI(
        api_key="YOUR_API_KEY",
        base_url="https://api.gravitex.ai/v1"
    )
    
    response = await client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": "Hello!"}]
    )
    
    print(response.choices[0].message.content)

asyncio.run(main())
```

### 스트리밍

```python theme={null}
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.gravitex.ai/v1"
)

stream = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Write a short story"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")
```

## Node.js SDK

### 설치

```bash theme={null}
npm install openai
```

### 기본 설정

```javascript theme={null}
import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: 'YOUR_API_KEY',
  baseURL: 'https://api.gravitex.ai/v1'
});

const response = await openai.chat.completions.create({
  model: 'gpt-4o',
  messages: [{ role: 'user', content: 'Hello!' }]
});

console.log(response.choices[0].message.content);
```

### 스트리밍

```javascript theme={null}
const stream = await openai.chat.completions.create({
  model: 'gpt-4o',
  messages: [{ role: 'user', content: 'Tell me a joke' }],
  stream: true
});

for await (const chunk of stream) {
  if (chunk.choices[0]?.delta?.content) {
    process.stdout.write(chunk.choices[0].delta.content);
  }
}
```

### TypeScript

```typescript theme={null}
import OpenAI from 'openai';
import type { ChatCompletionCreateParamsNonStreaming } from 'openai/resources/chat/completions';

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY!,
  baseURL: 'https://api.gravitex.ai/v1'
});

const params: ChatCompletionCreateParamsNonStreaming = {
  model: 'gpt-4o',
  messages: [{ role: 'user', content: 'Hello TypeScript!' }],
  temperature: 0.7
};

const response = await openai.chat.completions.create(params);
```

## .NET SDK

### 설치

```bash theme={null}
dotnet add package OpenAI
```

### 기본 설정

```csharp theme={null}
using OpenAI;
using OpenAI.Chat;

var client = new OpenAIClient("YOUR_API_KEY", new OpenAIClientOptions
{
    Endpoint = new Uri("https://api.gravitex.ai/v1")
});

var chatClient = client.GetChatClient("gpt-4o");
var response = await chatClient.CompleteChatAsync("Hello!");

Console.WriteLine(response.Value.Content[0].Text);
```

## Go SDK

### 설치

```bash theme={null}
go get github.com/sashabaranov/go-openai
```

### 기본 설정

```go theme={null}
package main

import (
    "context"
    "fmt"
    openai "github.com/sashabaranov/go-openai"
)

func main() {
    config := openai.DefaultConfig("YOUR_API_KEY")
    config.BaseURL = "https://api.gravitex.ai/v1"
    
    client := openai.NewClientWithConfig(config)
    
    resp, err := client.CreateChatCompletion(
        context.Background(),
        openai.ChatCompletionRequest{
            Model: "gpt-4o",
            Messages: []openai.ChatCompletionMessage{
                {Role: openai.ChatMessageRoleUser, Content: "Hello!"},
            },
        },
    )
    
    if err != nil {
        fmt.Printf("Error: %v\n", err)
        return
    }
    
    fmt.Println(resp.Choices[0].Message.Content)
}
```

## 모델 전환

```python theme={null}
client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.gravitex.ai/v1"
)

# GPT model
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Hello"}]
)

# Claude model
response = client.chat.completions.create(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Hello"}]
)

# Gemini model
response = client.chat.completions.create(
    model="gemini-2.5-pro",
    messages=[{"role": "user", "content": "Hello"}]
)
```

## 고급 기능

### Function Calling

```python theme={null}
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get weather info for a city",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {"type": "string", "description": "City name"}
                },
                "required": ["location"]
            }
        }
    }
]

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "What's the weather in Beijing?"}],
    tools=tools,
    tool_choice="auto"
)
```

### 이미지 입력

```python theme={null}
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "What's in this image?"},
                {
                    "type": "image_url",
                    "image_url": {"url": "https://example.com/image.jpg"}
                }
            ]
        }
    ]
)
```

### Embeddings

```python theme={null}
response = client.embeddings.create(
    model="text-embedding-3-small",
    input="Text to embed"
)

embedding = response.data[0].embedding
print(f"Dimensions: {len(embedding)}")
```

## 오류 처리

```python theme={null}
from openai import (
    OpenAI, 
    APIError, 
    APIConnectionError, 
    RateLimitError,
    InternalServerError
)

try:
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": "Hello"}]
    )
except RateLimitError:
    print("Rate limited, please retry later")
except APIConnectionError:
    print("Network connection error")
except InternalServerError:
    print("Server internal error")
except APIError as e:
    print(f"API error: {e}")
```

## 마이그레이션 가이드

### OpenAI에서 전환

```python theme={null}
# Original config
client = OpenAI(api_key="sk-...")

# Change to GravitexAI
client = OpenAI(
    api_key="YOUR_GRAVITEX_KEY", 
    base_url="https://api.gravitex.ai/v1"
)
```

<Tip>
  코드 변경이 필요 없습니다. 메서드 호출, 매개변수 형식, 응답 처리를 포함해 나머지 코드는 모두 그대로 사용할 수 있습니다.
</Tip>
