(row database.ListAIBridgeSessionsRow)
| 1133 | } |
| 1134 | |
| 1135 | func AIBridgeSession(row database.ListAIBridgeSessionsRow) codersdk.AIBridgeSession { |
| 1136 | session := codersdk.AIBridgeSession{ |
| 1137 | ID: row.SessionID, |
| 1138 | Initiator: MinimalUserFromVisibleUser(database.VisibleUser{ |
| 1139 | ID: row.UserID, |
| 1140 | Username: row.UserUsername, |
| 1141 | Name: row.UserName, |
| 1142 | AvatarURL: row.UserAvatarUrl, |
| 1143 | }), |
| 1144 | Providers: row.Providers, |
| 1145 | Models: row.Models, |
| 1146 | Metadata: jsonOrEmptyMap(pqtype.NullRawMessage{RawMessage: row.Metadata, Valid: len(row.Metadata) > 0}), |
| 1147 | StartedAt: row.StartedAt, |
| 1148 | Threads: row.Threads, |
| 1149 | LastActiveAt: row.LastActiveAt, |
| 1150 | TokenUsageSummary: codersdk.AIBridgeSessionTokenUsageSummary{ |
| 1151 | InputTokens: row.InputTokens, |
| 1152 | OutputTokens: row.OutputTokens, |
| 1153 | CacheReadInputTokens: row.CacheReadInputTokens, |
| 1154 | CacheWriteInputTokens: row.CacheWriteInputTokens, |
| 1155 | }, |
| 1156 | } |
| 1157 | // Ensure non-nil slices for JSON serialization. |
| 1158 | if session.Providers == nil { |
| 1159 | session.Providers = []string{} |
| 1160 | } |
| 1161 | if session.Models == nil { |
| 1162 | session.Models = []string{} |
| 1163 | } |
| 1164 | if row.Client != "" { |
| 1165 | session.Client = &row.Client |
| 1166 | } |
| 1167 | if !row.EndedAt.IsZero() { |
| 1168 | session.EndedAt = &row.EndedAt |
| 1169 | } |
| 1170 | if row.LastPrompt != "" { |
| 1171 | session.LastPrompt = &row.LastPrompt |
| 1172 | } |
| 1173 | return session |
| 1174 | } |
| 1175 | |
| 1176 | func AIBridgeTokenUsage(usage database.AIBridgeTokenUsage) codersdk.AIBridgeTokenUsage { |
| 1177 | return codersdk.AIBridgeTokenUsage{ |
no test coverage detected