BoundaryML/baml · error

failed to get raw LLM response: %w

Error message

failed to get raw LLM response: %w

What it means

This error wraps any failure from raw_objects.CallMethod when RawLLMResponse() fetches the 'raw_llm_response' attribute of a FunctionLog via the C FFI. It is a pass-through wrapper: the actionable cause (empty FFI response buffer, nil pointer, proto unmarshal failure, or object-response decode failure) lives in the wrapped error. It means the Go client could not retrieve the raw LLM response text from the runtime object.

Source

Thrown at engine/language_client_go/pkg/rawobjects_function_log.go:100

func (f *functionLog) Usage() (Usage, error) {
	result, err := raw_objects.CallMethod(f, "usage", nil)
	if err != nil {
		return nil, fmt.Errorf("failed to get usage: %w", err)
	}

	usage, ok := result.(Usage)
	if !ok {
		return nil, fmt.Errorf("unexpected type for usage: %T", result)
	}

	return usage, nil
}

func (f *functionLog) RawLLMResponse() (string, error) {
	result, err := raw_objects.CallMethod(f, "raw_llm_response", nil)
	if err != nil {
		return "", fmt.Errorf("failed to get raw LLM response: %w", err)
	}

	response, ok := result.(string)
	if !ok {
		return "", fmt.Errorf("unexpected type for raw LLM response: %T", result)
	}

	return response, nil
}

func (f *functionLog) CallsCount() (int, error) {
	result, err := raw_objects.CallMethod(f, "calls_count", nil)
	if err != nil {
		return 0, fmt.Errorf("failed to get calls count: %w", err)
	}

	count, ok := result.(int)
	if !ok {

View on GitHub (pinned to bd85ce9dee)

Solutions

  1. Unwrap the error (errors.Unwrap / %w chain) to see the concrete FFI failure ('failed to call object method function', 'nil pointer', decode failure).
  2. Read RawLLMResponse() within the lifetime of the owning function call/stream.
  3. Keep the generated Go client in sync with the BAML runtime (re-run `baml generate`).
  4. If the wrapped error is an unmarshal/decode failure on a live object, report it upstream with your versions.
Defensive patterns

Strategy: try-catch

Validate before calling

if fnLog == nil {
    return errors.New("function log is nil; cannot read RawLLMResponse")
}

Type guard

func isCallMethodFailure(err error) bool {
    return strings.Contains(err.Error(), "failed to call object method")
}

Try / catch

raw, err := fnLog.RawLLMResponse()
if err != nil {
    log.Printf("RawLLMResponse unavailable: %v (wrapped: %v)", err, errors.Unwrap(err))
    return fmt.Errorf("baml raw LLM response inaccessible: %w", err)
}

Prevention

When it happens

Trigger: Calling RawLLMResponse() on a functionLog whose runtime object was freed or is invalid; the FFI method call returned an empty buffer or nil pointer; the protobuf response failed to unmarshal/decode.

Common situations: Reading raw responses after a stream completed and objects were reclaimed; caching log references in long-running services; Go client vs BAML runtime version mismatch.

Related errors


AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12). Data as JSON: /api/errors/6006f4498465c70a. Report an issue: GitHub.