partial googleai fixes; adds jsonl file backend for promptlogger stolen from fiz
This commit is contained in:
@@ -11,7 +11,7 @@ import { ProxyResHandlerWithBody } from ".";
|
||||
import { assertNever } from "../../../shared/utils";
|
||||
import {
|
||||
AnthropicChatMessage,
|
||||
flattenAnthropicMessages,
|
||||
flattenAnthropicMessages, GoogleAIChatMessage,
|
||||
MistralAIChatMessage,
|
||||
OpenAIChatMessage,
|
||||
} from "../../../shared/api-schemas";
|
||||
@@ -62,6 +62,7 @@ const getPromptForRequest = (
|
||||
):
|
||||
| string
|
||||
| OpenAIChatMessage[]
|
||||
| { contents: GoogleAIChatMessage[] }
|
||||
| { system: string; messages: AnthropicChatMessage[] }
|
||||
| MistralAIChatMessage[]
|
||||
| OaiImageResult => {
|
||||
@@ -87,7 +88,7 @@ const getPromptForRequest = (
|
||||
case "anthropic-text":
|
||||
return req.body.prompt;
|
||||
case "google-ai":
|
||||
return req.body.prompt.text;
|
||||
return { contents: req.body.contents };
|
||||
default:
|
||||
assertNever(req.outboundApi);
|
||||
}
|
||||
@@ -98,6 +99,7 @@ const flattenMessages = (
|
||||
| string
|
||||
| OaiImageResult
|
||||
| OpenAIChatMessage[]
|
||||
| { contents: GoogleAIChatMessage[] }
|
||||
| { system: string; messages: AnthropicChatMessage[] }
|
||||
| MistralAIChatMessage[]
|
||||
): string => {
|
||||
@@ -108,6 +110,16 @@ const flattenMessages = (
|
||||
const { system, messages } = val;
|
||||
return `System: ${system}\n\n${flattenAnthropicMessages(messages)}`;
|
||||
}
|
||||
if (isGoogleAIChatPrompt(val)) {
|
||||
return val.contents
|
||||
.map(({ parts, role }) => {
|
||||
const text = parts
|
||||
.map((p) => p.text)
|
||||
.join("\n");
|
||||
return `${role}: ${text}`;
|
||||
})
|
||||
.join("\n");
|
||||
}
|
||||
if (Array.isArray(val)) {
|
||||
return val
|
||||
.map(({ content, role }) => {
|
||||
@@ -128,6 +140,16 @@ const flattenMessages = (
|
||||
return val.prompt.trim();
|
||||
};
|
||||
|
||||
function isGoogleAIChatPrompt(
|
||||
val: unknown
|
||||
): val is { contents: GoogleAIChatMessage[] } {
|
||||
return (
|
||||
typeof val === "object" &&
|
||||
val !== null &&
|
||||
"contents" in val
|
||||
);
|
||||
}
|
||||
|
||||
function isAnthropicChatPrompt(
|
||||
val: unknown
|
||||
): val is { system: string; messages: AnthropicChatMessage[] } {
|
||||
|
||||
@@ -116,7 +116,7 @@ export class SSEStreamAdapter extends Transform {
|
||||
try {
|
||||
const hasParts = candidates[0].content?.parts?.length > 0;
|
||||
if (hasParts) {
|
||||
return `data: ${JSON.stringify(data)}`;
|
||||
return `data: ${JSON.stringify(data.value ?? data)}\n`;
|
||||
} else {
|
||||
this.log.error({ event: data }, "Received bad Google AI event");
|
||||
return `data: ${buildSpoofedSSE({
|
||||
|
||||
Reference in New Issue
Block a user