diff --git a/api/src/main/java/com/theokanning/openai/assistants/assistant/AutoChunkingStrategy.java b/api/src/main/java/com/theokanning/openai/assistants/assistant/AutoChunkingStrategy.java new file mode 100644 index 0000000..01f76be --- /dev/null +++ b/api/src/main/java/com/theokanning/openai/assistants/assistant/AutoChunkingStrategy.java @@ -0,0 +1,15 @@ +package com.theokanning.openai.assistants.assistant; + +import lombok.Data; + +/** + * @author LiangTao + * @date 2024年06月05 10:57 + **/ +@Data +public class AutoChunkingStrategy implements ChunkingStrategy { + public static final AutoChunkingStrategy instance = new AutoChunkingStrategy(); + + private final String type = "auto"; + +} diff --git a/api/src/main/java/com/theokanning/openai/assistants/assistant/ChunkingStrategy.java b/api/src/main/java/com/theokanning/openai/assistants/assistant/ChunkingStrategy.java new file mode 100644 index 0000000..aceb751 --- /dev/null +++ b/api/src/main/java/com/theokanning/openai/assistants/assistant/ChunkingStrategy.java @@ -0,0 +1,18 @@ +package com.theokanning.openai.assistants.assistant; + +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; + +/** + * @author LiangTao + * @date 2024年06月05 10:56 + **/ +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") +@JsonSubTypes({ + @JsonSubTypes.Type(value = AutoChunkingStrategy.class, name = "auto"), + @JsonSubTypes.Type(value = StaticChunkingStrategy.class, name = "static"), +}) +public interface ChunkingStrategy { + String getType(); + +} diff --git a/api/src/main/java/com/theokanning/openai/assistants/assistant/Static.java b/api/src/main/java/com/theokanning/openai/assistants/assistant/Static.java new file mode 100644 index 0000000..d95f52b --- /dev/null +++ b/api/src/main/java/com/theokanning/openai/assistants/assistant/Static.java @@ -0,0 +1,7 @@ +package com.theokanning.openai.assistants.assistant; + +/** + * @author LiangTao + * @date 2024年06月05 11:00 + **/ + diff --git a/api/src/main/java/com/theokanning/openai/assistants/assistant/StaticChunkingStrategy.java b/api/src/main/java/com/theokanning/openai/assistants/assistant/StaticChunkingStrategy.java new file mode 100644 index 0000000..e83bd05 --- /dev/null +++ b/api/src/main/java/com/theokanning/openai/assistants/assistant/StaticChunkingStrategy.java @@ -0,0 +1,44 @@ +package com.theokanning.openai.assistants.assistant; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * @author LiangTao + * @date 2024年06月05 10:59 + **/ +@Data +public class StaticChunkingStrategy implements ChunkingStrategy { + private final String type = "static"; + + @JsonProperty("static") + private Static aStatic; + + public static StaticChunkingStrategy of(Integer maxChunkSizeTokens, Integer chunkOverlapTokens) { + StaticChunkingStrategy staticChunkingStrategy = new StaticChunkingStrategy(); + Static aStatic = new Static(); + aStatic.setMaxChunkSizeTokens(maxChunkSizeTokens); + aStatic.setChunkOverlapTokens(chunkOverlapTokens); + staticChunkingStrategy.setAStatic(aStatic); + return staticChunkingStrategy; + } + + + @Data + public static class Static { + /** + * The maximum number of tokens in each chunk. The default value is 800. The minimum value is 100 and the maximum value is 4096. + */ + @JsonProperty("max_chunk_size_tokens") + private Integer maxChunkSizeTokens; + + /** + * The number of tokens that overlap between chunks. The default value is 400. + *
+ * Note that the overlap must not exceed half of max_chunk_size_tokens. + */ + @JsonProperty("chunk_overlap_tokens") + private Integer chunkOverlapTokens; + + } +} diff --git a/api/src/main/java/com/theokanning/openai/assistants/assistant/VectorStoreFileRequest.java b/api/src/main/java/com/theokanning/openai/assistants/assistant/VectorStoreFileRequest.java index aa9aeff..ac12709 100644 --- a/api/src/main/java/com/theokanning/openai/assistants/assistant/VectorStoreFileRequest.java +++ b/api/src/main/java/com/theokanning/openai/assistants/assistant/VectorStoreFileRequest.java @@ -14,4 +14,8 @@ public class VectorStoreFileRequest { @JsonProperty("file_id") String fileId; + + @JsonProperty("chunking_strategy") + ChunkingStrategy chunkingStrategy; + } diff --git a/api/src/test/resources/assistants/VectorStoreFileRequest.json b/api/src/test/resources/assistants/VectorStoreFileRequest.json index c27841a..130dcd0 100644 --- a/api/src/test/resources/assistants/VectorStoreFileRequest.json +++ b/api/src/test/resources/assistants/VectorStoreFileRequest.json @@ -1,3 +1,10 @@ { - "file_id": "file-abc123" + "file_id": "fileid_here", + "chunking_strategy": { + "type": "static", + "static": { + "max_chunk_size_tokens": 800, + "chunk_overlap_tokens": 400 + } + } }