Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

[Bug] Can't get the deep search results #324

@yiouyou

Description

@yiouyou

🐛 Describe the Bug

Here is my code:

def deep_research(user_input, max_retries=1, timeout=300):
    url = "https://api.perplexity.ai/chat/completions"
    payload = {
        "model": "sonar-deep-research",
        "messages": [
            {"role": "user", "content": user_input}
        ],
        "max_tokens": MAX_TOKENS
    }
    headers = {
        "Authorization": f"Bearer {PERPLEXITY_API_KEY}",
        "Content-Type": "application/json"
    }
    ###
    for attempt in range(max_retries):
        try:
            print(f"[Perplexity Deep Research] Attempt {attempt + 1}/{max_retries}")
            print(f"  - Timeout set to: {timeout} seconds")
            ###
            response = requests.post(
                url, 
                json=payload, 
                headers=headers, 
                timeout=(timeout, timeout),  # (连接超时, 读取超时)
                stream=False
            )
            ###
            response.raise_for_status()
            data = response.json()
            deep_search = data["choices"][0]["message"]["content"]
            usage = data.get("usage", {})
            ###
            prompt_tokens = usage.get("prompt_tokens", 0)
            completion_tokens = usage.get("completion_tokens", 0)
            num_search_queries = usage.get("num_search_queries", 0)
            reasoning_tokens = usage.get("reasoning_tokens", 0)
            ###
            cost_input = (prompt_tokens / 1_000_000) * 2.0      # $2 per 1M input tokens
            cost_output = (completion_tokens / 1_000_000) * 8.0  # $8 per 1M output tokens  
            cost_reasoning = (reasoning_tokens / 1_000_000) * 3.0 # $3 per 1M reasoning tokens
            cost_search = (num_search_queries / 1000) * 5.0     # $5 per 1000 search queries
            t_cost_usd = round(cost_input + cost_output + cost_reasoning + cost_search, 4)
            # print(f"[Perplexity Deep Research] Query processed successfully")
            # print(f"  - Input tokens: {prompt_tokens} (${cost_input:.6f})")
            # print(f"  - Output tokens: {completion_tokens} (${cost_output:.6f})")
            # print(f"  - Reasoning tokens: {reasoning_tokens} (${cost_reasoning:.6f})")
            # print(f"  - Search queries: {num_search_queries} (${cost_search:.6f})")
            # print(f"  - Total tokens: {total_tokens}")
            # print(f"  - Total cost: ${t_cost_usd:.6f} (¥{t_cost_cny:.4f})")
            # print(f"  - Response length: {len(deep_search)} characters")
            return deep_search, t_cost_usd, prompt_tokens, completion_tokens
        except Timeout:
            print(f"[Perplexity Deep Research] Timeout error on attempt {attempt + 1}")
            if attempt < max_retries - 1:
                wait_time = 12  # 5/min
                print(f"  - Waiting {wait_time} seconds before retry...")
                time.sleep(wait_time)
            continue
        except ConnectionError as e:
            print(f"[Perplexity Deep Research] Connection error on attempt {attempt + 1}: {str(e)}")
            if attempt < max_retries - 1:
                wait_time = 12  # 5/min
                print(f"  - Waiting {wait_time} seconds before retry...")
                time.sleep(wait_time)
            continue
        except RequestException as e:
            print(f"[Perplexity Deep Research] Request error on attempt {attempt + 1}: {str(e)}")
            if attempt < max_retries - 1:
                wait_time = 12  # 5/min
                print(f"  - Waiting {wait_time} seconds before retry...")
                time.sleep(wait_time)
            continue
        except (ValueError, KeyError) as e:
            print(f"[Perplexity Deep Research] JSON parsing error:")
            print(f"  - Status Code: {response.status_code}")
            print(f"  - Error Type: {type(e).__name__}")
            print(f"  - Error Message: {str(e)}")
            print(f"  - Response Text: {response.text[:200]}...")
            break
    print(f"[Perplexity Deep Research] All {max_retries} attempts failed")
    return "", 0, 0, 0

✅ Expected Behavior

It should work.

❌ Actual Behavior

The api cost has been charged, but I can't get the results. Error as below:

'Connection aborted.', RemoteDisconnected('Remote end closed connection without response')

🔄 Steps to Reproduce

  1. Call the API with the following request:
  2. Observe the unexpected behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions