Class: Geminize::ConversationService

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

Overview

High-level service for managing conversations

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(repository = nil, client = nil, options = {}) ⇒ ConversationService

Initialize a new conversation service

Parameters:



16
17
18
19
20
# File 'lib/geminize/conversation_service.rb', line 16

def initialize(repository = nil, client = nil, options = {})
  @repository = repository || Geminize.conversation_repository
  @client = client || Client.new(options)
  @options = options
end

Instance Attribute Details

#clientGeminize::Client (readonly)

Returns The client instance.

Returns:



10
11
12
# File 'lib/geminize/conversation_service.rb', line 10

def client
  @client
end

#repositoryGeminize::ConversationRepository (readonly)

Returns The repository for storing conversations.

Returns:



7
8
9
# File 'lib/geminize/conversation_service.rb', line 7

def repository
  @repository
end

Instance Method Details

#clear_conversation(id) ⇒ Models::Conversation

Clear a conversation's message history

Parameters:

  • id (String)

    The ID of the conversation to clear

Returns:

Raises:



103
104
105
106
107
108
109
110
# File 'lib/geminize/conversation_service.rb', line 103

def clear_conversation(id)
  conversation = get_conversation(id)
  raise Geminize::GeminizeError.new("Conversation not found: #{id}", nil, nil) unless conversation

  conversation.clear
  @repository.save(conversation)
  conversation
end

#create_conversation(title = nil, system_instruction = nil) ⇒ Models::Conversation

Create a new conversation

Parameters:

  • title (String, nil) (defaults to: nil)

    Optional title for the conversation

  • system_instruction (String, nil) (defaults to: nil)

    Optional system instruction to guide model behavior

Returns:



26
27
28
29
30
31
32
33
34
35
# File 'lib/geminize/conversation_service.rb', line 26

def create_conversation(title = nil, system_instruction = nil)
  # Create a conversation with the appropriate arguments
  conversation = if system_instruction
    Models::Conversation.new(nil, title, nil, nil, system_instruction)
  else
    Models::Conversation.new(nil, title)
  end
  @repository.save(conversation)
  conversation
end

#delete_conversation(id) ⇒ Boolean

Delete a conversation

Parameters:

  • id (String)

    The ID of the conversation to delete

Returns:

  • (Boolean)

    True if the deletion was successful



81
82
83
# File 'lib/geminize/conversation_service.rb', line 81

def delete_conversation(id)
  @repository.delete(id)
end

#get_conversation(id) ⇒ Models::Conversation?

Get a conversation by ID

Parameters:

  • id (String)

    The ID of the conversation to get

Returns:

Raises:



41
42
43
# File 'lib/geminize/conversation_service.rb', line 41

def get_conversation(id)
  @repository.load(id)
end

#list_conversationsArray<Hash>

List all available conversations

Returns:

  • (Array<Hash>)

    An array of conversation metadata



74
75
76
# File 'lib/geminize/conversation_service.rb', line 74

def list_conversations
  @repository.list
end

#send_message(conversation_id, message, model_name = nil, params = {}) ⇒ Hash

Send a message in a conversation and get a response

Parameters:

  • conversation_id (String)

    The ID of the conversation

  • message (String)

    The message to send

  • model_name (String, nil) (defaults to: nil)

    The model to use

  • params (Hash) (defaults to: {})

    Additional generation parameters

Returns:

  • (Hash)

    The response and updated conversation

Raises:



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/geminize/conversation_service.rb', line 52

def send_message(conversation_id, message, model_name = nil, params = {})
  # Load the conversation
  conversation = get_conversation(conversation_id)
  raise Geminize::GeminizeError.new("Conversation not found: #{conversation_id}", nil, nil) unless conversation

  # Create a chat instance with the conversation
  chat = Chat.new(conversation, @client, @options)

  # Send the message
  response = chat.send_message(message, model_name, params)

  # Save the updated conversation
  @repository.save(conversation)

  {
    response: response,
    conversation: conversation
  }
end

#update_conversation_system_instruction(id, system_instruction) ⇒ Models::Conversation

Update a conversation's system instruction

Parameters:

  • id (String)

    The ID of the conversation to update

  • system_instruction (String)

    The new system instruction

Returns:

Raises:



117
118
119
120
121
122
123
124
# File 'lib/geminize/conversation_service.rb', line 117

def update_conversation_system_instruction(id, system_instruction)
  conversation = get_conversation(id)
  raise Geminize::GeminizeError.new("Conversation not found: #{id}", nil, nil) unless conversation

  conversation.system_instruction = system_instruction
  @repository.save(conversation)
  conversation
end

#update_conversation_title(id, title) ⇒ Models::Conversation

Update a conversation title

Parameters:

  • id (String)

    The ID of the conversation to update

  • title (String)

    The new title

Returns:

Raises:



90
91
92
93
94
95
96
97
# File 'lib/geminize/conversation_service.rb', line 90

def update_conversation_title(id, title)
  conversation = get_conversation(id)
  raise Geminize::GeminizeError.new("Conversation not found: #{id}", nil, nil) unless conversation

  conversation.title = title
  @repository.save(conversation)
  conversation
end