| import httpx | |
| import asyncio | |
| class TogetherAPI: | |
| cookies = { | |
| 'intercom-id-evnv2y8k': 'fea4d452-f9be-42e0-93e3-1e47a3836362', | |
| 'intercom-device-id-evnv2y8k': '2bb3e469-0159-4b6b-a33e-1aea4b51ccb1', | |
| '__stripe_mid': 'e0f7c1ba-56c6-44d4-ba1d-cf4611453eb43cf922', | |
| 'state-csrf': '6f2o8nqgee2dfqdmhaxipe', | |
| 'together_auth_cookie': '%7B%22expires%22%3A%222026-04-09T15%3A14%3A08.985Z%22%2C%22session%22%3A%220eae08c6fd1b79a22476a317d440a2104d74cd3ba333e40771b5ce50a90784297eb82eff36263debca2ee0658abe3e43cab97f87794421111d4bdec56b43dd2595ee22a165c123ba3d0f807759555b5f6d3f51b7c248e7cefcdf0f0b897f62b25b2a569e2cb89633032f15dca9818f39ed49f3ac2d7e0bc3d24517c62c78b1e4%22%7D', | |
| '__stripe_sid': '979e00a2-06ed-45be-9a95-88d7e7580f625ccce4', | |
| 'intercom-session-evnv2y8k': 'TzZzSzBNRG8xdHJtTVprMm1zUXFob0M2ekhFV3VmeDZFcW5UVldlYmFYc3RsRjFmdWJidjU1ZXVSZzNOSW9QTE82OUx6anlvMWVncmlTd2ZvOERDUXN4OUdoSEM5ZzRnQmh4d2o5S3JKeDA9LS00S3JOclNpNzU0VkVBaTNRNWhSMm93PT0=--2719775e99e920753d35527a45a6731bac5e8f8f', | |
| 'AMP_7112ee0414': 'JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjJmY2ZmNjE3Ny00Yzg0LTRlOTItYTFhMC1kM2Y1ZjllOTFkYTglMjIlMkMlMjJ1c2VySWQlMjIlM0ElMjI2N2I1ZDkwNDNkZTIyN2Q0OGIzMWEwZTMlMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzQ0MjExNjQyMjEwJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTc0NDIxMTc1ODAwOSUyQyUyMmxhc3RFdmVudElkJTIyJTNBMjMyJTJDJTIycGFnZUNvdW50ZXIlMjIlM0E1JTdE', | |
| } | |
| headers = { | |
| 'accept': 'application/json', | |
| 'accept-language': 'en-US,en;q=0.9,ja;q=0.8', | |
| 'authorization': 'Bearer 4d900964e385651ea685af6f6cd5573a17b421f50657f73f903525177915a7e2', | |
| 'content-type': 'application/json', | |
| 'priority': 'u=1, i', | |
| 'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"', | |
| 'sec-ch-ua-mobile': '?0', | |
| 'sec-ch-ua-platform': '"macOS"', | |
| 'sec-fetch-dest': 'empty', | |
| 'sec-fetch-mode': 'cors', | |
| 'sec-fetch-site': 'same-origin', | |
| 'x-stainless-arch': 'unknown', | |
| 'x-stainless-lang': 'js', | |
| 'x-stainless-os': 'Unknown', | |
| 'x-stainless-package-version': '0.11.1', | |
| 'x-stainless-retry-count': '0', | |
| 'x-stainless-runtime': 'browser:chrome', | |
| 'x-stainless-runtime-version': '135.0.0', | |
| 'referer': 'https://api.together.ai/playground/v2/chat/meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8', | |
| } | |
| def __init__(self): | |
| self.base_url = "https://api.together.ai/inference" | |
| def get_model_list(self): | |
| models = ['meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8', 'meta-llama/Llama-4-Scout-17B-16E-Instruct', 'deepseek-ai/DeepSeek-R1', 'deepseek-ai/DeepSeek-V3', 'Qwen/Qwen2.5-VL-72B-Instruct', 'google/gemma-2-27b-it'] | |
| return models | |
| async def generate(self, json_data: dict): | |
| max_retries = 5 | |
| for attempt in range(max_retries): | |
| async with httpx.AsyncClient(timeout=None) as client: | |
| try: | |
| request_ctx = client.stream( | |
| "POST", | |
| "https://api.together.ai/inference", | |
| cookies=TogetherAPI.cookies, | |
| headers=TogetherAPI.headers, | |
| json=json_data | |
| ) | |
| async with request_ctx as response: | |
| if response.status_code == 200: | |
| async for line in response.aiter_lines(): | |
| if line: | |
| yield f"{line}\n" | |
| return | |
| elif response.status_code == 429: | |
| if attempt < max_retries - 1: | |
| await asyncio.sleep(0.5) | |
| continue | |
| yield "data: [Rate limited, max retries]\n\n" | |
| return | |
| else: | |
| yield f"data: [Unexpected status code: {response.status_code}]\n\n" | |
| return | |
| except Exception as e: | |
| yield f"data: [Connection error: {str(e)}]\n\n" | |
| return | |
| yield "data: [Max retries reached]\n\n" | |