Deserializing ResponseInputItem results in unknown state
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Inizia dal percorso di deserializzazione di ResponseInputItem.Message e confrontalo con il percorso di ResponseOutputMessage, utilizzando la riproduzione fornita testSerializeInputItem. Verifica che i valori serializzati e deserializzati di ResponseInputItem.Message risultino uguali senza diventare unknown; il test output-item esistente fornisce un caso di confronto funzionante.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hey there! 👋
I'm working with the OpenAI Java SDK for a couple of days now and really like it. The general design of the library is fantastic and I'm having quite a lot fun working with it. Thanks! 👍
I stumbled upon an issue which I think is a bug. Let me first clarify about my goals: I'm using the Responses API part of the library to implement Chat-Bot like conversations. My requirement is to use ResponseCreateParams.builder().store(false) and instead serialize conversation state locally by myself.
Here's an example of what I do:
val jsonMapper = jsonMapper()
val inputItems: List<ResponseInputItem> = ...
val jsonData = jsonMapper.writeValueAsString(inputItems)
// store jsonData locally
// later:
val deserializedInputItems = jsonMapper.readValue(nativeData, object : TypeReference<MutableList<ResponseInputItem>>() {})
// attach new user message and continue conversation
This works pretty well. However I've noticed the following behavior:
When a ResponseInputItem from a ResponseInputItem.Message gets serialized and deserialized again, it's in an unknown state. The message field is null but the _json() field still holds the correct structured data from the original message.
Here's are a Kotlin Test to demonstrate the behavior:
❌ This test fails with v3.0.3
@Test
fun testSerializeInputItem() {
// given
val message = ResponseInputItem.Message.builder()
.role(ResponseInputItem.Message.Role.USER)
.addInputTextContent("Test")
.build()
val inputItem1 = ResponseInputItem.ofMessage(message)
// when
val jsonMapper = jsonMapper()
val inputItemJson = jsonMapper.writeValueAsString(inputItem1)
val inputItem2 = jsonMapper.readValue(inputItemJson, ResponseInputItem::class.java)
// then
Assertions.assertEquals(inputItem1, inputItem2)
}
Test fails:
Expected :ResponseInputItem{message=Message{content=[ResponseInputContent{inputText=ResponseInputText{text=Test, type=input_text, additionalProperties={}}}], role=user, status=, type=, additionalProperties={}}}
Actual :ResponseInputItem{_unknown={content=[{text=Test, type=input_text}], role=user}}
I couldn't reproduce this issue with other types of ResponseInputItems, e.g. for ResponseOutputMessage the test succeeds:
🟢 This test succeeds with v3.0.3
@Test
fun testSerializeOutputItem() {
val message = ResponseOutputMessage.builder()
.id("my_id")
.status(ResponseOutputMessage.Status.COMPLETED)
.addContent(
ResponseOutputText.builder()
.text("Test")
.annotations(emptyList())
.build()
)
.build()
val inputItem1 = ResponseInputItem.ofResponseOutputMessage(message)
val jsonMapper = jsonMapper()
val inputItemJson = jsonMapper.writeValueAsString(inputItem1)
val inputItem2 = jsonMapper.readValue(inputItemJson, ResponseInputItem::class.java)
Assertions.assertEquals(inputItem1, inputItem2)
}
Could you please clarify if this a bug? Or am I doing something wrong / unintended here?
- Lingua principale
- Kotlin
- Stelle
- 1.5k
- Fork
- 266
- Merge medio
- 10h 11m
- PR unite (30g)
- 141
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di openai/openai-java
-
HttpRequest.url() logs spaces in path segments as literal plus signsForse già presa @sylvesterkaczmarek l’ha presa 54 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
openai/openai-java#886 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Make diarized transcription duration and task optionalForse già presa @wskr00 l’ha presa 85 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
openai/openai-java#802 · 2 commenti · 3 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 42/100
openai/openai-java#1160 ·
I maintainer di solito rispondono entro 1 giorno
-
AsyncStreamResponse can hang when the subscriber executor rejects workForse già presa @sylvesterkaczmarek l’ha presa 37 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 74/100
openai/openai-java#973 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
openai/openai-java#956 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di openai/openai-java
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 3 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
lugassawan/swe-workbench#799 ·
I maintainer di solito rispondono entro 1 giorno
-
Default book icon displayed while loadingForse già presa @Bhaskar-Guthula-137 l’ha presa oggi. Apertabug good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
kiwix/kiwix-android#5194 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
d4rken-org/butler#300 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
jellyfin/jellyfin-androidtv#5885 ·
I maintainer di solito rispondono entro 1 giorno