(prompt, log_id=None, max_tokens=16384, max_retries=3)
| 25 | |
| 26 | |
| 27 | def request_claude(prompt, log_id=None, max_tokens=16384, max_retries=3): |
| 28 | base_url = cfg("claude", "base_url") |
| 29 | api_key = cfg("claude", "api_key") |
| 30 | client = OpenAI(base_url=base_url, api_key=api_key) |
| 31 | |
| 32 | if log_id is None: |
| 33 | log_id = generate_log_id() |
| 34 | |
| 35 | extra_headers = {"X-TT-LOGID": log_id} |
| 36 | |
| 37 | retry_count = 0 |
| 38 | while retry_count < max_retries: |
| 39 | try: |
| 40 | response = client.chat.completions.create( |
| 41 | model="claude-4-opus", |
| 42 | messages=[ |
| 43 | { |
| 44 | "role": "user", |
| 45 | "content": [ |
| 46 | { |
| 47 | "type": "text", |
| 48 | "text": prompt, |
| 49 | }, |
| 50 | ], |
| 51 | } |
| 52 | ], |
| 53 | max_tokens=max_tokens, |
| 54 | extra_headers=extra_headers, |
| 55 | ) |
| 56 | |
| 57 | return response.choices[0].message.content.strip() |
| 58 | |
| 59 | except Exception as e: |
| 60 | retry_count += 1 |
| 61 | if retry_count >= max_retries: |
| 62 | raise Exception(f"Failed after {max_retries} attempts. Last error: {str(e)}") |
| 63 | |
| 64 | # Exponential backoff with jitter |
| 65 | delay = (2**retry_count) * 0.1 + (random.random() * 0.1) |
| 66 | print( |
| 67 | f"Request failed with error: {str(e)}. Retrying in {delay:.2f} seconds... (Attempt {retry_count}/{max_retries})" |
| 68 | ) |
| 69 | time.sleep(delay) |
| 70 | |
| 71 | |
| 72 | def request_claude_token(prompt, log_id=None, max_tokens=10000, max_retries=3): |
nothing calls this directly
no test coverage detected