-module(openrouter_client@internal). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([decode_openrouter_response/1]). -export_type([openrouter_response/0, choice/0, log_probs/0, message/0, usage/0, openrouter_error/0]). -type openrouter_response() :: {openrouter_response, binary(), binary(), binary(), binary(), integer(), list(choice()), usage()}. -type choice() :: {choice, log_probs(), binary(), integer(), message()}. -type log_probs() :: {log_probs, list(binary()), list(binary())}. -type message() :: {message, binary(), binary(), binary()}. -type usage() :: {usage, integer(), integer(), integer()}. -type openrouter_error() :: invalid_api_key | invalid_response | no_credits_left | misc | {http_request_error, binary()} | empty_response | {decode_error, gleam@json:decode_error()}. -file("/home/simon/projects/openrouter_client/src/openrouter_client/internal.gleam", 49). -spec decode_openrouter_response(binary()) -> {ok, openrouter_response()} | {error, openrouter_error()}. decode_openrouter_response(Json_string) -> Logprobs_decoder = gleam@dynamic:decode2( fun(Field@0, Field@1) -> {log_probs, Field@0, Field@1} end, gleam@dynamic:field( <<"content"/utf8>>, gleam@dynamic:list(fun gleam@dynamic:string/1) ), gleam@dynamic:field( <<"refusal"/utf8>>, gleam@dynamic:list(fun gleam@dynamic:string/1) ) ), Message_decoder = gleam@dynamic:decode3( fun(Field@0, Field@1, Field@2) -> {message, Field@0, Field@1, Field@2} end, gleam@dynamic:field(<<"role"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field(<<"content"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field(<<"refusal"/utf8>>, fun gleam@dynamic:string/1) ), Choice_decoder = gleam@dynamic:decode4( fun(Field@0, Field@1, Field@2, Field@3) -> {choice, Field@0, Field@1, Field@2, Field@3} end, gleam@dynamic:field(<<"logprobs"/utf8>>, Logprobs_decoder), gleam@dynamic:field( <<"finish_reason"/utf8>>, fun gleam@dynamic:string/1 ), gleam@dynamic:field(<<"index"/utf8>>, fun gleam@dynamic:int/1), gleam@dynamic:field(<<"message"/utf8>>, Message_decoder) ), Usage_decoder = gleam@dynamic:decode3( fun(Field@0, Field@1, Field@2) -> {usage, Field@0, Field@1, Field@2} end, gleam@dynamic:field(<<"prompt_tokens"/utf8>>, fun gleam@dynamic:int/1), gleam@dynamic:field( <<"completion_tokens"/utf8>>, fun gleam@dynamic:int/1 ), gleam@dynamic:field(<<"total_tokens"/utf8>>, fun gleam@dynamic:int/1) ), Decoder = gleam@dynamic:decode7( fun(Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6) -> {openrouter_response, Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6} end, gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field(<<"provider"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field(<<"model"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field(<<"object"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field(<<"created"/utf8>>, fun gleam@dynamic:int/1), gleam@dynamic:field( <<"choices"/utf8>>, gleam@dynamic:list(Choice_decoder) ), gleam@dynamic:field(<<"usage"/utf8>>, Usage_decoder) ), _pipe = gleam@json:decode(Json_string, Decoder), gleam@result:map_error(_pipe, fun(E) -> {decode_error, E} end).