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

# Call 스키마 레퍼런스

> Call 객체 구조 및 속성에 대한 레퍼런스

이 레퍼런스에서는 W\&B Weave의 Call 객체 스키마를 설명합니다. Call의 속성, 실행 중에 `summary` 딕셔너리에 맞춤형 데이터를 기록하는 방법, Call이 완료된 후 summary 데이터를 조회하는 방법을 다룹니다. Weave가 각 Call에 대해 기록하는 데이터를 검사, 필터링 또는 확장하려면 이 페이지를 참고하세요. Call 쿼리에 대한 자세한 내용은 [Call 쿼리 및 내보내기](/ko/products/wandb/weave/guides/tracking/querying-calls)를 참조하세요.

<h2 id="call-properties">
  Call 속성
</h2>

다음 표는 Weave에서 Call의 주요 속성을 정리한 것입니다. 전체 구현은 다음을 참조하세요.

* Python SDK의 [class: CallSchema](/ko/products/wandb/weave/reference/python-sdk/trace_server/trace_server_interface#class-callschema)
* TypeScript SDK의 [Interface: CallSchema](/ko/products/wandb/weave/reference/typescript-sdk/interfaces/callschema)

| 속성 | 유형 | 설명 |
| - | - | - |
| `id` | string (uuid) | Call의 고유 식별자 |
| `project_id` | string (optional) | 연결된 프로젝트의 식별자 |
| `op_name` | string | 오퍼레이션 이름(레퍼런스일 수 있음) |
| `display_name` | string (optional) | Call의 표시 이름 |
| `trace_id` | string (uuid) | 이 Call이 속한 트레이스의 식별자 |
| `parent_id` | string (uuid) | 부모 Call의 식별자 |
| `started_at` | datetime | Call 시작 타임스탬프 |
| `attributes` | Dict\[str, Any] | Call에 대한 사용자 정의 메타데이터 *(실행 중에는 읽기 전용)* |
| `inputs` | Dict\[str, Any] | Call의 입력 매개변수 |
| `ended_at` | datetime (optional) | Call 종료 타임스탬프 |
| `exception` | string (optional) | Call이 실패한 경우의 오류 메시지 |
| `output` | Any (optional) | Call의 결과 |
| `summary` | Optional\[SummaryMap] | 실행 후 summary 정보입니다. 실행 중에 이 값을 수정해 커스텀 메트릭을 기록할 수 있습니다. |
| `wb_user_id` | Optional\[str] | 연결된 W\&B 사용자 ID |
| `wb_run_id` | Optional\[str] | 연결된 W\&B Run ID |
| `deleted_at` | datetime (optional) | Call 삭제 타임스탬프(해당하는 경우) |

<h2 id="property-details">
  속성 세부 정보
</h2>

`CallSchema` 속성을 사용하면 Call을 추적하고 관리할 수 있습니다.

* `id`, `trace_id`, `parent_id` 속성은 시스템 내에서 Call을 정리하고 서로 연관 짓는 데 사용됩니다.
* 타이밍 정보(`started_at`, `ended_at`)를 활용해 성능을 분석할 수 있습니다.
* `attributes` 및 `inputs` 속성은 Call의 컨텍스트를 제공합니다. Attributes는 Call이 시작되면 고정되므로, 호출하기 전에 `weave.attributes()` 컨텍스트 매니저로 설정하세요. `output` 및 `summary`는 결과를 캡처합니다.
* `wb_user_id` 및 `wb_run_id`를 사용하여 Call을 W\&B 사용자 및 run에 연결하세요.

이러한 속성을 함께 활용하면 프로젝트 전반에서 Call을 상세하게 추적하고 분석할 수 있습니다.

<h2 id="use-call-summary">
  Call summary 사용하기
</h2>

`summary` 속성을 사용하면 실행 후 생성된 맞춤형 데이터를 Call에 첨부해 두었다가 나중에 Weave의 기본 제공 메트릭과 함께 분석할 수 있습니다. 이 속성은 Call이 실행되는 동안 값을 기록할 수 있는 딕셔너리입니다. Call이 종료되면 Weave는 사용자가 기록한 값을 자체 계산 데이터와 딥 병합(deep-merge)한 뒤 그 결과를 저장합니다.

이 딕셔너리는 두 영역으로 나뉩니다.

* 맞춤형 키: `call.summary["accuracy"] = 0.95`처럼 `call.summary`에 직접 기록하는 모든 값입니다. 이 값은 summary 딕셔너리의 최상위 수준에 저장됩니다.
* `summary["weave"]`: Call이 완료될 때 Weave가 자동으로 채우는 예약된 namespace입니다. 이 키에는 직접 값을 기록하지 마세요.

또한 Weave는 모델 응답에 포함된 원시 LLM 토큰 수를 `summary["usage"]`에 캡처합니다(모델 이름별로 키가 지정됨). 이 값은 공급자가 제공한 원본 데이터를 그대로 전달한 것으로, Weave가 계산한 값이 아닙니다. 반면 `summary["weave"]` 내부의 `costs` 필드는 Weave가 이 사용 데이터와 토큰 가격을 바탕으로 산출한 값입니다.

`summary["weave"]` 내부에서 Weave가 계산하는 필드는 다음과 같습니다.

| 필드 | 설명 |
| - | - |
| `status` | 실행 상태로, `SUCCESS`, `ERROR`, `RUNNING`, `DESCENDANT_ERROR`(Call 자체는 성공했지만 하위 Call에서 오류가 발생한 경우) 중 하나입니다. |
| `latency_ms` | `started_at`부터 `ended_at`까지의 소요 시간(밀리초)입니다. `status`가 `RUNNING`이면 `null`입니다. |
| `costs` | `summary["usage"]`와 토큰 가격 데이터를 바탕으로 산출한 모델별 비용 내역입니다. 자세한 내용은 [비용 추적](/ko/products/wandb/weave/guides/tracking/costs)을 참조하세요. |
| `trace_name` | 내부 Op 레퍼런스 URI를 파싱해 얻은, 사람이 읽기 쉬운 Op 이름입니다. 화면 표시 및 필터링에 사용됩니다. |

<h3 id="write-during-a-call">
  Call 실행 중에 쓰기
</h3>

`summary` 딕셔너리를 사용하면 Call 실행 중에 맞춤형 데이터 값을 추가할 수 있습니다.

<Tabs>
  <Tab title="Python">
    Python에서는 `weave.get_current_call()`을 사용해 실행 중 언제든지 `call.summary`에 값을 부여할 수 있습니다.

    ```python lines theme={"system"}
    import weave

    @weave.op()
    def my_op(x):
        result = do_work(x)
        call = weave.get_current_call()
        # summary에 맞춤형 데이터 값을 추가합니다.
        call.summary["accuracy"] = 0.95
        call.summary["num_retries"] = 2
        return result
    ```
  </Tab>

  <Tab title="TypeScript">
    TypeScript에서는 `op()`의 옵션으로 `summarize` 함수를 전달하세요. 이 함수는 최종 결과를 받아 Call이 완료될 때 summary 데이터를 반환합니다.

    ```typescript twoslash lines theme={"system"}
    // @noErrors
    const myOp = weave.op(
      async (x: any) => {
        const result = await doWork(x);
        return result;
      },
      {
        name: 'my_op',
        summarize: (result) => ({
          accuracy: result.accuracy,
          numRetries: result.numRetries,
        }),
      }
    );
    ```
  </Tab>
</Tabs>

<h3 id="read-summary-data">
  summary 데이터 조회
</h3>

ID로 단일 Call을 가져오려면 `getCall`을, 여러 Call을 가져오려면 `getCalls`를 사용하세요. 어느 쪽이든 `summary`는 동일한 병합 딕셔너리입니다.

<Tabs>
  <Tab title="Python">
    ```python lines theme={"system"}
    import weave
    client = weave.init("my-team/my-project")

    # ID로 단일 Call을 가져옵니다.
    call = client.get_call("[CALL-ID]")
    weave_summary = (call.summary or {}).get("weave", {})

    print(weave_summary.get("status"))       # TraceStatus 열거형: SUCCESS, ERROR, RUNNING 또는 DESCENDANT_ERROR.
    print(weave_summary.get("latency_ms"))   # Call이 아직 실행 중이면 Null입니다.
    print(weave_summary.get("costs"))        # 모델별 비용 내역.
    print(call.summary.get("usage"))         # LLM 공급자가 반환한 원시 토큰 수.
    print(call.summary.get("accuracy"))      # 사용자가 정의한 맞춤형 필드.

    # 서버 측 필터링으로 여러 Call을 순회합니다.
    for call in client.get_calls(filter={"op_names": ["weave:///my-team/my-project/op/my_op:*"]}):
        s = call.summary or {}
        weave_s = s.get("weave", {})
        print(call.id, weave_s.get("status"), weave_s.get("latency_ms"), s.get("accuracy"))
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript twoslash lines theme={"system"}
    // @noErrors
    import * as weave from 'weave';
    const client = await weave.init('my-team/my-project');

    // ID로 단일 Call을 가져옵니다.
    const call = await client.getCall('[CALL-ID]');
    const weaveSummary = call.summary?.weave;

    console.log(weaveSummary?.status);       // "success", "error", "running" 또는 "descendant_error".
    console.log(weaveSummary?.latency_ms);   // Call이 아직 실행 중이면 Undefined입니다.
    console.log(weaveSummary?.costs);        // 모델별 비용 내역.
    console.log(call.summary?.usage);        // LLM 공급자가 반환한 원시 토큰 수.
    console.log(call.summary?.accuracy);     // 사용자가 정의한 맞춤형 필드.

    // 서버 측 필터링으로 여러 Call을 가져옵니다.
    const calls = await client.getCalls({ filter: { op_names: ['weave:///my-team/my-project/op/my_op:*'] } });
    for (const call of calls) {
      const weaveS = call.summary?.weave;
      console.log(call.id, weaveS?.status, weaveS?.latency_ms, call.summary?.accuracy);
    }
    ```
  </Tab>
</Tabs>
