Class: Geminize::Models::ChatResponse

Inherits:
Object
  • Object
show all
Defined in:
lib/geminize/models/chat_response.rb

Overview

Represents a chat response from the Gemini API

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(response_data) ⇒ ChatResponse

Initialize a new chat response

Parameters:

  • response_data (Hash)

    The raw API response



21
22
23
24
25
# File 'lib/geminize/models/chat_response.rb', line 21

def initialize(response_data)
  @raw_response = response_data
  @timestamp = Time.now
  parse_response
end

Instance Attribute Details

#finish_reasonString? (readonly)

Returns The reason why generation stopped (if applicable).

Returns:

  • (String, nil)

    The reason why generation stopped (if applicable)



11
12
13
# File 'lib/geminize/models/chat_response.rb', line 11

def finish_reason
  @finish_reason
end

#raw_responseHash (readonly)

Returns The raw API response data.

Returns:

  • (Hash)

    The raw API response data



8
9
10
# File 'lib/geminize/models/chat_response.rb', line 8

def raw_response
  @raw_response
end

#timestampTime (readonly)

Returns When the response was created.

Returns:

  • (Time)

    When the response was created



17
18
19
# File 'lib/geminize/models/chat_response.rb', line 17

def timestamp
  @timestamp
end

#usageHash? (readonly)

Returns Token counts for the request and response.

Returns:

  • (Hash, nil)

    Token counts for the request and response



14
15
16
# File 'lib/geminize/models/chat_response.rb', line 14

def usage
  @usage
end

Class Method Details

.from_hash(response_data) ⇒ ChatResponse

Create a ChatResponse object from a raw API response

Parameters:

  • response_data (Hash)

    The raw API response

Returns:



92
93
94
# File 'lib/geminize/models/chat_response.rb', line 92

def self.from_hash(response_data)
  new(response_data)
end

Instance Method Details

#completion_tokensInteger?

Get the completion token count

Returns:

  • (Integer, nil)

    Completion token count or nil if not available



83
84
85
86
87
# File 'lib/geminize/models/chat_response.rb', line 83

def completion_tokens
  return nil unless @usage

  @usage["candidatesTokenCount"]
end

#has_text?Boolean

Check if the response has generated text

Returns:

  • (Boolean)

    True if the response has generated text



61
62
63
# File 'lib/geminize/models/chat_response.rb', line 61

def has_text?
  !text.nil? && !text.empty?
end

#prompt_tokensInteger?

Get the prompt token count

Returns:

  • (Integer, nil)

    Prompt token count or nil if not available



75
76
77
78
79
# File 'lib/geminize/models/chat_response.rb', line 75

def prompt_tokens
  return nil unless @usage

  @usage["promptTokenCount"]
end

#textString?

Get the generated text from the response

Returns:

  • (String, nil)

    The generated text or nil if no text was generated



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/geminize/models/chat_response.rb', line 29

def text
  return @text if defined?(@text)

  @text = nil
  candidates = @raw_response["candidates"]
  if candidates && !candidates.empty?
    content = candidates.first["content"]
    if content && content["parts"] && !content["parts"].empty?
      parts_text = content["parts"].map { |part| part["text"] }.compact
      @text = parts_text.join(" ") unless parts_text.empty?
    end
  end
  @text
end

#to_message_hashHash

Get the response as a formatted message hash

Returns:

  • (Hash)

    Message in format suitable for conversation history



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/geminize/models/chat_response.rb', line 46

def to_message_hash
  candidates = @raw_response["candidates"]
  return nil unless candidates && !candidates.empty?

  content = candidates.first["content"]
  return nil unless content && content["parts"] && !content["parts"].empty?

  {
    role: "model",
    parts: content["parts"]
  }
end

#total_tokensInteger?

Get the total token count

Returns:

  • (Integer, nil)

    Total token count or nil if not available



67
68
69
70
71
# File 'lib/geminize/models/chat_response.rb', line 67

def total_tokens
  return nil unless @usage

  (@usage["promptTokenCount"] || 0) + (@usage["candidatesTokenCount"] || 0)
end