polylingo_chat 0.1.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +383 -22
  3. data/lib/generators/polylingo_chat/install/README +72 -0
  4. data/lib/generators/polylingo_chat/install/install_generator.rb +44 -16
  5. data/lib/generators/polylingo_chat/install/templates/channels/polylingo_chat_channel.rb +1 -1
  6. data/lib/generators/polylingo_chat/install/templates/controllers/polylingo_chat/conversations_controller.rb +127 -0
  7. data/lib/generators/polylingo_chat/install/templates/controllers/polylingo_chat/messages_controller.rb +113 -0
  8. data/lib/generators/polylingo_chat/install/templates/create_conversations.rb +2 -2
  9. data/lib/generators/polylingo_chat/install/templates/create_message_translations.rb +13 -0
  10. data/lib/generators/polylingo_chat/install/templates/create_messages.rb +8 -4
  11. data/lib/generators/polylingo_chat/install/templates/create_participants.rb +8 -5
  12. data/lib/generators/polylingo_chat/install/templates/javascript/chat.js +5 -5
  13. data/lib/generators/polylingo_chat/install/templates/jobs/translate_job.rb +93 -0
  14. data/lib/generators/polylingo_chat/install/templates/models/conversation.rb +34 -5
  15. data/lib/generators/polylingo_chat/install/templates/models/message.rb +16 -8
  16. data/lib/generators/polylingo_chat/install/templates/models/participant.rb +19 -4
  17. data/lib/generators/polylingo_chat/install/templates/views/polylingo_chat/conversations/index.html.erb +56 -0
  18. data/lib/generators/polylingo_chat/install/templates/views/polylingo_chat/conversations/show.html.erb +141 -0
  19. data/lib/polylingo_chat/translator/anthropic_client.rb +2 -2
  20. data/lib/polylingo_chat/translator/gemini_client.rb +2 -2
  21. data/lib/polylingo_chat/translator/openai_client.rb +2 -2
  22. data/lib/polylingo_chat/version.rb +1 -1
  23. data/lib/polylingo_chat.rb +0 -1
  24. metadata +17 -29
  25. data/lib/generators/polylingo_chat/install_generator.rb +0 -38
  26. data/lib/generators/polylingo_chat/templates/INSTALL_README.md +0 -124
  27. data/lib/generators/polylingo_chat/templates/chat_channel_example.js +0 -18
  28. data/lib/generators/polylingo_chat/templates/create_polyglot_conversations.rb +0 -9
  29. data/lib/generators/polylingo_chat/templates/create_polyglot_messages.rb +0 -13
  30. data/lib/generators/polylingo_chat/templates/create_polyglot_participants.rb +0 -12
  31. data/lib/generators/polylingo_chat/templates/models/conversation.rb +0 -7
  32. data/lib/generators/polylingo_chat/templates/models/message.rb +0 -14
  33. data/lib/generators/polylingo_chat/templates/models/participant.rb +0 -6
  34. data/lib/generators/polylingo_chat/templates/polyglot.rb +0 -53
  35. data/lib/generators/polylingo_chat/templates/polylingo_chat_channel.rb +0 -19
  36. data/lib/polylingo_chat/translate_job.rb +0 -63
@@ -1,63 +0,0 @@
1
- module PolylingoChat
2
- class TranslateJob < ActiveJob::Base
3
- queue_as :polylingo_chat_translations
4
-
5
- def perform(message_id)
6
- # Host app must implement Message model with associations matching spec
7
- message = ::Message.find_by(id: message_id)
8
- return unless message
9
-
10
- conversation = message.conversation
11
- return unless conversation
12
-
13
- recipients = conversation.users.where.not(id: message.sender_id)
14
-
15
- # Check if translation is enabled (API key present)
16
- translation_enabled = PolylingoChat.config.api_key.present?
17
-
18
- recipients.each do |recipient|
19
- if translation_enabled
20
- # Translation enabled - translate message
21
- target_lang = recipient.preferred_language || PolylingoChat.config.default_language
22
- source_lang = PolylingoChat::Translator.detect_language(message.body)
23
- context = conversation.messages.order(created_at: :asc).last(20).pluck(:body).join("") rescue nil
24
-
25
- translated = PolylingoChat::Translator.translate(text: message.body, from: source_lang, to: target_lang, context: context)
26
- # If translator returns a Future-like, wait
27
- translated = translated.value if translated.respond_to?(:value)
28
- else
29
- # No API key - just use original message (chat-only mode)
30
- translated = message.body
31
- end
32
-
33
- # Broadcast to recipient using ActionCable
34
- begin
35
- # Broadcast to user-specific channel
36
- ActionCable.server.broadcast("polylingo_chat_recipient_#{recipient.id}", {
37
- message: translated,
38
- original: message.body,
39
- message_id: message.id,
40
- sender_id: message.sender_id,
41
- sender_name: message.sender.name,
42
- translated: translation_enabled
43
- })
44
-
45
- # Also broadcast to conversation channel for demo/group chat
46
- ActionCable.server.broadcast("conversation_#{conversation.id}", {
47
- message: translated,
48
- original: message.body,
49
- message_id: message.id,
50
- sender_id: message.sender_id,
51
- sender_name: message.sender.name,
52
- translated: translation_enabled,
53
- recipient_id: recipient.id
54
- })
55
- rescue => e
56
- # ignore broadcast errors
57
- end
58
- end
59
-
60
- message.update(translated: translation_enabled) rescue nil
61
- end
62
- end
63
- end