Skip to content

Commit 46827eb

Browse files
authored
AI Assistant: Add Metadata Column to Sessions (#3095)
* Add RAG results column and prompt column * meta key in chat sessions instead of rag_results and prompt key in chat messages * Update CL * Rewording in CL * When sending user message use the session meta value
1 parent 0552128 commit 46827eb

File tree

6 files changed

+29
-10
lines changed

6 files changed

+29
-10
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ and this project adheres to
1717

1818
### Added
1919

20+
- AI Assistant: add metadata column to chat sessions
21+
[#3054](https://github.com/OpenFn/lightning/issues/3054)
22+
2023
### Changed
2124

2225
### Fixed

lib/lightning/ai_assistant/ai_assistant.ex

+8-5
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,18 @@ defmodule Lightning.AiAssistant do
9292

9393
@spec save_message(ChatSession.t(), %{any() => any()}) ::
9494
{:ok, ChatSession.t()} | {:error, Ecto.Changeset.t()}
95-
def save_message(session, message, usage \\ %{}) do
95+
def save_message(session, message, usage \\ %{}, meta \\ nil) do
9696
messages = Enum.map(session.messages, &Map.take(&1, [:id]))
9797

9898
Multi.new()
9999
|> Multi.put(:usage, usage)
100100
|> Multi.put(:message, message)
101101
|> Multi.insert_or_update(
102102
:upsert,
103-
session
104-
|> ChatSession.changeset(%{messages: messages ++ [message]})
103+
ChatSession.changeset(session, %{
104+
messages: messages ++ [message],
105+
meta: meta || session.meta
106+
})
105107
)
106108
|> Multi.merge(&maybe_increment_ai_usage/1)
107109
|> Repo.transaction()
@@ -131,7 +133,8 @@ defmodule Lightning.AiAssistant do
131133
ApolloClient.query(
132134
content,
133135
%{expression: session.expression, adaptor: session.adaptor},
134-
build_history(session)
136+
build_history(session),
137+
session.meta || %{}
135138
)
136139
|> handle_apollo_resp(session)
137140
end
@@ -142,7 +145,7 @@ defmodule Lightning.AiAssistant do
142145
)
143146
when status in 200..299 do
144147
message = body["history"] |> Enum.reverse() |> hd()
145-
save_message(session, message, body["usage"])
148+
save_message(session, message, body["usage"], body["meta"])
146149
end
147150

148151
defp handle_apollo_resp(

lib/lightning/ai_assistant/chat_session.ex

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ defmodule Lightning.AiAssistant.ChatSession do
1717
adaptor: String.t() | nil,
1818
is_public: boolean(),
1919
is_deleted: boolean(),
20+
meta: map() | nil,
2021
messages: [ChatMessage.t(), ...] | []
2122
}
2223

2324
schema "ai_chat_sessions" do
2425
field :expression, :string, virtual: true
2526
field :adaptor, :string, virtual: true
2627
field :title, :string
28+
field :meta, :map
2729
field :is_public, :boolean, default: false
2830
field :is_deleted, :boolean, default: false
2931
belongs_to :job, Job
@@ -36,7 +38,7 @@ defmodule Lightning.AiAssistant.ChatSession do
3638

3739
def changeset(chat_session, attrs) do
3840
chat_session
39-
|> cast(attrs, [:title, :is_public, :is_deleted, :job_id, :user_id])
41+
|> cast(attrs, [:title, :is_public, :is_deleted, :job_id, :user_id, :meta])
4042
|> validate_required([:title, :job_id, :user_id])
4143
|> cast_assoc(:messages)
4244
end

lib/lightning/apollo_client.ex

+4-3
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ defmodule Lightning.ApolloClient do
99
}
1010
| %{}
1111

12-
@spec query(String.t(), context(), list()) :: Tesla.Env.result()
13-
def query(content, context \\ %{}, history \\ []) do
12+
@spec query(String.t(), context(), list(), map()) :: Tesla.Env.result()
13+
def query(content, context \\ %{}, history \\ [], meta \\ %{}) do
1414
payload = %{
1515
"api_key" => Lightning.Config.apollo(:ai_assistant_api_key),
1616
"content" => content,
1717
"context" => context,
18-
"history" => history
18+
"history" => history,
19+
"meta" => meta
1920
}
2021

2122
client() |> Tesla.post("/services/job_chat", payload)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
defmodule Lightning.Repo.Migrations.AddMetaToAiChatSessions do
2+
use Ecto.Migration
3+
4+
def change do
5+
alter table(:ai_chat_sessions) do
6+
add :meta, :jsonb
7+
end
8+
end
9+
end

test/lightning/apollo_client_test.exs

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ defmodule Lightning.ApolloClientTest do
2323
"api_key" => "api_key",
2424
"content" => "foo",
2525
"context" => %{},
26-
"history" => []
26+
"history" => [],
27+
"meta" => %{}
2728
}
2829

2930
{:ok,

0 commit comments

Comments
 (0)