vercel / ai

Build AI-powered applications with React, Svelte, Vue, and Solid
https://sdk.vercel.ai/docs
Other
10.12k stars 1.51k forks source link

experimental_StreamData,If the string is too long, it will be truncated. #962

Open zandko opened 9 months ago

zandko commented 9 months ago

Description

data.append({ 'sources': functionResponse.sources }); If the string is too long, it will be truncated.

Code example

  const data = new experimental_StreamData();

    const stream = OpenAIStream(response, {
      experimental_onToolCall: async (
        call: ToolCallPayload,
        appendToolCallMessage,
      ) => {

       // ...

        for (const toolCall of call.tools) {

          const functionName = toolCall.func.name;
          const functionToCall = availableFunctions[functionName];

          const functionArgs = JSON.parse(toolCall.func.arguments as unknown as string);
          const functionResponse = await functionToCall(parseNestedJSON(functionArgs));

          if (functionResponse.sources !== 'NONE') {
            data.append({ 'sources': functionResponse.sources });
          }

          const newMessages = appendToolCallMessage({
            tool_call_id: toolCall.id,
            function_name: functionName,
            tool_call_result: functionResponse.result,
          });

          return openai.chat.completions.create({
            ...defaultOptions,
            messages: [...messages, ...newMessages],
            model: LanguageModel.GPT3_5_16K,
            stream: true,
            tools,
            temperature: 0.2,
            tool_choice: 'auto',
          });
        }
      },
      onCompletion(completion) {
        console.log('completion', completion);
      },
      onFinal(completion) {
        data.close();
      },
      experimental_streamData: true,
    });

    return new StreamingTextResponse(stream, {
      headers: { ...ResponseHeaders }
    }, data);

Additional context

No response

lgrammel commented 2 months ago

How long of a string are we talking about here?