diff --git a/app/src/main/java/com/hjx/parent/api/ChatApi.java b/app/src/main/java/com/hjx/parent/api/ChatApi.java new file mode 100644 index 0000000..418e55b --- /dev/null +++ b/app/src/main/java/com/hjx/parent/api/ChatApi.java @@ -0,0 +1,10 @@ +package com.hjx.parent.api; + +import retrofit2.http.Header; +import retrofit2.http.POST; +import retrofit2.http.Url; + +public interface ChatApi { + @POST + void aiChat(@Url String url, @Header("Authorization") String token); +} diff --git a/app/src/main/java/com/hjx/parent/api/ChatChoices.java b/app/src/main/java/com/hjx/parent/api/ChatChoices.java new file mode 100644 index 0000000..e3ebfc1 --- /dev/null +++ b/app/src/main/java/com/hjx/parent/api/ChatChoices.java @@ -0,0 +1,13 @@ +package com.hjx.parent.api; + +import com.google.gson.annotations.SerializedName; + +public class ChatChoices { + + public ChatMessage message; + public int index; + @SerializedName("finish_reason") + public String finishReason; + public String logprobs; + +} diff --git a/app/src/main/java/com/hjx/parent/api/ChatError.java b/app/src/main/java/com/hjx/parent/api/ChatError.java new file mode 100644 index 0000000..e18697a --- /dev/null +++ b/app/src/main/java/com/hjx/parent/api/ChatError.java @@ -0,0 +1,8 @@ +package com.hjx.parent.api; + +public class ChatError { + String code; + String message; + String param; + String type; +} diff --git a/app/src/main/java/com/hjx/parent/api/ChatMessage.java b/app/src/main/java/com/hjx/parent/api/ChatMessage.java new file mode 100644 index 0000000..3c98e91 --- /dev/null +++ b/app/src/main/java/com/hjx/parent/api/ChatMessage.java @@ -0,0 +1,44 @@ +package com.hjx.parent.api; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class ChatMessage { + public ChatMessage() { + } + public ChatMessage(String role, Object content) { + this.role = role; + this.content = content; + } + + public String role; + public Object content; + + public static ChatMessage fromImage(String role, String text, String... urls) { + List items = new ArrayList<>(); + if (text != null && !text.isEmpty()) { + items.add(new ContentItem(ContentItem.TYPE_TEXT, text)); + } + for (String it: urls) { + items.add(new ContentItem(ContentItem.TYPE_IMAGE, it)); + } + return new ChatMessage(role, items); + } + + public String getTextContent() { + if (content == null) return null; + if (content instanceof String) return (String) content; + ContentItem item = firstText(); + return item == null ? null : item.text; + } + + private ContentItem firstText() { + if (!(content instanceof List)) return null; + List anyList = (List) content; + return anyList.stream() + .map(ContentItem::reSerialize) + .filter(Objects::nonNull) + .findFirst().orElse(null); + } +} diff --git a/app/src/main/java/com/hjx/parent/api/ChatRequest.java b/app/src/main/java/com/hjx/parent/api/ChatRequest.java new file mode 100644 index 0000000..62aace3 --- /dev/null +++ b/app/src/main/java/com/hjx/parent/api/ChatRequest.java @@ -0,0 +1,9 @@ +package com.hjx.parent.api; + +import java.util.List; + +public class ChatRequest { + public String model; + public List messages; + public boolean stream; +} diff --git a/app/src/main/java/com/hjx/parent/api/ChatResponse.java b/app/src/main/java/com/hjx/parent/api/ChatResponse.java new file mode 100644 index 0000000..d330688 --- /dev/null +++ b/app/src/main/java/com/hjx/parent/api/ChatResponse.java @@ -0,0 +1,19 @@ +package com.hjx.parent.api; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class ChatResponse { + public List choices; + public String created; + public String id; + public String model; + @SerializedName("service_tier") + public String serviceTier; + @SerializedName("object") + public String obj; + public ChatUsage usage; + + public ChatError error; +} diff --git a/app/src/main/java/com/hjx/parent/api/ChatUsage.java b/app/src/main/java/com/hjx/parent/api/ChatUsage.java new file mode 100644 index 0000000..038f274 --- /dev/null +++ b/app/src/main/java/com/hjx/parent/api/ChatUsage.java @@ -0,0 +1,16 @@ +package com.hjx.parent.api; + +import com.google.gson.annotations.SerializedName; + +public class ChatUsage { + @SerializedName("completion_tokens") + public int completionTokens; + @SerializedName("prompt_tokens") + public int promptTokens; + @SerializedName("total_tokens") + public int totalTokens; + @SerializedName("prompt_tokens_details") + public PromptTokensDetails promptTokensDetails; + @SerializedName("completion_tokens_details") + public CompletionTokensDetails completionTokensDetails; +} diff --git a/app/src/main/java/com/hjx/parent/api/CompletionTokensDetails.java b/app/src/main/java/com/hjx/parent/api/CompletionTokensDetails.java new file mode 100644 index 0000000..0e8bdf3 --- /dev/null +++ b/app/src/main/java/com/hjx/parent/api/CompletionTokensDetails.java @@ -0,0 +1,5 @@ +package com.hjx.parent.api; + +public class CompletionTokensDetails { + public int reasoningTokens; +} diff --git a/app/src/main/java/com/hjx/parent/api/ContentItem.java b/app/src/main/java/com/hjx/parent/api/ContentItem.java new file mode 100644 index 0000000..5f78f0f --- /dev/null +++ b/app/src/main/java/com/hjx/parent/api/ContentItem.java @@ -0,0 +1,44 @@ +package com.hjx.parent.api; + +import com.google.gson.Gson; +import com.google.gson.annotations.SerializedName; + +public class ContentItem { + public static final String TYPE_TEXT = "text"; + public static final String TYPE_IMAGE = "image_url"; + + + public ContentItem() { + } + public ContentItem(String type, String text) { + this.type = type; + this.text = text; + } + public ContentItem(String type, ContentImage imageUrl) { + this.type = type; + this.imageUrl = imageUrl; + } + + public String type; + public String text; + @SerializedName("image_url") + public ContentImage imageUrl; + + public static class ContentImage { + public String url; + } + + + private static final Gson gson = new Gson(); + static ContentItem reSerialize(Object any) { + if (any == null) return null; + try { + String json = gson.toJson(any); + ContentItem it = gson.fromJson(json, ContentItem.class); + return it; + } catch (Throwable t) { + t.printStackTrace(); + } + return null; + } +} diff --git a/app/src/main/java/com/hjx/parent/api/PromptTokensDetails.java b/app/src/main/java/com/hjx/parent/api/PromptTokensDetails.java new file mode 100644 index 0000000..774b24d --- /dev/null +++ b/app/src/main/java/com/hjx/parent/api/PromptTokensDetails.java @@ -0,0 +1,5 @@ +package com.hjx.parent.api; + +public class PromptTokensDetails { + public int cachedTokens; +}